summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NetWare/t/NWScripts.pl2
-rw-r--r--README.dos664
-rw-r--r--ext/Encode/Encode/cns11643-1.enc2216
-rw-r--r--ext/Encode/Encode/cns11643-2.enc2794
-rw-r--r--ext/SDBM_File/Makefile.PL4
-rw-r--r--jpl/JNI/JNI.xs6506
-rw-r--r--jpl/JNI/Makefile.PL594
7 files changed, 6390 insertions, 6390 deletions
diff --git a/NetWare/t/NWScripts.pl b/NetWare/t/NWScripts.pl
index bd1ab9162f..a2f22a43ef 100644
--- a/NetWare/t/NWScripts.pl
+++ b/NetWare/t/NWScripts.pl
@@ -11,7 +11,7 @@ $DirName = "t";
# These scripts have problems (either abend or hang) as of now (11 May 2001).
# So, they are commented out in the corresponding auto scripts, io.pl and lib.pl
-@ScriptsNotUsed = ("t/io/argv.t", "t/io/openpid.t", "t/lib/filehandle.t", "t/lib/warnings.t");
+@ScriptsNotUsed = ("t/io/argv.t", "t/io/openpid.t", "t/lib/filehandle.t", "t/lib/warnings.t");
opendir(DIR, $DirName);
@Dirs = readdir(DIR);
diff --git a/README.dos b/README.dos
index 207325a3c6..9c444a4fdb 100644
--- a/README.dos
+++ b/README.dos
@@ -1,332 +1,332 @@
-If you read this file _as_is_, just ignore the funny characters you
-see. It is written in the POD format (see perlpod manpage) which is
-specially designed to be readable as is.
-
-=head1 NAME
-
-perldos - Perl under DOS, W31, W95.
-
-=head1 SYNOPSIS
-
-These are instructions for building Perl under DOS (or w??), using
-DJGPP v2.03 or later. Under w95 long filenames are supported.
-
-=head1 DESCRIPTION
-
-Before you start, you should glance through the README file
-found in the top-level directory where the Perl distribution
-was extracted. Make sure you read and understand the terms under
-which this software is being distributed.
-
-This port currently supports MakeMaker (the set of modules that
-is used to build extensions to perl). Therefore, you should be
-able to build and install most extensions found in the CPAN sites.
-
-Detailed instructions on how to build and install perl extension
-modules, including XS-type modules, is included. See 'BUILDING AND
-INSTALLING MODULES'.
-
-=head2 Prerequisites for Compiling Perl on DOS
-
-=over 4
-
-=item DJGPP
-
-DJGPP is a port of GNU C/C++ compiler and development tools to 32-bit,
-protected-mode environment on Intel 32-bit CPUs running MS-DOS and compatible
-operating systems, by DJ Delorie <dj@delorie.com> and friends.
-
-For more details (FAQ), check out the home of DJGPP at:
-
- http://www.delorie.com/djgpp/
-
-If you have questions about DJGPP, try posting to the DJGPP newsgroup:
-comp.os.msdos.djgpp, or use the email gateway djgpp@delorie.com.
-
-You can find the full DJGPP distribution on any SimTel.Net mirror all over
-the world. Like:
-
- ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2*
-
-You need the following files to build perl (or add new modules):
-
- v2/djdev203.zip
- v2/bnu2951b.zip
- v2gnu/gcc2952b.zip
- v2gnu/bsh204b.zip
- v2gnu/mak3791b.zip
- v2gnu/fil316b.zip
- v2gnu/sed302b.zip
- v2gnu/txt20b.zip
- v2gnu/dif272b.zip
- v2gnu/grep24b.zip
- v2gnu/shl112b.zip
- v2gnu/gawk303b.zip
- v2misc/csdpmi4b.zip
-
-or possibly any newer version.
-
-=item Pthreads
-
-Thread support is not tested in this version of the djgpp perl.
-
-=back
-
-=head2 Shortcomings of Perl under DOS
-
-Perl under DOS lacks some features of perl under UNIX because of
-deficiencies in the UNIX-emulation, most notably:
-
-=over 4
-
-=item *
-
-fork() and pipe()
-
-=item *
-
-some features of the UNIX filesystem regarding link count and file dates
-
-=item *
-
-in-place operation is a little bit broken with short filenames
-
-=item *
-
-sockets
-
-=back
-
-=head2 Building Perl on DOS
-
-=over 4
-
-=item *
-
-Unpack the source package F<perl5.6*.tar.gz> with djtarx. If you want
-to use long file names under w95 and also to get Perl to pass all its
-tests, don't forget to use
-
- set LFN=y
- set FNCASE=y
-
-before unpacking the archive.
-
-=item *
-
-Create a "symlink" or copy your bash.exe to sh.exe in your C<($DJDIR)/bin>
-directory.
-
- ln -s bash.exe sh.exe
-
-[If you have the recommended version of bash for DJGPP, this is already
-done for you.]
-
-And make the C<SHELL> environment variable point to this F<sh.exe>:
-
- set SHELL=c:/djgpp/bin/sh.exe (use full path name!)
-
-You can do this in F<djgpp.env> too. Add this line BEFORE any section
-definition:
-
- +SHELL=%DJDIR%/bin/sh.exe
-
-=item *
-
-If you have F<split.exe> and F<gsplit.exe> in your path, then rename
-F<split.exe> to F<djsplit.exe>, and F<gsplit.exe> to F<split.exe>.
-Copy or link F<gecho.exe> to F<echo.exe> if you don't have F<echo.exe>.
-Copy or link F<gawk.exe> to F<awk.exe> if you don't have F<awk.exe>.
-
-[If you have the recommended versions of djdev, shell utilities and
-gawk, all these are already done for you, and you will not need to do
-anything.]
-
-=item *
-
-Chdir to the djgpp subdirectory of perl toplevel and type the following
-commands:
-
- set FNCASE=y
- configure.bat
-
-This will do some preprocessing then run the Configure script for you.
-The Configure script is interactive, but in most cases you just need to
-press ENTER. The "set" command ensures that DJGPP preserves the letter
-case of file names when reading directories. If you already issued this
-set command when unpacking the archive, and you are in the same DOS
-session as when you unpacked the archive, you don't have to issue the
-set command again. This command is necessary *before* you start to
-(re)configure or (re)build perl in order to ensure both that perl builds
-correctly and that building XS-type modules can succeed. See the DJGPP
-info entry for "_preserve_fncase" for more information:
-
- info libc alphabetical _preserve_fncase
-
-If the script says that your package is incomplete, and asks whether
-to continue, just answer with Y (this can only happen if you don't use
-long filenames or forget to issue "set FNCASE=y" first).
-
-When Configure asks about the extensions, I suggest IO and Fcntl,
-and if you want database handling then SDBM_File or GDBM_File
-(you need to install gdbm for this one). If you want to use the
-POSIX extension (this is the default), make sure that the stack
-size of your F<cc1.exe> is at least 512kbyte (you can check this
-with: C<stubedit cc1.exe>).
-
-You can use the Configure script in non-interactive mode too.
-When I built my F<perl.exe>, I used something like this:
-
- configure.bat -des
-
-You can find more info about Configure's command line switches in
-the F<INSTALL> file.
-
-When the script ends, and you want to change some values in the
-generated F<config.sh> file, then run
-
- sh Configure -S
-
-after you made your modifications.
-
-IMPORTANT: if you use this C<-S> switch, be sure to delete the CONFIG
-environment variable before running the script:
-
- set CONFIG=
-
-=item *
-
-Now you can compile Perl. Type:
-
- make
-
-=back
-
-=head2 Testing Perl on DOS
-
-Type:
-
- make test
-
-If you're lucky you should see "All tests successful". But there can be
-a few failed subtests (less than 5 hopefully) depending on some external
-conditions (e.g. some subtests fail under linux/dosemu or plain dos
-with short filenames only).
-
-=head2 Installation of Perl on DOS
-
-Type:
-
- make install
-
-This will copy the newly compiled perl and libraries into your DJGPP
-directory structure. Perl.exe and the utilities go into C<($DJDIR)/bin>,
-and the library goes under C<($DJDIR)/lib/perl5>. The pod documentation
-goes under C<($DJDIR)/lib/perl5/pod>.
-
-=head1 BUILDING AND INSTALLING MODULES ON DOS
-
-=head2 Building Prerequisites for Perl on DOS
-
-For building and installing non-XS modules, all you need is a working
-perl under DJGPP. Non-XS modules do not require re-linking the perl
-binary, and so are simpler to build and install.
-
-XS-type modules do require re-linking the perl binary, because part of
-an XS module is written in "C", and has to be linked together with the
-perl binary to be executed. This is required because perl under DJGPP
-is built with the "static link" option, due to the lack of "dynamic
-linking" in the DJGPP environment.
-
-Because XS modules require re-linking of the perl binary, you need both
-the perl binary distribution and the perl source distribution to build
-an XS extension module. In addition, you will have to have built your
-perl binary from the source distribution so that all of the components
-of the perl binary are available for the required link step.
-
-=head2 Unpacking CPAN Modules on DOS
-
-First, download the module package from CPAN (e.g., the "Comma Separated
-Value" text package, Text-CSV-0.01.tar.gz). Then expand the contents of
-the package into some location on your disk. Most CPAN modules are
-built with an internal directory structure, so it is usually safe to
-expand it in the root of your DJGPP installation. Some people prefer to
-locate source trees under /usr/src (i.e., C<($DJDIR)/usr/src>), but you may
-put it wherever seems most logical to you, *EXCEPT* under the same
-directory as your perl source code. There are special rules that apply
-to modules which live in the perl source tree that do not apply to most
-of the modules in CPAN.
-
-Unlike other DJGPP packages, which are normal "zip" files, most CPAN
-module packages are "gzipped tarballs". Recent versions of WinZip will
-safely unpack and expand them, *UNLESS* they have zero-length files. It
-is a known WinZip bug (as of v7.0) that it will not extract zero-length
-files.
-
-From the command line, you can use the djtar utility provided with DJGPP
-to unpack and expand these files. For example:
-
- C:\djgpp>djtarx -v Text-CSV-0.01.tar.gz
-
-This will create the new directory C<($DJDIR)/Text-CSV-0.01>, filling
-it with the source for this module.
-
-=head2 Building Non-XS Modules on DOS
-
-To build a non-XS module, you can use the standard module-building
-instructions distributed with perl modules.
-
- perl Makefile.PL
- make
- make test
- make install
-
-This is sufficient because non-XS modules install only ".pm" files and
-(sometimes) pod and/or man documentation. No re-linking of the perl
-binary is needed to build, install or use non-XS modules.
-
-=head2 Building XS Modules on DOS
-
-To build an XS module, you must use the standard module-building
-instructions distributed with perl modules *PLUS* three extra
-instructions specific to the DJGPP "static link" build environment.
-
- set FNCASE=y
- perl Makefile.PL
- make
- make perl
- make test
- make -f Makefile.aperl inst_perl MAP_TARGET=perl.exe
- make install
-
-The first extra instruction sets DJGPP's FNCASE environment variable so
-that the new perl binary which you must build for an XS-type module will
-build correctly. The second extra instruction re-builds the perl binary
-in your module directory before you run "make test", so that you are
-testing with the new module code you built with "make". The third extra
-instruction installs the perl binary from your module directory into the
-standard DJGPP binary directory, C<($DJDIR)/bin>, replacing your
-previous perl binary.
-
-Note that the MAP_TARGET value *must* have the ".exe" extension or you
-will not create a "perl.exe" to replace the one in C<($DJDIR)/bin>.
-
-When you are done, the XS-module install process will have added information
-to yout "perllocal" information telling that the perl binary has been replaced,
-and what module was installed. you can view this information at any time
-by using the command:
-
- perl -S perldoc perllocal
-
-=head1 AUTHOR
-
-Laszlo Molnar, F<laszlo.molnar@eth.ericsson.se> [Installing/building perl]
-
-Peter J. Farley III F<pjfarley@banet.net> [Building/installing modules]
-
-=head1 SEE ALSO
-
-perl(1).
-
-=cut
-
+If you read this file _as_is_, just ignore the funny characters you
+see. It is written in the POD format (see perlpod manpage) which is
+specially designed to be readable as is.
+
+=head1 NAME
+
+perldos - Perl under DOS, W31, W95.
+
+=head1 SYNOPSIS
+
+These are instructions for building Perl under DOS (or w??), using
+DJGPP v2.03 or later. Under w95 long filenames are supported.
+
+=head1 DESCRIPTION
+
+Before you start, you should glance through the README file
+found in the top-level directory where the Perl distribution
+was extracted. Make sure you read and understand the terms under
+which this software is being distributed.
+
+This port currently supports MakeMaker (the set of modules that
+is used to build extensions to perl). Therefore, you should be
+able to build and install most extensions found in the CPAN sites.
+
+Detailed instructions on how to build and install perl extension
+modules, including XS-type modules, is included. See 'BUILDING AND
+INSTALLING MODULES'.
+
+=head2 Prerequisites for Compiling Perl on DOS
+
+=over 4
+
+=item DJGPP
+
+DJGPP is a port of GNU C/C++ compiler and development tools to 32-bit,
+protected-mode environment on Intel 32-bit CPUs running MS-DOS and compatible
+operating systems, by DJ Delorie <dj@delorie.com> and friends.
+
+For more details (FAQ), check out the home of DJGPP at:
+
+ http://www.delorie.com/djgpp/
+
+If you have questions about DJGPP, try posting to the DJGPP newsgroup:
+comp.os.msdos.djgpp, or use the email gateway djgpp@delorie.com.
+
+You can find the full DJGPP distribution on any SimTel.Net mirror all over
+the world. Like:
+
+ ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2*
+
+You need the following files to build perl (or add new modules):
+
+ v2/djdev203.zip
+ v2/bnu2951b.zip
+ v2gnu/gcc2952b.zip
+ v2gnu/bsh204b.zip
+ v2gnu/mak3791b.zip
+ v2gnu/fil316b.zip
+ v2gnu/sed302b.zip
+ v2gnu/txt20b.zip
+ v2gnu/dif272b.zip
+ v2gnu/grep24b.zip
+ v2gnu/shl112b.zip
+ v2gnu/gawk303b.zip
+ v2misc/csdpmi4b.zip
+
+or possibly any newer version.
+
+=item Pthreads
+
+Thread support is not tested in this version of the djgpp perl.
+
+=back
+
+=head2 Shortcomings of Perl under DOS
+
+Perl under DOS lacks some features of perl under UNIX because of
+deficiencies in the UNIX-emulation, most notably:
+
+=over 4
+
+=item *
+
+fork() and pipe()
+
+=item *
+
+some features of the UNIX filesystem regarding link count and file dates
+
+=item *
+
+in-place operation is a little bit broken with short filenames
+
+=item *
+
+sockets
+
+=back
+
+=head2 Building Perl on DOS
+
+=over 4
+
+=item *
+
+Unpack the source package F<perl5.6*.tar.gz> with djtarx. If you want
+to use long file names under w95 and also to get Perl to pass all its
+tests, don't forget to use
+
+ set LFN=y
+ set FNCASE=y
+
+before unpacking the archive.
+
+=item *
+
+Create a "symlink" or copy your bash.exe to sh.exe in your C<($DJDIR)/bin>
+directory.
+
+ ln -s bash.exe sh.exe
+
+[If you have the recommended version of bash for DJGPP, this is already
+done for you.]
+
+And make the C<SHELL> environment variable point to this F<sh.exe>:
+
+ set SHELL=c:/djgpp/bin/sh.exe (use full path name!)
+
+You can do this in F<djgpp.env> too. Add this line BEFORE any section
+definition:
+
+ +SHELL=%DJDIR%/bin/sh.exe
+
+=item *
+
+If you have F<split.exe> and F<gsplit.exe> in your path, then rename
+F<split.exe> to F<djsplit.exe>, and F<gsplit.exe> to F<split.exe>.
+Copy or link F<gecho.exe> to F<echo.exe> if you don't have F<echo.exe>.
+Copy or link F<gawk.exe> to F<awk.exe> if you don't have F<awk.exe>.
+
+[If you have the recommended versions of djdev, shell utilities and
+gawk, all these are already done for you, and you will not need to do
+anything.]
+
+=item *
+
+Chdir to the djgpp subdirectory of perl toplevel and type the following
+commands:
+
+ set FNCASE=y
+ configure.bat
+
+This will do some preprocessing then run the Configure script for you.
+The Configure script is interactive, but in most cases you just need to
+press ENTER. The "set" command ensures that DJGPP preserves the letter
+case of file names when reading directories. If you already issued this
+set command when unpacking the archive, and you are in the same DOS
+session as when you unpacked the archive, you don't have to issue the
+set command again. This command is necessary *before* you start to
+(re)configure or (re)build perl in order to ensure both that perl builds
+correctly and that building XS-type modules can succeed. See the DJGPP
+info entry for "_preserve_fncase" for more information:
+
+ info libc alphabetical _preserve_fncase
+
+If the script says that your package is incomplete, and asks whether
+to continue, just answer with Y (this can only happen if you don't use
+long filenames or forget to issue "set FNCASE=y" first).
+
+When Configure asks about the extensions, I suggest IO and Fcntl,
+and if you want database handling then SDBM_File or GDBM_File
+(you need to install gdbm for this one). If you want to use the
+POSIX extension (this is the default), make sure that the stack
+size of your F<cc1.exe> is at least 512kbyte (you can check this
+with: C<stubedit cc1.exe>).
+
+You can use the Configure script in non-interactive mode too.
+When I built my F<perl.exe>, I used something like this:
+
+ configure.bat -des
+
+You can find more info about Configure's command line switches in
+the F<INSTALL> file.
+
+When the script ends, and you want to change some values in the
+generated F<config.sh> file, then run
+
+ sh Configure -S
+
+after you made your modifications.
+
+IMPORTANT: if you use this C<-S> switch, be sure to delete the CONFIG
+environment variable before running the script:
+
+ set CONFIG=
+
+=item *
+
+Now you can compile Perl. Type:
+
+ make
+
+=back
+
+=head2 Testing Perl on DOS
+
+Type:
+
+ make test
+
+If you're lucky you should see "All tests successful". But there can be
+a few failed subtests (less than 5 hopefully) depending on some external
+conditions (e.g. some subtests fail under linux/dosemu or plain dos
+with short filenames only).
+
+=head2 Installation of Perl on DOS
+
+Type:
+
+ make install
+
+This will copy the newly compiled perl and libraries into your DJGPP
+directory structure. Perl.exe and the utilities go into C<($DJDIR)/bin>,
+and the library goes under C<($DJDIR)/lib/perl5>. The pod documentation
+goes under C<($DJDIR)/lib/perl5/pod>.
+
+=head1 BUILDING AND INSTALLING MODULES ON DOS
+
+=head2 Building Prerequisites for Perl on DOS
+
+For building and installing non-XS modules, all you need is a working
+perl under DJGPP. Non-XS modules do not require re-linking the perl
+binary, and so are simpler to build and install.
+
+XS-type modules do require re-linking the perl binary, because part of
+an XS module is written in "C", and has to be linked together with the
+perl binary to be executed. This is required because perl under DJGPP
+is built with the "static link" option, due to the lack of "dynamic
+linking" in the DJGPP environment.
+
+Because XS modules require re-linking of the perl binary, you need both
+the perl binary distribution and the perl source distribution to build
+an XS extension module. In addition, you will have to have built your
+perl binary from the source distribution so that all of the components
+of the perl binary are available for the required link step.
+
+=head2 Unpacking CPAN Modules on DOS
+
+First, download the module package from CPAN (e.g., the "Comma Separated
+Value" text package, Text-CSV-0.01.tar.gz). Then expand the contents of
+the package into some location on your disk. Most CPAN modules are
+built with an internal directory structure, so it is usually safe to
+expand it in the root of your DJGPP installation. Some people prefer to
+locate source trees under /usr/src (i.e., C<($DJDIR)/usr/src>), but you may
+put it wherever seems most logical to you, *EXCEPT* under the same
+directory as your perl source code. There are special rules that apply
+to modules which live in the perl source tree that do not apply to most
+of the modules in CPAN.
+
+Unlike other DJGPP packages, which are normal "zip" files, most CPAN
+module packages are "gzipped tarballs". Recent versions of WinZip will
+safely unpack and expand them, *UNLESS* they have zero-length files. It
+is a known WinZip bug (as of v7.0) that it will not extract zero-length
+files.
+
+From the command line, you can use the djtar utility provided with DJGPP
+to unpack and expand these files. For example:
+
+ C:\djgpp>djtarx -v Text-CSV-0.01.tar.gz
+
+This will create the new directory C<($DJDIR)/Text-CSV-0.01>, filling
+it with the source for this module.
+
+=head2 Building Non-XS Modules on DOS
+
+To build a non-XS module, you can use the standard module-building
+instructions distributed with perl modules.
+
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+This is sufficient because non-XS modules install only ".pm" files and
+(sometimes) pod and/or man documentation. No re-linking of the perl
+binary is needed to build, install or use non-XS modules.
+
+=head2 Building XS Modules on DOS
+
+To build an XS module, you must use the standard module-building
+instructions distributed with perl modules *PLUS* three extra
+instructions specific to the DJGPP "static link" build environment.
+
+ set FNCASE=y
+ perl Makefile.PL
+ make
+ make perl
+ make test
+ make -f Makefile.aperl inst_perl MAP_TARGET=perl.exe
+ make install
+
+The first extra instruction sets DJGPP's FNCASE environment variable so
+that the new perl binary which you must build for an XS-type module will
+build correctly. The second extra instruction re-builds the perl binary
+in your module directory before you run "make test", so that you are
+testing with the new module code you built with "make". The third extra
+instruction installs the perl binary from your module directory into the
+standard DJGPP binary directory, C<($DJDIR)/bin>, replacing your
+previous perl binary.
+
+Note that the MAP_TARGET value *must* have the ".exe" extension or you
+will not create a "perl.exe" to replace the one in C<($DJDIR)/bin>.
+
+When you are done, the XS-module install process will have added information
+to yout "perllocal" information telling that the perl binary has been replaced,
+and what module was installed. you can view this information at any time
+by using the command:
+
+ perl -S perldoc perllocal
+
+=head1 AUTHOR
+
+Laszlo Molnar, F<laszlo.molnar@eth.ericsson.se> [Installing/building perl]
+
+Peter J. Farley III F<pjfarley@banet.net> [Building/installing modules]
+
+=head1 SEE ALSO
+
+perl(1).
+
+=cut
+
diff --git a/ext/Encode/Encode/cns11643-1.enc b/ext/Encode/Encode/cns11643-1.enc
index 2254216b49..7e6589ca5b 100644
--- a/ext/Encode/Encode/cns11643-1.enc
+++ b/ext/Encode/Encode/cns11643-1.enc
@@ -1,1108 +1,1108 @@
-# Encoding file: cns11643-1, double-byte
-D
-2134 0 65
-21
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00003000FF0C30013002FF0E30FBFF1BFF1AFF1FFF01FE3020262025FE50FE51
-FE5200B7FE54FE55FE56FE57FE312014FE3220130000000000000000FF08FF09
-FE35FE36FF5BFF5DFE37FE3830143015FE39FE3A30103011FE3BFE3C300A300B
-FE3DFE3E30083009FE3FFE40300C300DFE41FE42300E300FFE43FE44FE59FE5A
-FE5BFE5CFE5DFE5E20182019201C201D301D301E20322035FF03FF06FF0A203B
-00A7300325CB25CF25B325B225CE2606260525C725C625A125A025BD25BC0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-22
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000032A32105203E0000FF3F0000FE49FE4AFE4DFE4EFE4BFE4CFE5FFE60FE61
-FF0BFF0D00D700F700B1221AFF1CFF1EFF1D226622672260221E22522261FE62
-FE63FE64FE66FE65223C2229222A22A52220221F22BF33D233D1222B222E2235
-22342640264226412609219121932192219021962197219921982016FF5CFF0F
-FF3C2215FE68FF04FFE53012FFE0FFE1FF05FF2021032109FE69FE6AFE6B33D5
-339C339D339E33CE33A1338E338F33C400B05159515B515E515D516151630000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-23
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000055E774E97CCE25812582258325842585258625872588258F258E258D258C
-258B258A2589253C2534252C2524251C2594250025022595250C251025142518
-256D256E2570256F2550255E256A256125E225E325E525E42571257225730000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-24
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000FF10FF11FF12FF13FF14FF15FF16FF17FF18FF1921602161216221632164
-2165216621672168216930213022302330243025302630273028302900005344
-0000FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F
-FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF41FF42FF43FF44FF45
-FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4FFF50FF51FF52FF53FF54FF55
-FF56FF57FF58FF59FF5A039103920393039403950396039703980399039A0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-25
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000039B039C039D039E039F03A003A103A303A403A503A603A703A803A903B1
-03B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C1
-03C303C403C503C603C703C803C931053106310731083109310A310B310C310D
-310E310F3110311131123113311431153116311731183119311A311B311C311D
-311E311F312031213122312331243125312631273128312902D902C902CA02C7
-02CB000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-26
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000246024612462246324642465246624672468246924742475247624772478
-2479247A247B247C247D21702171217221732174217521762177217821790000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-42
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00002400240124022403240424052406240724082409240A240B240C240D240E
-240F2410241124122413241424152416241724182419241A241B241C241D241E
-241F242100000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-44
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00004E004E594E014E034E434E5D4E864E8C4EBA513F5165516B51E052005201
-529B53155341535C53C84E094E0B4E084E0A4E2B4E3851E14E454E484E5F4E5E
-4E8E4EA15140520352FA534353C953E3571F58EB5915592759735B505B515B53
-5BF85C0F5C225C385C715DDD5DE55DF15DF25DF35DFE5E725EFE5F0B5F13624D
-4E114E104E0D4E2D4E304E394E4B5C394E884E914E954E924E944EA24EC14EC0
-4EC34EC64EC74ECD4ECA4ECB4EC4514351415167516D516E516C519751F60000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-45
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000052065207520852FB52FE52FF53165339534853475345535E538453CB53CA
-53CD58EC5929592B592A592D5B545C115C245C3A5C6F5DF45E7B5EFF5F145F15
-5FC362086236624B624E652F6587659765A465B965E566F0670867286B206B62
-6B796BCB6BD46BDB6C0F6C34706B722A7236723B72477259725B72AC738B4E19
-4E164E154E144E184E3B4E4D4E4F4E4E4EE54ED84ED44ED54ED64ED74EE34EE4
-4ED94EDE514551445189518A51AC51F951FA51F8520A52A0529F530553060000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-46
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005317531D4EDF534A534953615360536F536E53BB53EF53E453F353EC53EE
-53E953E853FC53F853F553EB53E653EA53F253F153F053E553ED53FB56DB56DA
-5916592E5931597459765B555B835C3C5DE85DE75DE65E025E035E735E7C5F01
-5F185F175FC5620A625362546252625165A565E6672E672C672A672B672D6B63
-6BCD6C116C106C386C416C406C3E72AF7384738974DC74E67518751F75287529
-7530753175327533758B767D76AE76BF76EE77DB77E277F3793A79BE7A740000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-47
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007ACB4E1E4E1F4E524E534E694E994EA44EA64EA54EFF4F094F194F0A4F15
-4F0D4F104F114F0F4EF24EF64EFB4EF04EF34EFD4F014F0B5149514751465148
-51685171518D51B0521752115212520E521652A3530853215320537053715409
-540F540C540A54105401540B54045411540D54085403540E5406541256E056DE
-56DD573357305728572D572C572F57295919591A59375938598459785983597D
-5979598259815B575B585B875B885B855B895BFA5C165C795DDE5E065E760000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-48
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005E745F0F5F1B5FD95FD6620E620C620D62106263625B6258653665E965E8
-65EC65ED66F266F36709673D6734673167356B216B646B7B6C166C5D6C576C59
-6C5F6C606C506C556C616C5B6C4D6C4E7070725F725D767E7AF97C737CF87F36
-7F8A7FBD80018003800C80128033807F8089808B808C81E381EA81F381FC820C
-821B821F826E8272827E866B8840884C8863897F96214E324EA84F4D4F4F4F47
-4F574F5E4F344F5B4F554F304F504F514F3D4F3A4F384F434F544F3C4F460000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-49
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00004F634F5C4F604F2F4F4E4F364F594F5D4F484F5A514C514B514D517551B6
-51B7522552245229522A522852AB52A952AA52AC532353735375541D542D541E
-543E5426544E542754465443543354485442541B5429544A5439543B5438542E
-543554365420543C54405431542B541F542C56EA56F056E456EB574A57515740
-574D5747574E573E5750574F573B58EF593E599D599259A8599E59A359995996
-598D59A45993598A59A55B5D5B5C5B5A5B5B5B8C5B8B5B8F5C2C5C405C410000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4a
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005C3F5C3E5C905C915C945C8C5DEB5E0C5E8F5E875E8A5EF75F045F1F5F64
-5F625F775F795FD85FCC5FD75FCD5FF15FEB5FF85FEA62126211628462976296
-628062766289626D628A627C627E627962736292626F6298626E629562936291
-62866539653B653865F166F4675F674E674F67506751675C6756675E67496746
-6760675367576B656BCF6C426C5E6C996C816C886C896C856C9B6C6A6C7A6C90
-6C706C8C6C686C966C926C7D6C836C726C7E6C746C866C766C8D6C946C980000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4b
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006C827076707C707D707872627261726072C472C27396752C752B75377538
-768276EF77E379C179C079BF7A767CFB7F5580968093809D8098809B809A80B2
-826F8292828B828D898B89D28A008C378C468C558C9D8D648D708DB38EAB8ECA
-8F9B8FB08FC28FC68FC58FC45DE1909190A290AA90A690A3914991C691CC9632
-962E9631962A962C4E264E564E734E8B4E9B4E9E4EAB4EAC4F6F4F9D4F8D4F73
-4F7F4F6C4F9B4F8B4F864F834F704F754F884F694F7B4F964F7E4F8F4F910000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4c
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00004F7A515451525155516951775176517851BD51FD523B52385237523A5230
-522E5236524152BE52BB5352535453535351536653775378537953D653D453D7
-547354755496547854955480547B5477548454925486547C549054715476548C
-549A54625468548B547D548E56FA57835777576A5769576157665764577C591C
-5949594759485944595459BE59BB59D459B959AE59D159C659D059CD59CB59D3
-59CA59AF59B359D259C55B5F5B645B635B975B9A5B985B9C5B995B9B5C1A0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4d
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005C485C455C465CB75CA15CB85CA95CAB5CB15CB35E185E1A5E165E155E1B
-5E115E785E9A5E975E9C5E955E965EF65F265F275F295F805F815F7F5F7C5FDD
-5FE05FFD5FF55FFF600F6014602F60356016602A6015602160276029602B601B
-62166215623F623E6240627F62C962CC62C462BF62C262B962D262DB62AB62D3
-62D462CB62C862A862BD62BC62D062D962C762CD62B562DA62B162D862D662D7
-62C662AC62CE653E65A765BC65FA66146613660C66066602660E6600660F0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4e
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006615660A6607670D670B676D678B67956771679C677367776787679D6797
-676F6770677F6789677E67906775679A6793677C676A67726B236B666B676B7F
-6C136C1B6CE36CE86CF36CB16CCC6CE56CB36CBD6CBE6CBC6CE26CAB6CD56CD3
-6CB86CC46CB96CC16CAE6CD76CC56CF16CBF6CBB6CE16CDB6CCA6CAC6CEF6CDC
-6CD66CE07095708E7092708A7099722C722D723872487267726972C072CE72D9
-72D772D073A973A8739F73AB73A5753D759D7599759A768476C276F276F40000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4f
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000077E577FD793E7940794179C979C87A7A7A797AFA7CFE7F547F8C7F8B8005
-80BA80A580A280B180A180AB80A980B480AA80AF81E581FE820D82B3829D8299
-82AD82BD829F82B982B182AC82A582AF82B882A382B082BE82B7864E8671521D
-88688ECB8FCE8FD48FD190B590B890B190B691C791D195779580961C9640963F
-963B9644964296B996E89752975E4E9F4EAD4EAE4FE14FB54FAF4FBF4FE04FD1
-4FCF4FDD4FC34FB64FD84FDF4FCA4FD74FAE4FD04FC44FC24FDA4FCE4FDE0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-50
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00004FB751575192519151A0524E5243524A524D524C524B524752C752C952C3
-52C1530D5357537B539A53DB54AC54C054A854CE54C954B854A654B354C754C2
-54BD54AA54C154C454C854AF54AB54B154BB54A954A754BF56FF5782578B57A0
-57A357A257CE57AE579359555951594F594E595059DC59D859FF59E359E85A03
-59E559EA59DA59E65A0159FB5B695BA35BA65BA45BA25BA55C015C4E5C4F5C4D
-5C4B5CD95CD25DF75E1D5E255E1F5E7D5EA05EA65EFA5F085F2D5F655F880000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-51
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005F855F8A5F8B5F875F8C5F896012601D60206025600E6028604D60706068
-606260466043606C606B606A6064624162DC6316630962FC62ED630162EE62FD
-630762F162F762EF62EC62FE62F463116302653F654565AB65BD65E26625662D
-66206627662F661F66286631662466F767FF67D367F167D467D067EC67B667AF
-67F567E967EF67C467D167B467DA67E567B867CF67DE67F367B067D967E267DD
-67D26B6A6B836B866BB56BD26BD76C1F6CC96D0B6D326D2A6D416D256D0C0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-52
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006D316D1E6D176D3B6D3D6D3E6D366D1B6CF56D396D276D386D296D2E6D35
-6D0E6D2B70AB70BA70B370AC70AF70AD70B870AE70A472307272726F727472E9
-72E072E173B773CA73BB73B273CD73C073B3751A752D754F754C754E754B75AB
-75A475A575A275A3767876867687768876C876C676C376C5770176F976F87709
-770B76FE76FC770777DC78027814780C780D794679497948794779B979BA79D1
-79D279CB7A7F7A817AFF7AFD7C7D7D027D057D007D097D077D047D067F380000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-53
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007F8E7FBF8010800D8011803680D680E580DA80C380C480CC80E180DB80CE
-80DE80E480DD81F4822282E78303830582E382DB82E6830482E58302830982D2
-82D782F1830182DC82D482D182DE82D382DF82EF830686508679867B867A884D
-886B898189D48A088A028A038C9E8CA08D748D738DB48ECD8ECC8FF08FE68FE2
-8FEA8FE58FED8FEB8FE48FE890CA90CE90C190C3914B914A91CD95829650964B
-964C964D9762976997CB97ED97F3980198A898DB98DF999699994E584EB30000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-54
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000500C500D50234FEF502650254FF8502950165006503C501F501A50125011
-4FFA5000501450284FF15021500B501950184FF34FEE502D502A4FFE502B5009
-517C51A451A551A251CD51CC51C651CB5256525C5254525B525D532A537F539F
-539D53DF54E855105501553754FC54E554F2550654FA551454E954ED54E15509
-54EE54EA54E65527550754FD550F5703570457C257D457CB57C35809590F5957
-5958595A5A115A185A1C5A1F5A1B5A1359EC5A205A235A295A255A0C5A090000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-55
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005B6B5C585BB05BB35BB65BB45BAE5BB55BB95BB85C045C515C555C505CED
-5CFD5CFB5CEA5CE85CF05CF65D015CF45DEE5E2D5E2B5EAB5EAD5EA75F315F92
-5F915F9060596063606560506055606D6069606F6084609F609A608D6094608C
-60856096624762F3630862FF634E633E632F635563426346634F6349633A6350
-633D632A632B6328634D634C65486549659965C165C566426649664F66436652
-664C6645664166F8671467156717682168386848684668536839684268540000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-56
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000682968B36817684C6851683D67F468506840683C6843682A684568136818
-68416B8A6B896BB76C236C276C286C266C246CF06D6A6D956D886D876D666D78
-6D776D596D936D6C6D896D6E6D5A6D746D696D8C6D8A6D796D856D656D9470CA
-70D870E470D970C870CF7239727972FC72F972FD72F872F7738673ED740973EE
-73E073EA73DE7554755D755C755A755975BE75C575C775B275B375BD75BC75B9
-75C275B8768B76B076CA76CD76CE7729771F7720772877E97830782778380000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-57
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000781D783478377825782D7820781F7832795579507960795F7956795E795D
-7957795A79E479E379E779DF79E679E979D87A847A887AD97B067B117C897D21
-7D177D0B7D0A7D207D227D147D107D157D1A7D1C7D0D7D197D1B7F3A7F5F7F94
-7FC57FC1800680048018801580198017803D803F80F1810280F0810580ED80F4
-810680F880F3810880FD810A80FC80EF81ED81EC82008210822A822B8228822C
-82BB832B83528354834A83388350834983358334834F83328339833683170000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-58
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000083408331832883438654868A86AA869386A486A9868C86A3869C88708877
-88818882887D88798A188A108A0E8A0C8A158A0A8A178A138A168A0F8A118C48
-8C7A8C798CA18CA28D778EAC8ED28ED48ECF8FB1900190068FF790008FFA8FF4
-90038FFD90058FF8909590E190DD90E29152914D914C91D891DD91D791DC91D9
-9583966296639661965B965D96649658965E96BB98E299AC9AA89AD89B259B32
-9B3C4E7E507A507D505C50475043504C505A504950655076504E505550750000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-59
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000050745077504F500F506F506D515C519551F0526A526F52D252D952D852D5
-5310530F5319533F5340533E53C366FC5546556A55665544555E55615543554A
-55315556554F5555552F55645538552E555C552C55635533554155575708570B
-570957DF5805580A580657E057E457FA5802583557F757F9592059625A365A41
-5A495A665A6A5A405A3C5A625A5A5A465A4A5B705BC75BC55BC45BC25BBF5BC6
-5C095C085C075C605C5C5C5D5D075D065D0E5D1B5D165D225D115D295D140000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5a
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005D195D245D275D175DE25E385E365E335E375EB75EB85EB65EB55EBE5F35
-5F375F575F6C5F695F6B5F975F995F9E5F985FA15FA05F9C607F60A3608960A0
-60A860CB60B460E660BD60C560BB60B560DC60BC60D860D560C660DF60B860DA
-60C7621A621B624863A063A76372639663A263A563776367639863AA637163A9
-63896383639B636B63A863846388639963A163AC6392638F6380637B63696368
-637A655D6556655165596557555F654F655865556554659C659B65AC65CF0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5b
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000065CB65CC65CE665D665A666466686666665E66F952D7671B688168AF68A2
-689368B5687F687668B168A7689768B0688368C468AD688668856894689D68A8
-689F68A168826B326BBA6BEB6BEC6C2B6D8E6DBC6DF36DD96DB26DE16DCC6DE4
-6DFB6DFA6E056DC76DCB6DAF6DD16DAE6DDE6DF96DB86DF76DF56DC56DD26E1A
-6DB56DDA6DEB6DD86DEA6DF16DEE6DE86DC66DC46DAA6DEC6DBF6DE670F97109
-710A70FD70EF723D727D7281731C731B73167313731973877405740A74030000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5c
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000740673FE740D74E074F674F7751C75227565756675627570758F75D475D5
-75B575CA75CD768E76D476D276DB7737773E773C77367738773A786B7843784E
-79657968796D79FB7A927A957B207B287B1B7B2C7B267B197B1E7B2E7C927C97
-7C957D467D437D717D2E7D397D3C7D407D307D337D447D2F7D427D327D317F3D
-7F9E7F9A7FCC7FCE7FD2801C804A8046812F81168123812B8129813081248202
-8235823782368239838E839E8398837883A2839683BD83AB8392838A83930000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5d
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000838983A08377837B837C838683A786555F6A86C786C086B686C486B586C6
-86CB86B186AF86C98853889E888888AB88928896888D888B8993898F8A2A8A1D
-8A238A258A318A2D8A1F8A1B8A228C498C5A8CA98CAC8CAB8CA88CAA8CA78D67
-8D668DBE8DBA8EDB8EDF9019900D901A90179023901F901D90109015901E9020
-900F90229016901B901490E890ED90FD915791CE91F591E691E391E791ED91E9
-9589966A9675967396789670967496769677966C96C096EA96E97AE07ADF0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5e
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000980298039B5A9CE59E759E7F9EA59EBB50A2508D50855099509150805096
-5098509A670051F1527252745275526952DE52DD52DB535A53A5557B558055A7
-557C558A559D55985582559C55AA55945587558B558355B355AE559F553E55B2
-559A55BB55AC55B1557E558955AB5599570D582F582A58345824583058315821
-581D582058F958FA59605A775A9A5A7F5A925A9B5AA75B735B715BD25BCC5BD3
-5BD05C0A5C0B5C315D4C5D505D345D475DFD5E455E3D5E405E435E7E5ECA0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5f
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005EC15EC25EC45F3C5F6D5FA95FAA5FA860D160E160B260B660E0611C6123
-60FA611560F060FB60F4616860F1610E60F6610961006112621F624963A3638C
-63CF63C063E963C963C663CD63D263E363D063E163D663ED63EE637663F463EA
-63DB645263DA63F9655E6566656265636591659065AF666E667066746676666F
-6691667A667E667766FE66FF671F671D68FA68D568E068D868D7690568DF68F5
-68EE68E768F968D268F268E368CB68CD690D6912690E68C968DA696E68FB0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-60
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006B3E6B3A6B3D6B986B966BBC6BEF6C2E6C2F6C2C6E2F6E386E546E216E32
-6E676E4A6E206E256E236E1B6E5B6E586E246E566E6E6E2D6E266E6F6E346E4D
-6E3A6E2C6E436E1D6E3E6ECB6E896E196E4E6E636E446E726E696E5F7119711A
-7126713071217136716E711C724C728472807336732573347329743A742A7433
-74227425743574367434742F741B7426742875257526756B756A75E275DB75E3
-75D975D875DE75E0767B767C7696769376B476DC774F77ED785D786C786F0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-61
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007A0D7A087A0B7A057A007A987A977A967AE57AE37B497B567B467B507B52
-7B547B4D7B4B7B4F7B517C9F7CA57D5E7D507D687D557D2B7D6E7D727D617D66
-7D627D707D7355847FD47FD5800B8052808581558154814B8151814E81398146
-813E814C815381748212821C83E9840383F8840D83E083C5840B83C183EF83F1
-83F48457840A83F0840C83CC83FD83F283CA8438840E840483DC840783D483DF
-865B86DF86D986ED86D486DB86E486D086DE885788C188C288B1898389960000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-62
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008A3B8A608A558A5E8A3C8A418A548A5B8A508A468A348A3A8A368A568C61
-8C828CAF8CBC8CB38CBD8CC18CBB8CC08CB48CB78CB68CBF8CB88D8A8D858D81
-8DCE8DDD8DCB8DDA8DD18DCC8DDB8DC68EFB8EF88EFC8F9C902E903590319038
-90329036910290F5910990FE9163916591CF9214921592239209921E920D9210
-920792119594958F958B959195939592958E968A968E968B967D96859686968D
-9672968496C196C596C496C696C796EF96F297CC98059806980898E798EA0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-63
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000098EF98E998F298ED99AE99AD9EC39ECD9ED14E8250AD50B550B250B350C5
-50BE50AC50B750BB50AF50C7527F5277527D52DF52E652E452E252E3532F55DF
-55E855D355E655CE55DC55C755D155E355E455EF55DA55E155C555C655E555C9
-57125713585E585158585857585A5854586B584C586D584A58625852584B5967
-5AC15AC95ACC5ABE5ABD5ABC5AB35AC25AB25D695D6F5E4C5E795EC95EC85F12
-5F595FAC5FAE611A610F6148611F60F3611B60F961016108614E614C61440000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-64
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000614D613E61346127610D61066137622162226413643E641E642A642D643D
-642C640F641C6414640D6436641664176406656C659F65B06697668966876688
-669666846698668D67036994696D695A697769606954697569306982694A6968
-696B695E695369796986695D6963695B6B476B726BC06BBF6BD36BFD6EA26EAF
-6ED36EB66EC26E906E9D6EC76EC56EA56E986EBC6EBA6EAB6ED16E966E9C6EC4
-6ED46EAA6EA76EB4714E71597169716471497167715C716C7166714C71650000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-65
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000715E714671687156723A725273377345733F733E746F745A7455745F745E
-7441743F7459745B745C75767578760075F0760175F275F175FA75FF75F475F3
-76DE76DF775B776B7766775E77637779776A776C775C77657768776277EE788E
-78B078977898788C7889787C78917893787F797A797F7981842C79BD7A1C7A1A
-7A207A147A1F7A1E7A9F7AA07B777BC07B607B6E7B677CB17CB37CB57D937D79
-7D917D817D8F7D5B7F6E7F697F6A7F727FA97FA87FA480568058808680840000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-66
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008171817081788165816E8173816B8179817A81668205824784828477843D
-843184758466846B8449846C845B843C8435846184638469846D8446865E865C
-865F86F9871387088707870086FE86FB870287038706870A885988DF88D488D9
-88DC88D888DD88E188CA88D588D2899C89E38A6B8A728A738A668A698A708A87
-8A7C8A638AA08A718A858A6D8A628A6E8A6C8A798A7B8A3E8A688C628C8A8C89
-8CCA8CC78CC88CC48CB28CC38CC28CC58DE18DDF8DE88DEF8DF38DFA8DEA0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-67
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008DE48DE68EB28F038F098EFE8F0A8F9F8FB2904B904A905390429054903C
-905590509047904F904E904D9051903E904191129117916C916A916991C99237
-92579238923D9240923E925B924B9264925192349249924D92459239923F925A
-959896989694969596CD96CB96C996CA96F796FB96F996F69756977497769810
-98119813980A9812980C98FC98F498FD98FE99B399B199B49AE19CE99E829F0E
-9F139F2050E750EE50E550D650ED50DA50D550CF50D150F150CE50E951620000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-68
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000051F352835282533153AD55FE5600561B561755FD561456065609560D560E
-55F75616561F5608561055F6571857165875587E58835893588A58795885587D
-58FD592559225924596A59695AE15AE65AE95AD75AD65AD85AE35B755BDE5BE7
-5BE15BE55BE65BE85BE25BE45BDF5C0D5C625D845D875E5B5E635E555E575E54
-5ED35ED65F0A5F465F705FB96147613F614B617761626163615F615A61586175
-622A64876458645464A46478645F647A645164676434646D647B657265A10000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-69
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000065D765D666A266A8669D699C69A8699569C169AE69D369CB699B69B769BB
-69AB69B469D069CD69AD69CC69A669C369A36B496B4C6C336F336F146EFE6F13
-6EF46F296F3E6F206F2C6F0F6F026F226EFF6EEF6F066F316F386F326F236F15
-6F2B6F2F6F886F2A6EEC6F016EF26ECC6EF771947199717D718A71847192723E
-729272967344735074647463746A7470746D750475917627760D760B76097613
-76E176E37784777D777F776178C1789F78A778B378A978A3798E798F798D0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6a
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007A2E7A317AAA7AA97AED7AEF7BA17B957B8B7B757B977B9D7B947B8F7BB8
-7B877B847CB97CBD7CBE7DBB7DB07D9C7DBD7DBE7DA07DCA7DB47DB27DB17DBA
-7DA27DBF7DB57DB87DAD7DD27DC77DAC7F707FE07FE17FDF805E805A80878150
-8180818F8188818A817F818281E781FA82078214821E824B84C984BF84C684C4
-8499849E84B2849C84CB84B884C084D3849084BC84D184CA873F871C873B8722
-87258734871887558737872988F3890288F488F988F888FD88E8891A88EF0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6b
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008AA68A8C8A9E8AA38A8D8AA18A938AA48AAA8AA58AA88A988A918A9A8AA7
-8C6A8C8D8C8C8CD38CD18CD28D6B8D998D958DFC8F148F128F158F138FA39060
-9058905C90639059905E9062905D905B91199118911E91759178917791749278
-92AC9280928592989296927B9293929C92A8927C929195A195A895A995A395A5
-95A49699969C969B96CC96D29700977C978597F69817981898AF98B199039905
-990C990999C19AAF9AB09AE69B419B429CF49CF69CF39EBC9F3B9F4A51040000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6c
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000510050FB50F550F9510251085109510551DC528752885289528D528A52F0
-53B2562E563B56395632563F563456295653564E565756745636562F56305880
-589F589E58B3589C58AE58A958A6596D5B095AFB5B0B5AF55B0C5B085BEE5BEC
-5BE95BEB5C645C655D9D5D945E625E5F5E615EE25EDA5EDF5EDD5EE35EE05F48
-5F715FB75FB561766167616E615D61556182617C6170616B617E61A7619061AB
-618E61AC619A61A4619461AE622E6469646F6479649E64B26488649064B00000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6d
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000064A56493649564A9649264AE64AD64AB649A64AC649964A264B365756577
-657866AE66AB66B466B16A236A1F69E86A016A1E6A1969FD6A216A136A0A69F3
-6A026A0569ED6A116B506B4E6BA46BC56BC66F3F6F7C6F846F516F666F546F86
-6F6D6F5B6F786F6E6F8E6F7A6F706F646F976F586ED56F6F6F606F5F719F71AC
-71B171A87256729B734E73577469748B7483747E7480757F76207629761F7624
-762676217622769A76BA76E4778E7787778C7791778B78CB78C578BA78CA0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6e
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000078BE78D578BC78D07A3F7A3C7A407A3D7A377A3B7AAF7AAE7BAD7BB17BC4
-7BB47BC67BC77BC17BA07BCC7CCA7DE07DF47DEF7DFB7DD87DEC7DDD7DE87DE3
-7DDA7DDE7DE97D9E7DD97DF27DF97F757F777FAF7FE98026819B819C819D81A0
-819A81988517853D851A84EE852C852D8513851185238521851484EC852584FF
-8506878287748776876087668778876887598757874C8753885B885D89108907
-891289138915890A8ABC8AD28AC78AC48A958ACB8AF88AB28AC98AC28ABF0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6f
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008AB08AD68ACD8AB68AB98ADB8C4C8C4E8C6C8CE08CDE8CE68CE48CEC8CED
-8CE28CE38CDC8CEA8CE18D6D8D9F8DA38E2B8E108E1D8E228E0F8E298E1F8E21
-8E1E8EBA8F1D8F1B8F1F8F298F268F2A8F1C8F1E8F259069906E9068906D9077
-9130912D9127913191879189918B918392C592BB92B792EA92E492C192B392BC
-92D292C792F092B295AD95B197049706970797099760978D978B978F9821982B
-981C98B3990A99139912991899DD99D099DF99DB99D199D599D299D99AB70000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-70
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009AEE9AEF9B279B459B449B779B6F9D069D099D039EA99EBE9ECE58A89F52
-51125118511451105115518051AA51DD5291529352F35659566B567956695664
-5678566A566856655671566F566C5662567658C158BE58C758C5596E5B1D5B34
-5B785BF05C0E5F4A61B2619161A9618A61CD61B661BE61CA61C8623064C564C1
-64CB64BB64BC64DA64C464C764C264CD64BF64D264D464BE657466C666C966B9
-66C466C766B86A3D6A386A3A6A596A6B6A586A396A446A626A616A4B6A470000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-71
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006A356A5F6A486B596B776C056FC26FB16FA16FC36FA46FC16FA76FB36FC0
-6FB96FB66FA66FA06FB471BE71C971D071D271C871D571B971CE71D971DC71C3
-71C47368749C74A37498749F749E74E2750C750D76347638763A76E776E577A0
-779E779F77A578E878DA78EC78E779A67A4D7A4E7A467A4C7A4B7ABA7BD97C11
-7BC97BE47BDB7BE17BE97BE67CD57CD67E0A7E117E087E1B7E237E1E7E1D7E09
-7E107F797FB27FF07FF17FEE802881B381A981A881FB820882588259854A0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-72
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000855985488568856985438549856D856A855E8783879F879E87A2878D8861
-892A89328925892B892189AA89A68AE68AFA8AEB8AF18B008ADC8AE78AEE8AFE
-8B018B028AF78AED8AF38AF68AFC8C6B8C6D8C938CF48E448E318E348E428E39
-8E358F3B8F2F8F388F338FA88FA69075907490789072907C907A913491929320
-933692F89333932F932292FC932B9304931A9310932693219315932E931995BB
-96A796A896AA96D5970E97119716970D9713970F975B975C9766979898300000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-73
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009838983B9837982D9839982499109928991E991B9921991A99ED99E299F1
-9AB89ABC9AFB9AED9B289B919D159D239D269D289D129D1B9ED89ED49F8D9F9C
-512A511F5121513252F5568E5680569056855687568F58D558D358D158CE5B30
-5B2A5B245B7A5C375C685DBC5DBA5DBD5DB85E6B5F4C5FBD61C961C261C761E6
-61CB6232623464CE64CA64D864E064F064E664EC64F164E264ED6582658366D9
-66D66A806A946A846AA26A9C6ADB6AA36A7E6A976A906AA06B5C6BAE6BDA0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-74
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006C086FD86FF16FDF6FE06FDB6FE46FEB6FEF6F806FEC6FE16FE96FD56FEE
-6FF071E771DF71EE71E671E571ED71EC71F471E0723572467370737274A974B0
-74A674A876467642764C76EA77B377AA77B077AC77A777AD77EF78F778FA78F4
-78EF790179A779AA7A577ABF7C077C0D7BFE7BF77C0C7BE07CE07CDC7CDE7CE2
-7CDF7CD97CDD7E2E7E3E7E467E377E327E437E2B7E3D7E317E457E417E347E39
-7E487E357E3F7E2F7F447FF37FFC807180728070806F807381C681C381BA0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-75
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000081C281C081BF81BD81C981BE81E88209827185AA8584857E859C85918594
-85AF859B858785A8858A85A6866787C087D187B387D287C687AB87BB87BA87C8
-87CB893B893689448938893D89AC8B0E8B178B198B1B8B0A8B208B1D8B048B10
-8C418C3F8C738CFA8CFD8CFC8CF88CFB8DA88E498E4B8E488E4A8F448F3E8F42
-8F458F3F907F907D9084908190829080913991A3919E919C934D938293289375
-934A9365934B9318937E936C935B9370935A935495CA95CB95CC95C895C60000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-76
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000096B196B896D6971C971E97A097D3984698B699359A0199FF9BAE9BAB9BAA
-9BAD9D3B9D3F9E8B9ECF9EDE9EDC9EDD9EDB9F3E9F4B53E2569556AE58D958D8
-5B385F5E61E3623364F464F264FE650664FA64FB64F765B766DC67266AB36AAC
-6AC36ABB6AB86AC26AAE6AAF6B5F6B786BAF7009700B6FFE70066FFA7011700F
-71FB71FC71FE71F87377737574A774BF751576567658765277BD77BF77BB77BC
-790E79AE7A617A627A607AC47AC57C2B7C277C2A7C1E7C237C217CE77E540000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-77
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007E557E5E7E5A7E617E527E597F487FF97FFB8077807681CD81CF820A85CF
-85A985CD85D085C985B085BA85B987EF87EC87F287E0898689B289F48B288B39
-8B2C8B2B8C508D058E598E638E668E648E5F8E558EC08F498F4D908790839088
-91AB91AC91D09394938A939693A293B393AE93AC93B09398939A939795D495D6
-95D095D596E296DC96D996DB96DE972497A397A697AD97F9984D984F984C984E
-985398BA993E993F993D992E99A59A0E9AC19B039B069B4F9B4E9B4D9BCA0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-78
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009BC99BFD9BC89BC09D519D5D9D609EE09F159F2C513356A556A858DE58DF
-58E25BF59F905EEC61F261F761F661F56500650F66E066DD6AE56ADD6ADA6AD3
-701B701F7028701A701D701570187206720D725872A27378737A74BD74CA74E3
-75877586765F766177C7791979B17A6B7A697C3E7C3F7C387C3D7C377C407E6B
-7E6D7E797E697E6A7E737F857FB67FB97FB881D885E985DD85EA85D585E485E5
-85F787FB8805880D87F987FE8960895F8956895E8B418B5C8B588B498B5A0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-79
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008B4E8B4F8B468B598D088D0A8E7C8E728E878E768E6C8E7A8E748F548F4E
-8FAD908A908B91B191AE93E193D193DF93C393C893DC93DD93D693E293CD93D8
-93E493D793E895DC96B496E3972A9727976197DC97FB985E9858985B98BC9945
-99499A169A199B0D9BE89BE79BD69BDB9D899D619D729D6A9D6C9E929E979E93
-9EB452F856B756B656B456BC58E45B405B435B7D5BF65DC961F861FA65186514
-651966E667276AEC703E703070327210737B74CF766276657926792A792C0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-7a
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000792B7AC77AF67C4C7C437C4D7CEF7CF08FAE7E7D7E7C7E827F4C800081DA
-826685FB85F9861185FA8606860B8607860A88148815896489BA89F88B708B6C
-8B668B6F8B5F8B6B8D0F8D0D8E898E818E858E8291B491CB9418940393FD95E1
-973098C49952995199A89A2B9A309A379A359C139C0D9E799EB59EE89F2F9F5F
-9F639F615137513856C156C056C259145C6C5DCD61FC61FE651D651C659566E9
-6AFB6B046AFA6BB2704C721B72A774D674D4766977D37C507E8F7E8C7FBC0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-7b
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008617862D861A882388228821881F896A896C89BD8B748B778B7D8D138E8A
-8E8D8E8B8F5F8FAF91BA942E94339435943A94389432942B95E2973897399732
-97FF9867986599579A459A439A409A3E9ACF9B549B519C2D9C259DAF9DB49DC2
-9DB89E9D9EEF9F199F5C9F669F67513C513B56C856CA56C95B7F5DD45DD25F4E
-61FF65246B0A6B6170517058738074E4758A766E766C79B37C607C5F807E807D
-81DF8972896F89FC8B808D168D178E918E938F619148944494519452973D0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-7c
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000973E97C397C1986B99559A559A4D9AD29B1A9C499C319C3E9C3B9DD39DD7
-9F349F6C9F6A9F9456CC5DD662006523652B652A66EC6B1074DA7ACA7C647C63
-7C657E937E967E9481E28638863F88318B8A9090908F9463946094649768986F
-995C9A5A9A5B9A579AD39AD49AD19C549C579C569DE59E9F9EF456D158E9652C
-705E7671767277D77F507F888836883988628B938B928B9682778D1B91C0946A
-97429748974497C698709A5F9B229B589C5F9DF99DFA9E7C9E7D9F079F770000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-7d
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009F725EF36B1670637C6C7C6E883B89C08EA191C1947294709871995E9AD6
-9B239ECC706477DA8B9A947797C99A629A657E9C8B9C8EAA91C5947D947E947C
-9C779C789EF78C54947F9E1A72289A6A9B319E1B9E1E7C720000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
+# Encoding file: cns11643-1, double-byte
+D
+2134 0 65
+21
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00003000FF0C30013002FF0E30FBFF1BFF1AFF1FFF01FE3020262025FE50FE51
+FE5200B7FE54FE55FE56FE57FE312014FE3220130000000000000000FF08FF09
+FE35FE36FF5BFF5DFE37FE3830143015FE39FE3A30103011FE3BFE3C300A300B
+FE3DFE3E30083009FE3FFE40300C300DFE41FE42300E300FFE43FE44FE59FE5A
+FE5BFE5CFE5DFE5E20182019201C201D301D301E20322035FF03FF06FF0A203B
+00A7300325CB25CF25B325B225CE2606260525C725C625A125A025BD25BC0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+22
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000032A32105203E0000FF3F0000FE49FE4AFE4DFE4EFE4BFE4CFE5FFE60FE61
+FF0BFF0D00D700F700B1221AFF1CFF1EFF1D226622672260221E22522261FE62
+FE63FE64FE66FE65223C2229222A22A52220221F22BF33D233D1222B222E2235
+22342640264226412609219121932192219021962197219921982016FF5CFF0F
+FF3C2215FE68FF04FFE53012FFE0FFE1FF05FF2021032109FE69FE6AFE6B33D5
+339C339D339E33CE33A1338E338F33C400B05159515B515E515D516151630000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+23
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000055E774E97CCE25812582258325842585258625872588258F258E258D258C
+258B258A2589253C2534252C2524251C2594250025022595250C251025142518
+256D256E2570256F2550255E256A256125E225E325E525E42571257225730000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+24
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000FF10FF11FF12FF13FF14FF15FF16FF17FF18FF1921602161216221632164
+2165216621672168216930213022302330243025302630273028302900005344
+0000FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F
+FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF41FF42FF43FF44FF45
+FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4FFF50FF51FF52FF53FF54FF55
+FF56FF57FF58FF59FF5A039103920393039403950396039703980399039A0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+25
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000039B039C039D039E039F03A003A103A303A403A503A603A703A803A903B1
+03B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C1
+03C303C403C503C603C703C803C931053106310731083109310A310B310C310D
+310E310F3110311131123113311431153116311731183119311A311B311C311D
+311E311F312031213122312331243125312631273128312902D902C902CA02C7
+02CB000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+26
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000246024612462246324642465246624672468246924742475247624772478
+2479247A247B247C247D21702171217221732174217521762177217821790000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+42
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00002400240124022403240424052406240724082409240A240B240C240D240E
+240F2410241124122413241424152416241724182419241A241B241C241D241E
+241F242100000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+44
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00004E004E594E014E034E434E5D4E864E8C4EBA513F5165516B51E052005201
+529B53155341535C53C84E094E0B4E084E0A4E2B4E3851E14E454E484E5F4E5E
+4E8E4EA15140520352FA534353C953E3571F58EB5915592759735B505B515B53
+5BF85C0F5C225C385C715DDD5DE55DF15DF25DF35DFE5E725EFE5F0B5F13624D
+4E114E104E0D4E2D4E304E394E4B5C394E884E914E954E924E944EA24EC14EC0
+4EC34EC64EC74ECD4ECA4ECB4EC4514351415167516D516E516C519751F60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+45
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000052065207520852FB52FE52FF53165339534853475345535E538453CB53CA
+53CD58EC5929592B592A592D5B545C115C245C3A5C6F5DF45E7B5EFF5F145F15
+5FC362086236624B624E652F6587659765A465B965E566F0670867286B206B62
+6B796BCB6BD46BDB6C0F6C34706B722A7236723B72477259725B72AC738B4E19
+4E164E154E144E184E3B4E4D4E4F4E4E4EE54ED84ED44ED54ED64ED74EE34EE4
+4ED94EDE514551445189518A51AC51F951FA51F8520A52A0529F530553060000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+46
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005317531D4EDF534A534953615360536F536E53BB53EF53E453F353EC53EE
+53E953E853FC53F853F553EB53E653EA53F253F153F053E553ED53FB56DB56DA
+5916592E5931597459765B555B835C3C5DE85DE75DE65E025E035E735E7C5F01
+5F185F175FC5620A625362546252625165A565E6672E672C672A672B672D6B63
+6BCD6C116C106C386C416C406C3E72AF7384738974DC74E67518751F75287529
+7530753175327533758B767D76AE76BF76EE77DB77E277F3793A79BE7A740000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+47
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007ACB4E1E4E1F4E524E534E694E994EA44EA64EA54EFF4F094F194F0A4F15
+4F0D4F104F114F0F4EF24EF64EFB4EF04EF34EFD4F014F0B5149514751465148
+51685171518D51B0521752115212520E521652A3530853215320537053715409
+540F540C540A54105401540B54045411540D54085403540E5406541256E056DE
+56DD573357305728572D572C572F57295919591A59375938598459785983597D
+5979598259815B575B585B875B885B855B895BFA5C165C795DDE5E065E760000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+48
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005E745F0F5F1B5FD95FD6620E620C620D62106263625B6258653665E965E8
+65EC65ED66F266F36709673D6734673167356B216B646B7B6C166C5D6C576C59
+6C5F6C606C506C556C616C5B6C4D6C4E7070725F725D767E7AF97C737CF87F36
+7F8A7FBD80018003800C80128033807F8089808B808C81E381EA81F381FC820C
+821B821F826E8272827E866B8840884C8863897F96214E324EA84F4D4F4F4F47
+4F574F5E4F344F5B4F554F304F504F514F3D4F3A4F384F434F544F3C4F460000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+49
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00004F634F5C4F604F2F4F4E4F364F594F5D4F484F5A514C514B514D517551B6
+51B7522552245229522A522852AB52A952AA52AC532353735375541D542D541E
+543E5426544E542754465443543354485442541B5429544A5439543B5438542E
+543554365420543C54405431542B541F542C56EA56F056E456EB574A57515740
+574D5747574E573E5750574F573B58EF593E599D599259A8599E59A359995996
+598D59A45993598A59A55B5D5B5C5B5A5B5B5B8C5B8B5B8F5C2C5C405C410000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4a
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005C3F5C3E5C905C915C945C8C5DEB5E0C5E8F5E875E8A5EF75F045F1F5F64
+5F625F775F795FD85FCC5FD75FCD5FF15FEB5FF85FEA62126211628462976296
+628062766289626D628A627C627E627962736292626F6298626E629562936291
+62866539653B653865F166F4675F674E674F67506751675C6756675E67496746
+6760675367576B656BCF6C426C5E6C996C816C886C896C856C9B6C6A6C7A6C90
+6C706C8C6C686C966C926C7D6C836C726C7E6C746C866C766C8D6C946C980000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4b
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006C827076707C707D707872627261726072C472C27396752C752B75377538
+768276EF77E379C179C079BF7A767CFB7F5580968093809D8098809B809A80B2
+826F8292828B828D898B89D28A008C378C468C558C9D8D648D708DB38EAB8ECA
+8F9B8FB08FC28FC68FC58FC45DE1909190A290AA90A690A3914991C691CC9632
+962E9631962A962C4E264E564E734E8B4E9B4E9E4EAB4EAC4F6F4F9D4F8D4F73
+4F7F4F6C4F9B4F8B4F864F834F704F754F884F694F7B4F964F7E4F8F4F910000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4c
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00004F7A515451525155516951775176517851BD51FD523B52385237523A5230
+522E5236524152BE52BB5352535453535351536653775378537953D653D453D7
+547354755496547854955480547B5477548454925486547C549054715476548C
+549A54625468548B547D548E56FA57835777576A5769576157665764577C591C
+5949594759485944595459BE59BB59D459B959AE59D159C659D059CD59CB59D3
+59CA59AF59B359D259C55B5F5B645B635B975B9A5B985B9C5B995B9B5C1A0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005C485C455C465CB75CA15CB85CA95CAB5CB15CB35E185E1A5E165E155E1B
+5E115E785E9A5E975E9C5E955E965EF65F265F275F295F805F815F7F5F7C5FDD
+5FE05FFD5FF55FFF600F6014602F60356016602A6015602160276029602B601B
+62166215623F623E6240627F62C962CC62C462BF62C262B962D262DB62AB62D3
+62D462CB62C862A862BD62BC62D062D962C762CD62B562DA62B162D862D662D7
+62C662AC62CE653E65A765BC65FA66146613660C66066602660E6600660F0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4e
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006615660A6607670D670B676D678B67956771679C677367776787679D6797
+676F6770677F6789677E67906775679A6793677C676A67726B236B666B676B7F
+6C136C1B6CE36CE86CF36CB16CCC6CE56CB36CBD6CBE6CBC6CE26CAB6CD56CD3
+6CB86CC46CB96CC16CAE6CD76CC56CF16CBF6CBB6CE16CDB6CCA6CAC6CEF6CDC
+6CD66CE07095708E7092708A7099722C722D723872487267726972C072CE72D9
+72D772D073A973A8739F73AB73A5753D759D7599759A768476C276F276F40000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4f
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000077E577FD793E7940794179C979C87A7A7A797AFA7CFE7F547F8C7F8B8005
+80BA80A580A280B180A180AB80A980B480AA80AF81E581FE820D82B3829D8299
+82AD82BD829F82B982B182AC82A582AF82B882A382B082BE82B7864E8671521D
+88688ECB8FCE8FD48FD190B590B890B190B691C791D195779580961C9640963F
+963B9644964296B996E89752975E4E9F4EAD4EAE4FE14FB54FAF4FBF4FE04FD1
+4FCF4FDD4FC34FB64FD84FDF4FCA4FD74FAE4FD04FC44FC24FDA4FCE4FDE0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+50
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00004FB751575192519151A0524E5243524A524D524C524B524752C752C952C3
+52C1530D5357537B539A53DB54AC54C054A854CE54C954B854A654B354C754C2
+54BD54AA54C154C454C854AF54AB54B154BB54A954A754BF56FF5782578B57A0
+57A357A257CE57AE579359555951594F594E595059DC59D859FF59E359E85A03
+59E559EA59DA59E65A0159FB5B695BA35BA65BA45BA25BA55C015C4E5C4F5C4D
+5C4B5CD95CD25DF75E1D5E255E1F5E7D5EA05EA65EFA5F085F2D5F655F880000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+51
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005F855F8A5F8B5F875F8C5F896012601D60206025600E6028604D60706068
+606260466043606C606B606A6064624162DC6316630962FC62ED630162EE62FD
+630762F162F762EF62EC62FE62F463116302653F654565AB65BD65E26625662D
+66206627662F661F66286631662466F767FF67D367F167D467D067EC67B667AF
+67F567E967EF67C467D167B467DA67E567B867CF67DE67F367B067D967E267DD
+67D26B6A6B836B866BB56BD26BD76C1F6CC96D0B6D326D2A6D416D256D0C0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+52
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006D316D1E6D176D3B6D3D6D3E6D366D1B6CF56D396D276D386D296D2E6D35
+6D0E6D2B70AB70BA70B370AC70AF70AD70B870AE70A472307272726F727472E9
+72E072E173B773CA73BB73B273CD73C073B3751A752D754F754C754E754B75AB
+75A475A575A275A3767876867687768876C876C676C376C5770176F976F87709
+770B76FE76FC770777DC78027814780C780D794679497948794779B979BA79D1
+79D279CB7A7F7A817AFF7AFD7C7D7D027D057D007D097D077D047D067F380000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+53
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007F8E7FBF8010800D8011803680D680E580DA80C380C480CC80E180DB80CE
+80DE80E480DD81F4822282E78303830582E382DB82E6830482E58302830982D2
+82D782F1830182DC82D482D182DE82D382DF82EF830686508679867B867A884D
+886B898189D48A088A028A038C9E8CA08D748D738DB48ECD8ECC8FF08FE68FE2
+8FEA8FE58FED8FEB8FE48FE890CA90CE90C190C3914B914A91CD95829650964B
+964C964D9762976997CB97ED97F3980198A898DB98DF999699994E584EB30000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+54
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000500C500D50234FEF502650254FF8502950165006503C501F501A50125011
+4FFA5000501450284FF15021500B501950184FF34FEE502D502A4FFE502B5009
+517C51A451A551A251CD51CC51C651CB5256525C5254525B525D532A537F539F
+539D53DF54E855105501553754FC54E554F2550654FA551454E954ED54E15509
+54EE54EA54E65527550754FD550F5703570457C257D457CB57C35809590F5957
+5958595A5A115A185A1C5A1F5A1B5A1359EC5A205A235A295A255A0C5A090000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+55
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005B6B5C585BB05BB35BB65BB45BAE5BB55BB95BB85C045C515C555C505CED
+5CFD5CFB5CEA5CE85CF05CF65D015CF45DEE5E2D5E2B5EAB5EAD5EA75F315F92
+5F915F9060596063606560506055606D6069606F6084609F609A608D6094608C
+60856096624762F3630862FF634E633E632F635563426346634F6349633A6350
+633D632A632B6328634D634C65486549659965C165C566426649664F66436652
+664C6645664166F8671467156717682168386848684668536839684268540000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+56
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000682968B36817684C6851683D67F468506840683C6843682A684568136818
+68416B8A6B896BB76C236C276C286C266C246CF06D6A6D956D886D876D666D78
+6D776D596D936D6C6D896D6E6D5A6D746D696D8C6D8A6D796D856D656D9470CA
+70D870E470D970C870CF7239727972FC72F972FD72F872F7738673ED740973EE
+73E073EA73DE7554755D755C755A755975BE75C575C775B275B375BD75BC75B9
+75C275B8768B76B076CA76CD76CE7729771F7720772877E97830782778380000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+57
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000781D783478377825782D7820781F7832795579507960795F7956795E795D
+7957795A79E479E379E779DF79E679E979D87A847A887AD97B067B117C897D21
+7D177D0B7D0A7D207D227D147D107D157D1A7D1C7D0D7D197D1B7F3A7F5F7F94
+7FC57FC1800680048018801580198017803D803F80F1810280F0810580ED80F4
+810680F880F3810880FD810A80FC80EF81ED81EC82008210822A822B8228822C
+82BB832B83528354834A83388350834983358334834F83328339833683170000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+58
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000083408331832883438654868A86AA869386A486A9868C86A3869C88708877
+88818882887D88798A188A108A0E8A0C8A158A0A8A178A138A168A0F8A118C48
+8C7A8C798CA18CA28D778EAC8ED28ED48ECF8FB1900190068FF790008FFA8FF4
+90038FFD90058FF8909590E190DD90E29152914D914C91D891DD91D791DC91D9
+9583966296639661965B965D96649658965E96BB98E299AC9AA89AD89B259B32
+9B3C4E7E507A507D505C50475043504C505A504950655076504E505550750000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+59
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000050745077504F500F506F506D515C519551F0526A526F52D252D952D852D5
+5310530F5319533F5340533E53C366FC5546556A55665544555E55615543554A
+55315556554F5555552F55645538552E555C552C55635533554155575708570B
+570957DF5805580A580657E057E457FA5802583557F757F9592059625A365A41
+5A495A665A6A5A405A3C5A625A5A5A465A4A5B705BC75BC55BC45BC25BBF5BC6
+5C095C085C075C605C5C5C5D5D075D065D0E5D1B5D165D225D115D295D140000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5a
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005D195D245D275D175DE25E385E365E335E375EB75EB85EB65EB55EBE5F35
+5F375F575F6C5F695F6B5F975F995F9E5F985FA15FA05F9C607F60A3608960A0
+60A860CB60B460E660BD60C560BB60B560DC60BC60D860D560C660DF60B860DA
+60C7621A621B624863A063A76372639663A263A563776367639863AA637163A9
+63896383639B636B63A863846388639963A163AC6392638F6380637B63696368
+637A655D6556655165596557555F654F655865556554659C659B65AC65CF0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5b
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000065CB65CC65CE665D665A666466686666665E66F952D7671B688168AF68A2
+689368B5687F687668B168A7689768B0688368C468AD688668856894689D68A8
+689F68A168826B326BBA6BEB6BEC6C2B6D8E6DBC6DF36DD96DB26DE16DCC6DE4
+6DFB6DFA6E056DC76DCB6DAF6DD16DAE6DDE6DF96DB86DF76DF56DC56DD26E1A
+6DB56DDA6DEB6DD86DEA6DF16DEE6DE86DC66DC46DAA6DEC6DBF6DE670F97109
+710A70FD70EF723D727D7281731C731B73167313731973877405740A74030000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5c
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000740673FE740D74E074F674F7751C75227565756675627570758F75D475D5
+75B575CA75CD768E76D476D276DB7737773E773C77367738773A786B7843784E
+79657968796D79FB7A927A957B207B287B1B7B2C7B267B197B1E7B2E7C927C97
+7C957D467D437D717D2E7D397D3C7D407D307D337D447D2F7D427D327D317F3D
+7F9E7F9A7FCC7FCE7FD2801C804A8046812F81168123812B8129813081248202
+8235823782368239838E839E8398837883A2839683BD83AB8392838A83930000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000838983A08377837B837C838683A786555F6A86C786C086B686C486B586C6
+86CB86B186AF86C98853889E888888AB88928896888D888B8993898F8A2A8A1D
+8A238A258A318A2D8A1F8A1B8A228C498C5A8CA98CAC8CAB8CA88CAA8CA78D67
+8D668DBE8DBA8EDB8EDF9019900D901A90179023901F901D90109015901E9020
+900F90229016901B901490E890ED90FD915791CE91F591E691E391E791ED91E9
+9589966A9675967396789670967496769677966C96C096EA96E97AE07ADF0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5e
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000980298039B5A9CE59E759E7F9EA59EBB50A2508D50855099509150805096
+5098509A670051F1527252745275526952DE52DD52DB535A53A5557B558055A7
+557C558A559D55985582559C55AA55945587558B558355B355AE559F553E55B2
+559A55BB55AC55B1557E558955AB5599570D582F582A58345824583058315821
+581D582058F958FA59605A775A9A5A7F5A925A9B5AA75B735B715BD25BCC5BD3
+5BD05C0A5C0B5C315D4C5D505D345D475DFD5E455E3D5E405E435E7E5ECA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5f
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005EC15EC25EC45F3C5F6D5FA95FAA5FA860D160E160B260B660E0611C6123
+60FA611560F060FB60F4616860F1610E60F6610961006112621F624963A3638C
+63CF63C063E963C963C663CD63D263E363D063E163D663ED63EE637663F463EA
+63DB645263DA63F9655E6566656265636591659065AF666E667066746676666F
+6691667A667E667766FE66FF671F671D68FA68D568E068D868D7690568DF68F5
+68EE68E768F968D268F268E368CB68CD690D6912690E68C968DA696E68FB0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+60
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006B3E6B3A6B3D6B986B966BBC6BEF6C2E6C2F6C2C6E2F6E386E546E216E32
+6E676E4A6E206E256E236E1B6E5B6E586E246E566E6E6E2D6E266E6F6E346E4D
+6E3A6E2C6E436E1D6E3E6ECB6E896E196E4E6E636E446E726E696E5F7119711A
+7126713071217136716E711C724C728472807336732573347329743A742A7433
+74227425743574367434742F741B7426742875257526756B756A75E275DB75E3
+75D975D875DE75E0767B767C7696769376B476DC774F77ED785D786C786F0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+61
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007A0D7A087A0B7A057A007A987A977A967AE57AE37B497B567B467B507B52
+7B547B4D7B4B7B4F7B517C9F7CA57D5E7D507D687D557D2B7D6E7D727D617D66
+7D627D707D7355847FD47FD5800B8052808581558154814B8151814E81398146
+813E814C815381748212821C83E9840383F8840D83E083C5840B83C183EF83F1
+83F48457840A83F0840C83CC83FD83F283CA8438840E840483DC840783D483DF
+865B86DF86D986ED86D486DB86E486D086DE885788C188C288B1898389960000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+62
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008A3B8A608A558A5E8A3C8A418A548A5B8A508A468A348A3A8A368A568C61
+8C828CAF8CBC8CB38CBD8CC18CBB8CC08CB48CB78CB68CBF8CB88D8A8D858D81
+8DCE8DDD8DCB8DDA8DD18DCC8DDB8DC68EFB8EF88EFC8F9C902E903590319038
+90329036910290F5910990FE9163916591CF9214921592239209921E920D9210
+920792119594958F958B959195939592958E968A968E968B967D96859686968D
+9672968496C196C596C496C696C796EF96F297CC98059806980898E798EA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+63
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000098EF98E998F298ED99AE99AD9EC39ECD9ED14E8250AD50B550B250B350C5
+50BE50AC50B750BB50AF50C7527F5277527D52DF52E652E452E252E3532F55DF
+55E855D355E655CE55DC55C755D155E355E455EF55DA55E155C555C655E555C9
+57125713585E585158585857585A5854586B584C586D584A58625852584B5967
+5AC15AC95ACC5ABE5ABD5ABC5AB35AC25AB25D695D6F5E4C5E795EC95EC85F12
+5F595FAC5FAE611A610F6148611F60F3611B60F961016108614E614C61440000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+64
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000614D613E61346127610D61066137622162226413643E641E642A642D643D
+642C640F641C6414640D6436641664176406656C659F65B06697668966876688
+669666846698668D67036994696D695A697769606954697569306982694A6968
+696B695E695369796986695D6963695B6B476B726BC06BBF6BD36BFD6EA26EAF
+6ED36EB66EC26E906E9D6EC76EC56EA56E986EBC6EBA6EAB6ED16E966E9C6EC4
+6ED46EAA6EA76EB4714E71597169716471497167715C716C7166714C71650000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+65
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000715E714671687156723A725273377345733F733E746F745A7455745F745E
+7441743F7459745B745C75767578760075F0760175F275F175FA75FF75F475F3
+76DE76DF775B776B7766775E77637779776A776C775C77657768776277EE788E
+78B078977898788C7889787C78917893787F797A797F7981842C79BD7A1C7A1A
+7A207A147A1F7A1E7A9F7AA07B777BC07B607B6E7B677CB17CB37CB57D937D79
+7D917D817D8F7D5B7F6E7F697F6A7F727FA97FA87FA480568058808680840000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+66
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008171817081788165816E8173816B8179817A81668205824784828477843D
+843184758466846B8449846C845B843C8435846184638469846D8446865E865C
+865F86F9871387088707870086FE86FB870287038706870A885988DF88D488D9
+88DC88D888DD88E188CA88D588D2899C89E38A6B8A728A738A668A698A708A87
+8A7C8A638AA08A718A858A6D8A628A6E8A6C8A798A7B8A3E8A688C628C8A8C89
+8CCA8CC78CC88CC48CB28CC38CC28CC58DE18DDF8DE88DEF8DF38DFA8DEA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+67
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008DE48DE68EB28F038F098EFE8F0A8F9F8FB2904B904A905390429054903C
+905590509047904F904E904D9051903E904191129117916C916A916991C99237
+92579238923D9240923E925B924B9264925192349249924D92459239923F925A
+959896989694969596CD96CB96C996CA96F796FB96F996F69756977497769810
+98119813980A9812980C98FC98F498FD98FE99B399B199B49AE19CE99E829F0E
+9F139F2050E750EE50E550D650ED50DA50D550CF50D150F150CE50E951620000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+68
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000051F352835282533153AD55FE5600561B561755FD561456065609560D560E
+55F75616561F5608561055F6571857165875587E58835893588A58795885587D
+58FD592559225924596A59695AE15AE65AE95AD75AD65AD85AE35B755BDE5BE7
+5BE15BE55BE65BE85BE25BE45BDF5C0D5C625D845D875E5B5E635E555E575E54
+5ED35ED65F0A5F465F705FB96147613F614B617761626163615F615A61586175
+622A64876458645464A46478645F647A645164676434646D647B657265A10000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+69
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000065D765D666A266A8669D699C69A8699569C169AE69D369CB699B69B769BB
+69AB69B469D069CD69AD69CC69A669C369A36B496B4C6C336F336F146EFE6F13
+6EF46F296F3E6F206F2C6F0F6F026F226EFF6EEF6F066F316F386F326F236F15
+6F2B6F2F6F886F2A6EEC6F016EF26ECC6EF771947199717D718A71847192723E
+729272967344735074647463746A7470746D750475917627760D760B76097613
+76E176E37784777D777F776178C1789F78A778B378A978A3798E798F798D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6a
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007A2E7A317AAA7AA97AED7AEF7BA17B957B8B7B757B977B9D7B947B8F7BB8
+7B877B847CB97CBD7CBE7DBB7DB07D9C7DBD7DBE7DA07DCA7DB47DB27DB17DBA
+7DA27DBF7DB57DB87DAD7DD27DC77DAC7F707FE07FE17FDF805E805A80878150
+8180818F8188818A817F818281E781FA82078214821E824B84C984BF84C684C4
+8499849E84B2849C84CB84B884C084D3849084BC84D184CA873F871C873B8722
+87258734871887558737872988F3890288F488F988F888FD88E8891A88EF0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6b
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008AA68A8C8A9E8AA38A8D8AA18A938AA48AAA8AA58AA88A988A918A9A8AA7
+8C6A8C8D8C8C8CD38CD18CD28D6B8D998D958DFC8F148F128F158F138FA39060
+9058905C90639059905E9062905D905B91199118911E91759178917791749278
+92AC9280928592989296927B9293929C92A8927C929195A195A895A995A395A5
+95A49699969C969B96CC96D29700977C978597F69817981898AF98B199039905
+990C990999C19AAF9AB09AE69B419B429CF49CF69CF39EBC9F3B9F4A51040000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6c
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000510050FB50F550F9510251085109510551DC528752885289528D528A52F0
+53B2562E563B56395632563F563456295653564E565756745636562F56305880
+589F589E58B3589C58AE58A958A6596D5B095AFB5B0B5AF55B0C5B085BEE5BEC
+5BE95BEB5C645C655D9D5D945E625E5F5E615EE25EDA5EDF5EDD5EE35EE05F48
+5F715FB75FB561766167616E615D61556182617C6170616B617E61A7619061AB
+618E61AC619A61A4619461AE622E6469646F6479649E64B26488649064B00000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000064A56493649564A9649264AE64AD64AB649A64AC649964A264B365756577
+657866AE66AB66B466B16A236A1F69E86A016A1E6A1969FD6A216A136A0A69F3
+6A026A0569ED6A116B506B4E6BA46BC56BC66F3F6F7C6F846F516F666F546F86
+6F6D6F5B6F786F6E6F8E6F7A6F706F646F976F586ED56F6F6F606F5F719F71AC
+71B171A87256729B734E73577469748B7483747E7480757F76207629761F7624
+762676217622769A76BA76E4778E7787778C7791778B78CB78C578BA78CA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6e
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000078BE78D578BC78D07A3F7A3C7A407A3D7A377A3B7AAF7AAE7BAD7BB17BC4
+7BB47BC67BC77BC17BA07BCC7CCA7DE07DF47DEF7DFB7DD87DEC7DDD7DE87DE3
+7DDA7DDE7DE97D9E7DD97DF27DF97F757F777FAF7FE98026819B819C819D81A0
+819A81988517853D851A84EE852C852D8513851185238521851484EC852584FF
+8506878287748776876087668778876887598757874C8753885B885D89108907
+891289138915890A8ABC8AD28AC78AC48A958ACB8AF88AB28AC98AC28ABF0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6f
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008AB08AD68ACD8AB68AB98ADB8C4C8C4E8C6C8CE08CDE8CE68CE48CEC8CED
+8CE28CE38CDC8CEA8CE18D6D8D9F8DA38E2B8E108E1D8E228E0F8E298E1F8E21
+8E1E8EBA8F1D8F1B8F1F8F298F268F2A8F1C8F1E8F259069906E9068906D9077
+9130912D9127913191879189918B918392C592BB92B792EA92E492C192B392BC
+92D292C792F092B295AD95B197049706970797099760978D978B978F9821982B
+981C98B3990A99139912991899DD99D099DF99DB99D199D599D299D99AB70000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+70
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009AEE9AEF9B279B459B449B779B6F9D069D099D039EA99EBE9ECE58A89F52
+51125118511451105115518051AA51DD5291529352F35659566B567956695664
+5678566A566856655671566F566C5662567658C158BE58C758C5596E5B1D5B34
+5B785BF05C0E5F4A61B2619161A9618A61CD61B661BE61CA61C8623064C564C1
+64CB64BB64BC64DA64C464C764C264CD64BF64D264D464BE657466C666C966B9
+66C466C766B86A3D6A386A3A6A596A6B6A586A396A446A626A616A4B6A470000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+71
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006A356A5F6A486B596B776C056FC26FB16FA16FC36FA46FC16FA76FB36FC0
+6FB96FB66FA66FA06FB471BE71C971D071D271C871D571B971CE71D971DC71C3
+71C47368749C74A37498749F749E74E2750C750D76347638763A76E776E577A0
+779E779F77A578E878DA78EC78E779A67A4D7A4E7A467A4C7A4B7ABA7BD97C11
+7BC97BE47BDB7BE17BE97BE67CD57CD67E0A7E117E087E1B7E237E1E7E1D7E09
+7E107F797FB27FF07FF17FEE802881B381A981A881FB820882588259854A0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+72
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000855985488568856985438549856D856A855E8783879F879E87A2878D8861
+892A89328925892B892189AA89A68AE68AFA8AEB8AF18B008ADC8AE78AEE8AFE
+8B018B028AF78AED8AF38AF68AFC8C6B8C6D8C938CF48E448E318E348E428E39
+8E358F3B8F2F8F388F338FA88FA69075907490789072907C907A913491929320
+933692F89333932F932292FC932B9304931A9310932693219315932E931995BB
+96A796A896AA96D5970E97119716970D9713970F975B975C9766979898300000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+73
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009838983B9837982D9839982499109928991E991B9921991A99ED99E299F1
+9AB89ABC9AFB9AED9B289B919D159D239D269D289D129D1B9ED89ED49F8D9F9C
+512A511F5121513252F5568E5680569056855687568F58D558D358D158CE5B30
+5B2A5B245B7A5C375C685DBC5DBA5DBD5DB85E6B5F4C5FBD61C961C261C761E6
+61CB6232623464CE64CA64D864E064F064E664EC64F164E264ED6582658366D9
+66D66A806A946A846AA26A9C6ADB6AA36A7E6A976A906AA06B5C6BAE6BDA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+74
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006C086FD86FF16FDF6FE06FDB6FE46FEB6FEF6F806FEC6FE16FE96FD56FEE
+6FF071E771DF71EE71E671E571ED71EC71F471E0723572467370737274A974B0
+74A674A876467642764C76EA77B377AA77B077AC77A777AD77EF78F778FA78F4
+78EF790179A779AA7A577ABF7C077C0D7BFE7BF77C0C7BE07CE07CDC7CDE7CE2
+7CDF7CD97CDD7E2E7E3E7E467E377E327E437E2B7E3D7E317E457E417E347E39
+7E487E357E3F7E2F7F447FF37FFC807180728070806F807381C681C381BA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+75
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000081C281C081BF81BD81C981BE81E88209827185AA8584857E859C85918594
+85AF859B858785A8858A85A6866787C087D187B387D287C687AB87BB87BA87C8
+87CB893B893689448938893D89AC8B0E8B178B198B1B8B0A8B208B1D8B048B10
+8C418C3F8C738CFA8CFD8CFC8CF88CFB8DA88E498E4B8E488E4A8F448F3E8F42
+8F458F3F907F907D9084908190829080913991A3919E919C934D938293289375
+934A9365934B9318937E936C935B9370935A935495CA95CB95CC95C895C60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+76
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000096B196B896D6971C971E97A097D3984698B699359A0199FF9BAE9BAB9BAA
+9BAD9D3B9D3F9E8B9ECF9EDE9EDC9EDD9EDB9F3E9F4B53E2569556AE58D958D8
+5B385F5E61E3623364F464F264FE650664FA64FB64F765B766DC67266AB36AAC
+6AC36ABB6AB86AC26AAE6AAF6B5F6B786BAF7009700B6FFE70066FFA7011700F
+71FB71FC71FE71F87377737574A774BF751576567658765277BD77BF77BB77BC
+790E79AE7A617A627A607AC47AC57C2B7C277C2A7C1E7C237C217CE77E540000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+77
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007E557E5E7E5A7E617E527E597F487FF97FFB8077807681CD81CF820A85CF
+85A985CD85D085C985B085BA85B987EF87EC87F287E0898689B289F48B288B39
+8B2C8B2B8C508D058E598E638E668E648E5F8E558EC08F498F4D908790839088
+91AB91AC91D09394938A939693A293B393AE93AC93B09398939A939795D495D6
+95D095D596E296DC96D996DB96DE972497A397A697AD97F9984D984F984C984E
+985398BA993E993F993D992E99A59A0E9AC19B039B069B4F9B4E9B4D9BCA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+78
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009BC99BFD9BC89BC09D519D5D9D609EE09F159F2C513356A556A858DE58DF
+58E25BF59F905EEC61F261F761F661F56500650F66E066DD6AE56ADD6ADA6AD3
+701B701F7028701A701D701570187206720D725872A27378737A74BD74CA74E3
+75877586765F766177C7791979B17A6B7A697C3E7C3F7C387C3D7C377C407E6B
+7E6D7E797E697E6A7E737F857FB67FB97FB881D885E985DD85EA85D585E485E5
+85F787FB8805880D87F987FE8960895F8956895E8B418B5C8B588B498B5A0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+79
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008B4E8B4F8B468B598D088D0A8E7C8E728E878E768E6C8E7A8E748F548F4E
+8FAD908A908B91B191AE93E193D193DF93C393C893DC93DD93D693E293CD93D8
+93E493D793E895DC96B496E3972A9727976197DC97FB985E9858985B98BC9945
+99499A169A199B0D9BE89BE79BD69BDB9D899D619D729D6A9D6C9E929E979E93
+9EB452F856B756B656B456BC58E45B405B435B7D5BF65DC961F861FA65186514
+651966E667276AEC703E703070327210737B74CF766276657926792A792C0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+7a
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000792B7AC77AF67C4C7C437C4D7CEF7CF08FAE7E7D7E7C7E827F4C800081DA
+826685FB85F9861185FA8606860B8607860A88148815896489BA89F88B708B6C
+8B668B6F8B5F8B6B8D0F8D0D8E898E818E858E8291B491CB9418940393FD95E1
+973098C49952995199A89A2B9A309A379A359C139C0D9E799EB59EE89F2F9F5F
+9F639F615137513856C156C056C259145C6C5DCD61FC61FE651D651C659566E9
+6AFB6B046AFA6BB2704C721B72A774D674D4766977D37C507E8F7E8C7FBC0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+7b
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008617862D861A882388228821881F896A896C89BD8B748B778B7D8D138E8A
+8E8D8E8B8F5F8FAF91BA942E94339435943A94389432942B95E2973897399732
+97FF9867986599579A459A439A409A3E9ACF9B549B519C2D9C259DAF9DB49DC2
+9DB89E9D9EEF9F199F5C9F669F67513C513B56C856CA56C95B7F5DD45DD25F4E
+61FF65246B0A6B6170517058738074E4758A766E766C79B37C607C5F807E807D
+81DF8972896F89FC8B808D168D178E918E938F619148944494519452973D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+7c
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000973E97C397C1986B99559A559A4D9AD29B1A9C499C319C3E9C3B9DD39DD7
+9F349F6C9F6A9F9456CC5DD662006523652B652A66EC6B1074DA7ACA7C647C63
+7C657E937E967E9481E28638863F88318B8A9090908F9463946094649768986F
+995C9A5A9A5B9A579AD39AD49AD19C549C579C569DE59E9F9EF456D158E9652C
+705E7671767277D77F507F888836883988628B938B928B9682778D1B91C0946A
+97429748974497C698709A5F9B229B589C5F9DF99DFA9E7C9E7D9F079F770000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+7d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009F725EF36B1670637C6C7C6E883B89C08EA191C1947294709871995E9AD6
+9B239ECC706477DA8B9A947797C99A629A657E9C8B9C8EAA91C5947D947E947C
+9C779C789EF78C54947F9E1A72289A6A9B319E1B9E1E7C720000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
diff --git a/ext/Encode/Encode/cns11643-2.enc b/ext/Encode/Encode/cns11643-2.enc
index fa5ad1015c..186b748621 100644
--- a/ext/Encode/Encode/cns11643-2.enc
+++ b/ext/Encode/Encode/cns11643-2.enc
@@ -1,1397 +1,1397 @@
-# Encoding file: cns11643-2, double-byte
-D
-7244 0 82
-21
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00004E424E5C51F5531A53824E074E0C4E474E8D56D75C6E5F734E0F51874E0E
-4E2E4E934EC24EC94EC8519852FC536C53B957205903592C5C105DFF65E16BB3
-6BCC6C14723F4E314E3C4EE84EDC4EE94EE14EDD4EDA520C5209531C534C5722
-57235917592F5B815B845C125C3B5C745C735E045E805E825FC9620962506C15
-6C366C436C3F6C3B72AE72B0738A79B8808A961E4F0E4F184F2C4EF54F144EF1
-4F004EF74F084F1D4F024F054F224F134F044EF44F1251B15213521052A60000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-22
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005322531F534D538A540756E156DF572E572A5734593C5980597C5985597B
-597E5977597F5B565C155C255C7C5C7A5C7B5C7E5DDF5E755E845F025F1A5F74
-5FD55FD45FCF625C625E626462616266626262596260625A6265653765EF65EE
-673E67396738673B673A673F673C67336C186C466C526C5C6C4F6C4A6C546C4B
-6C4C7071725E72B472B5738E752A767F7A757F518278827C8280827D827F864D
-897E909990979098909B909496229624962096234F564F3B4F624F494F530000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-23
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00004F644F3E4F674F524F5F4F414F584F2D4F334F3F4F61518F51B9521C521E
-522152AD52AE530953635372538E538F54305437542A545454455419541C5425
-5418543D544F544154285424544756EE56E756E557415745574C5749574B5752
-5906594059A6599859A05997598E59A25990598F59A759A15B8E5B925C285C2A
-5C8D5C8F5C885C8B5C895C925C8A5C865C935C955DE05E0A5E0E5E8B5E895E8C
-5E885E8D5F055F1D5F785F765FD25FD15FD05FED5FE85FEE5FF35FE15FE40000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-24
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005FE35FFA5FEF5FF75FFB60005FF4623A6283628C628E628F629462876271
-627B627A6270628162886277627D6272627465F065F465F365F265F567456747
-67596755674C6748675D674D675A674B6BD06C196C1A6C786C676C6B6C846C8B
-6C8F6C716C6F6C696C9A6C6D6C876C956C9C6C666C736C656C7B6C8E7074707A
-726372BF72BD72C372C672C172BA72C573957397739373947392753A75397594
-75957681793D80348095809980908092809C8290828F8285828E829182930000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-25
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000828A828382848C788FC98FBF909F90A190A5909E90A790A096309628962F
-962D4E334F984F7C4F854F7D4F804F874F764F744F894F844F774F4C4F974F6A
-4F9A4F794F814F784F904F9C4F944F9E4F924F824F954F6B4F6E519E51BC51BE
-5235523252335246523152BC530A530B533C539253945487547F548154915482
-5488546B547A547E5465546C54745466548D546F546154605498546354675464
-56F756F9576F5772576D576B57715770577657805775577B5773577457620000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-26
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005768577D590C594559B559BA59CF59CE59B259CC59C159B659BC59C359D6
-59B159BD59C059C859B459C75B625B655B935B955C445C475CAE5CA45CA05CB5
-5CAF5CA85CAC5C9F5CA35CAD5CA25CAA5CA75C9D5CA55CB65CB05CA65E175E14
-5E195F285F225F235F245F545F825F7E5F7D5FDE5FE5602D602660196032600B
-6034600A60176033601A601E602C6022600D6010602E60136011600C6009601C
-6214623D62AD62B462D162BE62AA62B662CA62AE62B362AF62BB62A962B00000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-27
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000062B8653D65A865BB660965FC66046612660865FB6603660B660D660565FD
-6611661066F6670A6785676C678E67926776677B6798678667846774678D678C
-677A679F679167996783677D67816778677967946B256B806B7E6BDE6C1D6C93
-6CEC6CEB6CEE6CD96CB66CD46CAD6CE76CB76CD06CC26CBA6CC36CC66CED6CF2
-6CD26CDD6CB46C8A6C9D6C806CDE6CC06D306CCD6CC76CB06CF96CCF6CE96CD1
-709470987085709370867084709170967082709A7083726A72D672CB72D80000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-28
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000072C972DC72D272D472DA72CC72D173A473A173AD73A673A273A073AC739D
-74DD74E8753F7540753E758C759876AF76F376F176F076F577F877FC77F977FB
-77FA77F77942793F79C57A787A7B7AFB7C757CFD8035808F80AE80A380B880B5
-80AD822082A082C082AB829A8298829B82B582A782AE82BC829E82BA82B482A8
-82A182A982C282A482C382B682A28670866F866D866E8C568FD28FCB8FD38FCD
-8FD68FD58FD790B290B490AF90B390B09639963D963C963A96434FCD4FC50000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-29
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00004FD34FB24FC94FCB4FC14FD44FDC4FD94FBB4FB34FDB4FC74FD64FBA4FC0
-4FB94FEC5244524952C052C2533D537C539753965399539854BA54A154AD54A5
-54CF54C3830D54B754AE54D654B654C554C654A0547054BC54A254BE547254DE
-54B057B5579E579F57A4578C5797579D579B57945798578F579957A5579A5795
-58F4590D595359E159DE59EE5A0059F159DD59FA59FD59FC59F659E459F259F7
-59DB59E959F359F559E059FE59F459ED5BA85C4C5CD05CD85CCC5CD75CCB0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-2a
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005CDB5CDE5CDA5CC95CC75CCA5CD65CD35CD45CCF5CC85CC65CCE5CDF5CF8
-5DF95E215E225E235E205E245EB05EA45EA25E9B5EA35EA55F075F2E5F565F86
-6037603960546072605E6045605360476049605B604C60406042605F60246044
-60586066606E6242624362CF630D630B62F5630E630362EB62F9630F630C62F8
-62F663006313631462FA631562FB62F06541654365AA65BF6636662166326635
-661C662666226633662B663A661D66346639662E670F671067C167F267C80000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-2b
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000067BA67DC67BB67F867D867C067B767C567EB67E467DF67B567CD67B367F7
-67F667EE67E367C267B967CE67E767F067B267FC67C667ED67CC67AE67E667DB
-67FA67C967CA67C367EA67CB6B286B826B846BB66BD66BD86BE06C206C216D28
-6D346D2D6D1F6D3C6D3F6D126D0A6CDA6D336D046D196D3A6D1A6D116D006D1D
-6D426D016D186D376D036D0F6D406D076D206D2C6D086D226D096D1070B7709F
-70BE70B170B070A170B470B570A972417249724A726C72707273726E72CA0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-2c
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000072E472E872EB72DF72EA72E672E3738573CC73C273C873C573B973B673B5
-73B473EB73BF73C773BE73C373C673B873CB74EC74EE752E7547754875A775AA
-767976C47708770377047705770A76F776FB76FA77E777E87806781178127805
-7810780F780E780978037813794A794C794B7945794479D579CD79CF79D679CE
-7A807A7E7AD17B007B017C7A7C787C797C7F7C807C817D037D087D017F587F91
-7F8D7FBE8007800E800F8014803780D880C780E080D180C880C280D080C50000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-2d
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000080E380D980DC80CA80D580C980CF80D780E680CD81FF8221829482D982FE
-82F9830782E8830082D5833A82EB82D682F482EC82E182F282F5830C82FB82F6
-82F082EA82E482E082FA82F382ED86778674867C86738841884E8867886A8869
-89D38A048A078D728FE38FE18FEE8FE090F190BD90BF90D590C590BE90C790CB
-90C891D491D39654964F96519653964A964E501E50055007501350225030501B
-4FF54FF450335037502C4FF64FF75017501C502050275035502F5031500E0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-2e
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000515A5194519351CA51C451C551C851CE5261525A5252525E525F52555262
-52CD530E539E552654E25517551254E754F354E4551A54FF5504550854EB5511
-550554F1550A54FB54F754F854E0550E5503550B5701570257CC583257D557D2
-57BA57C657BD57BC57B857B657BF57C757D057B957C1590E594A5A195A165A2D
-5A2E5A155A0F5A175A0A5A1E5A335B6C5BA75BAD5BAC5C035C565C545CEC5CFF
-5CEE5CF15CF75D005CF95E295E285EA85EAE5EAA5EAC5F335F305F67605D0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-2f
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000605A6067604160A26088608060926081609D60836095609B60976087609C
-608E6219624662F263106356632C634463456336634363E46339634B634A633C
-632963416334635863546359632D63476333635A63516338635763406348654A
-654665C665C365C465C2664A665F6647665167126713681F681A684968326833
-683B684B684F68166831681C6835682B682D682F684E68446834681D68126814
-68266828682E684D683A682568206B2C6B2F6B2D6B316B346B6D80826B880000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-30
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006BE66BE46BE86BE36BE26BE76C256D7A6D636D646D766D0D6D616D926D58
-6D626D6D6D6F6D916D8D6DEF6D7F6D866D5E6D676D606D976D706D7C6D5F6D82
-6D986D2F6D686D8B6D7E6D806D846D166D836D7B6D7D6D756D9070DC70D370D1
-70DD70CB7F3970E270D770D270DE70E070D470CD70C570C670C770DA70CE70E1
-7242727872777276730072FA72F472FE72F672F372FB730173D373D973E573D6
-73BC73E773E373E973DC73D273DB73D473DD73DA73D773D873E874DE74DF0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-31
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000074F474F57521755B755F75B075C175BB75C475C075BF75B675BA768A76C9
-771D771B7710771377127723771177157719771A772277277823782C78227835
-782F7828782E782B782178297833782A78317954795B794F795C795379527951
-79EB79EC79E079EE79ED79EA79DC79DE79DD7A867A897A857A8B7A8C7A8A7A87
-7AD87B107B047B137B057B0F7B087B0A7B0E7B097B127C847C917C8A7C8C7C88
-7C8D7C857D1E7D1D7D117D0E7D187D167D137D1F7D127D0F7D0C7F5C7F610000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-32
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007F5E7F607F5D7F5B7F967F927FC37FC27FC08016803E803980FA80F280F9
-80F5810180FB81008201822F82258333832D83448319835183258356833F8341
-8326831C83228342834E831B832A8308833C834D8316832483208337832F8329
-83478345834C8353831E832C834B832783488653865286A286A88696868D8691
-869E868786978686868B869A868586A5869986A186A786958698868E869D8690
-869488438844886D88758876887288808871887F886F8883887E8874887C0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-33
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008A128C478C578C7B8CA48CA38D768D788DB58DB78DB68ED18ED38FFE8FF5
-90028FFF8FFB90048FFC8FF690D690E090D990DA90E390DF90E590D890DB90D7
-90DC90E49150914E914F91D591E291DA965C965F96BC98E39ADF9B2F4E7F5070
-506A5061505E50605053504B505D50725048504D5041505B504A506250155045
-505F5069506B5063506450465040506E50735057505151D0526B526D526C526E
-52D652D3532D539C55755576553C554D55505534552A55515562553655350000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-34
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000553055525545550C55325565554E55395548552D553B5540554B570A5707
-57FB581457E257F657DC57F4580057ED57FD580857F8580B57F357CF580757EE
-57E357F257E557EC57E1580E57FC581057E75801580C57F157E957F0580D5804
-595C5A605A585A555A675A5E5A385A355A6D5A505A5F5A655A6C5A535A645A57
-5A435A5D5A525A445A5B5A485A8E5A3E5A4D5A395A4C5A705A695A475A515A56
-5A425A5C5B725B6E5BC15BC05C595D1E5D0B5D1D5D1A5D205D0C5D285D0D0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-35
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005D265D255D0F5D305D125D235D1F5D2E5E3E5E345EB15EB45EB95EB25EB3
-5F365F385F9B5F965F9F608A6090608660BE60B060BA60D360D460CF60E460D9
-60DD60C860B160DB60B760CA60BF60C360CD60C063326365638A6382637D63BD
-639E63AD639D639763AB638E636F63876390636E63AF6375639C636D63AE637C
-63A4633B639F6378638563816391638D6370655365CD66656661665B6659665C
-66626718687968876890689C686D686E68AE68AB6956686F68A368AC68A90000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-36
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006875687468B2688F68776892687C686B687268AA68806871687E689B6896
-688B68A0688968A46878687B6891688C688A687D6B366B336B376B386B916B8F
-6B8D6B8E6B8C6C2A6DC06DAB6DB46DB36E746DAC6DE96DE26DB76DF66DD46E00
-6DC86DE06DDF6DD66DBE6DE56DDC6DDD6DDB6DF46DCA6DBD6DED6DF06DBA6DD5
-6DC26DCF6DC96DD06DF26DD36DFD6DD76DCD6DE36DBB70FA710D70F7711770F4
-710C70F0710470F3711070FC70FF71067113710070F870F6710B7102710E0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-37
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000727E727B727C727F731D7317730773117318730A730872FF730F731E7388
-73F673F873F57404740173FD7407740073FA73FC73FF740C740B73F474087564
-756375CE75D275CF75CB75CC75D175D0768F768976D37739772F772D77317732
-77347733773D7725773B7735784878527849784D784A784C7826784578507964
-79677969796A7963796B796179BB79FA79F879F679F77A8F7A947A907B357B3B
-7B347B257B307B227B247B337B187B2A7B1D7B317B2B7B2D7B2F7B327B380000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-38
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007B1A7B237C947C987C967CA37D357D3D7D387D367D3A7D457D2C7D297D41
-7D477D3E7D3F7D4A7D3B7D287F637F957F9C7F9D7F9B7FCA7FCB7FCD7FD07FD1
-7FC77FCF7FC9801F801E801B804780438048811881258119811B812D811F812C
-811E812181158127811D8122821182388233823A823482328274839083A383A8
-838D837A837383A48374838F8381839583998375839483A9837D8383838C839D
-839B83AA838B837E83A583AF8388839783B0837F83A6838783AE837686590000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-39
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000865686BF86B786C286C186C586BA86B086C886B986B386B886CC86B486BB
-86BC86C386BD86BE88528889889588A888A288AA889A889188A1889F889888A7
-8899889B889788A488AC888C8893888E898289D689D989D58A308A278A2C8A1E
-8C398C3B8C5C8C5D8C7D8CA58D7D8D7B8D798DBC8DC28DB98DBF8DC18ED88EDE
-8EDD8EDC8ED78EE08EE19024900B9011901C900C902190EF90EA90F090F490F2
-90F390D490EB90EC90E991569158915A9153915591EC91F491F191F391F80000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-3a
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000091E491F991EA91EB91F791E891EE957A95869588967C966D966B9671966F
-96BF976A980498E59997509B50955094509E508B50A35083508C508E509D5068
-509C509250825087515F51D45312531153A453A7559155A855A555AD55775645
-55A255935588558F55B5558155A3559255A4557D558C55A6557F559555A1558E
-570C582958375819581E58275823582857F558485825581C581B5833583F5836
-582E58395838582D582C583B59615AAF5A945A9F5A7A5AA25A9E5A785AA60000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-3b
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005A7C5AA55AAC5A955AAE5A375A845A8A5A975A835A8B5AA95A7B5A7D5A8C
-5A9C5A8F5A935A9D5BEA5BCD5BCB5BD45BD15BCA5BCE5C0C5C305D375D435D6B
-5D415D4B5D3F5D355D515D4E5D555D335D3A5D525D3D5D315D595D425D395D49
-5D385D3C5D325D365D405D455E445E415F585FA65FA55FAB60C960B960CC60E2
-60CE60C4611460F2610A6116610560F5611360F860FC60FE60C161036118611D
-611060FF6104610B624A639463B163B063CE63E563E863EF63C3649D63F30000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-3c
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000063CA63E063F663D563F263F5646163DF63BE63DD63DC63C463D863D363C2
-63C763CC63CB63C863F063D763D965326567656A6564655C65686565658C659D
-659E65AE65D065D2667C666C667B668066716679666A66726701690C68D36904
-68DC692A68EC68EA68F1690F68D668F768EB68E468F66913691068F368E16907
-68CC6908697068B4691168EF68C6691468F868D068FD68FC68E8690B690A6917
-68CE68C868DD68DE68E668F468D1690668D468E96915692568C76B396B3B0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-3d
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006B3F6B3C6B946B976B996B956BBD6BF06BF26BF36C306DFC6E466E476E1F
-6E496E886E3C6E3D6E456E626E2B6E3F6E416E5D6E736E1C6E336E4B6E406E51
-6E3B6E036E2E6E5E6E686E5C6E616E316E286E606E716E6B6E396E226E306E53
-6E656E276E786E646E776E556E796E526E666E356E366E5A7120711E712F70FB
-712E71317123712571227132711F7128713A711B724B725A7288728972867285
-728B7312730B733073227331733373277332732D732673237335730C742E0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-3e
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000742C7430742B7416741A7421742D743174247423741D74297420743274FB
-752F756F756C75E775DA75E175E675DD75DF75E475D77695769276DA77467747
-7744774D7745774A774E774B774C77DE77EC786078647865785C786D7871786A
-786E787078697868785E786279747973797279707A027A0A7A037A0C7A047A99
-7AE67AE47B4A7B477B447B487B4C7B4E7B407B587B457CA27C9E7CA87CA17D58
-7D6F7D637D537D567D677D6A7D4F7D6D7D5C7D6B7D527D547D697D517D5F0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-3f
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007D4E7F3E7F3F7F657F667FA27FA07FA17FD78051804F805080FE80D48143
-814A8152814F8147813D814D813A81E681EE81F781F881F98204823C823D823F
-8275833B83CF83F9842383C083E8841283E783E483FC83F6841083C683C883EB
-83E383BF840183DD83E583D883FF83E183CB83CE83D683F583C98409840F83DE
-8411840683C283F383D583FA83C783D183EA8413839A83C383EC83EE83C483FB
-83D783E2841B83DB83FE86D886E286E686D386E386DA86EA86DD86EB86DC0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-40
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000086EC86E986D786E886D188488856885588BA88D788B988B888C088BE88B6
-88BC88B788BD88B2890188C989958998899789DD89DA89DB8A4E8A4D8A398A59
-8A408A578A588A448A458A528A488A518A4A8A4C8A4F8C5F8C818C808CBA8CBE
-8CB08CB98CB58D848D808D898DD88DD38DCD8DC78DD68DDC8DCF8DD58DD98DC8
-8DD78DC58EEF8EF78EFA8EF98EE68EEE8EE58EF58EE78EE88EF68EEB8EF18EEC
-8EF48EE9902D9034902F9106912C910490FF90FC910890F990FB910191000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-41
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000091079105910391619164915F916291609201920A92259203921A9226920F
-920C9200921291FF91FD9206920492279202921C92249219921792059216957B
-958D958C95909687967E968896899683968096C296C896C396F196F0976C9770
-976E980798A998EB9CE69EF94E834E844EB650BD50BF50C650AE50C450CA50B4
-50C850C250B050C150BA50B150CB50C950B650B851D7527A5278527B527C55C3
-55DB55CC55D055CB55CA55DD55C055D455C455E955BF55D2558D55CF55D50000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-42
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000055E255D655C855F255CD55D955C25714585358685864584F584D5849586F
-5855584E585D58595865585B583D5863587158FC5AC75AC45ACB5ABA5AB85AB1
-5AB55AB05ABF5AC85ABB5AC65AB75AC05ACA5AB45AB65ACD5AB95A905BD65BD8
-5BD95C1F5C335D715D635D4A5D655D725D6C5D5E5D685D675D625DF05E4F5E4E
-5E4A5E4D5E4B5EC55ECC5EC65ECB5EC75F405FAF5FAD60F76149614A612B6145
-61366132612E6146612F614F612961406220916862236225622463C563F10000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-43
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000063EB6410641264096420642464336443641F641564186439643764226423
-640C64266430642864416435642F640A641A644064256427640B63E7641B642E
-6421640E656F659265D36686668C66956690668B668A66996694667867206966
-695F6938694E69626971693F6945696A6939694269576959697A694869496935
-696C6933693D696568F06978693469696940696F69446976695869416974694C
-693B694B6937695C694F695169326952692F697B693C6B466B456B436B420000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-44
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006B486B416B9B6BFB6BFC6BF96BF76BF86E9B6ED66EC86E8F6EC06E9F6E93
-6E946EA06EB16EB96EC66ED26EBD6EC16E9E6EC96EB76EB06ECD6EA66ECF6EB2
-6EBE6EC36EDC6ED86E996E926E8E6E8D6EA46EA16EBF6EB36ED06ECA6E976EAE
-6EA3714771547152716371607141715D716271727178716A7161714271587143
-714B7170715F715071537144714D715A724F728D728C72917290728E733C7342
-733B733A7340734A73497444744A744B7452745174577440744F7450744E0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-45
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000074427446744D745474E174FF74FE74FD751D75797577698375EF760F7603
-75F775FE75FC75F975F8761075FB75F675ED75F575FD769976B576DD7755775F
-776077527756775A7769776777547759776D77E07887789A7894788F78847895
-7885788678A178837879789978807896787B797C7982797D79797A117A187A19
-7A127A177A157A227A137A1B7A107AA37AA27A9E7AEB7B667B647B6D7B747B69
-7B727B657B737B717B707B617B787B767B637CB27CB47CAF7D887D867D800000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-46
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007D8D7D7F7D857D7A7D8E7D7B7D837D7C7D8C7D947D847D7D7D927F6D7F6B
-7F677F687F6C7FA67FA57FA77FDB7FDC8021816481608177815C8169815B8162
-81726721815E81768167816F81448161821D8249824482408242824584F1843F
-845684768479848F848D846584518440848684678430844D847D845A84598474
-8473845D8507845E8437843A8434847A8443847884328445842983D9844B842F
-8442842D845F84708439844E844C8452846F84C5848E843B8447843684330000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-47
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008468847E8444842B84608454846E8450870B870486F7870C86FA86D686F5
-874D86F8870E8709870186F6870D870588D688CB88CD88CE88DE88DB88DA88CC
-88D08985899B89DF89E589E489E189E089E289DC89E68A768A868A7F8A618A3F
-8A778A828A848A758A838A818A748A7A8C3C8C4B8C4A8C658C648C668C868C84
-8C858CCC8D688D698D918D8C8D8E8D8F8D8D8D938D948D908D928DF08DE08DEC
-8DF18DEE8DD08DE98DE38DE28DE78DF28DEB8DF48F068EFF8F018F008F050000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-48
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008F078F088F028F0B9052903F90449049903D9110910D910F911191169114
-910B910E916E916F924892529230923A926692339265925E9283922E924A9246
-926D926C924F92609267926F92369261927092319254926392509272924E9253
-924C92569232959F959C959E959B969296939691969796CE96FA96FD96F896F5
-9773977797789772980F980D980E98AC98F698F999AF99B299B099B59AAD9AAB
-9B5B9CEA9CED9CE79E809EFD50E650D450D750E850F350DB50EA50DD50E40000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-49
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000050D350EC50F050EF50E350E051D85280528152E952EB533053AC56275615
-560C561255FC560F561C56015613560255FA561D560455FF55F95889587C5890
-589858865881587F5874588B587A58875891588E587658825888587B5894588F
-58FE596B5ADC5AEE5AE55AD55AEA5ADA5AED5AEB5AF35AE25AE05ADB5AEC5ADE
-5ADD5AD95AE85ADF5B775BE05BE35C635D825D805D7D5D865D7A5D815D775D8A
-5D895D885D7E5D7C5D8D5D795D7F5E585E595E535ED85ED15ED75ECE5EDC0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4a
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005ED55ED95ED25ED45F445F435F6F5FB6612C61286141615E617161736152
-61536172616C618061746154617A615B6165613B616A6161615662296227622B
-642B644D645B645D6474647664726473647D6475646664A6644E6482645E645C
-644B645364606450647F643F646C646B645964656477657365A066A166A0669F
-67056704672269B169B669C969A069CE699669B069AC69BC69916999698E69A7
-698D69A969BE69AF69BF69C469BD69A469D469B969CA699A69CF69B369930000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4b
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000069AA69A1699E69D96997699069C269B569A569C66B4A6B4D6B4B6B9E6B9F
-6BA06BC36BC46BFE6ECE6EF56EF16F036F256EF86F376EFB6F2E6F096F4E6F19
-6F1A6F276F186F3B6F126EED6F0A6F366F736EF96EEE6F2D6F406F306F3C6F35
-6EEB6F076F0E6F436F056EFD6EF66F396F1C6EFC6F3A6F1F6F0D6F1E6F086F21
-718771907189718071857182718F717B71867181719772447253729772957293
-7343734D7351734C746274737471747574727467746E750075027503757D0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4c
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000759076167608760C76157611760A761476B87781777C77857782776E7780
-776F777E778378B278AA78B478AD78A8787E78AB789E78A578A078AC78A278A4
-7998798A798B799679957994799379977988799279907A2B7A4A7A307A2F7A28
-7A267AA87AAB7AAC7AEE7B887B9C7B8A7B917B907B967B8D7B8C7B9B7B8E7B85
-7B9852847B997BA47B827CBB7CBF7CBC7CBA7DA77DB77DC27DA37DAA7DC17DC0
-7DC57D9D7DCE7DC47DC67DCB7DCC7DAF7DB97D967DBC7D9F7DA67DAE7DA90000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4d
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007DA17DC97F737FE27FE37FE57FDE8024805D805C8189818681838187818D
-818C818B8215849784A484A1849F84BA84CE84C284AC84AE84AB84B984B484C1
-84CD84AA849A84B184D0849D84A784BB84A2849484C784CC849B84A984AF84A8
-84D6849884B684CF84A084D784D484D284DB84B084918661873387238728876B
-8740872E871E87218719871B8743872C8741873E874687208732872A872D873C
-8712873A8731873587428726872787388724871A8730871188F788E788F10000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4e
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000088F288FA88FE88EE88FC88F688FB88F088EC88EB899D89A1899F899E89E9
-89EB89E88AAB8A998A8B8A928A8F8A968C3D8C688C698CD58CCF8CD78D968E09
-8E028DFF8E0D8DFD8E0A8E038E078E068E058DFE8E008E048F108F118F0E8F0D
-9123911C91209122911F911D911A91249121911B917A91729179917392A592A4
-9276929B927A92A0929492AA928D92A6929A92AB92799297927F92A392EE928E
-9282929592A2927D928892A1928A9286928C929992A7927E928792A9929D0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-4f
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000928B922D969E96A196FF9758977D977A977E978397809782977B97849781
-977F97CE97CD981698AD98AE990299009907999D999C99C399B999BB99BA99C2
-99BD99C79AB19AE39AE79B3E9B3F9B609B619B5F9CF19CF29CF59EA750FF5103
-513050F85106510750F650FE510B510C50FD510A528B528C52F152EF56485642
-564C56355641564A564956465658565A56405633563D562C563E5638562A563A
-571A58AB589D58B158A058A358AF58AC58A558A158FF5AFF5AF45AFD5AF70000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-50
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005AF65B035AF85B025AF95B015B075B055B0F5C675D995D975D9F5D925DA2
-5D935D955DA05D9C5DA15D9A5D9E5E695E5D5E605E5C7DF35EDB5EDE5EE15F49
-5FB2618B6183617961B161B061A26189619B619361AF61AD619F619261AA61A1
-618D616661B3622D646E6470649664A064856497649C648F648B648A648C64A3
-649F646864B164986576657A6579657B65B265B366B566B066A966B266B766AA
-66AF6A006A066A1769E569F86A1569F169E46A2069FF69EC69E26A1B6A1D0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-51
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000069FE6A2769F269EE6A1469F769E76A406A0869E669FB6A0D69FC69EB6A09
-6A046A186A256A0F69F66A266A0769F46A166B516BA56BA36BA26BA66C016C00
-6BFF6C026F416F266F7E6F876FC66F926F8D6F896F8C6F626F4F6F856F5A6F96
-6F766F6C6F826F556F726F526F506F576F946F936F5D6F006F616F6B6F7D6F67
-6F906F536F8B6F696F7F6F956F636F776F6A6F7B71B271AF719B71B071A0719A
-71A971B5719D71A5719E71A471A171AA719C71A771B37298729A735873520000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-52
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000735E735F7360735D735B7361735A7359736274877489748A74867481747D
-74857488747C747975087507757E7625761E7619761D761C7623761A7628761B
-769C769D769E769B778D778F7789778878CD78BB78CF78CC78D178CE78D478C8
-78C378C478C9799A79A179A0799C79A2799B6B767A397AB27AB47AB37BB77BCB
-7BBE7BAC7BCE7BAF7BB97BCA7BB57CC57CC87CCC7CCB7DF77DDB7DEA7DE77DD7
-7DE17E037DFA7DE67DF67DF17DF07DEE7DDF7F767FAC7FB07FAD7FED7FEB0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-53
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007FEA7FEC7FE67FE88064806781A3819F819E819581A2819981978216824F
-825382528250824E82518524853B850F85008529850E8509850D851F850A8527
-851C84FB852B84FA8508850C84F4852A84F2851584F784EB84F384FC851284EA
-84E9851684FE8528851D852E850284FD851E84F68531852684E784E884F084EF
-84F9851885208530850B8519852F8662875687638764877787E1877387588754
-875B87528761875A8751875E876D876A8750874E875F875D876F876C877A0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-54
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000876E875C8765874F877B8775876287678769885A8905890C8914890B8917
-89188919890689168911890E890989A289A489A389ED89F089EC8ACF8AC68AB8
-8AD38AD18AD48AD58ABB8AD78ABE8AC08AC58AD88AC38ABA8ABD8AD98C3E8C4D
-8C8F8CE58CDF8CD98CE88CDA8CDD8CE78DA08D9C8DA18D9B8E208E238E258E24
-8E2E8E158E1B8E168E118E198E268E278E148E128E188E138E1C8E178E1A8F2C
-8F248F188F1A8F208F238F168F1790739070906F9067906B912F912B91290000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-55
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000912A91329126912E91859186918A918191829184918092D092C392C492C0
-92D992B692CF92F192DF92D892E992D792DD92CC92EF92C292E892CA92C892CE
-92E692CD92D592C992E092DE92E792D192D392B592E1932592C692B4957C95AC
-95AB95AE95B096A496A296D3970597089702975A978A978E978897D097CF981E
-981D9826982998289820981B982798B2990898FA9911991499169917991599DC
-99CD99CF99D399D499CE99C999D699D899CB99D799CC9AB39AEC9AEB9AF30000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-56
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009AF29AF19B469B439B679B749B719B669B769B759B709B689B649B6C9CFC
-9CFA9CFD9CFF9CF79D079D009CF99CFB9D089D059D049E839ED39F0F9F10511C
-51135117511A511151DE533453E156705660566E567356665663566D5672565E
-5677571C571B58C858BD58C958BF58BA58C258BC58C65B175B195B1B5B215B14
-5B135B105B165B285B1A5B205B1E5BEF5DAC5DB15DA95DA75DB55DB05DAE5DAA
-5DA85DB25DAD5DAF5DB45E675E685E665E6F5EE95EE75EE65EE85EE55F4B0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-57
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00005FBC5FBB619D61A8619661C561B461C661C161CC61BA61BF61B8618C64D7
-64D664D064CF64C964BD648964C364DB64F364D96533657F657C65A266C866BE
-66C066CA66CB66CF66BD66BB66BA66CC67236A346A666A496A676A326A686A3E
-6A5D6A6D6A766A5B6A516A286A5A6A3B6A3F6A416A6A6A646A506A4F6A546A6F
-6A696A606A3C6A5E6A566A556A4D6A4E6A466B556B546B566BA76BAA6BAB6BC8
-6BC76C046C036C066FAD6FCB6FA36FC76FBC6FCE6FC86F5E6FC46FBD6F9E0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-58
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006FCA6FA870046FA56FAE6FBA6FAC6FAA6FCF6FBF6FB86FA26FC96FAB6FCD
-6FAF6FB26FB071C571C271BF71B871D671C071C171CB71D471CA71C771CF71BD
-71D871BC71C671DA71DB729D729E736973667367736C7365736B736A747F749A
-74A074947492749574A1750B7580762F762D7631763D7633763C763576327630
-76BB76E6779A779D77A1779C779B77A277A377957799779778DD78E978E578EA
-78DE78E378DB78E178E278ED78DF78E079A47A447A487A477AB67AB87AB50000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-59
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007AB17AB77BDE7BE37BE77BDD7BD57BE57BDA7BE87BF97BD47BEA7BE27BDC
-7BEB7BD87BDF7CD27CD47CD77CD07CD17E127E217E177E0C7E1F7E207E137E0E
-7E1C7E157E1A7E227E0B7E0F7E167E0D7E147E257E247F437F7B7F7C7F7A7FB1
-7FEF802A8029806C81B181A681AE81B981B581AB81B081AC81B481B281B781A7
-81F282558256825785568545856B854D85538561855885408546856485418562
-8544855185478563853E855B8571854E856E8575855585678560858C85660000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5a
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000855D85548565856C86638665866487A4879B878F87978793879287888781
-879687988779878787A3878587908791879D87848794879C879A8789891E8926
-8930892D892E89278931892289298923892F892C891F89F18AE08AE28AF28AF4
-8AF58ADD8B148AE48ADF8AF08AC88ADE8AE18AE88AFF8AEF8AFB8C918C928C90
-8CF58CEE8CF18CF08CF38D6C8D6E8DA58DA78E338E3E8E388E408E458E368E3C
-8E3D8E418E308E3F8EBD8F368F2E8F358F328F398F378F3490769079907B0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5b
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000908690FA913391359136919391909191918D918F9327931E9308931F9306
-930F937A9338933C931B9323931293019346932D930E930D92CB931D92FA9313
-92F992F793349302932492FF932993399335932A9314930C930B92FE93099300
-92FB931695BC95CD95BE95B995BA95B695BF95B595BD96A996D4970B97129710
-97999797979497F097F89835982F98329924991F99279929999E99EE99EC99E5
-99E499F099E399EA99E999E79AB99ABF9AB49ABB9AF69AFA9AF99AF79B330000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5c
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009B809B859B879B7C9B7E9B7B9B829B939B929B909B7A9B959B7D9B889D25
-9D179D209D1E9D149D299D1D9D189D229D109D199D1F9E889E869E879EAE9EAD
-9ED59ED69EFA9F129F3D51265125512251245120512952F45693568C568D5686
-56845683567E5682567F568158D658D458CF58D25B2D5B255B325B235B2C5B27
-5B265B2F5B2E5B7B5BF15BF25DB75E6C5E6A5FBE61C361B561BC61E761E061E5
-61E461E861DE64EF64E964E364EB64E464E86581658065B665DA66D26A8D0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5d
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006A966A816AA56A896A9F6A9B6AA16A9E6A876A936A8E6A956A836AA86AA4
-6A916A7F6AA66A9A6A856A8C6A926B5B6BAD6C096FCC6FA96FF46FD46FE36FDC
-6FED6FE76FE66FDE6FF26FDD6FE26FE871E171F171E871F271E471F071E27373
-736E736F749774B274AB749074AA74AD74B174A574AF751075117512750F7584
-764376487649764776A476E977B577AB77B277B777B677B477B177A877F078F3
-78FD790278FB78FC78FF78F2790578F978FE790479AB79A87A5C7A5B7A560000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5e
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00007A587A547A5A7ABE7AC07AC17C057C0F7BF27C007BFF7BFB7C0E7BF47C0B
-7BF37C027C097C037C017BF87BFD7C067BF07BF17C107C0A7CE87E2D7E3C7E42
-7E3398487E387E2A7E497E407E477E297E4C7E307E3B7E367E447E3A7F457F7F
-7F7E7F7D7FF47FF2802C81BB81C481CC81CA81C581C781BC81E9825B825A825C
-85838580858F85A7859585A0858B85A3857B85A4859A859E8577857C858985A1
-857A85788557858E85968586858D8599859D858185A285828588858585790000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-5f
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000857685988590859F866887BE87AA87AD87C587B087AC87B987B587BC87AE
-87C987C387C287CC87B787AF87C487CA87B487B687BF87B887BD87DE87B28935
-8933893C893E894189528937894289AD89AF89AE89F289F38B1E8B188B168B11
-8B058B0B8B228B0F8B128B158B078B0D8B088B068B1C8B138B1A8C4F8C708C72
-8C718C6F8C958C948CF98D6F8E4E8E4D8E538E508E4C8E478F438F409085907E
-9138919A91A2919B9199919F91A1919D91A093A1938393AF9364935693470000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-60
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000937C9358935C93769349935093519360936D938F934C936A937993579355
-9352934F93719377937B9361935E93639367934E935995C795C095C995C395C5
-95B796AE96B096AC9720971F9718971D9719979A97A1979C979E979D97D597D4
-97F198419844984A9849984598439925992B992C992A99339932992F992D9931
-9930999899A399A19A0299FA99F499F799F999F899F699FB99FD99FE99FC9A03
-9ABE9AFE9AFD9B019AFC9B489B9A9BA89B9E9B9B9BA69BA19BA59BA49B860000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-61
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009BA29BA09BAF9D339D419D679D369D2E9D2F9D319D389D309D459D429D43
-9D3E9D379D409D3D7FF59D2D9E8A9E899E8D9EB09EC89EDA9EFB9EFF9F249F23
-9F229F549FA05131512D512E5698569C5697569A569D569959705B3C5C695C6A
-5DC05E6D5E6E61D861DF61ED61EE61F161EA61F061EB61D661E964FF650464FD
-64F86501650364FC659465DB66DA66DB66D86AC56AB96ABD6AE16AC66ABA6AB6
-6AB76AC76AB46AAD6B5E6BC96C0B7007700C700D700170057014700E6FFF0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-62
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000070006FFB70266FFC6FF7700A720171FF71F9720371FD737674B874C074B5
-74C174BE74B674BB74C275147513765C76647659765076537657765A76A676BD
-76EC77C277BA790C79137914790979107912791179AD79AC7A5F7C1C7C297C19
-7C207C1F7C2D7C1D7C267C287C227C257C307E5C7E507E567E637E587E627E5F
-7E517E607E577E537FB57FB37FF77FF8807581D181D281D0825F825E85B485C6
-85C085C385C285B385B585BD85C785C485BF85CB85CE85C885C585B185B60000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-63
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000085D2862485B885B785BE866987E787E687E287DB87EB87EA87E587DF87F3
-87E487D487DC87D387ED87D887E387D787D9880187F487E887DD8953894B894F
-894C89468950895189498B2A8B278B238B338B308B358B478B2F8B3C8B3E8B31
-8B258B378B268B368B2E8B248B3B8B3D8B3A8C428C758C998C988C978CFE8D04
-8D028D008E5C8E628E608E578E568E5E8E658E678E5B8E5A8E618E5D8E698E54
-8F468F478F488F4B9128913A913B913E91A891A591A791AF91AA93B5938C0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-64
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000939293B7939B939D938993A7938E93AA939E93A6939593889399939F9380
-938D93B1939193B293A493A893B493A395D295D395D196B396D796DA5DC296DF
-96D896DD97239722972597AC97AE97A897AB97A497AA97A297A597D797D997D6
-97D897FA98509851985298B89941993C993A9A0F9A0B9A099A0D9A049A119A0A
-9A059A079A069AC09ADC9B089B049B059B299B359B4A9B4C9B4B9BC79BC69BC3
-9BBF9BC19BB59BB89BD39BB69BC49BB99BBD9D5C9D539D4F9D4A9D5B9D4B0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-65
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009D599D569D4C9D579D529D549D5F9D589D5A9E8E9E8C9EDF9F019F009F16
-9F259F2B9F2A9F299F289F4C9F5551345135529652F753B456AB56AD56A656A7
-56AA56AC58DA58DD58DB59125B3D5B3E5B3F5DC35E705FBF61FB65076510650D
-6509650C650E658465DE65DD66DE6AE76AE06ACC6AD16AD96ACB6ADF6ADC6AD0
-6AEB6ACF6ACD6ADE6B606BB06C0C7019702770207016702B7021702270237029
-70177024701C720C720A72077202720572A572A672A472A372A174CB74C50000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-66
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000074B774C37516766077C977CA77C477F1791D791B7921791C7917791E79B0
-7A677A687C337C3C7C397C2C7C3B7CEC7CEA7E767E757E787E707E777E6F7E7A
-7E727E747E687F4B7F4A7F837F867FB77FFD7FFE807881D781D5820B82648261
-826385EB85F185ED85D985E185E885DA85D785EC85F285F885D885DF85E385DC
-85D185F085E685EF85DE85E2880087FA880387F687F78809880C880B880687FC
-880887FF880A88028962895A895B89578961895C8958895D8959898889B70000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-67
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000089B689F68B508B488B4A8B408B538B568B548B4B8B558B518B428B528B57
-8C438C778C768C9A8D068D078D098DAC8DAA8DAD8DAB8E6D8E788E738E6A8E6F
-8E7B8EC28F528F518F4F8F508F538FB49140913F91B091AD93DE93C793CF93C2
-93DA93D093F993EC93CC93D993A993E693CA93D493EE93E393D593C493CE93C0
-93D293A593E7957D95DA95DB96E19729972B972C9728972697B397B797B697DD
-97DE97DF985C9859985D985798BF98BD98BB98BE99489947994399A699A70000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-68
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009A1A9A159A259A1D9A249A1B9A229A209A279A239A1E9A1C9A149AC29B0B
-9B0A9B0E9B0C9B379BEA9BEB9BE09BDE9BE49BE69BE29BF09BD49BD79BEC9BDC
-9BD99BE59BD59BE19BDA9D779D819D8A9D849D889D719D809D789D869D8B9D8C
-9D7D9D6B9D749D759D709D699D859D739D7B9D829D6F9D799D7F9D879D689E94
-9E919EC09EFC9F2D9F409F419F4D9F569F579F58533756B256B556B358E35B45
-5DC65DC75EEE5EEF5FC05FC161F9651765166515651365DF66E866E366E40000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-69
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006AF36AF06AEA6AE86AF96AF16AEE6AEF703C7035702F7037703470317042
-7038703F703A7039702A7040703B703370417213721472A8737D737C74BA76AB
-76AA76BE76ED77CC77CE77CF77CD77F279257923792779287924792979B27A6E
-7A6C7A6D7AF77C497C487C4A7C477C457CEE7E7B7E7E7E817E807FBA7FFF8079
-81DB81D982688269862285FF860185FE861B860085F6860486098605860C85FD
-8819881088118817881388168963896689B989F78B608B6A8B5D8B688B630000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6a
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008B658B678B6D8DAE8E868E888E848F598F568F578F558F588F5A908D9143
-914191B791B591B291B3940B941393FB9420940F941493FE9415941094289419
-940D93F5940093F79407940E9416941293FA940993F8943C940A93FF93FC940C
-93F69411940695DE95E095DF972E972F97B997BB97FD97FE986098629863985F
-98C198C29950994E9959994C994B99539A329A349A319A2C9A2A9A369A299A2E
-9A389A2D9AC79ACA9AC69B109B129B119C0B9C089BF79C059C129BF89C400000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6b
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009C079C0E9C069C179C149C099D9F9D999DA49D9D9D929D989D909D9B9DA0
-9D949D9C9DAA9D979DA19D9A9DA29DA89D9E9DA39DBF9DA99D969DA69DA79E99
-9E9B9E9A9EE59EE49EE79EE69F309F2E9F5B9F609F5E9F5D9F599F91513A5139
-5298529756C356BD56BE5B485B475DCB5DCF5EF161FD651B6B026AFC6B036AF8
-6B0070437044704A7048704970457046721D721A7219737E7517766A77D0792D
-7931792F7C547C537CF27E8A7E877E887E8B7E867E8D7F4D7FBB803081DD0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6c
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00008618862A8626861F8623861C86198627862E862186208629861E86258829
-881D881B88208824881C882B884A896D8969896E896B89FA8B798B788B458B7A
-8B7B8D108D148DAF8E8E8E8C8F5E8F5B8F5D91469144914591B9943F943B9436
-9429943D94309439942A9437942C9440943195E595E495E39735973A97BF97E1
-986498C998C698C0995899569A399A3D9A469A449A429A419A3A9A3F9ACD9B15
-9B179B189B169B3A9B529C2B9C1D9C1C9C2C9C239C289C299C249C219DB70000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6d
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009DB69DBC9DC19DC79DCA9DCF9DBE9DC59DC39DBB9DB59DCE9DB99DBA9DAC
-9DC89DB19DAD9DCC9DB39DCD9DB29E7A9E9C9EEB9EEE9EED9F1B9F189F1A9F31
-9F4E9F659F649F924EB956C656C556CB59715B4B5B4C5DD55DD15EF265216520
-652665226B0B6B086B096C0D7055705670577052721E721F72A9737F74D874D5
-74D974D7766D76AD793579B47A707A717C577C5C7C597C5B7C5A7CF47CF17E91
-7F4F7F8781DE826B863486358633862C86328636882C88288826882A88250000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6e
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000897189BF89BE89FB8B7E8B848B828B868B858B7F8D158E958E948E9A8E92
-8E908E968E978F608F629147944C9450944A944B944F94479445944894499446
-973F97E3986A986998CB9954995B9A4E9A539A549A4C9A4F9A489A4A9A499A52
-9A509AD09B199B2B9B3B9B569B559C469C489C3F9C449C399C339C419C3C9C37
-9C349C329C3D9C369DDB9DD29DDE9DDA9DCB9DD09DDC9DD19DDF9DE99DD99DD8
-9DD69DF59DD59DDD9EB69EF09F359F339F329F429F6B9F959FA2513D52990000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-6f
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-000058E858E759725B4D5DD8882F5F4F62016203620465296525659666EB6B11
-6B126B0F6BCA705B705A7222738273817383767077D47C677C667E95826C863A
-86408639863C8631863B863E88308832882E883389768974897389FE8B8C8B8E
-8B8B8B888C458D198E988F648F6391BC94629455945D9457945E97C497C59800
-9A569A599B1E9B1F9B209C529C589C509C4A9C4D9C4B9C559C599C4C9C4E9DFB
-9DF79DEF9DE39DEB9DF89DE49DF69DE19DEE9DE69DF29DF09DE29DEC9DF40000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-70
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00009DF39DE89DED9EC29ED09EF29EF39F069F1C9F389F379F369F439F4F9F71
-9F709F6E9F6F56D356CD5B4E5C6D652D66ED66EE6B13705F7061705D70607223
-74DB74E577D5793879B779B67C6A7E977F89826D8643883888378835884B8B94
-8B958E9E8E9F8EA08E9D91BE91BD91C2946B9468946996E597469743974797C7
-97E59A5E9AD59B599C639C679C669C629C5E9C609E029DFE9E079E039E069E05
-9E009E019E099DFF9DFD9E049EA09F1E9F469F749F759F7656D4652E65B80000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-71
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-00006B186B196B176B1A7062722672AA77D877D979397C697C6B7CF67E9A7E98
-7E9B7E9981E081E18646864786488979897A897C897B89FF8B988B998EA58EA4
-8EA3946E946D946F9471947397499872995F9C689C6E9C6D9E0B9E0D9E109E0F
-9E129E119EA19EF59F099F479F789F7B9F7A9F79571E70667C6F883C8DB28EA6
-91C394749478947694759A609B2E9C749C739C719C759E149E139EF69F0A9FA4
-706870657CF7866A883E883D883F8B9E8C9C8EA98EC9974B9873987498CC0000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-72
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000996199AB9A649A669A679B249E159E179F4862076B1E7227864C8EA89482
-948094819A699A689E19864B8B9F94839C799EB776759A6B9C7A9E1D7069706A
-72299EA49F7E9F499F9800000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
+# Encoding file: cns11643-2, double-byte
+D
+7244 0 82
+21
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00004E424E5C51F5531A53824E074E0C4E474E8D56D75C6E5F734E0F51874E0E
+4E2E4E934EC24EC94EC8519852FC536C53B957205903592C5C105DFF65E16BB3
+6BCC6C14723F4E314E3C4EE84EDC4EE94EE14EDD4EDA520C5209531C534C5722
+57235917592F5B815B845C125C3B5C745C735E045E805E825FC9620962506C15
+6C366C436C3F6C3B72AE72B0738A79B8808A961E4F0E4F184F2C4EF54F144EF1
+4F004EF74F084F1D4F024F054F224F134F044EF44F1251B15213521052A60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+22
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005322531F534D538A540756E156DF572E572A5734593C5980597C5985597B
+597E5977597F5B565C155C255C7C5C7A5C7B5C7E5DDF5E755E845F025F1A5F74
+5FD55FD45FCF625C625E626462616266626262596260625A6265653765EF65EE
+673E67396738673B673A673F673C67336C186C466C526C5C6C4F6C4A6C546C4B
+6C4C7071725E72B472B5738E752A767F7A757F518278827C8280827D827F864D
+897E909990979098909B909496229624962096234F564F3B4F624F494F530000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+23
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00004F644F3E4F674F524F5F4F414F584F2D4F334F3F4F61518F51B9521C521E
+522152AD52AE530953635372538E538F54305437542A545454455419541C5425
+5418543D544F544154285424544756EE56E756E557415745574C5749574B5752
+5906594059A6599859A05997598E59A25990598F59A759A15B8E5B925C285C2A
+5C8D5C8F5C885C8B5C895C925C8A5C865C935C955DE05E0A5E0E5E8B5E895E8C
+5E885E8D5F055F1D5F785F765FD25FD15FD05FED5FE85FEE5FF35FE15FE40000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+24
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005FE35FFA5FEF5FF75FFB60005FF4623A6283628C628E628F629462876271
+627B627A6270628162886277627D6272627465F065F465F365F265F567456747
+67596755674C6748675D674D675A674B6BD06C196C1A6C786C676C6B6C846C8B
+6C8F6C716C6F6C696C9A6C6D6C876C956C9C6C666C736C656C7B6C8E7074707A
+726372BF72BD72C372C672C172BA72C573957397739373947392753A75397594
+75957681793D80348095809980908092809C8290828F8285828E829182930000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+25
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000828A828382848C788FC98FBF909F90A190A5909E90A790A096309628962F
+962D4E334F984F7C4F854F7D4F804F874F764F744F894F844F774F4C4F974F6A
+4F9A4F794F814F784F904F9C4F944F9E4F924F824F954F6B4F6E519E51BC51BE
+5235523252335246523152BC530A530B533C539253945487547F548154915482
+5488546B547A547E5465546C54745466548D546F546154605498546354675464
+56F756F9576F5772576D576B57715770577657805775577B5773577457620000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+26
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005768577D590C594559B559BA59CF59CE59B259CC59C159B659BC59C359D6
+59B159BD59C059C859B459C75B625B655B935B955C445C475CAE5CA45CA05CB5
+5CAF5CA85CAC5C9F5CA35CAD5CA25CAA5CA75C9D5CA55CB65CB05CA65E175E14
+5E195F285F225F235F245F545F825F7E5F7D5FDE5FE5602D602660196032600B
+6034600A60176033601A601E602C6022600D6010602E60136011600C6009601C
+6214623D62AD62B462D162BE62AA62B662CA62AE62B362AF62BB62A962B00000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+27
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000062B8653D65A865BB660965FC66046612660865FB6603660B660D660565FD
+6611661066F6670A6785676C678E67926776677B6798678667846774678D678C
+677A679F679167996783677D67816778677967946B256B806B7E6BDE6C1D6C93
+6CEC6CEB6CEE6CD96CB66CD46CAD6CE76CB76CD06CC26CBA6CC36CC66CED6CF2
+6CD26CDD6CB46C8A6C9D6C806CDE6CC06D306CCD6CC76CB06CF96CCF6CE96CD1
+709470987085709370867084709170967082709A7083726A72D672CB72D80000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+28
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000072C972DC72D272D472DA72CC72D173A473A173AD73A673A273A073AC739D
+74DD74E8753F7540753E758C759876AF76F376F176F076F577F877FC77F977FB
+77FA77F77942793F79C57A787A7B7AFB7C757CFD8035808F80AE80A380B880B5
+80AD822082A082C082AB829A8298829B82B582A782AE82BC829E82BA82B482A8
+82A182A982C282A482C382B682A28670866F866D866E8C568FD28FCB8FD38FCD
+8FD68FD58FD790B290B490AF90B390B09639963D963C963A96434FCD4FC50000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+29
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00004FD34FB24FC94FCB4FC14FD44FDC4FD94FBB4FB34FDB4FC74FD64FBA4FC0
+4FB94FEC5244524952C052C2533D537C539753965399539854BA54A154AD54A5
+54CF54C3830D54B754AE54D654B654C554C654A0547054BC54A254BE547254DE
+54B057B5579E579F57A4578C5797579D579B57945798578F579957A5579A5795
+58F4590D595359E159DE59EE5A0059F159DD59FA59FD59FC59F659E459F259F7
+59DB59E959F359F559E059FE59F459ED5BA85C4C5CD05CD85CCC5CD75CCB0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2a
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005CDB5CDE5CDA5CC95CC75CCA5CD65CD35CD45CCF5CC85CC65CCE5CDF5CF8
+5DF95E215E225E235E205E245EB05EA45EA25E9B5EA35EA55F075F2E5F565F86
+6037603960546072605E6045605360476049605B604C60406042605F60246044
+60586066606E6242624362CF630D630B62F5630E630362EB62F9630F630C62F8
+62F663006313631462FA631562FB62F06541654365AA65BF6636662166326635
+661C662666226633662B663A661D66346639662E670F671067C167F267C80000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2b
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000067BA67DC67BB67F867D867C067B767C567EB67E467DF67B567CD67B367F7
+67F667EE67E367C267B967CE67E767F067B267FC67C667ED67CC67AE67E667DB
+67FA67C967CA67C367EA67CB6B286B826B846BB66BD66BD86BE06C206C216D28
+6D346D2D6D1F6D3C6D3F6D126D0A6CDA6D336D046D196D3A6D1A6D116D006D1D
+6D426D016D186D376D036D0F6D406D076D206D2C6D086D226D096D1070B7709F
+70BE70B170B070A170B470B570A972417249724A726C72707273726E72CA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2c
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000072E472E872EB72DF72EA72E672E3738573CC73C273C873C573B973B673B5
+73B473EB73BF73C773BE73C373C673B873CB74EC74EE752E7547754875A775AA
+767976C47708770377047705770A76F776FB76FA77E777E87806781178127805
+7810780F780E780978037813794A794C794B7945794479D579CD79CF79D679CE
+7A807A7E7AD17B007B017C7A7C787C797C7F7C807C817D037D087D017F587F91
+7F8D7FBE8007800E800F8014803780D880C780E080D180C880C280D080C50000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000080E380D980DC80CA80D580C980CF80D780E680CD81FF8221829482D982FE
+82F9830782E8830082D5833A82EB82D682F482EC82E182F282F5830C82FB82F6
+82F082EA82E482E082FA82F382ED86778674867C86738841884E8867886A8869
+89D38A048A078D728FE38FE18FEE8FE090F190BD90BF90D590C590BE90C790CB
+90C891D491D39654964F96519653964A964E501E50055007501350225030501B
+4FF54FF450335037502C4FF64FF75017501C502050275035502F5031500E0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2e
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000515A5194519351CA51C451C551C851CE5261525A5252525E525F52555262
+52CD530E539E552654E25517551254E754F354E4551A54FF5504550854EB5511
+550554F1550A54FB54F754F854E0550E5503550B5701570257CC583257D557D2
+57BA57C657BD57BC57B857B657BF57C757D057B957C1590E594A5A195A165A2D
+5A2E5A155A0F5A175A0A5A1E5A335B6C5BA75BAD5BAC5C035C565C545CEC5CFF
+5CEE5CF15CF75D005CF95E295E285EA85EAE5EAA5EAC5F335F305F67605D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2f
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000605A6067604160A26088608060926081609D60836095609B60976087609C
+608E6219624662F263106356632C634463456336634363E46339634B634A633C
+632963416334635863546359632D63476333635A63516338635763406348654A
+654665C665C365C465C2664A665F6647665167126713681F681A684968326833
+683B684B684F68166831681C6835682B682D682F684E68446834681D68126814
+68266828682E684D683A682568206B2C6B2F6B2D6B316B346B6D80826B880000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+30
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006BE66BE46BE86BE36BE26BE76C256D7A6D636D646D766D0D6D616D926D58
+6D626D6D6D6F6D916D8D6DEF6D7F6D866D5E6D676D606D976D706D7C6D5F6D82
+6D986D2F6D686D8B6D7E6D806D846D166D836D7B6D7D6D756D9070DC70D370D1
+70DD70CB7F3970E270D770D270DE70E070D470CD70C570C670C770DA70CE70E1
+7242727872777276730072FA72F472FE72F672F372FB730173D373D973E573D6
+73BC73E773E373E973DC73D273DB73D473DD73DA73D773D873E874DE74DF0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+31
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000074F474F57521755B755F75B075C175BB75C475C075BF75B675BA768A76C9
+771D771B7710771377127723771177157719771A772277277823782C78227835
+782F7828782E782B782178297833782A78317954795B794F795C795379527951
+79EB79EC79E079EE79ED79EA79DC79DE79DD7A867A897A857A8B7A8C7A8A7A87
+7AD87B107B047B137B057B0F7B087B0A7B0E7B097B127C847C917C8A7C8C7C88
+7C8D7C857D1E7D1D7D117D0E7D187D167D137D1F7D127D0F7D0C7F5C7F610000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+32
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007F5E7F607F5D7F5B7F967F927FC37FC27FC08016803E803980FA80F280F9
+80F5810180FB81008201822F82258333832D83448319835183258356833F8341
+8326831C83228342834E831B832A8308833C834D8316832483208337832F8329
+83478345834C8353831E832C834B832783488653865286A286A88696868D8691
+869E868786978686868B869A868586A5869986A186A786958698868E869D8690
+869488438844886D88758876887288808871887F886F8883887E8874887C0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+33
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008A128C478C578C7B8CA48CA38D768D788DB58DB78DB68ED18ED38FFE8FF5
+90028FFF8FFB90048FFC8FF690D690E090D990DA90E390DF90E590D890DB90D7
+90DC90E49150914E914F91D591E291DA965C965F96BC98E39ADF9B2F4E7F5070
+506A5061505E50605053504B505D50725048504D5041505B504A506250155045
+505F5069506B5063506450465040506E50735057505151D0526B526D526C526E
+52D652D3532D539C55755576553C554D55505534552A55515562553655350000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+34
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000553055525545550C55325565554E55395548552D553B5540554B570A5707
+57FB581457E257F657DC57F4580057ED57FD580857F8580B57F357CF580757EE
+57E357F257E557EC57E1580E57FC581057E75801580C57F157E957F0580D5804
+595C5A605A585A555A675A5E5A385A355A6D5A505A5F5A655A6C5A535A645A57
+5A435A5D5A525A445A5B5A485A8E5A3E5A4D5A395A4C5A705A695A475A515A56
+5A425A5C5B725B6E5BC15BC05C595D1E5D0B5D1D5D1A5D205D0C5D285D0D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+35
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005D265D255D0F5D305D125D235D1F5D2E5E3E5E345EB15EB45EB95EB25EB3
+5F365F385F9B5F965F9F608A6090608660BE60B060BA60D360D460CF60E460D9
+60DD60C860B160DB60B760CA60BF60C360CD60C063326365638A6382637D63BD
+639E63AD639D639763AB638E636F63876390636E63AF6375639C636D63AE637C
+63A4633B639F6378638563816391638D6370655365CD66656661665B6659665C
+66626718687968876890689C686D686E68AE68AB6956686F68A368AC68A90000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+36
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006875687468B2688F68776892687C686B687268AA68806871687E689B6896
+688B68A0688968A46878687B6891688C688A687D6B366B336B376B386B916B8F
+6B8D6B8E6B8C6C2A6DC06DAB6DB46DB36E746DAC6DE96DE26DB76DF66DD46E00
+6DC86DE06DDF6DD66DBE6DE56DDC6DDD6DDB6DF46DCA6DBD6DED6DF06DBA6DD5
+6DC26DCF6DC96DD06DF26DD36DFD6DD76DCD6DE36DBB70FA710D70F7711770F4
+710C70F0710470F3711070FC70FF71067113710070F870F6710B7102710E0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+37
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000727E727B727C727F731D7317730773117318730A730872FF730F731E7388
+73F673F873F57404740173FD7407740073FA73FC73FF740C740B73F474087564
+756375CE75D275CF75CB75CC75D175D0768F768976D37739772F772D77317732
+77347733773D7725773B7735784878527849784D784A784C7826784578507964
+79677969796A7963796B796179BB79FA79F879F679F77A8F7A947A907B357B3B
+7B347B257B307B227B247B337B187B2A7B1D7B317B2B7B2D7B2F7B327B380000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+38
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007B1A7B237C947C987C967CA37D357D3D7D387D367D3A7D457D2C7D297D41
+7D477D3E7D3F7D4A7D3B7D287F637F957F9C7F9D7F9B7FCA7FCB7FCD7FD07FD1
+7FC77FCF7FC9801F801E801B804780438048811881258119811B812D811F812C
+811E812181158127811D8122821182388233823A823482328274839083A383A8
+838D837A837383A48374838F8381839583998375839483A9837D8383838C839D
+839B83AA838B837E83A583AF8388839783B0837F83A6838783AE837686590000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+39
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000865686BF86B786C286C186C586BA86B086C886B986B386B886CC86B486BB
+86BC86C386BD86BE88528889889588A888A288AA889A889188A1889F889888A7
+8899889B889788A488AC888C8893888E898289D689D989D58A308A278A2C8A1E
+8C398C3B8C5C8C5D8C7D8CA58D7D8D7B8D798DBC8DC28DB98DBF8DC18ED88EDE
+8EDD8EDC8ED78EE08EE19024900B9011901C900C902190EF90EA90F090F490F2
+90F390D490EB90EC90E991569158915A9153915591EC91F491F191F391F80000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3a
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000091E491F991EA91EB91F791E891EE957A95869588967C966D966B9671966F
+96BF976A980498E59997509B50955094509E508B50A35083508C508E509D5068
+509C509250825087515F51D45312531153A453A7559155A855A555AD55775645
+55A255935588558F55B5558155A3559255A4557D558C55A6557F559555A1558E
+570C582958375819581E58275823582857F558485825581C581B5833583F5836
+582E58395838582D582C583B59615AAF5A945A9F5A7A5AA25A9E5A785AA60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3b
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005A7C5AA55AAC5A955AAE5A375A845A8A5A975A835A8B5AA95A7B5A7D5A8C
+5A9C5A8F5A935A9D5BEA5BCD5BCB5BD45BD15BCA5BCE5C0C5C305D375D435D6B
+5D415D4B5D3F5D355D515D4E5D555D335D3A5D525D3D5D315D595D425D395D49
+5D385D3C5D325D365D405D455E445E415F585FA65FA55FAB60C960B960CC60E2
+60CE60C4611460F2610A6116610560F5611360F860FC60FE60C161036118611D
+611060FF6104610B624A639463B163B063CE63E563E863EF63C3649D63F30000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3c
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000063CA63E063F663D563F263F5646163DF63BE63DD63DC63C463D863D363C2
+63C763CC63CB63C863F063D763D965326567656A6564655C65686565658C659D
+659E65AE65D065D2667C666C667B668066716679666A66726701690C68D36904
+68DC692A68EC68EA68F1690F68D668F768EB68E468F66913691068F368E16907
+68CC6908697068B4691168EF68C6691468F868D068FD68FC68E8690B690A6917
+68CE68C868DD68DE68E668F468D1690668D468E96915692568C76B396B3B0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006B3F6B3C6B946B976B996B956BBD6BF06BF26BF36C306DFC6E466E476E1F
+6E496E886E3C6E3D6E456E626E2B6E3F6E416E5D6E736E1C6E336E4B6E406E51
+6E3B6E036E2E6E5E6E686E5C6E616E316E286E606E716E6B6E396E226E306E53
+6E656E276E786E646E776E556E796E526E666E356E366E5A7120711E712F70FB
+712E71317123712571227132711F7128713A711B724B725A7288728972867285
+728B7312730B733073227331733373277332732D732673237335730C742E0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3e
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000742C7430742B7416741A7421742D743174247423741D74297420743274FB
+752F756F756C75E775DA75E175E675DD75DF75E475D77695769276DA77467747
+7744774D7745774A774E774B774C77DE77EC786078647865785C786D7871786A
+786E787078697868785E786279747973797279707A027A0A7A037A0C7A047A99
+7AE67AE47B4A7B477B447B487B4C7B4E7B407B587B457CA27C9E7CA87CA17D58
+7D6F7D637D537D567D677D6A7D4F7D6D7D5C7D6B7D527D547D697D517D5F0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3f
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007D4E7F3E7F3F7F657F667FA27FA07FA17FD78051804F805080FE80D48143
+814A8152814F8147813D814D813A81E681EE81F781F881F98204823C823D823F
+8275833B83CF83F9842383C083E8841283E783E483FC83F6841083C683C883EB
+83E383BF840183DD83E583D883FF83E183CB83CE83D683F583C98409840F83DE
+8411840683C283F383D583FA83C783D183EA8413839A83C383EC83EE83C483FB
+83D783E2841B83DB83FE86D886E286E686D386E386DA86EA86DD86EB86DC0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+40
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000086EC86E986D786E886D188488856885588BA88D788B988B888C088BE88B6
+88BC88B788BD88B2890188C989958998899789DD89DA89DB8A4E8A4D8A398A59
+8A408A578A588A448A458A528A488A518A4A8A4C8A4F8C5F8C818C808CBA8CBE
+8CB08CB98CB58D848D808D898DD88DD38DCD8DC78DD68DDC8DCF8DD58DD98DC8
+8DD78DC58EEF8EF78EFA8EF98EE68EEE8EE58EF58EE78EE88EF68EEB8EF18EEC
+8EF48EE9902D9034902F9106912C910490FF90FC910890F990FB910191000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+41
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000091079105910391619164915F916291609201920A92259203921A9226920F
+920C9200921291FF91FD9206920492279202921C92249219921792059216957B
+958D958C95909687967E968896899683968096C296C896C396F196F0976C9770
+976E980798A998EB9CE69EF94E834E844EB650BD50BF50C650AE50C450CA50B4
+50C850C250B050C150BA50B150CB50C950B650B851D7527A5278527B527C55C3
+55DB55CC55D055CB55CA55DD55C055D455C455E955BF55D2558D55CF55D50000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+42
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000055E255D655C855F255CD55D955C25714585358685864584F584D5849586F
+5855584E585D58595865585B583D5863587158FC5AC75AC45ACB5ABA5AB85AB1
+5AB55AB05ABF5AC85ABB5AC65AB75AC05ACA5AB45AB65ACD5AB95A905BD65BD8
+5BD95C1F5C335D715D635D4A5D655D725D6C5D5E5D685D675D625DF05E4F5E4E
+5E4A5E4D5E4B5EC55ECC5EC65ECB5EC75F405FAF5FAD60F76149614A612B6145
+61366132612E6146612F614F612961406220916862236225622463C563F10000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+43
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000063EB6410641264096420642464336443641F641564186439643764226423
+640C64266430642864416435642F640A641A644064256427640B63E7641B642E
+6421640E656F659265D36686668C66956690668B668A66996694667867206966
+695F6938694E69626971693F6945696A6939694269576959697A694869496935
+696C6933693D696568F06978693469696940696F69446976695869416974694C
+693B694B6937695C694F695169326952692F697B693C6B466B456B436B420000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+44
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006B486B416B9B6BFB6BFC6BF96BF76BF86E9B6ED66EC86E8F6EC06E9F6E93
+6E946EA06EB16EB96EC66ED26EBD6EC16E9E6EC96EB76EB06ECD6EA66ECF6EB2
+6EBE6EC36EDC6ED86E996E926E8E6E8D6EA46EA16EBF6EB36ED06ECA6E976EAE
+6EA3714771547152716371607141715D716271727178716A7161714271587143
+714B7170715F715071537144714D715A724F728D728C72917290728E733C7342
+733B733A7340734A73497444744A744B7452745174577440744F7450744E0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+45
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000074427446744D745474E174FF74FE74FD751D75797577698375EF760F7603
+75F775FE75FC75F975F8761075FB75F675ED75F575FD769976B576DD7755775F
+776077527756775A7769776777547759776D77E07887789A7894788F78847895
+7885788678A178837879789978807896787B797C7982797D79797A117A187A19
+7A127A177A157A227A137A1B7A107AA37AA27A9E7AEB7B667B647B6D7B747B69
+7B727B657B737B717B707B617B787B767B637CB27CB47CAF7D887D867D800000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+46
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007D8D7D7F7D857D7A7D8E7D7B7D837D7C7D8C7D947D847D7D7D927F6D7F6B
+7F677F687F6C7FA67FA57FA77FDB7FDC8021816481608177815C8169815B8162
+81726721815E81768167816F81448161821D8249824482408242824584F1843F
+845684768479848F848D846584518440848684678430844D847D845A84598474
+8473845D8507845E8437843A8434847A8443847884328445842983D9844B842F
+8442842D845F84708439844E844C8452846F84C5848E843B8447843684330000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+47
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008468847E8444842B84608454846E8450870B870486F7870C86FA86D686F5
+874D86F8870E8709870186F6870D870588D688CB88CD88CE88DE88DB88DA88CC
+88D08985899B89DF89E589E489E189E089E289DC89E68A768A868A7F8A618A3F
+8A778A828A848A758A838A818A748A7A8C3C8C4B8C4A8C658C648C668C868C84
+8C858CCC8D688D698D918D8C8D8E8D8F8D8D8D938D948D908D928DF08DE08DEC
+8DF18DEE8DD08DE98DE38DE28DE78DF28DEB8DF48F068EFF8F018F008F050000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+48
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008F078F088F028F0B9052903F90449049903D9110910D910F911191169114
+910B910E916E916F924892529230923A926692339265925E9283922E924A9246
+926D926C924F92609267926F92369261927092319254926392509272924E9253
+924C92569232959F959C959E959B969296939691969796CE96FA96FD96F896F5
+9773977797789772980F980D980E98AC98F698F999AF99B299B099B59AAD9AAB
+9B5B9CEA9CED9CE79E809EFD50E650D450D750E850F350DB50EA50DD50E40000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+49
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000050D350EC50F050EF50E350E051D85280528152E952EB533053AC56275615
+560C561255FC560F561C56015613560255FA561D560455FF55F95889587C5890
+589858865881587F5874588B587A58875891588E587658825888587B5894588F
+58FE596B5ADC5AEE5AE55AD55AEA5ADA5AED5AEB5AF35AE25AE05ADB5AEC5ADE
+5ADD5AD95AE85ADF5B775BE05BE35C635D825D805D7D5D865D7A5D815D775D8A
+5D895D885D7E5D7C5D8D5D795D7F5E585E595E535ED85ED15ED75ECE5EDC0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4a
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005ED55ED95ED25ED45F445F435F6F5FB6612C61286141615E617161736152
+61536172616C618061746154617A615B6165613B616A6161615662296227622B
+642B644D645B645D6474647664726473647D6475646664A6644E6482645E645C
+644B645364606450647F643F646C646B645964656477657365A066A166A0669F
+67056704672269B169B669C969A069CE699669B069AC69BC69916999698E69A7
+698D69A969BE69AF69BF69C469BD69A469D469B969CA699A69CF69B369930000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4b
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000069AA69A1699E69D96997699069C269B569A569C66B4A6B4D6B4B6B9E6B9F
+6BA06BC36BC46BFE6ECE6EF56EF16F036F256EF86F376EFB6F2E6F096F4E6F19
+6F1A6F276F186F3B6F126EED6F0A6F366F736EF96EEE6F2D6F406F306F3C6F35
+6EEB6F076F0E6F436F056EFD6EF66F396F1C6EFC6F3A6F1F6F0D6F1E6F086F21
+718771907189718071857182718F717B71867181719772447253729772957293
+7343734D7351734C746274737471747574727467746E750075027503757D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4c
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000759076167608760C76157611760A761476B87781777C77857782776E7780
+776F777E778378B278AA78B478AD78A8787E78AB789E78A578A078AC78A278A4
+7998798A798B799679957994799379977988799279907A2B7A4A7A307A2F7A28
+7A267AA87AAB7AAC7AEE7B887B9C7B8A7B917B907B967B8D7B8C7B9B7B8E7B85
+7B9852847B997BA47B827CBB7CBF7CBC7CBA7DA77DB77DC27DA37DAA7DC17DC0
+7DC57D9D7DCE7DC47DC67DCB7DCC7DAF7DB97D967DBC7D9F7DA67DAE7DA90000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007DA17DC97F737FE27FE37FE57FDE8024805D805C8189818681838187818D
+818C818B8215849784A484A1849F84BA84CE84C284AC84AE84AB84B984B484C1
+84CD84AA849A84B184D0849D84A784BB84A2849484C784CC849B84A984AF84A8
+84D6849884B684CF84A084D784D484D284DB84B084918661873387238728876B
+8740872E871E87218719871B8743872C8741873E874687208732872A872D873C
+8712873A8731873587428726872787388724871A8730871188F788E788F10000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4e
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000088F288FA88FE88EE88FC88F688FB88F088EC88EB899D89A1899F899E89E9
+89EB89E88AAB8A998A8B8A928A8F8A968C3D8C688C698CD58CCF8CD78D968E09
+8E028DFF8E0D8DFD8E0A8E038E078E068E058DFE8E008E048F108F118F0E8F0D
+9123911C91209122911F911D911A91249121911B917A91729179917392A592A4
+9276929B927A92A0929492AA928D92A6929A92AB92799297927F92A392EE928E
+9282929592A2927D928892A1928A9286928C929992A7927E928792A9929D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4f
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000928B922D969E96A196FF9758977D977A977E978397809782977B97849781
+977F97CE97CD981698AD98AE990299009907999D999C99C399B999BB99BA99C2
+99BD99C79AB19AE39AE79B3E9B3F9B609B619B5F9CF19CF29CF59EA750FF5103
+513050F85106510750F650FE510B510C50FD510A528B528C52F152EF56485642
+564C56355641564A564956465658565A56405633563D562C563E5638562A563A
+571A58AB589D58B158A058A358AF58AC58A558A158FF5AFF5AF45AFD5AF70000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+50
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005AF65B035AF85B025AF95B015B075B055B0F5C675D995D975D9F5D925DA2
+5D935D955DA05D9C5DA15D9A5D9E5E695E5D5E605E5C7DF35EDB5EDE5EE15F49
+5FB2618B6183617961B161B061A26189619B619361AF61AD619F619261AA61A1
+618D616661B3622D646E6470649664A064856497649C648F648B648A648C64A3
+649F646864B164986576657A6579657B65B265B366B566B066A966B266B766AA
+66AF6A006A066A1769E569F86A1569F169E46A2069FF69EC69E26A1B6A1D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+51
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000069FE6A2769F269EE6A1469F769E76A406A0869E669FB6A0D69FC69EB6A09
+6A046A186A256A0F69F66A266A0769F46A166B516BA56BA36BA26BA66C016C00
+6BFF6C026F416F266F7E6F876FC66F926F8D6F896F8C6F626F4F6F856F5A6F96
+6F766F6C6F826F556F726F526F506F576F946F936F5D6F006F616F6B6F7D6F67
+6F906F536F8B6F696F7F6F956F636F776F6A6F7B71B271AF719B71B071A0719A
+71A971B5719D71A5719E71A471A171AA719C71A771B37298729A735873520000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+52
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000735E735F7360735D735B7361735A7359736274877489748A74867481747D
+74857488747C747975087507757E7625761E7619761D761C7623761A7628761B
+769C769D769E769B778D778F7789778878CD78BB78CF78CC78D178CE78D478C8
+78C378C478C9799A79A179A0799C79A2799B6B767A397AB27AB47AB37BB77BCB
+7BBE7BAC7BCE7BAF7BB97BCA7BB57CC57CC87CCC7CCB7DF77DDB7DEA7DE77DD7
+7DE17E037DFA7DE67DF67DF17DF07DEE7DDF7F767FAC7FB07FAD7FED7FEB0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+53
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007FEA7FEC7FE67FE88064806781A3819F819E819581A2819981978216824F
+825382528250824E82518524853B850F85008529850E8509850D851F850A8527
+851C84FB852B84FA8508850C84F4852A84F2851584F784EB84F384FC851284EA
+84E9851684FE8528851D852E850284FD851E84F68531852684E784E884F084EF
+84F9851885208530850B8519852F8662875687638764877787E1877387588754
+875B87528761875A8751875E876D876A8750874E875F875D876F876C877A0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+54
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000876E875C8765874F877B8775876287678769885A8905890C8914890B8917
+89188919890689168911890E890989A289A489A389ED89F089EC8ACF8AC68AB8
+8AD38AD18AD48AD58ABB8AD78ABE8AC08AC58AD88AC38ABA8ABD8AD98C3E8C4D
+8C8F8CE58CDF8CD98CE88CDA8CDD8CE78DA08D9C8DA18D9B8E208E238E258E24
+8E2E8E158E1B8E168E118E198E268E278E148E128E188E138E1C8E178E1A8F2C
+8F248F188F1A8F208F238F168F1790739070906F9067906B912F912B91290000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+55
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000912A91329126912E91859186918A918191829184918092D092C392C492C0
+92D992B692CF92F192DF92D892E992D792DD92CC92EF92C292E892CA92C892CE
+92E692CD92D592C992E092DE92E792D192D392B592E1932592C692B4957C95AC
+95AB95AE95B096A496A296D3970597089702975A978A978E978897D097CF981E
+981D9826982998289820981B982798B2990898FA9911991499169917991599DC
+99CD99CF99D399D499CE99C999D699D899CB99D799CC9AB39AEC9AEB9AF30000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+56
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009AF29AF19B469B439B679B749B719B669B769B759B709B689B649B6C9CFC
+9CFA9CFD9CFF9CF79D079D009CF99CFB9D089D059D049E839ED39F0F9F10511C
+51135117511A511151DE533453E156705660566E567356665663566D5672565E
+5677571C571B58C858BD58C958BF58BA58C258BC58C65B175B195B1B5B215B14
+5B135B105B165B285B1A5B205B1E5BEF5DAC5DB15DA95DA75DB55DB05DAE5DAA
+5DA85DB25DAD5DAF5DB45E675E685E665E6F5EE95EE75EE65EE85EE55F4B0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+57
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005FBC5FBB619D61A8619661C561B461C661C161CC61BA61BF61B8618C64D7
+64D664D064CF64C964BD648964C364DB64F364D96533657F657C65A266C866BE
+66C066CA66CB66CF66BD66BB66BA66CC67236A346A666A496A676A326A686A3E
+6A5D6A6D6A766A5B6A516A286A5A6A3B6A3F6A416A6A6A646A506A4F6A546A6F
+6A696A606A3C6A5E6A566A556A4D6A4E6A466B556B546B566BA76BAA6BAB6BC8
+6BC76C046C036C066FAD6FCB6FA36FC76FBC6FCE6FC86F5E6FC46FBD6F9E0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+58
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006FCA6FA870046FA56FAE6FBA6FAC6FAA6FCF6FBF6FB86FA26FC96FAB6FCD
+6FAF6FB26FB071C571C271BF71B871D671C071C171CB71D471CA71C771CF71BD
+71D871BC71C671DA71DB729D729E736973667367736C7365736B736A747F749A
+74A074947492749574A1750B7580762F762D7631763D7633763C763576327630
+76BB76E6779A779D77A1779C779B77A277A377957799779778DD78E978E578EA
+78DE78E378DB78E178E278ED78DF78E079A47A447A487A477AB67AB87AB50000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+59
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007AB17AB77BDE7BE37BE77BDD7BD57BE57BDA7BE87BF97BD47BEA7BE27BDC
+7BEB7BD87BDF7CD27CD47CD77CD07CD17E127E217E177E0C7E1F7E207E137E0E
+7E1C7E157E1A7E227E0B7E0F7E167E0D7E147E257E247F437F7B7F7C7F7A7FB1
+7FEF802A8029806C81B181A681AE81B981B581AB81B081AC81B481B281B781A7
+81F282558256825785568545856B854D85538561855885408546856485418562
+8544855185478563853E855B8571854E856E8575855585678560858C85660000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5a
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000855D85548565856C86638665866487A4879B878F87978793879287888781
+879687988779878787A3878587908791879D87848794879C879A8789891E8926
+8930892D892E89278931892289298923892F892C891F89F18AE08AE28AF28AF4
+8AF58ADD8B148AE48ADF8AF08AC88ADE8AE18AE88AFF8AEF8AFB8C918C928C90
+8CF58CEE8CF18CF08CF38D6C8D6E8DA58DA78E338E3E8E388E408E458E368E3C
+8E3D8E418E308E3F8EBD8F368F2E8F358F328F398F378F3490769079907B0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5b
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000908690FA913391359136919391909191918D918F9327931E9308931F9306
+930F937A9338933C931B9323931293019346932D930E930D92CB931D92FA9313
+92F992F793349302932492FF932993399335932A9314930C930B92FE93099300
+92FB931695BC95CD95BE95B995BA95B695BF95B595BD96A996D4970B97129710
+97999797979497F097F89835982F98329924991F99279929999E99EE99EC99E5
+99E499F099E399EA99E999E79AB99ABF9AB49ABB9AF69AFA9AF99AF79B330000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5c
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009B809B859B879B7C9B7E9B7B9B829B939B929B909B7A9B959B7D9B889D25
+9D179D209D1E9D149D299D1D9D189D229D109D199D1F9E889E869E879EAE9EAD
+9ED59ED69EFA9F129F3D51265125512251245120512952F45693568C568D5686
+56845683567E5682567F568158D658D458CF58D25B2D5B255B325B235B2C5B27
+5B265B2F5B2E5B7B5BF15BF25DB75E6C5E6A5FBE61C361B561BC61E761E061E5
+61E461E861DE64EF64E964E364EB64E464E86581658065B665DA66D26A8D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006A966A816AA56A896A9F6A9B6AA16A9E6A876A936A8E6A956A836AA86AA4
+6A916A7F6AA66A9A6A856A8C6A926B5B6BAD6C096FCC6FA96FF46FD46FE36FDC
+6FED6FE76FE66FDE6FF26FDD6FE26FE871E171F171E871F271E471F071E27373
+736E736F749774B274AB749074AA74AD74B174A574AF751075117512750F7584
+764376487649764776A476E977B577AB77B277B777B677B477B177A877F078F3
+78FD790278FB78FC78FF78F2790578F978FE790479AB79A87A5C7A5B7A560000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5e
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007A587A547A5A7ABE7AC07AC17C057C0F7BF27C007BFF7BFB7C0E7BF47C0B
+7BF37C027C097C037C017BF87BFD7C067BF07BF17C107C0A7CE87E2D7E3C7E42
+7E3398487E387E2A7E497E407E477E297E4C7E307E3B7E367E447E3A7F457F7F
+7F7E7F7D7FF47FF2802C81BB81C481CC81CA81C581C781BC81E9825B825A825C
+85838580858F85A7859585A0858B85A3857B85A4859A859E8577857C858985A1
+857A85788557858E85968586858D8599859D858185A285828588858585790000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5f
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000857685988590859F866887BE87AA87AD87C587B087AC87B987B587BC87AE
+87C987C387C287CC87B787AF87C487CA87B487B687BF87B887BD87DE87B28935
+8933893C893E894189528937894289AD89AF89AE89F289F38B1E8B188B168B11
+8B058B0B8B228B0F8B128B158B078B0D8B088B068B1C8B138B1A8C4F8C708C72
+8C718C6F8C958C948CF98D6F8E4E8E4D8E538E508E4C8E478F438F409085907E
+9138919A91A2919B9199919F91A1919D91A093A1938393AF9364935693470000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+60
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000937C9358935C93769349935093519360936D938F934C936A937993579355
+9352934F93719377937B9361935E93639367934E935995C795C095C995C395C5
+95B796AE96B096AC9720971F9718971D9719979A97A1979C979E979D97D597D4
+97F198419844984A9849984598439925992B992C992A99339932992F992D9931
+9930999899A399A19A0299FA99F499F799F999F899F699FB99FD99FE99FC9A03
+9ABE9AFE9AFD9B019AFC9B489B9A9BA89B9E9B9B9BA69BA19BA59BA49B860000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+61
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009BA29BA09BAF9D339D419D679D369D2E9D2F9D319D389D309D459D429D43
+9D3E9D379D409D3D7FF59D2D9E8A9E899E8D9EB09EC89EDA9EFB9EFF9F249F23
+9F229F549FA05131512D512E5698569C5697569A569D569959705B3C5C695C6A
+5DC05E6D5E6E61D861DF61ED61EE61F161EA61F061EB61D661E964FF650464FD
+64F86501650364FC659465DB66DA66DB66D86AC56AB96ABD6AE16AC66ABA6AB6
+6AB76AC76AB46AAD6B5E6BC96C0B7007700C700D700170057014700E6FFF0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+62
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000070006FFB70266FFC6FF7700A720171FF71F9720371FD737674B874C074B5
+74C174BE74B674BB74C275147513765C76647659765076537657765A76A676BD
+76EC77C277BA790C79137914790979107912791179AD79AC7A5F7C1C7C297C19
+7C207C1F7C2D7C1D7C267C287C227C257C307E5C7E507E567E637E587E627E5F
+7E517E607E577E537FB57FB37FF77FF8807581D181D281D0825F825E85B485C6
+85C085C385C285B385B585BD85C785C485BF85CB85CE85C885C585B185B60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+63
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000085D2862485B885B785BE866987E787E687E287DB87EB87EA87E587DF87F3
+87E487D487DC87D387ED87D887E387D787D9880187F487E887DD8953894B894F
+894C89468950895189498B2A8B278B238B338B308B358B478B2F8B3C8B3E8B31
+8B258B378B268B368B2E8B248B3B8B3D8B3A8C428C758C998C988C978CFE8D04
+8D028D008E5C8E628E608E578E568E5E8E658E678E5B8E5A8E618E5D8E698E54
+8F468F478F488F4B9128913A913B913E91A891A591A791AF91AA93B5938C0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+64
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000939293B7939B939D938993A7938E93AA939E93A6939593889399939F9380
+938D93B1939193B293A493A893B493A395D295D395D196B396D796DA5DC296DF
+96D896DD97239722972597AC97AE97A897AB97A497AA97A297A597D797D997D6
+97D897FA98509851985298B89941993C993A9A0F9A0B9A099A0D9A049A119A0A
+9A059A079A069AC09ADC9B089B049B059B299B359B4A9B4C9B4B9BC79BC69BC3
+9BBF9BC19BB59BB89BD39BB69BC49BB99BBD9D5C9D539D4F9D4A9D5B9D4B0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+65
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009D599D569D4C9D579D529D549D5F9D589D5A9E8E9E8C9EDF9F019F009F16
+9F259F2B9F2A9F299F289F4C9F5551345135529652F753B456AB56AD56A656A7
+56AA56AC58DA58DD58DB59125B3D5B3E5B3F5DC35E705FBF61FB65076510650D
+6509650C650E658465DE65DD66DE6AE76AE06ACC6AD16AD96ACB6ADF6ADC6AD0
+6AEB6ACF6ACD6ADE6B606BB06C0C7019702770207016702B7021702270237029
+70177024701C720C720A72077202720572A572A672A472A372A174CB74C50000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+66
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000074B774C37516766077C977CA77C477F1791D791B7921791C7917791E79B0
+7A677A687C337C3C7C397C2C7C3B7CEC7CEA7E767E757E787E707E777E6F7E7A
+7E727E747E687F4B7F4A7F837F867FB77FFD7FFE807881D781D5820B82648261
+826385EB85F185ED85D985E185E885DA85D785EC85F285F885D885DF85E385DC
+85D185F085E685EF85DE85E2880087FA880387F687F78809880C880B880687FC
+880887FF880A88028962895A895B89578961895C8958895D8959898889B70000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+67
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000089B689F68B508B488B4A8B408B538B568B548B4B8B558B518B428B528B57
+8C438C778C768C9A8D068D078D098DAC8DAA8DAD8DAB8E6D8E788E738E6A8E6F
+8E7B8EC28F528F518F4F8F508F538FB49140913F91B091AD93DE93C793CF93C2
+93DA93D093F993EC93CC93D993A993E693CA93D493EE93E393D593C493CE93C0
+93D293A593E7957D95DA95DB96E19729972B972C9728972697B397B797B697DD
+97DE97DF985C9859985D985798BF98BD98BB98BE99489947994399A699A70000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+68
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009A1A9A159A259A1D9A249A1B9A229A209A279A239A1E9A1C9A149AC29B0B
+9B0A9B0E9B0C9B379BEA9BEB9BE09BDE9BE49BE69BE29BF09BD49BD79BEC9BDC
+9BD99BE59BD59BE19BDA9D779D819D8A9D849D889D719D809D789D869D8B9D8C
+9D7D9D6B9D749D759D709D699D859D739D7B9D829D6F9D799D7F9D879D689E94
+9E919EC09EFC9F2D9F409F419F4D9F569F579F58533756B256B556B358E35B45
+5DC65DC75EEE5EEF5FC05FC161F9651765166515651365DF66E866E366E40000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+69
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006AF36AF06AEA6AE86AF96AF16AEE6AEF703C7035702F7037703470317042
+7038703F703A7039702A7040703B703370417213721472A8737D737C74BA76AB
+76AA76BE76ED77CC77CE77CF77CD77F279257923792779287924792979B27A6E
+7A6C7A6D7AF77C497C487C4A7C477C457CEE7E7B7E7E7E817E807FBA7FFF8079
+81DB81D982688269862285FF860185FE861B860085F6860486098605860C85FD
+8819881088118817881388168963896689B989F78B608B6A8B5D8B688B630000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6a
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008B658B678B6D8DAE8E868E888E848F598F568F578F558F588F5A908D9143
+914191B791B591B291B3940B941393FB9420940F941493FE9415941094289419
+940D93F5940093F79407940E9416941293FA940993F8943C940A93FF93FC940C
+93F69411940695DE95E095DF972E972F97B997BB97FD97FE986098629863985F
+98C198C29950994E9959994C994B99539A329A349A319A2C9A2A9A369A299A2E
+9A389A2D9AC79ACA9AC69B109B129B119C0B9C089BF79C059C129BF89C400000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6b
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009C079C0E9C069C179C149C099D9F9D999DA49D9D9D929D989D909D9B9DA0
+9D949D9C9DAA9D979DA19D9A9DA29DA89D9E9DA39DBF9DA99D969DA69DA79E99
+9E9B9E9A9EE59EE49EE79EE69F309F2E9F5B9F609F5E9F5D9F599F91513A5139
+5298529756C356BD56BE5B485B475DCB5DCF5EF161FD651B6B026AFC6B036AF8
+6B0070437044704A7048704970457046721D721A7219737E7517766A77D0792D
+7931792F7C547C537CF27E8A7E877E887E8B7E867E8D7F4D7FBB803081DD0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6c
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008618862A8626861F8623861C86198627862E862186208629861E86258829
+881D881B88208824881C882B884A896D8969896E896B89FA8B798B788B458B7A
+8B7B8D108D148DAF8E8E8E8C8F5E8F5B8F5D91469144914591B9943F943B9436
+9429943D94309439942A9437942C9440943195E595E495E39735973A97BF97E1
+986498C998C698C0995899569A399A3D9A469A449A429A419A3A9A3F9ACD9B15
+9B179B189B169B3A9B529C2B9C1D9C1C9C2C9C239C289C299C249C219DB70000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009DB69DBC9DC19DC79DCA9DCF9DBE9DC59DC39DBB9DB59DCE9DB99DBA9DAC
+9DC89DB19DAD9DCC9DB39DCD9DB29E7A9E9C9EEB9EEE9EED9F1B9F189F1A9F31
+9F4E9F659F649F924EB956C656C556CB59715B4B5B4C5DD55DD15EF265216520
+652665226B0B6B086B096C0D7055705670577052721E721F72A9737F74D874D5
+74D974D7766D76AD793579B47A707A717C577C5C7C597C5B7C5A7CF47CF17E91
+7F4F7F8781DE826B863486358633862C86328636882C88288826882A88250000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6e
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000897189BF89BE89FB8B7E8B848B828B868B858B7F8D158E958E948E9A8E92
+8E908E968E978F608F629147944C9450944A944B944F94479445944894499446
+973F97E3986A986998CB9954995B9A4E9A539A549A4C9A4F9A489A4A9A499A52
+9A509AD09B199B2B9B3B9B569B559C469C489C3F9C449C399C339C419C3C9C37
+9C349C329C3D9C369DDB9DD29DDE9DDA9DCB9DD09DDC9DD19DDF9DE99DD99DD8
+9DD69DF59DD59DDD9EB69EF09F359F339F329F429F6B9F959FA2513D52990000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6f
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000058E858E759725B4D5DD8882F5F4F62016203620465296525659666EB6B11
+6B126B0F6BCA705B705A7222738273817383767077D47C677C667E95826C863A
+86408639863C8631863B863E88308832882E883389768974897389FE8B8C8B8E
+8B8B8B888C458D198E988F648F6391BC94629455945D9457945E97C497C59800
+9A569A599B1E9B1F9B209C529C589C509C4A9C4D9C4B9C559C599C4C9C4E9DFB
+9DF79DEF9DE39DEB9DF89DE49DF69DE19DEE9DE69DF29DF09DE29DEC9DF40000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+70
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009DF39DE89DED9EC29ED09EF29EF39F069F1C9F389F379F369F439F4F9F71
+9F709F6E9F6F56D356CD5B4E5C6D652D66ED66EE6B13705F7061705D70607223
+74DB74E577D5793879B779B67C6A7E977F89826D8643883888378835884B8B94
+8B958E9E8E9F8EA08E9D91BE91BD91C2946B9468946996E597469743974797C7
+97E59A5E9AD59B599C639C679C669C629C5E9C609E029DFE9E079E039E069E05
+9E009E019E099DFF9DFD9E049EA09F1E9F469F749F759F7656D4652E65B80000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+71
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006B186B196B176B1A7062722672AA77D877D979397C697C6B7CF67E9A7E98
+7E9B7E9981E081E18646864786488979897A897C897B89FF8B988B998EA58EA4
+8EA3946E946D946F9471947397499872995F9C689C6E9C6D9E0B9E0D9E109E0F
+9E129E119EA19EF59F099F479F789F7B9F7A9F79571E70667C6F883C8DB28EA6
+91C394749478947694759A609B2E9C749C739C719C759E149E139EF69F0A9FA4
+706870657CF7866A883E883D883F8B9E8C9C8EA98EC9974B9873987498CC0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+72
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000996199AB9A649A669A679B249E159E179F4862076B1E7227864C8EA89482
+948094819A699A689E19864B8B9F94839C799EB776759A6B9C7A9E1D7069706A
+72299EA49F7E9F499F9800000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
diff --git a/ext/SDBM_File/Makefile.PL b/ext/SDBM_File/Makefile.PL
index 0e26609e81..05e08b5cbc 100644
--- a/ext/SDBM_File/Makefile.PL
+++ b/ext/SDBM_File/Makefile.PL
@@ -24,7 +24,7 @@ sub MY::postamble {
if ($^O =~ /MSWin32/ && Win32::IsWin95()) {
if ($Config{'make'} =~ /dmake/i) {
# dmake-specific
- return <<'EOT';
+ return <<'EOT';
$(MYEXTLIB): sdbm/Makefile
@[
cd sdbm
@@ -34,7 +34,7 @@ $(MYEXTLIB): sdbm/Makefile
EOT
} elsif ($Config{'make'} =~ /nmake/i) {
#
- return <<'EOT';
+ return <<'EOT';
$(MYEXTLIB): sdbm/Makefile
cd sdbm
$(MAKE) all
diff --git a/jpl/JNI/JNI.xs b/jpl/JNI/JNI.xs
index ea67a2e4b5..f4826954e7 100644
--- a/jpl/JNI/JNI.xs
+++ b/jpl/JNI/JNI.xs
@@ -1,3253 +1,3253 @@
-/*
- * Copyright 1997, O'Reilly & Associate, Inc.
- *
- * This package may be copied under the same terms as Perl itself.
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include <stdio.h>
-#include <jni.h>
-
-#ifndef PERL_VERSION
-# include <patchlevel.h>
-# define PERL_REVISION 5
-# define PERL_VERSION PATCHLEVEL
-# define PERL_SUBVERSION SUBVERSION
-#endif
-
-#if PERL_REVISION == 5 && (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION <= 75))
-# define PL_na na
-# define PL_sv_no sv_no
-# define PL_sv_undef sv_undef
-# define PL_dowarn dowarn
-#endif
-
-#ifndef newSVpvn
-# define newSVpvn(a,b) newSVpv(a,b)
-#endif
-
-#ifndef pTHX
-# define pTHX void
-# define pTHX_
-# define aTHX
-# define aTHX_
-# define dTHX extern int JNI___notused
-#endif
-
-#ifndef WIN32
-# include <dlfcn.h>
-#endif
-
-#ifdef EMBEDDEDPERL
-extern JNIEnv* jplcurenv;
-extern int jpldebug;
-#else
-JNIEnv* jplcurenv;
-int jpldebug = 1;
-#endif
-
-#define SysRet jint
-
-#ifdef WIN32
-static void JNICALL call_my_exit(jint status)
-{
- my_exit(status);
-}
-#else
-static void call_my_exit(jint status)
-{
- my_exit(status);
-}
-#endif
-
-jvalue*
-makeargs(char *sig, SV** svp, int items)
-{
- jvalue* jv = (jvalue*)safemalloc(sizeof(jvalue) * items);
- int ix = 0;
- char *s = sig;
- JNIEnv* env = jplcurenv;
- char *start;
- STRLEN n_a;
-
- if (jpldebug)
- fprintf(stderr, "sig = %s, items = %d\n", sig, items);
- if (*s++ != '(')
- goto cleanup;
-
- while (items--) {
- SV *sv = *svp++;
- start = s;
- switch (*s++) {
- case 'Z':
- jv[ix++].z = (jboolean)(SvIV(sv) != 0);
- break;
- case 'B':
- jv[ix++].b = (jbyte)SvIV(sv);
- break;
- case 'C':
- jv[ix++].c = (jchar)SvIV(sv);
- break;
- case 'S':
- jv[ix++].s = (jshort)SvIV(sv);
- break;
- case 'I':
- jv[ix++].i = (jint)SvIV(sv);
- break;
- case 'J':
- jv[ix++].j = (jlong)SvNV(sv);
- break;
- case 'F':
- jv[ix++].f = (jfloat)SvNV(sv);
- break;
- case 'D':
- jv[ix++].d = (jdouble)SvNV(sv);
- break;
- case '[':
- switch (*s++) {
- case 'Z':
- if (SvROK(sv)) {
- SV* rv = (SV*)SvRV(sv);
- if (SvOBJECT(rv))
- jv[ix++].l = (jobject)(void*)SvIV(rv);
- else if (SvTYPE(rv) == SVt_PVAV) {
- jsize len = av_len((AV*)rv) + 1;
- jboolean* buf = (jboolean*)malloc(len * sizeof(jboolean));
- int i;
- SV** esv;
-
- jbooleanArray ja = (*env)->NewBooleanArray(env, len);
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
- buf[i] = (jboolean)SvIV(*esv);
- (*env)->SetBooleanArrayRegion(env, ja, 0, len, buf);
- free((void*)buf);
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- }
- else if (SvPOK(sv)) {
- jsize len = sv_len(sv) / sizeof(jboolean);
-
- jbooleanArray ja = (*env)->NewBooleanArray(env, len);
- (*env)->SetBooleanArrayRegion(env, ja, 0, len, (jboolean*)SvPV(sv,n_a));
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- break;
- case 'B':
- if (SvROK(sv)) {
- SV* rv = (SV*)SvRV(sv);
- if (SvOBJECT(rv))
- jv[ix++].l = (jobject)(void*)SvIV(rv);
- else if (SvTYPE(rv) == SVt_PVAV) {
- jsize len = av_len((AV*)rv) + 1;
- jbyte* buf = (jbyte*)malloc(len * sizeof(jbyte));
- int i;
- SV** esv;
-
- jbyteArray ja = (*env)->NewByteArray(env, len);
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
- buf[i] = (jbyte)SvIV(*esv);
- (*env)->SetByteArrayRegion(env, ja, 0, len, buf);
- free((void*)buf);
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- }
- else if (SvPOK(sv)) {
- jsize len = sv_len(sv) / sizeof(jbyte);
-
- jbyteArray ja = (*env)->NewByteArray(env, len);
- (*env)->SetByteArrayRegion(env, ja, 0, len, (jbyte*)SvPV(sv,n_a));
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- break;
- case 'C':
- if (SvROK(sv)) {
- SV* rv = (SV*)SvRV(sv);
- if (SvOBJECT(rv))
- jv[ix++].l = (jobject)(void*)SvIV(rv);
- else if (SvTYPE(rv) == SVt_PVAV) {
- jsize len = av_len((AV*)rv) + 1;
- jchar* buf = (jchar*)malloc(len * sizeof(jchar));
- int i;
- SV** esv;
-
- jcharArray ja = (*env)->NewCharArray(env, len);
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
- buf[i] = (jchar)SvIV(*esv);
- (*env)->SetCharArrayRegion(env, ja, 0, len, buf);
- free((void*)buf);
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- }
- else if (SvPOK(sv)) {
- jsize len = sv_len(sv) / sizeof(jchar);
-
- jcharArray ja = (*env)->NewCharArray(env, len);
- (*env)->SetCharArrayRegion(env, ja, 0, len, (jchar*)SvPV(sv,n_a));
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- break;
- case 'S':
- if (SvROK(sv)) {
- SV* rv = (SV*)SvRV(sv);
- if (SvOBJECT(rv))
- jv[ix++].l = (jobject)(void*)SvIV(rv);
- else if (SvTYPE(rv) == SVt_PVAV) {
- jsize len = av_len((AV*)rv) + 1;
- jshort* buf = (jshort*)malloc(len * sizeof(jshort));
- int i;
- SV** esv;
-
- jshortArray ja = (*env)->NewShortArray(env, len);
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
- buf[i] = (jshort)SvIV(*esv);
- (*env)->SetShortArrayRegion(env, ja, 0, len, buf);
- free((void*)buf);
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- }
- else if (SvPOK(sv)) {
- jsize len = sv_len(sv) / sizeof(jshort);
-
- jshortArray ja = (*env)->NewShortArray(env, len);
- (*env)->SetShortArrayRegion(env, ja, 0, len, (jshort*)SvPV(sv,n_a));
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- break;
- case 'I':
- if (SvROK(sv)) {
- SV* rv = (SV*)SvRV(sv);
- if (SvOBJECT(rv))
- jv[ix++].l = (jobject)(void*)SvIV(rv);
- else if (SvTYPE(rv) == SVt_PVAV) {
- jsize len = av_len((AV*)rv) + 1;
- jint* buf = (jint*)malloc(len * sizeof(jint));
- int i;
- SV** esv;
-
- jintArray ja = (*env)->NewIntArray(env, len);
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
- buf[i] = (jint)SvIV(*esv);
- (*env)->SetIntArrayRegion(env, ja, 0, len, buf);
- free((void*)buf);
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- }
- else if (SvPOK(sv)) {
- jsize len = sv_len(sv) / sizeof(jint);
-
- jintArray ja = (*env)->NewIntArray(env, len);
- (*env)->SetIntArrayRegion(env, ja, 0, len, (jint*)SvPV(sv,n_a));
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- break;
- case 'J':
- if (SvROK(sv)) {
- SV* rv = (SV*)SvRV(sv);
- if (SvOBJECT(rv))
- jv[ix++].l = (jobject)(void*)SvIV(rv);
- else if (SvTYPE(rv) == SVt_PVAV) {
- jsize len = av_len((AV*)rv) + 1;
- jlong* buf = (jlong*)malloc(len * sizeof(jlong));
- int i;
- SV** esv;
-
- jlongArray ja = (*env)->NewLongArray(env, len);
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
- buf[i] = (jlong)SvNV(*esv);
- (*env)->SetLongArrayRegion(env, ja, 0, len, buf);
- free((void*)buf);
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- }
- else if (SvPOK(sv)) {
- jsize len = sv_len(sv) / sizeof(jlong);
-
- jlongArray ja = (*env)->NewLongArray(env, len);
- (*env)->SetLongArrayRegion(env, ja, 0, len, (jlong*)SvPV(sv,n_a));
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- break;
- case 'F':
- if (SvROK(sv)) {
- SV* rv = (SV*)SvRV(sv);
- if (SvOBJECT(rv))
- jv[ix++].l = (jobject)(void*)SvIV(rv);
- else if (SvTYPE(rv) == SVt_PVAV) {
- jsize len = av_len((AV*)rv) + 1;
- jfloat* buf = (jfloat*)malloc(len * sizeof(jfloat));
- int i;
- SV** esv;
-
- jfloatArray ja = (*env)->NewFloatArray(env, len);
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
- buf[i] = (jfloat)SvNV(*esv);
- (*env)->SetFloatArrayRegion(env, ja, 0, len, buf);
- free((void*)buf);
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- }
- else if (SvPOK(sv)) {
- jsize len = sv_len(sv) / sizeof(jfloat);
-
- jfloatArray ja = (*env)->NewFloatArray(env, len);
- (*env)->SetFloatArrayRegion(env, ja, 0, len, (jfloat*)SvPV(sv,n_a));
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- break;
- case 'D':
- if (SvROK(sv)) {
- SV* rv = (SV*)SvRV(sv);
- if (SvOBJECT(rv))
- jv[ix++].l = (jobject)(void*)SvIV(rv);
- else if (SvTYPE(rv) == SVt_PVAV) {
- jsize len = av_len((AV*)rv) + 1;
- jdouble* buf = (jdouble*)malloc(len * sizeof(jdouble));
- int i;
- SV** esv;
-
- jdoubleArray ja = (*env)->NewDoubleArray(env, len);
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
- buf[i] = (jdouble)SvNV(*esv);
- (*env)->SetDoubleArrayRegion(env, ja, 0, len, buf);
- free((void*)buf);
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- }
- else if (SvPOK(sv)) {
- jsize len = sv_len(sv) / sizeof(jdouble);
-
- jdoubleArray ja = (*env)->NewDoubleArray(env, len);
- (*env)->SetDoubleArrayRegion(env, ja, 0, len, (jdouble*)SvPV(sv,n_a));
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- break;
- case 'L':
- while (*s != ';') s++;
- s++;
- if (strnEQ(start, "[Ljava/lang/String;", 19)) {
- if (SvROK(sv)) {
- SV* rv = (SV*)SvRV(sv);
- if (SvOBJECT(rv))
- jv[ix++].l = (jobject)(void*)SvIV(rv);
- else if (SvTYPE(rv) == SVt_PVAV) {
- jsize len = av_len((AV*)rv) + 1;
- int i;
- SV** esv;
- static jclass jcl = 0;
- jobjectArray ja;
-
- if (!jcl)
- jcl = (*env)->FindClass(env, "java/lang/String");
- ja = (*env)->NewObjectArray(env, len, jcl, 0);
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
- jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));
- (*env)->SetObjectArrayElement(env, ja, i, str);
- }
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- break;
- }
- /* FALL THROUGH */
- default:
- if (SvROK(sv)) {
- SV* rv = (SV*)SvRV(sv);
- if (SvOBJECT(rv))
- jv[ix++].l = (jobject)(void*)SvIV(rv);
- else if (SvTYPE(rv) == SVt_PVAV) {
- jsize len = av_len((AV*)rv) + 1;
- int i;
- SV** esv;
- static jclass jcl = 0;
- jobjectArray ja;
-
- if (!jcl)
- jcl = (*env)->FindClass(env, "java/lang/Object");
- ja = (*env)->NewObjectArray(env, len, jcl, 0);
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
- if (SvROK(*esv) && (rv = SvRV(*esv)) && SvOBJECT(rv)) {
- (*env)->SetObjectArrayElement(env, ja, i, (jobject)(void*)SvIV(rv));
- }
- else {
- jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));
- (*env)->SetObjectArrayElement(env, ja, i, str);
- }
- }
- jv[ix++].l = (jobject)ja;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- }
- else
- jv[ix++].l = (jobject)(void*)0;
- break;
- }
- break;
- case 'L':
- if (!SvROK(sv) || strnEQ(s, "java/lang/String;", 17)) {
- s += 17;
- jv[ix++].l = (jobject)(*env)->NewStringUTF(env, (char*) SvPV(sv,n_a));
- break;
- }
- while (*s != ';') s++;
- s++;
- if (SvROK(sv)) {
- SV* rv = SvRV(sv);
- jv[ix++].l = (jobject)(void*)SvIV(rv);
- }
- break;
- case ')':
- croak("too many arguments, signature: %s", sig);
- goto cleanup;
- default:
- croak("panic: malformed signature: %s", s-1);
- goto cleanup;
- }
-
- }
- if (*s != ')') {
- croak("not enough arguments, signature: %s", sig);
- goto cleanup;
- }
- return jv;
-
-cleanup:
- safefree((char*)jv);
- return 0;
-}
-
-static int
-not_here(char *s)
-{
- croak("%s not implemented on this architecture", s);
- return -1;
-}
-
-static double
-constant(char *name, int arg)
-{
- errno = 0;
- switch (*name) {
- case 'A':
- break;
- case 'B':
- break;
- case 'C':
- break;
- case 'D':
- break;
- case 'E':
- break;
- case 'F':
- break;
- case 'G':
- break;
- case 'H':
- break;
- case 'I':
- break;
- case 'J':
- if (strEQ(name, "JNI_ABORT"))
-#ifdef JNI_ABORT
- return JNI_ABORT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "JNI_COMMIT"))
-#ifdef JNI_COMMIT
- return JNI_COMMIT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "JNI_ERR"))
-#ifdef JNI_ERR
- return JNI_ERR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "JNI_FALSE"))
-#ifdef JNI_FALSE
- return JNI_FALSE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "JNI_H"))
-#ifdef JNI_H
-#ifdef WIN32
- return 1;
-#else
- return JNI_H;
-#endif
-#else
- goto not_there;
-#endif
- if (strEQ(name, "JNI_OK"))
-#ifdef JNI_OK
- return JNI_OK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "JNI_TRUE"))
-#ifdef JNI_TRUE
- return JNI_TRUE;
-#else
- goto not_there;
-#endif
- break;
- case 'K':
- break;
- case 'L':
- break;
- case 'M':
- break;
- case 'N':
- break;
- case 'O':
- break;
- case 'P':
- break;
- case 'Q':
- break;
- case 'R':
- break;
- case 'S':
- break;
- case 'T':
- break;
- case 'U':
- break;
- case 'V':
- break;
- case 'W':
- break;
- case 'X':
- break;
- case 'Y':
- break;
- case 'Z':
- break;
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-#define FETCHENV jplcurenv
-#define RESTOREENV jplcurenv = env
-
-MODULE = JNI PACKAGE = JNI
-
-PROTOTYPES: ENABLE
-
-double
-constant(name,arg)
- char * name
- int arg
-
-jint
-GetVersion()
- JNIEnv * env = FETCHENV;
- CODE:
- {
- RETVAL = (*env)->GetVersion(env);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jclass
-DefineClass(name, loader, buf)
- JNIEnv * env = FETCHENV;
- STRLEN tmplen = NO_INIT;
- jsize buf_len_ = NO_INIT;
- const char * name
- jobject loader
- const jbyte * buf
- CODE:
- {
-#ifdef KAFFE
- RETVAL = (*env)->DefineClass(env, loader, buf, (jsize)buf_len_);
-#else
- RETVAL = (*env)->DefineClass(env, name, loader, buf, (jsize)buf_len_);
-#endif
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jclass
-FindClass(name)
- JNIEnv * env = FETCHENV;
- const char * name
- CODE:
- {
- RETVAL = (*env)->FindClass(env, name);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jclass
-GetSuperclass(sub)
- JNIEnv * env = FETCHENV;
- jclass sub
- CODE:
- {
- RETVAL = (*env)->GetSuperclass(env, sub);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jboolean
-IsAssignableFrom(sub, sup)
- JNIEnv * env = FETCHENV;
- jclass sub
- jclass sup
- CODE:
- {
- RETVAL = (*env)->IsAssignableFrom(env, sub, sup);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-SysRet
-Throw(obj)
- JNIEnv * env = FETCHENV;
- jthrowable obj
- CODE:
- {
- RETVAL = (*env)->Throw(env, obj);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-SysRet
-ThrowNew(clazz, msg)
- JNIEnv * env = FETCHENV;
- jclass clazz
- const char * msg
- CODE:
- {
- RETVAL = (*env)->ThrowNew(env, clazz, msg);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jthrowable
-ExceptionOccurred()
- JNIEnv * env = FETCHENV;
- CODE:
- {
- RETVAL = (*env)->ExceptionOccurred(env);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-void
-ExceptionDescribe()
- JNIEnv * env = FETCHENV;
- CODE:
- {
- (*env)->ExceptionDescribe(env);
- RESTOREENV;
- }
-
-void
-ExceptionClear()
- JNIEnv * env = FETCHENV;
- CODE:
- {
- (*env)->ExceptionClear(env);
- RESTOREENV;
- }
-
-void
-FatalError(msg)
- JNIEnv * env = FETCHENV;
- const char * msg
- CODE:
- {
- (*env)->FatalError(env, msg);
- RESTOREENV;
- }
-
-jobject
-NewGlobalRef(lobj)
- JNIEnv * env = FETCHENV;
- jobject lobj
- CODE:
- {
- RETVAL = (*env)->NewGlobalRef(env, lobj);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-void
-DeleteGlobalRef(gref)
- JNIEnv * env = FETCHENV;
- jobject gref
- CODE:
- {
- (*env)->DeleteGlobalRef(env, gref);
- RESTOREENV;
- }
-
-void
-DeleteLocalRef(obj)
- JNIEnv * env = FETCHENV;
- jobject obj
- CODE:
- {
- (*env)->DeleteLocalRef(env, obj);
- RESTOREENV;
- }
-
-jboolean
-IsSameObject(obj1,obj2)
- JNIEnv * env = FETCHENV;
- jobject obj1
- jobject obj2
- CODE:
- {
- RETVAL = (*env)->IsSameObject(env, obj1,obj2);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobject
-AllocObject(clazz)
- JNIEnv * env = FETCHENV;
- jclass clazz
- CODE:
- {
- RETVAL = (*env)->AllocObject(env, clazz);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobject
-NewObject(clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobject
-NewObjectA(clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jclass
-GetObjectClass(obj)
- JNIEnv * env = FETCHENV;
- jobject obj
- CODE:
- {
- RETVAL = (*env)->GetObjectClass(env, obj);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jboolean
-IsInstanceOf(obj,clazz)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- CODE:
- {
- RETVAL = (*env)->IsInstanceOf(env, obj,clazz);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jmethodID
-GetMethodID(clazz,name,sig)
- JNIEnv * env = FETCHENV;
- jclass clazz
- const char * name
- const char * sig
- CODE:
- {
- RETVAL = (*env)->GetMethodID(env, clazz,name,sig);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobject
-CallObjectMethod(obj,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobject
-CallObjectMethodA(obj,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jboolean
-CallBooleanMethod(obj,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jboolean
-CallBooleanMethodA(obj,methodID, args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID, args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jbyte
-CallByteMethod(obj,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jbyte
-CallByteMethodA(obj,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jchar
-CallCharMethod(obj,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jchar
-CallCharMethodA(obj,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jshort
-CallShortMethod(obj,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jshort
-CallShortMethodA(obj,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jint
-CallIntMethod(obj,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jint
-CallIntMethodA(obj,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jlong
-CallLongMethod(obj,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jlong
-CallLongMethodA(obj,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jfloat
-CallFloatMethod(obj,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jfloat
-CallFloatMethodA(obj,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jdouble
-CallDoubleMethod(obj,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jdouble
-CallDoubleMethodA(obj,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-void
-CallVoidMethod(obj,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- (*env)->CallVoidMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
-
-void
-CallVoidMethodA(obj,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- (*env)->CallVoidMethodA(env, obj,methodID,args);
- RESTOREENV;
- }
-
-jobject
-CallNonvirtualObjectMethod(obj,clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobject
-CallNonvirtualObjectMethodA(obj,clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jboolean
-CallNonvirtualBooleanMethod(obj,clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jboolean
-CallNonvirtualBooleanMethodA(obj,clazz,methodID, args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID, args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jbyte
-CallNonvirtualByteMethod(obj,clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jbyte
-CallNonvirtualByteMethodA(obj,clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jchar
-CallNonvirtualCharMethod(obj,clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jchar
-CallNonvirtualCharMethodA(obj,clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jshort
-CallNonvirtualShortMethod(obj,clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jshort
-CallNonvirtualShortMethodA(obj,clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jint
-CallNonvirtualIntMethod(obj,clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jint
-CallNonvirtualIntMethodA(obj,clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jlong
-CallNonvirtualLongMethod(obj,clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jlong
-CallNonvirtualLongMethodA(obj,clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jfloat
-CallNonvirtualFloatMethod(obj,clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jfloat
-CallNonvirtualFloatMethodA(obj,clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jdouble
-CallNonvirtualDoubleMethod(obj,clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jdouble
-CallNonvirtualDoubleMethodA(obj,clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-void
-CallNonvirtualVoidMethod(obj,clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
-
-void
-CallNonvirtualVoidMethodA(obj,clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jobject obj
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
- RESTOREENV;
- }
-
-jfieldID
-GetFieldID(clazz,name,sig)
- JNIEnv * env = FETCHENV;
- jclass clazz
- const char * name
- const char * sig
- CODE:
- {
- RETVAL = (*env)->GetFieldID(env, clazz,name,sig);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobject
-GetObjectField(obj,fieldID)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetObjectField(env, obj,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jboolean
-GetBooleanField(obj,fieldID)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetBooleanField(env, obj,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jbyte
-GetByteField(obj,fieldID)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetByteField(env, obj,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jchar
-GetCharField(obj,fieldID)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetCharField(env, obj,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jshort
-GetShortField(obj,fieldID)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetShortField(env, obj,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jint
-GetIntField(obj,fieldID)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetIntField(env, obj,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jlong
-GetLongField(obj,fieldID)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetLongField(env, obj,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jfloat
-GetFloatField(obj,fieldID)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetFloatField(env, obj,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jdouble
-GetDoubleField(obj,fieldID)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetDoubleField(env, obj,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-void
-SetObjectField(obj,fieldID,val)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- jobject val
- CODE:
- {
- (*env)->SetObjectField(env, obj,fieldID,val);
- RESTOREENV;
- }
-
-void
-SetBooleanField(obj,fieldID,val)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- jboolean val
- CODE:
- {
- (*env)->SetBooleanField(env, obj,fieldID,val);
- RESTOREENV;
- }
-
-void
-SetByteField(obj,fieldID,val)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- jbyte val
- CODE:
- {
- (*env)->SetByteField(env, obj,fieldID,val);
- RESTOREENV;
- }
-
-void
-SetCharField(obj,fieldID,val)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- jchar val
- CODE:
- {
- (*env)->SetCharField(env, obj,fieldID,val);
- RESTOREENV;
- }
-
-void
-SetShortField(obj,fieldID,val)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- jshort val
- CODE:
- {
- (*env)->SetShortField(env, obj,fieldID,val);
- RESTOREENV;
- }
-
-void
-SetIntField(obj,fieldID,val)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- jint val
- CODE:
- {
- (*env)->SetIntField(env, obj,fieldID,val);
- RESTOREENV;
- }
-
-void
-SetLongField(obj,fieldID,val)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- jlong val
- CODE:
- {
- (*env)->SetLongField(env, obj,fieldID,val);
- RESTOREENV;
- }
-
-void
-SetFloatField(obj,fieldID,val)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- jfloat val
- CODE:
- {
- (*env)->SetFloatField(env, obj,fieldID,val);
- RESTOREENV;
- }
-
-void
-SetDoubleField(obj,fieldID,val)
- JNIEnv * env = FETCHENV;
- jobject obj
- jfieldID fieldID
- char * sig = 0;
- jdouble val
- CODE:
- {
- (*env)->SetDoubleField(env, obj,fieldID,val);
- RESTOREENV;
- }
-
-jmethodID
-GetStaticMethodID(clazz,name,sig)
- JNIEnv * env = FETCHENV;
- jclass clazz
- const char * name
- const char * sig
- CODE:
- {
- RETVAL = (*env)->GetStaticMethodID(env, clazz,name,sig);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobject
-CallStaticObjectMethod(clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobject
-CallStaticObjectMethodA(clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jboolean
-CallStaticBooleanMethod(clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jboolean
-CallStaticBooleanMethodA(clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jbyte
-CallStaticByteMethod(clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jbyte
-CallStaticByteMethodA(clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jchar
-CallStaticCharMethod(clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jchar
-CallStaticCharMethodA(clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jshort
-CallStaticShortMethod(clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jshort
-CallStaticShortMethodA(clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jint
-CallStaticIntMethod(clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jint
-CallStaticIntMethodA(clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jlong
-CallStaticLongMethod(clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jlong
-CallStaticLongMethodA(clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jfloat
-CallStaticFloatMethod(clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jfloat
-CallStaticFloatMethodA(clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jdouble
-CallStaticDoubleMethod(clazz,methodID,...)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jdouble
-CallStaticDoubleMethodA(clazz,methodID,args)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-void
-CallStaticVoidMethod(cls,methodID,...)
- JNIEnv * env = FETCHENV;
- jclass cls
- jmethodID methodID
- char * sig = 0;
- int argoff = $min_args;
- CODE:
- {
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
- (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
- RESTOREENV;
- }
-
-void
-CallStaticVoidMethodA(cls,methodID,args)
- JNIEnv * env = FETCHENV;
- jclass cls
- jmethodID methodID
- char * sig = 0;
- jvalue * args
- CODE:
- {
- (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
- RESTOREENV;
- }
-
-jfieldID
-GetStaticFieldID(clazz,name,sig)
- JNIEnv * env = FETCHENV;
- jclass clazz
- const char * name
- const char * sig
- CODE:
- {
- RETVAL = (*env)->GetStaticFieldID(env, clazz,name,sig);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobject
-GetStaticObjectField(clazz,fieldID)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetStaticObjectField(env, clazz,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jboolean
-GetStaticBooleanField(clazz,fieldID)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetStaticBooleanField(env, clazz,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jbyte
-GetStaticByteField(clazz,fieldID)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetStaticByteField(env, clazz,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jchar
-GetStaticCharField(clazz,fieldID)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetStaticCharField(env, clazz,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jshort
-GetStaticShortField(clazz,fieldID)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetStaticShortField(env, clazz,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jint
-GetStaticIntField(clazz,fieldID)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetStaticIntField(env, clazz,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jlong
-GetStaticLongField(clazz,fieldID)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetStaticLongField(env, clazz,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jfloat
-GetStaticFloatField(clazz,fieldID)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetStaticFloatField(env, clazz,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jdouble
-GetStaticDoubleField(clazz,fieldID)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- CODE:
- {
- RETVAL = (*env)->GetStaticDoubleField(env, clazz,fieldID);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-void
-SetStaticObjectField(clazz,fieldID,value)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- jobject value
- CODE:
- {
- (*env)->SetStaticObjectField(env, clazz,fieldID,value);
- RESTOREENV;
- }
-
-void
-SetStaticBooleanField(clazz,fieldID,value)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- jboolean value
- CODE:
- {
- (*env)->SetStaticBooleanField(env, clazz,fieldID,value);
- RESTOREENV;
- }
-
-void
-SetStaticByteField(clazz,fieldID,value)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- jbyte value
- CODE:
- {
- (*env)->SetStaticByteField(env, clazz,fieldID,value);
- RESTOREENV;
- }
-
-void
-SetStaticCharField(clazz,fieldID,value)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- jchar value
- CODE:
- {
- (*env)->SetStaticCharField(env, clazz,fieldID,value);
- RESTOREENV;
- }
-
-void
-SetStaticShortField(clazz,fieldID,value)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- jshort value
- CODE:
- {
- (*env)->SetStaticShortField(env, clazz,fieldID,value);
- RESTOREENV;
- }
-
-void
-SetStaticIntField(clazz,fieldID,value)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- jint value
- CODE:
- {
- (*env)->SetStaticIntField(env, clazz,fieldID,value);
- RESTOREENV;
- }
-
-void
-SetStaticLongField(clazz,fieldID,value)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- jlong value
- CODE:
- {
- (*env)->SetStaticLongField(env, clazz,fieldID,value);
- RESTOREENV;
- }
-
-void
-SetStaticFloatField(clazz,fieldID,value)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- jfloat value
- CODE:
- {
- (*env)->SetStaticFloatField(env, clazz,fieldID,value);
- RESTOREENV;
- }
-
-void
-SetStaticDoubleField(clazz,fieldID,value)
- JNIEnv * env = FETCHENV;
- jclass clazz
- jfieldID fieldID
- char * sig = 0;
- jdouble value
- CODE:
- {
- (*env)->SetStaticDoubleField(env, clazz,fieldID,value);
- RESTOREENV;
- }
-
-jstring
-NewString(unicode)
- JNIEnv * env = FETCHENV;
- STRLEN tmplen = NO_INIT;
- jsize unicode_len_ = NO_INIT;
- const jchar * unicode
- CODE:
- {
- RETVAL = (*env)->NewString(env, unicode, unicode_len_);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jsize
-GetStringLength(str)
- JNIEnv * env = FETCHENV;
- jstring str
- CODE:
- {
- RETVAL = (*env)->GetStringLength(env, str);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-const jchar *
-GetStringChars(str)
- JNIEnv * env = FETCHENV;
- jstring str
- jboolean isCopy = NO_INIT;
- jsize RETVAL_len_ = NO_INIT;
- CODE:
- {
- RETVAL = (*env)->GetStringChars(env, str,&isCopy);
- RETVAL_len_ = (*env)->GetStringLength(env, str);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
- CLEANUP:
- (*env)->ReleaseStringChars(env, str,RETVAL);
-
-jstring
-NewStringUTF(utf)
- JNIEnv * env = FETCHENV;
- const char * utf
- CODE:
- {
- RETVAL = (*env)->NewStringUTF(env, utf);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jsize
-GetStringUTFLength(str)
- JNIEnv * env = FETCHENV;
- jstring str
- CODE:
- {
- RETVAL = (*env)->GetStringUTFLength(env, str);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-const char *
-GetStringUTFChars(str)
- JNIEnv * env = FETCHENV;
- jstring str
- jboolean isCopy = NO_INIT;
- CODE:
- {
- RETVAL = (*env)->GetStringUTFChars(env, str,&isCopy);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
- CLEANUP:
- (*env)->ReleaseStringUTFChars(env, str, RETVAL);
-
-
-jsize
-GetArrayLength(array)
- JNIEnv * env = FETCHENV;
- jarray array
- CODE:
- {
- RETVAL = (*env)->GetArrayLength(env, array);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobjectArray
-NewObjectArray(len,clazz,init)
- JNIEnv * env = FETCHENV;
- jsize len
- jclass clazz
- jobject init
- CODE:
- {
- RETVAL = (*env)->NewObjectArray(env, len,clazz,init);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jobject
-GetObjectArrayElement(array,index)
- JNIEnv * env = FETCHENV;
- jobjectArray array
- jsize index
- CODE:
- {
- RETVAL = (*env)->GetObjectArrayElement(env, array,index);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-void
-SetObjectArrayElement(array,index,val)
- JNIEnv * env = FETCHENV;
- jobjectArray array
- jsize index
- jobject val
- CODE:
- {
- (*env)->SetObjectArrayElement(env, array,index,val);
- RESTOREENV;
- }
-
-jbooleanArray
-NewBooleanArray(len)
- JNIEnv * env = FETCHENV;
- jsize len
- CODE:
- {
- RETVAL = (*env)->NewBooleanArray(env, len);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jbyteArray
-NewByteArray(len)
- JNIEnv * env = FETCHENV;
- jsize len
- CODE:
- {
- RETVAL = (*env)->NewByteArray(env, len);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jcharArray
-NewCharArray(len)
- JNIEnv * env = FETCHENV;
- jsize len
- CODE:
- {
- RETVAL = (*env)->NewCharArray(env, len);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jshortArray
-NewShortArray(len)
- JNIEnv * env = FETCHENV;
- jsize len
- CODE:
- {
- RETVAL = (*env)->NewShortArray(env, len);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jintArray
-NewIntArray(len)
- JNIEnv * env = FETCHENV;
- jsize len
- CODE:
- {
- RETVAL = (*env)->NewIntArray(env, len);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jlongArray
-NewLongArray(len)
- JNIEnv * env = FETCHENV;
- jsize len
- CODE:
- {
- RETVAL = (*env)->NewLongArray(env, len);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jfloatArray
-NewFloatArray(len)
- JNIEnv * env = FETCHENV;
- jsize len
- CODE:
- {
- RETVAL = (*env)->NewFloatArray(env, len);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jdoubleArray
-NewDoubleArray(len)
- JNIEnv * env = FETCHENV;
- jsize len
- CODE:
- {
- RETVAL = (*env)->NewDoubleArray(env, len);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-jboolean *
-GetBooleanArrayElements(array)
- JNIEnv * env = FETCHENV;
- jsize RETVAL_len_ = NO_INIT;
- jbooleanArray array
- jboolean isCopy = NO_INIT;
- PPCODE:
- {
- RETVAL = (*env)->GetBooleanArrayElements(env, array,&isCopy);
- RETVAL_len_ = (*env)->GetArrayLength(env, array);
- if (GIMME == G_ARRAY) {
- int i;
- jboolean* r = RETVAL;
- EXTEND(sp, RETVAL_len_);
- for (i = RETVAL_len_; i; --i) {
- PUSHs(sv_2mortal(newSViv(*r++)));
- }
- }
- else {
- if (RETVAL_len_) {
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
- (STRLEN)RETVAL_len_ * sizeof(jboolean))));
- }
- else
- PUSHs(&PL_sv_no);
- }
- (*env)->ReleaseBooleanArrayElements(env, array,RETVAL,JNI_ABORT);
- RESTOREENV;
- }
-
-jbyte *
-GetByteArrayElements(array)
- JNIEnv * env = FETCHENV;
- jsize RETVAL_len_ = NO_INIT;
- jbyteArray array
- jboolean isCopy = NO_INIT;
- PPCODE:
- {
- RETVAL = (*env)->GetByteArrayElements(env, array,&isCopy);
- RETVAL_len_ = (*env)->GetArrayLength(env, array);
- if (GIMME == G_ARRAY) {
- int i;
- jbyte* r = RETVAL;
- EXTEND(sp, RETVAL_len_);
- for (i = RETVAL_len_; i; --i) {
- PUSHs(sv_2mortal(newSViv(*r++)));
- }
- }
- else {
- if (RETVAL_len_) {
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
- (STRLEN)RETVAL_len_ * sizeof(jbyte))));
- }
- else
- PUSHs(&PL_sv_no);
- }
- (*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT);
- RESTOREENV;
- }
-
-jchar *
-GetCharArrayElements(array)
- JNIEnv * env = FETCHENV;
- jsize RETVAL_len_ = NO_INIT;
- jcharArray array
- jboolean isCopy = NO_INIT;
- PPCODE:
- {
- RETVAL = (*env)->GetCharArrayElements(env, array,&isCopy);
- RETVAL_len_ = (*env)->GetArrayLength(env, array);
- if (GIMME == G_ARRAY) {
- int i;
- jchar* r = RETVAL;
- EXTEND(sp, RETVAL_len_);
- for (i = RETVAL_len_; i; --i) {
- PUSHs(sv_2mortal(newSViv(*r++)));
- }
- }
- else {
- if (RETVAL_len_) {
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
- (STRLEN)RETVAL_len_ * sizeof(jchar))));
- }
- else
- PUSHs(&PL_sv_no);
- }
- (*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT);
- RESTOREENV;
- }
-
-jshort *
-GetShortArrayElements(array)
- JNIEnv * env = FETCHENV;
- jsize RETVAL_len_ = NO_INIT;
- jshortArray array
- jboolean isCopy = NO_INIT;
- PPCODE:
- {
- RETVAL = (*env)->GetShortArrayElements(env, array,&isCopy);
- RETVAL_len_ = (*env)->GetArrayLength(env, array);
- if (GIMME == G_ARRAY) {
- int i;
- jshort* r = RETVAL;
- EXTEND(sp, RETVAL_len_);
- for (i = RETVAL_len_; i; --i) {
- PUSHs(sv_2mortal(newSViv(*r++)));
- }
- }
- else {
- if (RETVAL_len_) {
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
- (STRLEN)RETVAL_len_ * sizeof(jshort))));
- }
- else
- PUSHs(&PL_sv_no);
- }
- (*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT);
- RESTOREENV;
- }
-
-jint *
-GetIntArrayElements(array)
- JNIEnv * env = FETCHENV;
- jsize RETVAL_len_ = NO_INIT;
- jintArray array
- jboolean isCopy = NO_INIT;
- PPCODE:
- {
- RETVAL = (*env)->GetIntArrayElements(env, array,&isCopy);
- RETVAL_len_ = (*env)->GetArrayLength(env, array);
- if (GIMME == G_ARRAY) {
- int i;
- jint* r = RETVAL;
- EXTEND(sp, RETVAL_len_);
- for (i = RETVAL_len_; i; --i) {
- PUSHs(sv_2mortal(newSViv(*r++)));
- }
- }
- else {
- if (RETVAL_len_) {
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
- (STRLEN)RETVAL_len_ * sizeof(jint))));
- }
- else
- PUSHs(&PL_sv_no);
- }
- (*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT);
- RESTOREENV;
- }
-
-jlong *
-GetLongArrayElements(array)
- JNIEnv * env = FETCHENV;
- jsize RETVAL_len_ = NO_INIT;
- jlongArray array
- jboolean isCopy = NO_INIT;
- PPCODE:
- {
- RETVAL = (*env)->GetLongArrayElements(env, array,&isCopy);
- RETVAL_len_ = (*env)->GetArrayLength(env, array);
- if (GIMME == G_ARRAY) {
- int i;
- jlong* r = RETVAL;
- EXTEND(sp, RETVAL_len_);
- for (i = RETVAL_len_; i; --i) {
- PUSHs(sv_2mortal(newSViv(*r++)));
- }
- }
- else {
- if (RETVAL_len_) {
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
- (STRLEN)RETVAL_len_ * sizeof(jlong))));
- }
- else
- PUSHs(&PL_sv_no);
- }
- (*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT);
- RESTOREENV;
- }
-
-jfloat *
-GetFloatArrayElements(array)
- JNIEnv * env = FETCHENV;
- jsize RETVAL_len_ = NO_INIT;
- jfloatArray array
- jboolean isCopy = NO_INIT;
- PPCODE:
- {
- RETVAL = (*env)->GetFloatArrayElements(env, array,&isCopy);
- RETVAL_len_ = (*env)->GetArrayLength(env, array);
- if (GIMME == G_ARRAY) {
- int i;
- jfloat* r = RETVAL;
- EXTEND(sp, RETVAL_len_);
- for (i = RETVAL_len_; i; --i) {
- PUSHs(sv_2mortal(newSVnv(*r++)));
- }
- }
- else {
- if (RETVAL_len_) {
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
- (STRLEN)RETVAL_len_ * sizeof(jfloat))));
- }
- else
- PUSHs(&PL_sv_no);
- }
- (*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT);
- RESTOREENV;
- }
-
-jdouble *
-GetDoubleArrayElements(array)
- JNIEnv * env = FETCHENV;
- jsize RETVAL_len_ = NO_INIT;
- jdoubleArray array
- jboolean isCopy = NO_INIT;
- PPCODE:
- {
- RETVAL = (*env)->GetDoubleArrayElements(env, array,&isCopy);
- RETVAL_len_ = (*env)->GetArrayLength(env, array);
- if (GIMME == G_ARRAY) {
- int i;
- jdouble* r = RETVAL;
- EXTEND(sp, RETVAL_len_);
- for (i = RETVAL_len_; i; --i) {
- PUSHs(sv_2mortal(newSVnv(*r++)));
- }
- }
- else {
- if (RETVAL_len_) {
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
- (STRLEN)RETVAL_len_ * sizeof(jdouble))));
- }
- else
- PUSHs(&PL_sv_no);
- }
- (*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT);
- RESTOREENV;
- }
-
-void
-GetBooleanArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- jbooleanArray array
- jsize start
- jsize len
- STRLEN tmplen = len * sizeof(jboolean) + 1;
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
- jboolean * buf = (jboolean*)sv_grow(ST(3),len * sizeof(jboolean)+1);
- CODE:
- {
- (*env)->GetBooleanArrayRegion(env, array,start,len,buf);
- SvCUR_set(ST(3), len * sizeof(jboolean));
- *SvEND(ST(3)) = '\0';
- RESTOREENV;
- }
-
-void
-GetByteArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- jbyteArray array
- jsize start
- jsize len
- STRLEN tmplen = len * sizeof(jboolean) + 1;
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
- jbyte * buf = (jbyte*)sv_grow(ST(3),len * sizeof(jbyte)+1);
- CODE:
- {
- (*env)->GetByteArrayRegion(env, array,start,len,buf);
- SvCUR_set(ST(3), len * sizeof(jbyte));
- *SvEND(ST(3)) = '\0';
- RESTOREENV;
- }
-
-void
-GetCharArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- jcharArray array
- jsize start
- jsize len
- STRLEN tmplen = len * sizeof(jboolean) + 1;
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
- jchar * buf = (jchar*)sv_grow(ST(3),len * sizeof(jchar)+1);
- CODE:
- {
- (*env)->GetCharArrayRegion(env, array,start,len,buf);
- SvCUR_set(ST(3), len * sizeof(jchar));
- *SvEND(ST(3)) = '\0';
- RESTOREENV;
- }
-
-void
-GetShortArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- jshortArray array
- jsize start
- jsize len
- STRLEN tmplen = len * sizeof(jboolean) + 1;
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
- jshort * buf = (jshort*)sv_grow(ST(3),len * sizeof(jshort)+1);
- CODE:
- {
- (*env)->GetShortArrayRegion(env, array,start,len,buf);
- SvCUR_set(ST(3), len * sizeof(jshort));
- *SvEND(ST(3)) = '\0';
- RESTOREENV;
- }
-
-void
-GetIntArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- jintArray array
- jsize start
- jsize len
- STRLEN tmplen = len * sizeof(jboolean) + 1;
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
- jint * buf = (jint*)sv_grow(ST(3),len * sizeof(jint)+1);
- CODE:
- {
- (*env)->GetIntArrayRegion(env, array,start,len,buf);
- SvCUR_set(ST(3), len * sizeof(jint));
- *SvEND(ST(3)) = '\0';
- RESTOREENV;
- }
-
-void
-GetLongArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- jlongArray array
- jsize start
- jsize len
- STRLEN tmplen = len * sizeof(jboolean) + 1;
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
- jlong * buf = (jlong*)sv_grow(ST(3),len * sizeof(jlong)+1);
- CODE:
- {
- (*env)->GetLongArrayRegion(env, array,start,len,buf);
- SvCUR_set(ST(3), len * sizeof(jlong));
- *SvEND(ST(3)) = '\0';
- RESTOREENV;
- }
-
-void
-GetFloatArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- jfloatArray array
- jsize start
- jsize len
- STRLEN tmplen = len * sizeof(jboolean) + 1;
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
- jfloat * buf = (jfloat*)sv_grow(ST(3),len * sizeof(jfloat)+1);
- CODE:
- {
- (*env)->GetFloatArrayRegion(env, array,start,len,buf);
- SvCUR_set(ST(3), len * sizeof(jfloat));
- *SvEND(ST(3)) = '\0';
- RESTOREENV;
- }
-
-void
-GetDoubleArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- jdoubleArray array
- jsize start
- jsize len
- STRLEN tmplen = len * sizeof(jboolean) + 1;
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
- jdouble * buf = (jdouble*)sv_grow(ST(3),len * sizeof(jdouble)+1);
- CODE:
- {
- (*env)->GetDoubleArrayRegion(env, array,start,len,buf);
- SvCUR_set(ST(3), len * sizeof(jdouble));
- *SvEND(ST(3)) = '\0';
- RESTOREENV;
- }
-
-void
-SetBooleanArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- STRLEN tmplen = NO_INIT;
- jbooleanArray array
- jsize start
- jsize len
- jsize buf_len_ = NO_INIT;
- jboolean * buf
- CODE:
- {
- if (buf_len_ < len)
- croak("string is too short");
- else if (buf_len_ > len && PL_dowarn)
- warn("string is too long");
- (*env)->SetBooleanArrayRegion(env, array,start,len,buf);
- RESTOREENV;
- }
-
-void
-SetByteArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- STRLEN tmplen = NO_INIT;
- jbyteArray array
- jsize start
- jsize len
- jsize buf_len_ = NO_INIT;
- jbyte * buf
- CODE:
- {
- if (buf_len_ < len)
- croak("string is too short");
- else if (buf_len_ > len && PL_dowarn)
- warn("string is too long");
- (*env)->SetByteArrayRegion(env, array,start,len,buf);
- RESTOREENV;
- }
-
-void
-SetCharArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- STRLEN tmplen = NO_INIT;
- jcharArray array
- jsize start
- jsize len
- jsize buf_len_ = NO_INIT;
- jchar * buf
- CODE:
- {
- if (buf_len_ < len)
- croak("string is too short");
- else if (buf_len_ > len && PL_dowarn)
- warn("string is too long");
- (*env)->SetCharArrayRegion(env, array,start,len,buf);
- RESTOREENV;
- }
-
-void
-SetShortArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- STRLEN tmplen = NO_INIT;
- jshortArray array
- jsize start
- jsize len
- jsize buf_len_ = NO_INIT;
- jshort * buf
- CODE:
- {
- if (buf_len_ < len)
- croak("string is too short");
- else if (buf_len_ > len && PL_dowarn)
- warn("string is too long");
- (*env)->SetShortArrayRegion(env, array,start,len,buf);
- RESTOREENV;
- }
-
-void
-SetIntArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- STRLEN tmplen = NO_INIT;
- jintArray array
- jsize start
- jsize len
- jsize buf_len_ = NO_INIT;
- jint * buf
- CODE:
- {
- if (buf_len_ < len)
- croak("string is too short");
- else if (buf_len_ > len && PL_dowarn)
- warn("string is too long");
- (*env)->SetIntArrayRegion(env, array,start,len,buf);
- RESTOREENV;
- }
-
-void
-SetLongArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- STRLEN tmplen = NO_INIT;
- jlongArray array
- jsize start
- jsize len
- jsize buf_len_ = NO_INIT;
- jlong * buf
- CODE:
- {
- if (buf_len_ < len)
- croak("string is too short");
- else if (buf_len_ > len && PL_dowarn)
- warn("string is too long");
- (*env)->SetLongArrayRegion(env, array,start,len,buf);
- RESTOREENV;
- }
-
-void
-SetFloatArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- STRLEN tmplen = NO_INIT;
- jfloatArray array
- jsize start
- jsize len
- jsize buf_len_ = NO_INIT;
- jfloat * buf
- CODE:
- {
- if (buf_len_ < len)
- croak("string is too short");
- else if (buf_len_ > len && PL_dowarn)
- warn("string is too long");
- (*env)->SetFloatArrayRegion(env, array,start,len,buf);
- RESTOREENV;
- }
-
-void
-SetDoubleArrayRegion(array,start,len,buf)
- JNIEnv * env = FETCHENV;
- STRLEN tmplen = NO_INIT;
- jdoubleArray array
- jsize start
- jsize len
- jsize buf_len_ = NO_INIT;
- jdouble * buf
- CODE:
- {
- if (buf_len_ < len)
- croak("string is too short");
- else if (buf_len_ > len && PL_dowarn)
- warn("string is too long");
- (*env)->SetDoubleArrayRegion(env, array,start,len,buf);
- RESTOREENV;
- }
-
-SysRet
-RegisterNatives(clazz,methods,nMethods)
- JNIEnv * env = FETCHENV;
- jclass clazz
- JNINativeMethod * methods
- jint nMethods
- CODE:
- {
- RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods);
- }
-
-SysRet
-UnregisterNatives(clazz)
- JNIEnv * env = FETCHENV;
- jclass clazz
- CODE:
- {
- RETVAL = (*env)->UnregisterNatives(env, clazz);
- }
- OUTPUT:
- RETVAL
-
-SysRet
-MonitorEnter(obj)
- JNIEnv * env = FETCHENV;
- jobject obj
- CODE:
- {
- RETVAL = (*env)->MonitorEnter(env, obj);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-SysRet
-MonitorExit(obj)
- JNIEnv * env = FETCHENV;
- jobject obj
- CODE:
- {
- RETVAL = (*env)->MonitorExit(env, obj);
- RESTOREENV;
- }
- OUTPUT:
- RETVAL
-
-JavaVM *
-GetJavaVM(...)
- JNIEnv * env = FETCHENV;
- CODE:
- {
-#ifdef JPL_DEBUG
- jpldebug = 1;
-#else
- jpldebug = 0;
-#endif
- if (env) { /* We're embedded. */
- if ((*env)->GetJavaVM(env, &RETVAL) < 0)
- RETVAL = 0;
- }
- else { /* We're embedding. */
-#ifdef KAFFE
- JavaVMInitArgs vm_args;
-#else
- JDK1_1InitArgs vm_args;
-#endif
- char *lib;
- if (jpldebug) {
- fprintf(stderr, "We're embedding Java in Perl.\n");
- }
-
- if (items--) {
- ++mark;
- lib = SvPV(*mark, PL_na);
- }
- else
- lib = 0;
- if (jpldebug) {
- fprintf(stderr, "lib is %s.\n", lib);
- }
-#ifdef WIN32
- if (LoadLibrary("jvm.dll")) {
- if (!LoadLibrary("javai.dll")) {
- warn("Can't load javai.dll");
- }
- } else {
- if (lib && !LoadLibrary(lib))
- croak("Can't load javai.dll");
- }
-#else
- if (jpldebug) {
- fprintf(stderr, "Opening Java shared library.\n");
- }
-#ifdef KAFFE
- if (!dlopen("libkaffevm.so", RTLD_LAZY|RTLD_GLOBAL)) {
-#else
- if (!dlopen("libjava.so", RTLD_LAZY|RTLD_GLOBAL)) {
-#endif
- if (lib && !dlopen(lib, RTLD_LAZY|RTLD_GLOBAL))
- croak("Can't load Java shared library.");
- }
-#endif
- /* Kaffe seems to get very upset if vm_args.version isn't set */
-#ifdef KAFFE
- vm_args.version = JNI_VERSION_1_1;
-#endif
- JNI_GetDefaultJavaVMInitArgs(&vm_args);
- vm_args.exit = &call_my_exit;
- if (jpldebug) {
- fprintf(stderr, "items = %d\n", items);
- fprintf(stderr, "mark = %s\n", SvPV(*mark, PL_na));
- }
- while (items > 1) {
- char *s;
- ++mark;
- s = SvPV(*mark,PL_na);
- ++mark;
- if (jpldebug) {
- fprintf(stderr, "*s = %s\n", s);
- fprintf(stderr, "val = %s\n", SvPV(*mark, PL_na));
- }
- items -= 2;
- if (strEQ(s, "checkSource"))
- vm_args.checkSource = (jint)SvIV(*mark);
- else if (strEQ(s, "nativeStackSize"))
- vm_args.nativeStackSize = (jint)SvIV(*mark);
- else if (strEQ(s, "javaStackSize"))
- vm_args.javaStackSize = (jint)SvIV(*mark);
- else if (strEQ(s, "minHeapSize"))
- vm_args.minHeapSize = (jint)SvIV(*mark);
- else if (strEQ(s, "maxHeapSize"))
- vm_args.maxHeapSize = (jint)SvIV(*mark);
- else if (strEQ(s, "verifyMode"))
- vm_args.verifyMode = (jint)SvIV(*mark);
- else if (strEQ(s, "classpath"))
- vm_args.classpath = savepv(SvPV(*mark,PL_na));
- else if (strEQ(s, "enableClassGC"))
- vm_args.enableClassGC = (jint)SvIV(*mark);
- else if (strEQ(s, "enableVerboseGC"))
- vm_args.enableVerboseGC = (jint)SvIV(*mark);
- else if (strEQ(s, "disableAsyncGC"))
- vm_args.disableAsyncGC = (jint)SvIV(*mark);
-#ifdef KAFFE
- else if (strEQ(s, "libraryhome"))
- vm_args.libraryhome = savepv(SvPV(*mark,PL_na));
- else if (strEQ(s, "classhome"))
- vm_args.classhome = savepv(SvPV(*mark,PL_na));
- else if (strEQ(s, "enableVerboseJIT"))
- vm_args.enableVerboseJIT = (jint)SvIV(*mark);
- else if (strEQ(s, "enableVerboseClassloading"))
- vm_args.enableVerboseClassloading = (jint)SvIV(*mark);
- else if (strEQ(s, "enableVerboseCall"))
- vm_args.enableVerboseCall = (jint)SvIV(*mark);
- else if (strEQ(s, "allocHeapSize"))
- vm_args.allocHeapSize = (jint)SvIV(*mark);
-#else
- else if (strEQ(s, "verbose"))
- vm_args.verbose = (jint)SvIV(*mark);
- else if (strEQ(s, "debugging"))
- vm_args.debugging = (jboolean)SvIV(*mark);
- else if (strEQ(s, "debugPort"))
- vm_args.debugPort = (jint)SvIV(*mark);
-#endif
- else
- croak("unrecognized option: %s", s);
- }
-
- if (jpldebug) {
- fprintf(stderr, "Creating Java VM...\n");
- fprintf(stderr, "Working CLASSPATH: %s\n",
- vm_args.classpath);
- }
- if (JNI_CreateJavaVM(&RETVAL, &jplcurenv, &vm_args) < 0) {
- croak("Unable to create instance of JVM");
- }
- if (jpldebug) {
- fprintf(stderr, "Created Java VM.\n");
- }
-
- }
- }
-
+/*
+ * Copyright 1997, O'Reilly & Associate, Inc.
+ *
+ * This package may be copied under the same terms as Perl itself.
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#include <stdio.h>
+#include <jni.h>
+
+#ifndef PERL_VERSION
+# include <patchlevel.h>
+# define PERL_REVISION 5
+# define PERL_VERSION PATCHLEVEL
+# define PERL_SUBVERSION SUBVERSION
+#endif
+
+#if PERL_REVISION == 5 && (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION <= 75))
+# define PL_na na
+# define PL_sv_no sv_no
+# define PL_sv_undef sv_undef
+# define PL_dowarn dowarn
+#endif
+
+#ifndef newSVpvn
+# define newSVpvn(a,b) newSVpv(a,b)
+#endif
+
+#ifndef pTHX
+# define pTHX void
+# define pTHX_
+# define aTHX
+# define aTHX_
+# define dTHX extern int JNI___notused
+#endif
+
+#ifndef WIN32
+# include <dlfcn.h>
+#endif
+
+#ifdef EMBEDDEDPERL
+extern JNIEnv* jplcurenv;
+extern int jpldebug;
+#else
+JNIEnv* jplcurenv;
+int jpldebug = 1;
+#endif
+
+#define SysRet jint
+
+#ifdef WIN32
+static void JNICALL call_my_exit(jint status)
+{
+ my_exit(status);
+}
+#else
+static void call_my_exit(jint status)
+{
+ my_exit(status);
+}
+#endif
+
+jvalue*
+makeargs(char *sig, SV** svp, int items)
+{
+ jvalue* jv = (jvalue*)safemalloc(sizeof(jvalue) * items);
+ int ix = 0;
+ char *s = sig;
+ JNIEnv* env = jplcurenv;
+ char *start;
+ STRLEN n_a;
+
+ if (jpldebug)
+ fprintf(stderr, "sig = %s, items = %d\n", sig, items);
+ if (*s++ != '(')
+ goto cleanup;
+
+ while (items--) {
+ SV *sv = *svp++;
+ start = s;
+ switch (*s++) {
+ case 'Z':
+ jv[ix++].z = (jboolean)(SvIV(sv) != 0);
+ break;
+ case 'B':
+ jv[ix++].b = (jbyte)SvIV(sv);
+ break;
+ case 'C':
+ jv[ix++].c = (jchar)SvIV(sv);
+ break;
+ case 'S':
+ jv[ix++].s = (jshort)SvIV(sv);
+ break;
+ case 'I':
+ jv[ix++].i = (jint)SvIV(sv);
+ break;
+ case 'J':
+ jv[ix++].j = (jlong)SvNV(sv);
+ break;
+ case 'F':
+ jv[ix++].f = (jfloat)SvNV(sv);
+ break;
+ case 'D':
+ jv[ix++].d = (jdouble)SvNV(sv);
+ break;
+ case '[':
+ switch (*s++) {
+ case 'Z':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jboolean* buf = (jboolean*)malloc(len * sizeof(jboolean));
+ int i;
+ SV** esv;
+
+ jbooleanArray ja = (*env)->NewBooleanArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jboolean)SvIV(*esv);
+ (*env)->SetBooleanArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jboolean);
+
+ jbooleanArray ja = (*env)->NewBooleanArray(env, len);
+ (*env)->SetBooleanArrayRegion(env, ja, 0, len, (jboolean*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'B':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jbyte* buf = (jbyte*)malloc(len * sizeof(jbyte));
+ int i;
+ SV** esv;
+
+ jbyteArray ja = (*env)->NewByteArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jbyte)SvIV(*esv);
+ (*env)->SetByteArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jbyte);
+
+ jbyteArray ja = (*env)->NewByteArray(env, len);
+ (*env)->SetByteArrayRegion(env, ja, 0, len, (jbyte*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'C':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jchar* buf = (jchar*)malloc(len * sizeof(jchar));
+ int i;
+ SV** esv;
+
+ jcharArray ja = (*env)->NewCharArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jchar)SvIV(*esv);
+ (*env)->SetCharArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jchar);
+
+ jcharArray ja = (*env)->NewCharArray(env, len);
+ (*env)->SetCharArrayRegion(env, ja, 0, len, (jchar*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'S':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jshort* buf = (jshort*)malloc(len * sizeof(jshort));
+ int i;
+ SV** esv;
+
+ jshortArray ja = (*env)->NewShortArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jshort)SvIV(*esv);
+ (*env)->SetShortArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jshort);
+
+ jshortArray ja = (*env)->NewShortArray(env, len);
+ (*env)->SetShortArrayRegion(env, ja, 0, len, (jshort*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'I':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jint* buf = (jint*)malloc(len * sizeof(jint));
+ int i;
+ SV** esv;
+
+ jintArray ja = (*env)->NewIntArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jint)SvIV(*esv);
+ (*env)->SetIntArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jint);
+
+ jintArray ja = (*env)->NewIntArray(env, len);
+ (*env)->SetIntArrayRegion(env, ja, 0, len, (jint*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'J':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jlong* buf = (jlong*)malloc(len * sizeof(jlong));
+ int i;
+ SV** esv;
+
+ jlongArray ja = (*env)->NewLongArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jlong)SvNV(*esv);
+ (*env)->SetLongArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jlong);
+
+ jlongArray ja = (*env)->NewLongArray(env, len);
+ (*env)->SetLongArrayRegion(env, ja, 0, len, (jlong*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'F':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jfloat* buf = (jfloat*)malloc(len * sizeof(jfloat));
+ int i;
+ SV** esv;
+
+ jfloatArray ja = (*env)->NewFloatArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jfloat)SvNV(*esv);
+ (*env)->SetFloatArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jfloat);
+
+ jfloatArray ja = (*env)->NewFloatArray(env, len);
+ (*env)->SetFloatArrayRegion(env, ja, 0, len, (jfloat*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'D':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jdouble* buf = (jdouble*)malloc(len * sizeof(jdouble));
+ int i;
+ SV** esv;
+
+ jdoubleArray ja = (*env)->NewDoubleArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jdouble)SvNV(*esv);
+ (*env)->SetDoubleArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jdouble);
+
+ jdoubleArray ja = (*env)->NewDoubleArray(env, len);
+ (*env)->SetDoubleArrayRegion(env, ja, 0, len, (jdouble*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'L':
+ while (*s != ';') s++;
+ s++;
+ if (strnEQ(start, "[Ljava/lang/String;", 19)) {
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ int i;
+ SV** esv;
+ static jclass jcl = 0;
+ jobjectArray ja;
+
+ if (!jcl)
+ jcl = (*env)->FindClass(env, "java/lang/String");
+ ja = (*env)->NewObjectArray(env, len, jcl, 0);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
+ jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));
+ (*env)->SetObjectArrayElement(env, ja, i, str);
+ }
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ }
+ /* FALL THROUGH */
+ default:
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ int i;
+ SV** esv;
+ static jclass jcl = 0;
+ jobjectArray ja;
+
+ if (!jcl)
+ jcl = (*env)->FindClass(env, "java/lang/Object");
+ ja = (*env)->NewObjectArray(env, len, jcl, 0);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
+ if (SvROK(*esv) && (rv = SvRV(*esv)) && SvOBJECT(rv)) {
+ (*env)->SetObjectArrayElement(env, ja, i, (jobject)(void*)SvIV(rv));
+ }
+ else {
+ jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));
+ (*env)->SetObjectArrayElement(env, ja, i, str);
+ }
+ }
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ }
+ break;
+ case 'L':
+ if (!SvROK(sv) || strnEQ(s, "java/lang/String;", 17)) {
+ s += 17;
+ jv[ix++].l = (jobject)(*env)->NewStringUTF(env, (char*) SvPV(sv,n_a));
+ break;
+ }
+ while (*s != ';') s++;
+ s++;
+ if (SvROK(sv)) {
+ SV* rv = SvRV(sv);
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ }
+ break;
+ case ')':
+ croak("too many arguments, signature: %s", sig);
+ goto cleanup;
+ default:
+ croak("panic: malformed signature: %s", s-1);
+ goto cleanup;
+ }
+
+ }
+ if (*s != ')') {
+ croak("not enough arguments, signature: %s", sig);
+ goto cleanup;
+ }
+ return jv;
+
+cleanup:
+ safefree((char*)jv);
+ return 0;
+}
+
+static int
+not_here(char *s)
+{
+ croak("%s not implemented on this architecture", s);
+ return -1;
+}
+
+static double
+constant(char *name, int arg)
+{
+ errno = 0;
+ switch (*name) {
+ case 'A':
+ break;
+ case 'B':
+ break;
+ case 'C':
+ break;
+ case 'D':
+ break;
+ case 'E':
+ break;
+ case 'F':
+ break;
+ case 'G':
+ break;
+ case 'H':
+ break;
+ case 'I':
+ break;
+ case 'J':
+ if (strEQ(name, "JNI_ABORT"))
+#ifdef JNI_ABORT
+ return JNI_ABORT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_COMMIT"))
+#ifdef JNI_COMMIT
+ return JNI_COMMIT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_ERR"))
+#ifdef JNI_ERR
+ return JNI_ERR;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_FALSE"))
+#ifdef JNI_FALSE
+ return JNI_FALSE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_H"))
+#ifdef JNI_H
+#ifdef WIN32
+ return 1;
+#else
+ return JNI_H;
+#endif
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_OK"))
+#ifdef JNI_OK
+ return JNI_OK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_TRUE"))
+#ifdef JNI_TRUE
+ return JNI_TRUE;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'K':
+ break;
+ case 'L':
+ break;
+ case 'M':
+ break;
+ case 'N':
+ break;
+ case 'O':
+ break;
+ case 'P':
+ break;
+ case 'Q':
+ break;
+ case 'R':
+ break;
+ case 'S':
+ break;
+ case 'T':
+ break;
+ case 'U':
+ break;
+ case 'V':
+ break;
+ case 'W':
+ break;
+ case 'X':
+ break;
+ case 'Y':
+ break;
+ case 'Z':
+ break;
+ }
+ errno = EINVAL;
+ return 0;
+
+not_there:
+ errno = ENOENT;
+ return 0;
+}
+
+#define FETCHENV jplcurenv
+#define RESTOREENV jplcurenv = env
+
+MODULE = JNI PACKAGE = JNI
+
+PROTOTYPES: ENABLE
+
+double
+constant(name,arg)
+ char * name
+ int arg
+
+jint
+GetVersion()
+ JNIEnv * env = FETCHENV;
+ CODE:
+ {
+ RETVAL = (*env)->GetVersion(env);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jclass
+DefineClass(name, loader, buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jsize buf_len_ = NO_INIT;
+ const char * name
+ jobject loader
+ const jbyte * buf
+ CODE:
+ {
+#ifdef KAFFE
+ RETVAL = (*env)->DefineClass(env, loader, buf, (jsize)buf_len_);
+#else
+ RETVAL = (*env)->DefineClass(env, name, loader, buf, (jsize)buf_len_);
+#endif
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jclass
+FindClass(name)
+ JNIEnv * env = FETCHENV;
+ const char * name
+ CODE:
+ {
+ RETVAL = (*env)->FindClass(env, name);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jclass
+GetSuperclass(sub)
+ JNIEnv * env = FETCHENV;
+ jclass sub
+ CODE:
+ {
+ RETVAL = (*env)->GetSuperclass(env, sub);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+IsAssignableFrom(sub, sup)
+ JNIEnv * env = FETCHENV;
+ jclass sub
+ jclass sup
+ CODE:
+ {
+ RETVAL = (*env)->IsAssignableFrom(env, sub, sup);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+SysRet
+Throw(obj)
+ JNIEnv * env = FETCHENV;
+ jthrowable obj
+ CODE:
+ {
+ RETVAL = (*env)->Throw(env, obj);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+SysRet
+ThrowNew(clazz, msg)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ const char * msg
+ CODE:
+ {
+ RETVAL = (*env)->ThrowNew(env, clazz, msg);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jthrowable
+ExceptionOccurred()
+ JNIEnv * env = FETCHENV;
+ CODE:
+ {
+ RETVAL = (*env)->ExceptionOccurred(env);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+ExceptionDescribe()
+ JNIEnv * env = FETCHENV;
+ CODE:
+ {
+ (*env)->ExceptionDescribe(env);
+ RESTOREENV;
+ }
+
+void
+ExceptionClear()
+ JNIEnv * env = FETCHENV;
+ CODE:
+ {
+ (*env)->ExceptionClear(env);
+ RESTOREENV;
+ }
+
+void
+FatalError(msg)
+ JNIEnv * env = FETCHENV;
+ const char * msg
+ CODE:
+ {
+ (*env)->FatalError(env, msg);
+ RESTOREENV;
+ }
+
+jobject
+NewGlobalRef(lobj)
+ JNIEnv * env = FETCHENV;
+ jobject lobj
+ CODE:
+ {
+ RETVAL = (*env)->NewGlobalRef(env, lobj);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+DeleteGlobalRef(gref)
+ JNIEnv * env = FETCHENV;
+ jobject gref
+ CODE:
+ {
+ (*env)->DeleteGlobalRef(env, gref);
+ RESTOREENV;
+ }
+
+void
+DeleteLocalRef(obj)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ CODE:
+ {
+ (*env)->DeleteLocalRef(env, obj);
+ RESTOREENV;
+ }
+
+jboolean
+IsSameObject(obj1,obj2)
+ JNIEnv * env = FETCHENV;
+ jobject obj1
+ jobject obj2
+ CODE:
+ {
+ RETVAL = (*env)->IsSameObject(env, obj1,obj2);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+AllocObject(clazz)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ CODE:
+ {
+ RETVAL = (*env)->AllocObject(env, clazz);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+NewObject(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+NewObjectA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jclass
+GetObjectClass(obj)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ CODE:
+ {
+ RETVAL = (*env)->GetObjectClass(env, obj);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+IsInstanceOf(obj,clazz)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ CODE:
+ {
+ RETVAL = (*env)->IsInstanceOf(env, obj,clazz);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jmethodID
+GetMethodID(clazz,name,sig)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ const char * name
+ const char * sig
+ CODE:
+ {
+ RETVAL = (*env)->GetMethodID(env, clazz,name,sig);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+CallObjectMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+CallObjectMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallBooleanMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallBooleanMethodA(obj,methodID, args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID, args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallByteMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallByteMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallCharMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallCharMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallShortMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallShortMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallIntMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallIntMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallLongMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallLongMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallFloatMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallFloatMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallDoubleMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallDoubleMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+CallVoidMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ (*env)->CallVoidMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+
+void
+CallVoidMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ (*env)->CallVoidMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+
+jobject
+CallNonvirtualObjectMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+CallNonvirtualObjectMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallNonvirtualBooleanMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallNonvirtualBooleanMethodA(obj,clazz,methodID, args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID, args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallNonvirtualByteMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallNonvirtualByteMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallNonvirtualCharMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallNonvirtualCharMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallNonvirtualShortMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallNonvirtualShortMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallNonvirtualIntMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallNonvirtualIntMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallNonvirtualLongMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallNonvirtualLongMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallNonvirtualFloatMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallNonvirtualFloatMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallNonvirtualDoubleMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallNonvirtualDoubleMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+CallNonvirtualVoidMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+
+void
+CallNonvirtualVoidMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+
+jfieldID
+GetFieldID(clazz,name,sig)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ const char * name
+ const char * sig
+ CODE:
+ {
+ RETVAL = (*env)->GetFieldID(env, clazz,name,sig);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+GetObjectField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetObjectField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+GetBooleanField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetBooleanField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+GetByteField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetByteField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+GetCharField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetCharField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+GetShortField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetShortField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+GetIntField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetIntField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+GetLongField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetLongField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+GetFloatField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetFloatField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+GetDoubleField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetDoubleField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+SetObjectField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jobject val
+ CODE:
+ {
+ (*env)->SetObjectField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetBooleanField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jboolean val
+ CODE:
+ {
+ (*env)->SetBooleanField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetByteField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jbyte val
+ CODE:
+ {
+ (*env)->SetByteField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetCharField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jchar val
+ CODE:
+ {
+ (*env)->SetCharField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetShortField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jshort val
+ CODE:
+ {
+ (*env)->SetShortField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetIntField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jint val
+ CODE:
+ {
+ (*env)->SetIntField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetLongField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jlong val
+ CODE:
+ {
+ (*env)->SetLongField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetFloatField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jfloat val
+ CODE:
+ {
+ (*env)->SetFloatField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetDoubleField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jdouble val
+ CODE:
+ {
+ (*env)->SetDoubleField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+jmethodID
+GetStaticMethodID(clazz,name,sig)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ const char * name
+ const char * sig
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticMethodID(env, clazz,name,sig);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+CallStaticObjectMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+CallStaticObjectMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallStaticBooleanMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallStaticBooleanMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallStaticByteMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallStaticByteMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallStaticCharMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallStaticCharMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallStaticShortMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallStaticShortMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallStaticIntMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallStaticIntMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallStaticLongMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallStaticLongMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallStaticFloatMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallStaticFloatMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallStaticDoubleMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallStaticDoubleMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+CallStaticVoidMethod(cls,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass cls
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
+ RESTOREENV;
+ }
+
+void
+CallStaticVoidMethodA(cls,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass cls
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
+ RESTOREENV;
+ }
+
+jfieldID
+GetStaticFieldID(clazz,name,sig)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ const char * name
+ const char * sig
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticFieldID(env, clazz,name,sig);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+GetStaticObjectField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticObjectField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+GetStaticBooleanField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticBooleanField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+GetStaticByteField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticByteField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+GetStaticCharField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticCharField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+GetStaticShortField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticShortField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+GetStaticIntField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticIntField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+GetStaticLongField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticLongField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+GetStaticFloatField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticFloatField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+GetStaticDoubleField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticDoubleField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+SetStaticObjectField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jobject value
+ CODE:
+ {
+ (*env)->SetStaticObjectField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticBooleanField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jboolean value
+ CODE:
+ {
+ (*env)->SetStaticBooleanField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticByteField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jbyte value
+ CODE:
+ {
+ (*env)->SetStaticByteField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticCharField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jchar value
+ CODE:
+ {
+ (*env)->SetStaticCharField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticShortField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jshort value
+ CODE:
+ {
+ (*env)->SetStaticShortField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticIntField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jint value
+ CODE:
+ {
+ (*env)->SetStaticIntField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticLongField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jlong value
+ CODE:
+ {
+ (*env)->SetStaticLongField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticFloatField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jfloat value
+ CODE:
+ {
+ (*env)->SetStaticFloatField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticDoubleField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jdouble value
+ CODE:
+ {
+ (*env)->SetStaticDoubleField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+jstring
+NewString(unicode)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jsize unicode_len_ = NO_INIT;
+ const jchar * unicode
+ CODE:
+ {
+ RETVAL = (*env)->NewString(env, unicode, unicode_len_);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jsize
+GetStringLength(str)
+ JNIEnv * env = FETCHENV;
+ jstring str
+ CODE:
+ {
+ RETVAL = (*env)->GetStringLength(env, str);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+const jchar *
+GetStringChars(str)
+ JNIEnv * env = FETCHENV;
+ jstring str
+ jboolean isCopy = NO_INIT;
+ jsize RETVAL_len_ = NO_INIT;
+ CODE:
+ {
+ RETVAL = (*env)->GetStringChars(env, str,&isCopy);
+ RETVAL_len_ = (*env)->GetStringLength(env, str);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+ CLEANUP:
+ (*env)->ReleaseStringChars(env, str,RETVAL);
+
+jstring
+NewStringUTF(utf)
+ JNIEnv * env = FETCHENV;
+ const char * utf
+ CODE:
+ {
+ RETVAL = (*env)->NewStringUTF(env, utf);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jsize
+GetStringUTFLength(str)
+ JNIEnv * env = FETCHENV;
+ jstring str
+ CODE:
+ {
+ RETVAL = (*env)->GetStringUTFLength(env, str);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+const char *
+GetStringUTFChars(str)
+ JNIEnv * env = FETCHENV;
+ jstring str
+ jboolean isCopy = NO_INIT;
+ CODE:
+ {
+ RETVAL = (*env)->GetStringUTFChars(env, str,&isCopy);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+ CLEANUP:
+ (*env)->ReleaseStringUTFChars(env, str, RETVAL);
+
+
+jsize
+GetArrayLength(array)
+ JNIEnv * env = FETCHENV;
+ jarray array
+ CODE:
+ {
+ RETVAL = (*env)->GetArrayLength(env, array);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobjectArray
+NewObjectArray(len,clazz,init)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ jclass clazz
+ jobject init
+ CODE:
+ {
+ RETVAL = (*env)->NewObjectArray(env, len,clazz,init);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+GetObjectArrayElement(array,index)
+ JNIEnv * env = FETCHENV;
+ jobjectArray array
+ jsize index
+ CODE:
+ {
+ RETVAL = (*env)->GetObjectArrayElement(env, array,index);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+SetObjectArrayElement(array,index,val)
+ JNIEnv * env = FETCHENV;
+ jobjectArray array
+ jsize index
+ jobject val
+ CODE:
+ {
+ (*env)->SetObjectArrayElement(env, array,index,val);
+ RESTOREENV;
+ }
+
+jbooleanArray
+NewBooleanArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewBooleanArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyteArray
+NewByteArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewByteArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jcharArray
+NewCharArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewCharArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshortArray
+NewShortArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewShortArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jintArray
+NewIntArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewIntArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlongArray
+NewLongArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewLongArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloatArray
+NewFloatArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewFloatArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdoubleArray
+NewDoubleArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewDoubleArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean *
+GetBooleanArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jbooleanArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetBooleanArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jboolean* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jboolean))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseBooleanArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jbyte *
+GetByteArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jbyteArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetByteArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jbyte* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jbyte))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jchar *
+GetCharArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jcharArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetCharArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jchar* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jchar))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jshort *
+GetShortArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jshortArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetShortArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jshort* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jshort))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jint *
+GetIntArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jintArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetIntArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jint* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jint))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jlong *
+GetLongArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jlongArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetLongArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jlong* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jlong))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jfloat *
+GetFloatArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jfloatArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetFloatArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jfloat* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSVnv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jfloat))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jdouble *
+GetDoubleArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jdoubleArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetDoubleArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jdouble* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSVnv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jdouble))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+void
+GetBooleanArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jbooleanArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jboolean * buf = (jboolean*)sv_grow(ST(3),len * sizeof(jboolean)+1);
+ CODE:
+ {
+ (*env)->GetBooleanArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jboolean));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetByteArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jbyteArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jbyte * buf = (jbyte*)sv_grow(ST(3),len * sizeof(jbyte)+1);
+ CODE:
+ {
+ (*env)->GetByteArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jbyte));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetCharArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jcharArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jchar * buf = (jchar*)sv_grow(ST(3),len * sizeof(jchar)+1);
+ CODE:
+ {
+ (*env)->GetCharArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jchar));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetShortArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jshortArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jshort * buf = (jshort*)sv_grow(ST(3),len * sizeof(jshort)+1);
+ CODE:
+ {
+ (*env)->GetShortArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jshort));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetIntArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jintArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jint * buf = (jint*)sv_grow(ST(3),len * sizeof(jint)+1);
+ CODE:
+ {
+ (*env)->GetIntArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jint));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetLongArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jlongArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jlong * buf = (jlong*)sv_grow(ST(3),len * sizeof(jlong)+1);
+ CODE:
+ {
+ (*env)->GetLongArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jlong));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetFloatArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jfloatArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jfloat * buf = (jfloat*)sv_grow(ST(3),len * sizeof(jfloat)+1);
+ CODE:
+ {
+ (*env)->GetFloatArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jfloat));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetDoubleArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jdoubleArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jdouble * buf = (jdouble*)sv_grow(ST(3),len * sizeof(jdouble)+1);
+ CODE:
+ {
+ (*env)->GetDoubleArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jdouble));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+SetBooleanArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jbooleanArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jboolean * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetBooleanArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetByteArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jbyteArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jbyte * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetByteArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetCharArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jcharArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jchar * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetCharArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetShortArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jshortArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jshort * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetShortArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetIntArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jintArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jint * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetIntArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetLongArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jlongArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jlong * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetLongArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetFloatArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jfloatArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jfloat * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetFloatArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetDoubleArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jdoubleArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jdouble * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetDoubleArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+SysRet
+RegisterNatives(clazz,methods,nMethods)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ JNINativeMethod * methods
+ jint nMethods
+ CODE:
+ {
+ RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods);
+ }
+
+SysRet
+UnregisterNatives(clazz)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ CODE:
+ {
+ RETVAL = (*env)->UnregisterNatives(env, clazz);
+ }
+ OUTPUT:
+ RETVAL
+
+SysRet
+MonitorEnter(obj)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ CODE:
+ {
+ RETVAL = (*env)->MonitorEnter(env, obj);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+SysRet
+MonitorExit(obj)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ CODE:
+ {
+ RETVAL = (*env)->MonitorExit(env, obj);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+JavaVM *
+GetJavaVM(...)
+ JNIEnv * env = FETCHENV;
+ CODE:
+ {
+#ifdef JPL_DEBUG
+ jpldebug = 1;
+#else
+ jpldebug = 0;
+#endif
+ if (env) { /* We're embedded. */
+ if ((*env)->GetJavaVM(env, &RETVAL) < 0)
+ RETVAL = 0;
+ }
+ else { /* We're embedding. */
+#ifdef KAFFE
+ JavaVMInitArgs vm_args;
+#else
+ JDK1_1InitArgs vm_args;
+#endif
+ char *lib;
+ if (jpldebug) {
+ fprintf(stderr, "We're embedding Java in Perl.\n");
+ }
+
+ if (items--) {
+ ++mark;
+ lib = SvPV(*mark, PL_na);
+ }
+ else
+ lib = 0;
+ if (jpldebug) {
+ fprintf(stderr, "lib is %s.\n", lib);
+ }
+#ifdef WIN32
+ if (LoadLibrary("jvm.dll")) {
+ if (!LoadLibrary("javai.dll")) {
+ warn("Can't load javai.dll");
+ }
+ } else {
+ if (lib && !LoadLibrary(lib))
+ croak("Can't load javai.dll");
+ }
+#else
+ if (jpldebug) {
+ fprintf(stderr, "Opening Java shared library.\n");
+ }
+#ifdef KAFFE
+ if (!dlopen("libkaffevm.so", RTLD_LAZY|RTLD_GLOBAL)) {
+#else
+ if (!dlopen("libjava.so", RTLD_LAZY|RTLD_GLOBAL)) {
+#endif
+ if (lib && !dlopen(lib, RTLD_LAZY|RTLD_GLOBAL))
+ croak("Can't load Java shared library.");
+ }
+#endif
+ /* Kaffe seems to get very upset if vm_args.version isn't set */
+#ifdef KAFFE
+ vm_args.version = JNI_VERSION_1_1;
+#endif
+ JNI_GetDefaultJavaVMInitArgs(&vm_args);
+ vm_args.exit = &call_my_exit;
+ if (jpldebug) {
+ fprintf(stderr, "items = %d\n", items);
+ fprintf(stderr, "mark = %s\n", SvPV(*mark, PL_na));
+ }
+ while (items > 1) {
+ char *s;
+ ++mark;
+ s = SvPV(*mark,PL_na);
+ ++mark;
+ if (jpldebug) {
+ fprintf(stderr, "*s = %s\n", s);
+ fprintf(stderr, "val = %s\n", SvPV(*mark, PL_na));
+ }
+ items -= 2;
+ if (strEQ(s, "checkSource"))
+ vm_args.checkSource = (jint)SvIV(*mark);
+ else if (strEQ(s, "nativeStackSize"))
+ vm_args.nativeStackSize = (jint)SvIV(*mark);
+ else if (strEQ(s, "javaStackSize"))
+ vm_args.javaStackSize = (jint)SvIV(*mark);
+ else if (strEQ(s, "minHeapSize"))
+ vm_args.minHeapSize = (jint)SvIV(*mark);
+ else if (strEQ(s, "maxHeapSize"))
+ vm_args.maxHeapSize = (jint)SvIV(*mark);
+ else if (strEQ(s, "verifyMode"))
+ vm_args.verifyMode = (jint)SvIV(*mark);
+ else if (strEQ(s, "classpath"))
+ vm_args.classpath = savepv(SvPV(*mark,PL_na));
+ else if (strEQ(s, "enableClassGC"))
+ vm_args.enableClassGC = (jint)SvIV(*mark);
+ else if (strEQ(s, "enableVerboseGC"))
+ vm_args.enableVerboseGC = (jint)SvIV(*mark);
+ else if (strEQ(s, "disableAsyncGC"))
+ vm_args.disableAsyncGC = (jint)SvIV(*mark);
+#ifdef KAFFE
+ else if (strEQ(s, "libraryhome"))
+ vm_args.libraryhome = savepv(SvPV(*mark,PL_na));
+ else if (strEQ(s, "classhome"))
+ vm_args.classhome = savepv(SvPV(*mark,PL_na));
+ else if (strEQ(s, "enableVerboseJIT"))
+ vm_args.enableVerboseJIT = (jint)SvIV(*mark);
+ else if (strEQ(s, "enableVerboseClassloading"))
+ vm_args.enableVerboseClassloading = (jint)SvIV(*mark);
+ else if (strEQ(s, "enableVerboseCall"))
+ vm_args.enableVerboseCall = (jint)SvIV(*mark);
+ else if (strEQ(s, "allocHeapSize"))
+ vm_args.allocHeapSize = (jint)SvIV(*mark);
+#else
+ else if (strEQ(s, "verbose"))
+ vm_args.verbose = (jint)SvIV(*mark);
+ else if (strEQ(s, "debugging"))
+ vm_args.debugging = (jboolean)SvIV(*mark);
+ else if (strEQ(s, "debugPort"))
+ vm_args.debugPort = (jint)SvIV(*mark);
+#endif
+ else
+ croak("unrecognized option: %s", s);
+ }
+
+ if (jpldebug) {
+ fprintf(stderr, "Creating Java VM...\n");
+ fprintf(stderr, "Working CLASSPATH: %s\n",
+ vm_args.classpath);
+ }
+ if (JNI_CreateJavaVM(&RETVAL, &jplcurenv, &vm_args) < 0) {
+ croak("Unable to create instance of JVM");
+ }
+ if (jpldebug) {
+ fprintf(stderr, "Created Java VM.\n");
+ }
+
+ }
+ }
+
diff --git a/jpl/JNI/Makefile.PL b/jpl/JNI/Makefile.PL
index 146e3d079f..a4865b5503 100644
--- a/jpl/JNI/Makefile.PL
+++ b/jpl/JNI/Makefile.PL
@@ -1,297 +1,297 @@
-#!/usr/bin/perl
-use ExtUtils::MakeMaker;
-use Getopt::Std;
-use Config;
-$ARCHNAME = $Config{archname};
-use File::Basename;
-
-getopts('e'); # embedding?
-
-$CCFLAGS .= $ENV{CCFLAGS} if defined $ENV{CCFLAGS};
-
-# $USE_KAFFE is a boolean that tells us whether or not we should use Kaffe.
-# Set by find_includes (it seemed as good a place as any).
-
-# Note that we don't check to see the version of Kaffe is one we support.
-# Currently, the only one we support is the one from CVS.
-
-my $USE_KAFFE = 0;
-
-#require "JNIConfig";
-
-if ($^O eq 'solaris') {
- $LIBPATH = " -R$Config{archlib}/CORE -L$Config{archlib}/CORE";
-} elsif ($^O eq 'MSWin32') {
- $LIBPATH = " -L$Config{archlib}\\CORE";
- # MSR - added MS VC++ default library path
- # bjepson - fixed to support path names w/spaces in them.
- push(@WINLIBS, (split"\;",$ENV{LIB}));
- grep s/\\$//, @WINLIBS; # eliminate trailing \
- grep s/\/$//, @WINLIBS; # eliminate trailing /
- $LIBPATH .= join(" ", "", map { qq["-L$_" ] } @WINLIBS);
-} else {
- $LIBPATH = " -L$Config{archlib}/CORE";
-}
-#$LIBS = " -lperl";
-
-# Figure out where Java might live
-#
-# MSR - added JDK 1.3
-#
-
-my @JAVA_HOME_GUESSES = qw(/usr/local/java /usr/java /usr/local/jdk117_v3
- C:\\JDK1.1.8 C:\\JDK1.2.1 C:\\JDK1.2.2 C:\\JDK1.3 );
-
-my @KAFFE_PREFIX_GUESSES = qw(/usr/local /usr);
-
-if (! defined $ENV{JAVA_HOME}) {
- print "You didn't define JAVA_HOME, so I'm trying a few guesses.\n";
- print "If this fails, you might want to try setting JAVA_HOME and\n";
- print "running me again.\n";
-} else {
- @JAVA_HOME_GUESSES = ( $ENV{JAVA_HOME} );
-}
-
-if (! defined $ENV{KAFFE_PREFIX}) {
- print "\nYou didn't define KAFFE_PREFIX, so I'm trying a few guesses.",
- "\nIf this fails, and you are using Kaffe, you might want to try\n",
- "setting KAFFE_PREFIX and running me again.\n",
- "If you want to ignore any possible Kaffe installation, set the\n",
- "KAFFE_PREFIX to and empty string.\n\n";
-} else {
- @KAFFE_PREFIX_GUESSES = ($ENV{KAFFE_PREFIX} eq "") ? () :
- ( $ENV{KAFFE_PREFIX} );
-}
-
-my(@KAFFE_INCLUDE_GUESSES, @KAFFE_LIB_GUESSES);
-foreach my $kaffePrefix (@KAFFE_PREFIX_GUESSES) {
- push(@KAFFE_INCLUDE_GUESSES, "$kaffePrefix/include/kaffe");
- push(@KAFFE_LIB_GUESSES, "$kaffePrefix/lib");
- push(@KAFFE_LIB_GUESSES, "$kaffePrefix/lib/kaffe");
-}
- $guess .= "/include/kaffe";
-
-# Let's find out where jni.h lives
-#
-my @INCLUDE = find_includes();
-
-if ($^O eq 'MSWin32') {
- # MSR - added MS VC++ default include path
- push(@INCLUDE,(split"\;",$ENV{INCLUDE}));
- grep s/\\$//, @INCLUDE; # remove trailing \
- grep s/\/$//, @INCLUDE; # remove trailing \
- $INC = join("", map { qq["-I$_" ] } @INCLUDE);
-
-} else {
- $INC = join(" -I", ("", @INCLUDE));
-}
-
-# Let's find out the name of the Java shared library
-#
-my @JAVALIBS = find_libs();
-
-# Find out some defines based on the library we are linking to
-#
-foreach (@JAVALIBS) {
- if ( $^O eq 'MSWin32') { # We're on Win32
- $INC =~ s#/#\\#g;
- $INC =~ s#\\$##;
- print $INC, "\n";
- $CCFLAGS .= " -DWIN32 -Z7 -D_DEBUG";
- $MYEXTLIB = "$libjava";
- }
-}
-
-$CCFLAGS .= " -DKAFFE" if ($USE_KAFFE);
-
-# Let's find out the path of the library we need to link against.
-#
-foreach (@JAVALIBS) {
- if ($^O eq 'MSWin32') { # We're on Win32
- $_ =~ s#/#\\\\#g;
- }
- my ($libname, $libpath, $libsuffix) = fileparse($_, ("\.so", "\.lib"));
- $libname =~ s/^lib//;
- if ($^O eq 'solaris') {
- $LIBPATH .= " -R$libpath -L$libpath"
- } else {
- $LIBPATH .= " -L$libpath"
- }
- $LIBS .= " -l$libname";
-}
-
-# Do we need -D_REENTRANT?
-if ($LIBPATH =~ /native/) {
- print "Looks like native threads...\n";
- $CCFLAGS .= " -D_REENTRANT";
-}
-
-if ($opt_e) {
- print "We're embedding Perl in Java via libPerlInterpreter.so.\n";
- eval `../setvars -perl`;
- $CCFLAGS .= " -DEMBEDDEDPERL";
- $LIBPATH .= " -R$ENV{JPL_HOME}/lib/$ARCHNAME -L$ENV{JPL_HOME}/lib/$ARCHNAME";
- $LIBS .= " -lPerlInterpreter";
-}
-
-# Needed for JNI.
-if ($^O eq 'solaris') {
- $LIBS = " -lthread -lc $LIBS"; #-lthread must be first!!!
- $CCFLAGS .= " -D_REENTRANT";
-}
-
-# MSR - clean up LIBS
-$LIBS =~ s/-l$//;
-
-#
-# Next, build JNI/Config.pm. This is a superfluous thing for the SUN and
-# Microsoft JDKs, but absolutely necessary for Kaffe. I think at some
-# point, the Microsoft and SUN implementations should use JNI::Config, too.
-#
-
-if (! -d "JNI") {
- mkdir("JNI", 0755) || die "Unable to make JNI directory: $!";
-}
-open(JNICONFIG, ">JNI/Config.pm") || die "Unable to open JNI/Config.pm: $!";
-
-print JNICONFIG "# DO NOT EDIT! Autogenerated by JNI/Makefile.PL\n\n",
- "package JNI::Config;\nuse strict;\nuse Carp;\n",
- "\nuse vars qw(\$KAFFE \$LIB_JAVA \$CLASS_HOME ",
- "\$LIB_HOME);\n\n",
- "\$KAFFE = $USE_KAFFE;\n\$LIB_JAVA = \"$JAVALIBS[0]\";\n";
-if ($USE_KAFFE) {
- my $path = $JAVALIBS[0];
- $path =~ s%/(kaffe/)?libkaffevm.so$%%;
-
- print JNICONFIG "\$LIB_HOME = \"$path/kaffe\";\n";
- $path =~ s%/lib%%;
- print JNICONFIG "\$CLASS_HOME = \"$path/share/kaffe\";\n";
-}
-print JNICONFIG "\n\n1;\n";
-close JNICONFIG;
-
-
-my %Makefile = (
- NAME => 'JNI',
- VERSION_FROM => 'JNI.pm',
- DEFINE => '',
- LINKTYPE => 'dynamic',
- INC => $INC,
- CCFLAGS => "$Config{ccflags} $CCFLAGS",
- ($Config{archname} =~ /mswin32.*-object/i ? ('CAPI' => 'TRUE') : ()),
-
- clean => {FILES => "JNI/* JNI"}
-);
-
-$Makefile{LIBS} = ["$LIBPATH $LIBS"];
-if ($MYEXTLIB) {
- $Makefile{MYEXTLIB} = $MYEXTLIB;
-}
-
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
-#
-WriteMakefile(%Makefile);
-
-if ($USE_KAFFE) {
- my $path = $JAVALIBS[0];
- $path =~ s%/libkaffevm.so$%%;
- print "\n\n***NOTE: be sure to have:\n",
- " LD_LIBRARY_PATH=$path\n",
- " in your enviornment (or installed as a system dynamic\n",
- " library location) when you compile and run this.\n";
-}
-
-# subroutine to find a library
-#
-sub find_stuff {
-
- my ($candidates, $locations) = @_;
- my $lib;
- $wanted = sub {
- foreach my $name (@$candidates) {
- if (/$name$/ and ! /green_threads/ and !/include-old/) {
- $lib = $File::Find::name;
- }
- }
- };
-
- use File::Find;
- foreach my $guess (@$locations) {
- next unless -d $guess;
- find (\&$wanted, $guess);
- }
- if (! $lib) {
- print "Could not find @$candidates\n";
- } else {
- print "Found @$candidates as $lib\n\n";
- }
- return $lib;
-}
-
-# Extra lib for Java 1.2
-#
-# if we want KAFFE, check for it, otherwise search for Java
-
-sub find_libs {
- my($libjava, $libawt, $libjvm);
-
- if ($USE_KAFFE) {
- $libjava = find_stuff(['libkaffevm.so'], \@KAFFE_LIB_GUESSES);
- $libawt = find_stuff(['libawt.so'], \@KAFFE_LIB_GUESSES);
- } else {
- $libjava = find_stuff(['libjava.so', 'javai.lib', 'jvm.lib'],
- \@JAVA_HOME_GUESSES);
- $libjvm = find_stuff(['libjvm.so'], \@JAVA_HOME_GUESSES);
- $libawt = find_stuff(['libawt.so'], \@JAVA_HOME_GUESSES);
- if (defined $libjvm) { # JDK 1.2
- my $libhpi = find_stuff(['libhpi.so'], \@JAVA_HOME_GUESSES);
- return($libjava, $libjvm, $libhpi, $libawt);
- }
- }
- return($libjava, $libawt);
-}
-
-# We need to find jni.h and jni_md.h
-#
-
-# Always do find_includes as the first operation, as it has the side effect
-# of deciding whether or not we are looking for Kaffe. --bkuhn
-
-sub find_includes {
-
- my @CANDIDATES = qw(jni.h jni_md.h);
- my @includes;
-
- sub find_inc {
- foreach my $name (@CANDIDATES) {
- if (/$name$/) {
- my ($hname, $hpath, $hsuffix) =
- fileparse($File::Find::name, ("\.h", "\.H"));
- unless ($hpath =~ /include-old/) {
- print "Found $hname$hsuffix in $hpath\n";
- push @includes, $hpath;
- }
- }
- }
- }
-
- use File::Find;
- foreach my $guess (@KAFFE_INCLUDE_GUESSES) {
- next unless -d $guess;
- find (\&find_inc, $guess);
- }
- # If we have found includes, then we are using Kaffe.
- if (@includes > 0) {
- $USE_KAFFE = 1;
- } else {
- foreach my $guess (@JAVA_HOME_GUESSES) {
- next unless -d $guess;
- find (\&find_inc, $guess);
- }
- }
- die "Could not find Java includes!" unless (@includes);
-
- return @includes;
-}
-
+#!/usr/bin/perl
+use ExtUtils::MakeMaker;
+use Getopt::Std;
+use Config;
+$ARCHNAME = $Config{archname};
+use File::Basename;
+
+getopts('e'); # embedding?
+
+$CCFLAGS .= $ENV{CCFLAGS} if defined $ENV{CCFLAGS};
+
+# $USE_KAFFE is a boolean that tells us whether or not we should use Kaffe.
+# Set by find_includes (it seemed as good a place as any).
+
+# Note that we don't check to see the version of Kaffe is one we support.
+# Currently, the only one we support is the one from CVS.
+
+my $USE_KAFFE = 0;
+
+#require "JNIConfig";
+
+if ($^O eq 'solaris') {
+ $LIBPATH = " -R$Config{archlib}/CORE -L$Config{archlib}/CORE";
+} elsif ($^O eq 'MSWin32') {
+ $LIBPATH = " -L$Config{archlib}\\CORE";
+ # MSR - added MS VC++ default library path
+ # bjepson - fixed to support path names w/spaces in them.
+ push(@WINLIBS, (split"\;",$ENV{LIB}));
+ grep s/\\$//, @WINLIBS; # eliminate trailing \
+ grep s/\/$//, @WINLIBS; # eliminate trailing /
+ $LIBPATH .= join(" ", "", map { qq["-L$_" ] } @WINLIBS);
+} else {
+ $LIBPATH = " -L$Config{archlib}/CORE";
+}
+#$LIBS = " -lperl";
+
+# Figure out where Java might live
+#
+# MSR - added JDK 1.3
+#
+
+my @JAVA_HOME_GUESSES = qw(/usr/local/java /usr/java /usr/local/jdk117_v3
+ C:\\JDK1.1.8 C:\\JDK1.2.1 C:\\JDK1.2.2 C:\\JDK1.3 );
+
+my @KAFFE_PREFIX_GUESSES = qw(/usr/local /usr);
+
+if (! defined $ENV{JAVA_HOME}) {
+ print "You didn't define JAVA_HOME, so I'm trying a few guesses.\n";
+ print "If this fails, you might want to try setting JAVA_HOME and\n";
+ print "running me again.\n";
+} else {
+ @JAVA_HOME_GUESSES = ( $ENV{JAVA_HOME} );
+}
+
+if (! defined $ENV{KAFFE_PREFIX}) {
+ print "\nYou didn't define KAFFE_PREFIX, so I'm trying a few guesses.",
+ "\nIf this fails, and you are using Kaffe, you might want to try\n",
+ "setting KAFFE_PREFIX and running me again.\n",
+ "If you want to ignore any possible Kaffe installation, set the\n",
+ "KAFFE_PREFIX to and empty string.\n\n";
+} else {
+ @KAFFE_PREFIX_GUESSES = ($ENV{KAFFE_PREFIX} eq "") ? () :
+ ( $ENV{KAFFE_PREFIX} );
+}
+
+my(@KAFFE_INCLUDE_GUESSES, @KAFFE_LIB_GUESSES);
+foreach my $kaffePrefix (@KAFFE_PREFIX_GUESSES) {
+ push(@KAFFE_INCLUDE_GUESSES, "$kaffePrefix/include/kaffe");
+ push(@KAFFE_LIB_GUESSES, "$kaffePrefix/lib");
+ push(@KAFFE_LIB_GUESSES, "$kaffePrefix/lib/kaffe");
+}
+ $guess .= "/include/kaffe";
+
+# Let's find out where jni.h lives
+#
+my @INCLUDE = find_includes();
+
+if ($^O eq 'MSWin32') {
+ # MSR - added MS VC++ default include path
+ push(@INCLUDE,(split"\;",$ENV{INCLUDE}));
+ grep s/\\$//, @INCLUDE; # remove trailing \
+ grep s/\/$//, @INCLUDE; # remove trailing \
+ $INC = join("", map { qq["-I$_" ] } @INCLUDE);
+
+} else {
+ $INC = join(" -I", ("", @INCLUDE));
+}
+
+# Let's find out the name of the Java shared library
+#
+my @JAVALIBS = find_libs();
+
+# Find out some defines based on the library we are linking to
+#
+foreach (@JAVALIBS) {
+ if ( $^O eq 'MSWin32') { # We're on Win32
+ $INC =~ s#/#\\#g;
+ $INC =~ s#\\$##;
+ print $INC, "\n";
+ $CCFLAGS .= " -DWIN32 -Z7 -D_DEBUG";
+ $MYEXTLIB = "$libjava";
+ }
+}
+
+$CCFLAGS .= " -DKAFFE" if ($USE_KAFFE);
+
+# Let's find out the path of the library we need to link against.
+#
+foreach (@JAVALIBS) {
+ if ($^O eq 'MSWin32') { # We're on Win32
+ $_ =~ s#/#\\\\#g;
+ }
+ my ($libname, $libpath, $libsuffix) = fileparse($_, ("\.so", "\.lib"));
+ $libname =~ s/^lib//;
+ if ($^O eq 'solaris') {
+ $LIBPATH .= " -R$libpath -L$libpath"
+ } else {
+ $LIBPATH .= " -L$libpath"
+ }
+ $LIBS .= " -l$libname";
+}
+
+# Do we need -D_REENTRANT?
+if ($LIBPATH =~ /native/) {
+ print "Looks like native threads...\n";
+ $CCFLAGS .= " -D_REENTRANT";
+}
+
+if ($opt_e) {
+ print "We're embedding Perl in Java via libPerlInterpreter.so.\n";
+ eval `../setvars -perl`;
+ $CCFLAGS .= " -DEMBEDDEDPERL";
+ $LIBPATH .= " -R$ENV{JPL_HOME}/lib/$ARCHNAME -L$ENV{JPL_HOME}/lib/$ARCHNAME";
+ $LIBS .= " -lPerlInterpreter";
+}
+
+# Needed for JNI.
+if ($^O eq 'solaris') {
+ $LIBS = " -lthread -lc $LIBS"; #-lthread must be first!!!
+ $CCFLAGS .= " -D_REENTRANT";
+}
+
+# MSR - clean up LIBS
+$LIBS =~ s/-l$//;
+
+#
+# Next, build JNI/Config.pm. This is a superfluous thing for the SUN and
+# Microsoft JDKs, but absolutely necessary for Kaffe. I think at some
+# point, the Microsoft and SUN implementations should use JNI::Config, too.
+#
+
+if (! -d "JNI") {
+ mkdir("JNI", 0755) || die "Unable to make JNI directory: $!";
+}
+open(JNICONFIG, ">JNI/Config.pm") || die "Unable to open JNI/Config.pm: $!";
+
+print JNICONFIG "# DO NOT EDIT! Autogenerated by JNI/Makefile.PL\n\n",
+ "package JNI::Config;\nuse strict;\nuse Carp;\n",
+ "\nuse vars qw(\$KAFFE \$LIB_JAVA \$CLASS_HOME ",
+ "\$LIB_HOME);\n\n",
+ "\$KAFFE = $USE_KAFFE;\n\$LIB_JAVA = \"$JAVALIBS[0]\";\n";
+if ($USE_KAFFE) {
+ my $path = $JAVALIBS[0];
+ $path =~ s%/(kaffe/)?libkaffevm.so$%%;
+
+ print JNICONFIG "\$LIB_HOME = \"$path/kaffe\";\n";
+ $path =~ s%/lib%%;
+ print JNICONFIG "\$CLASS_HOME = \"$path/share/kaffe\";\n";
+}
+print JNICONFIG "\n\n1;\n";
+close JNICONFIG;
+
+
+my %Makefile = (
+ NAME => 'JNI',
+ VERSION_FROM => 'JNI.pm',
+ DEFINE => '',
+ LINKTYPE => 'dynamic',
+ INC => $INC,
+ CCFLAGS => "$Config{ccflags} $CCFLAGS",
+ ($Config{archname} =~ /mswin32.*-object/i ? ('CAPI' => 'TRUE') : ()),
+
+ clean => {FILES => "JNI/* JNI"}
+);
+
+$Makefile{LIBS} = ["$LIBPATH $LIBS"];
+if ($MYEXTLIB) {
+ $Makefile{MYEXTLIB} = $MYEXTLIB;
+}
+
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+#
+WriteMakefile(%Makefile);
+
+if ($USE_KAFFE) {
+ my $path = $JAVALIBS[0];
+ $path =~ s%/libkaffevm.so$%%;
+ print "\n\n***NOTE: be sure to have:\n",
+ " LD_LIBRARY_PATH=$path\n",
+ " in your enviornment (or installed as a system dynamic\n",
+ " library location) when you compile and run this.\n";
+}
+
+# subroutine to find a library
+#
+sub find_stuff {
+
+ my ($candidates, $locations) = @_;
+ my $lib;
+ $wanted = sub {
+ foreach my $name (@$candidates) {
+ if (/$name$/ and ! /green_threads/ and !/include-old/) {
+ $lib = $File::Find::name;
+ }
+ }
+ };
+
+ use File::Find;
+ foreach my $guess (@$locations) {
+ next unless -d $guess;
+ find (\&$wanted, $guess);
+ }
+ if (! $lib) {
+ print "Could not find @$candidates\n";
+ } else {
+ print "Found @$candidates as $lib\n\n";
+ }
+ return $lib;
+}
+
+# Extra lib for Java 1.2
+#
+# if we want KAFFE, check for it, otherwise search for Java
+
+sub find_libs {
+ my($libjava, $libawt, $libjvm);
+
+ if ($USE_KAFFE) {
+ $libjava = find_stuff(['libkaffevm.so'], \@KAFFE_LIB_GUESSES);
+ $libawt = find_stuff(['libawt.so'], \@KAFFE_LIB_GUESSES);
+ } else {
+ $libjava = find_stuff(['libjava.so', 'javai.lib', 'jvm.lib'],
+ \@JAVA_HOME_GUESSES);
+ $libjvm = find_stuff(['libjvm.so'], \@JAVA_HOME_GUESSES);
+ $libawt = find_stuff(['libawt.so'], \@JAVA_HOME_GUESSES);
+ if (defined $libjvm) { # JDK 1.2
+ my $libhpi = find_stuff(['libhpi.so'], \@JAVA_HOME_GUESSES);
+ return($libjava, $libjvm, $libhpi, $libawt);
+ }
+ }
+ return($libjava, $libawt);
+}
+
+# We need to find jni.h and jni_md.h
+#
+
+# Always do find_includes as the first operation, as it has the side effect
+# of deciding whether or not we are looking for Kaffe. --bkuhn
+
+sub find_includes {
+
+ my @CANDIDATES = qw(jni.h jni_md.h);
+ my @includes;
+
+ sub find_inc {
+ foreach my $name (@CANDIDATES) {
+ if (/$name$/) {
+ my ($hname, $hpath, $hsuffix) =
+ fileparse($File::Find::name, ("\.h", "\.H"));
+ unless ($hpath =~ /include-old/) {
+ print "Found $hname$hsuffix in $hpath\n";
+ push @includes, $hpath;
+ }
+ }
+ }
+ }
+
+ use File::Find;
+ foreach my $guess (@KAFFE_INCLUDE_GUESSES) {
+ next unless -d $guess;
+ find (\&find_inc, $guess);
+ }
+ # If we have found includes, then we are using Kaffe.
+ if (@includes > 0) {
+ $USE_KAFFE = 1;
+ } else {
+ foreach my $guess (@JAVA_HOME_GUESSES) {
+ next unless -d $guess;
+ find (\&find_inc, $guess);
+ }
+ }
+ die "Could not find Java includes!" unless (@includes);
+
+ return @includes;
+}
+