mirror of https://github.com/lukechilds/komodo.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
9073 lines
939 KiB
9073 lines
939 KiB
8 years ago
|
diff -crB ./configure.ac ../../komodo-jl777/configure.ac
|
||
|
*** ./configure.ac 2017-01-03 10:40:50.155326332 +0000
|
||
|
--- ../../komodo-jl777/configure.ac 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 2,8 ****
|
||
|
AC_PREREQ([2.60])
|
||
|
define(_CLIENT_VERSION_MAJOR, 1)
|
||
|
define(_CLIENT_VERSION_MINOR, 0)
|
||
|
! define(_CLIENT_VERSION_REVISION, 0)
|
||
|
define(_CLIENT_VERSION_BUILD, 50)
|
||
|
define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50)))
|
||
|
define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1)))
|
||
|
--- 2,8 ----
|
||
|
AC_PREREQ([2.60])
|
||
|
define(_CLIENT_VERSION_MAJOR, 1)
|
||
|
define(_CLIENT_VERSION_MINOR, 0)
|
||
|
! define(_CLIENT_VERSION_REVISION, 3)
|
||
|
define(_CLIENT_VERSION_BUILD, 50)
|
||
|
define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50)))
|
||
|
define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1)))
|
||
|
Only in ../../komodo-jl777/contrib: bitcoin-cli.bash-completion
|
||
|
diff -crB ./contrib/bitcoind.bash-completion ../../komodo-jl777/contrib/bitcoind.bash-completion
|
||
|
*** ./contrib/bitcoind.bash-completion 2017-01-03 10:40:50.159326534 +0000
|
||
|
--- ../../komodo-jl777/contrib/bitcoind.bash-completion 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 1,102 ****
|
||
|
! # bash programmable completion for bitcoind(1) and bitcoin-cli(1)
|
||
|
! # Copyright (c) 2012,2014 Christian von Roques <roques@mti.ag>
|
||
|
# Distributed under the MIT software license, see the accompanying
|
||
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||
|
|
||
|
! have bitcoind && {
|
||
|
!
|
||
|
! # call $bitcoind for RPC
|
||
|
! _bitcoin_rpc() {
|
||
|
! # determine already specified args necessary for RPC
|
||
|
! local rpcargs=()
|
||
|
! for i in ${COMP_LINE}; do
|
||
|
! case "$i" in
|
||
|
! -conf=*|-proxy*|-rpc*)
|
||
|
! rpcargs=( "${rpcargs[@]}" "$i" )
|
||
|
! ;;
|
||
|
! esac
|
||
|
! done
|
||
|
! $bitcoind "${rpcargs[@]}" "$@"
|
||
|
! }
|
||
|
!
|
||
|
! # Add bitcoin accounts to COMPREPLY
|
||
|
! _bitcoin_accounts() {
|
||
|
! local accounts
|
||
|
! accounts=$(_bitcoin_rpc listaccounts | awk '/".*"/ { a=$1; gsub(/"/, "", a); print a}')
|
||
|
! COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "$accounts" -- "$cur" ) )
|
||
|
! }
|
||
|
!
|
||
|
! _bitcoind() {
|
||
|
local cur prev words=() cword
|
||
|
local bitcoind
|
||
|
|
||
|
! # save and use original argument to invoke bitcoind
|
||
|
! # bitcoind might not be in $PATH
|
||
|
bitcoind="$1"
|
||
|
|
||
|
COMPREPLY=()
|
||
|
_get_comp_words_by_ref -n = cur prev words cword
|
||
|
|
||
|
- if ((cword > 4)); then
|
||
|
- case ${words[cword-4]} in
|
||
|
- listtransactions)
|
||
|
- COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
|
||
|
- return 0
|
||
|
- ;;
|
||
|
- signrawtransaction)
|
||
|
- COMPREPLY=( $( compgen -W "ALL NONE SINGLE ALL|ANYONECANPAY NONE|ANYONECANPAY SINGLE|ANYONECANPAY" -- "$cur" ) )
|
||
|
- return 0
|
||
|
- ;;
|
||
|
- esac
|
||
|
- fi
|
||
|
-
|
||
|
- if ((cword > 3)); then
|
||
|
- case ${words[cword-3]} in
|
||
|
- addmultisigaddress)
|
||
|
- _bitcoin_accounts
|
||
|
- return 0
|
||
|
- ;;
|
||
|
- getbalance|gettxout|importaddress|importprivkey|listreceivedbyaccount|listreceivedbyaddress|listsinceblock)
|
||
|
- COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
|
||
|
- return 0
|
||
|
- ;;
|
||
|
- esac
|
||
|
- fi
|
||
|
-
|
||
|
- if ((cword > 2)); then
|
||
|
- case ${words[cword-2]} in
|
||
|
- addnode)
|
||
|
- COMPREPLY=( $( compgen -W "add remove onetry" -- "$cur" ) )
|
||
|
- return 0
|
||
|
- ;;
|
||
|
- getblock|getrawtransaction|gettransaction|listaccounts|listreceivedbyaccount|listreceivedbyaddress|sendrawtransaction)
|
||
|
- COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
|
||
|
- return 0
|
||
|
- ;;
|
||
|
- move|setaccount)
|
||
|
- _bitcoin_accounts
|
||
|
- return 0
|
||
|
- ;;
|
||
|
- esac
|
||
|
- fi
|
||
|
-
|
||
|
- case "$prev" in
|
||
|
- backupwallet|dumpwallet|importwallet)
|
||
|
- _filedir
|
||
|
- return 0
|
||
|
- ;;
|
||
|
- getmempool|lockunspent|setgenerate)
|
||
|
- COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
|
||
|
- return 0
|
||
|
- ;;
|
||
|
- getaccountaddress|getaddressesbyaccount|getbalance|getnewaddress|getreceivedbyaccount|listtransactions|move|sendfrom|sendmany)
|
||
|
- _bitcoin_accounts
|
||
|
- return 0
|
||
|
- ;;
|
||
|
- esac
|
||
|
-
|
||
|
case "$cur" in
|
||
|
! -conf=*|-pid=*|-loadblock=*|-wallet=*|-rpcsslcertificatechainfile=*|-rpcsslprivatekeyfile=*)
|
||
|
cur="${cur#*=}"
|
||
|
_filedir
|
||
|
return 0
|
||
|
--- 1,21 ----
|
||
|
! # bash programmable completion for bitcoind(1) and bitcoin-qt(1)
|
||
|
! # Copyright (c) 2012-2016 The Bitcoin Core developers
|
||
|
# Distributed under the MIT software license, see the accompanying
|
||
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||
|
|
||
|
! _zcashd() {
|
||
|
local cur prev words=() cword
|
||
|
local bitcoind
|
||
|
|
||
|
! # save and use original argument to invoke bitcoind for -help
|
||
|
! # it might not be in $PATH
|
||
|
bitcoind="$1"
|
||
|
|
||
|
COMPREPLY=()
|
||
|
_get_comp_words_by_ref -n = cur prev words cword
|
||
|
|
||
|
case "$cur" in
|
||
|
! -conf=*|-pid=*|-loadblock=*|-rootcertificates=*|-rpccookiefile=*|-wallet=*|-rpcsslcertificatechainfile=*|-rpcsslprivatekeyfile=*)
|
||
|
cur="${cur#*=}"
|
||
|
_filedir
|
||
|
return 0
|
||
|
***************
|
||
|
*** 110,129 ****
|
||
|
return 0
|
||
|
;;
|
||
|
*)
|
||
|
- local helpopts commands
|
||
|
|
||
|
! # only parse --help if senseful
|
||
|
if [[ -z "$cur" || "$cur" =~ ^- ]]; then
|
||
|
! helpopts=$($bitcoind --help 2>&1 | awk '$1 ~ /^-/ { sub(/=.*/, "="); print $1 }' )
|
||
|
fi
|
||
|
|
||
|
- # only parse help if senseful
|
||
|
- if [[ -z "$cur" || "$cur" =~ ^[a-z] ]]; then
|
||
|
- commands=$(_bitcoin_rpc help 2>/dev/null | awk '$1 ~ /^[a-z]/ { print $1; }')
|
||
|
- fi
|
||
|
-
|
||
|
- COMPREPLY=( $( compgen -W "$helpopts $commands" -- "$cur" ) )
|
||
|
-
|
||
|
# Prevent space if an argument is desired
|
||
|
if [[ $COMPREPLY == *= ]]; then
|
||
|
compopt -o nospace
|
||
|
--- 29,42 ----
|
||
|
return 0
|
||
|
;;
|
||
|
*)
|
||
|
|
||
|
! # only parse -help if senseful
|
||
|
if [[ -z "$cur" || "$cur" =~ ^- ]]; then
|
||
|
! local helpopts
|
||
|
! helpopts=$($bitcoind -help 2>&1 | awk '$1 ~ /^-/ { sub(/=.*/, "="); print $1 }' )
|
||
|
! COMPREPLY=( $( compgen -W "$helpopts" -- "$cur" ) )
|
||
|
fi
|
||
|
|
||
|
# Prevent space if an argument is desired
|
||
|
if [[ $COMPREPLY == *= ]]; then
|
||
|
compopt -o nospace
|
||
|
***************
|
||
|
*** 131,140 ****
|
||
|
return 0
|
||
|
;;
|
||
|
esac
|
||
|
! }
|
||
|
!
|
||
|
! complete -F _bitcoind bitcoind bitcoin-cli
|
||
|
! }
|
||
|
|
||
|
# Local variables:
|
||
|
# mode: shell-script
|
||
|
--- 44,51 ----
|
||
|
return 0
|
||
|
;;
|
||
|
esac
|
||
|
! } &&
|
||
|
! complete -F _zcashd zcashd
|
||
|
|
||
|
# Local variables:
|
||
|
# mode: shell-script
|
||
|
Only in ../../komodo-jl777/contrib: bitcoin-tx.bash-completion
|
||
|
diff -crB ./contrib/DEBIAN/changelog ../../komodo-jl777/contrib/DEBIAN/changelog
|
||
|
*** ./contrib/DEBIAN/changelog 2017-01-03 10:40:50.155326332 +0000
|
||
|
--- ../../komodo-jl777/contrib/DEBIAN/changelog 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 1,3 ****
|
||
|
--- 1,21 ----
|
||
|
+ zcash (1.0.3) jessie; urgency=medium
|
||
|
+
|
||
|
+ * 1.0.3 release.
|
||
|
+
|
||
|
+ -- Zcash Company <team@z.cash> Wed, 17 Nov 2016 15:56:00 -0700
|
||
|
+
|
||
|
+ zcash (1.0.2) jessie; urgency=medium
|
||
|
+
|
||
|
+ * 1.0.2 release.
|
||
|
+
|
||
|
+ -- Zcash Company <team@z.cash> Mon, 07 Nov 2016 19:01:35 -0600
|
||
|
+
|
||
|
+ zcash (1.0.1) jessie; urgency=medium
|
||
|
+
|
||
|
+ * 1.0.1 release.
|
||
|
+
|
||
|
+ -- Zcash Company <team@z.cash> Thu, 03 Nov 2016 23:21:09 -0500
|
||
|
+
|
||
|
zcash (1.0.0-sprout) jessie; urgency=medium
|
||
|
|
||
|
* 1.0.0 release.
|
||
|
diff -crB ./contrib/DEBIAN/control ../../komodo-jl777/contrib/DEBIAN/control
|
||
|
*** ./contrib/DEBIAN/control 2017-01-03 10:40:50.155326332 +0000
|
||
|
--- ../../komodo-jl777/contrib/DEBIAN/control 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 10,16 ****
|
||
|
Vcs-Git: https://github.com/zcash/zcash.git
|
||
|
Vcs-Browser: https://github.com/zcash/zcash
|
||
|
Package: zcash
|
||
|
! Version: 1.0.0-sprout
|
||
|
Architecture: amd64
|
||
|
Depends: libgomp1
|
||
|
Description: An implementation of the "Zerocash" protocol.
|
||
|
--- 10,16 ----
|
||
|
Vcs-Git: https://github.com/zcash/zcash.git
|
||
|
Vcs-Browser: https://github.com/zcash/zcash
|
||
|
Package: zcash
|
||
|
! Version: 1.0.3
|
||
|
Architecture: amd64
|
||
|
Depends: libgomp1
|
||
|
Description: An implementation of the "Zerocash" protocol.
|
||
|
diff -crB ./contrib/DEBIAN/manpages/zcash-cli.1 ../../komodo-jl777/contrib/DEBIAN/manpages/zcash-cli.1
|
||
|
*** ./contrib/DEBIAN/manpages/zcash-cli.1 2017-01-03 10:40:50.155326332 +0000
|
||
|
--- ../../komodo-jl777/contrib/DEBIAN/manpages/zcash-cli.1 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 1,9 ****
|
||
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
|
||
|
! .TH ZCASH-CLI "1" "October 2016" "Zcash RPC client version v1.0.0-409dcb7" "User Commands"
|
||
|
.SH NAME
|
||
|
zcash-cli \- RPC client for the Zcash daemon
|
||
|
.SH DESCRIPTION
|
||
|
! Zcash RPC client version v1.0.0
|
||
|
.SS "Usage:"
|
||
|
.TP
|
||
|
zcash\-cli [options] <command> [params]
|
||
|
--- 1,9 ----
|
||
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
|
||
|
! .TH ZCASH-CLI "1" "November 2016" "Zcash RPC client version v1.0.3" "User Commands"
|
||
|
.SH NAME
|
||
|
zcash-cli \- RPC client for the Zcash daemon
|
||
|
.SH DESCRIPTION
|
||
|
! Zcash RPC client version v1.0.3
|
||
|
.SS "Usage:"
|
||
|
.TP
|
||
|
zcash\-cli [options] <command> [params]
|
||
|
diff -crB ./contrib/DEBIAN/manpages/zcashd.1 ../../komodo-jl777/contrib/DEBIAN/manpages/zcashd.1
|
||
|
*** ./contrib/DEBIAN/manpages/zcashd.1 2017-01-03 10:40:50.155326332 +0000
|
||
|
--- ../../komodo-jl777/contrib/DEBIAN/manpages/zcashd.1 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 1,9 ****
|
||
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
|
||
|
! .TH ZCASHD "1" "October 2016" "Zcash Daemon version v1.0.0-409dcb7" "User Commands"
|
||
|
.SH NAME
|
||
|
zcashd \- Network daemon for interacting with the Zcash blockchain
|
||
|
.SH DESCRIPTION
|
||
|
! Zcash Daemon version v1.0.0
|
||
|
.SS "Usage:"
|
||
|
.TP
|
||
|
zcashd [options]
|
||
|
--- 1,9 ----
|
||
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
|
||
|
! .TH ZCASHD "1" "November 2016" "Zcash Daemon version v1.0.3" "User Commands"
|
||
|
.SH NAME
|
||
|
zcashd \- Network daemon for interacting with the Zcash blockchain
|
||
|
.SH DESCRIPTION
|
||
|
! Zcash Daemon version v1.0.3
|
||
|
.SS "Usage:"
|
||
|
.TP
|
||
|
zcashd [options]
|
||
|
***************
|
||
|
*** 62,68 ****
|
||
|
.HP
|
||
|
\fB\-par=\fR<n>
|
||
|
.IP
|
||
|
! Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 =
|
||
|
leave that many cores free, default: 0)
|
||
|
.HP
|
||
|
\fB\-pid=\fR<file>
|
||
|
--- 62,68 ----
|
||
|
.HP
|
||
|
\fB\-par=\fR<n>
|
||
|
.IP
|
||
|
! Set the number of script verification threads (\fB\-8\fR to 16, 0 = auto, <0 =
|
||
|
leave that many cores free, default: 0)
|
||
|
.HP
|
||
|
\fB\-pid=\fR<file>
|
||
|
diff -crB ./contrib/gitian-descriptors/gitian-linux.yml ../../komodo-jl777/contrib/gitian-descriptors/gitian-linux.yml
|
||
|
*** ./contrib/gitian-descriptors/gitian-linux.yml 2017-01-03 10:40:50.159326534 +0000
|
||
|
--- ../../komodo-jl777/contrib/gitian-descriptors/gitian-linux.yml 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 1,5 ****
|
||
|
---
|
||
|
! name: "zcash-1.0.0"
|
||
|
enable_cache: true
|
||
|
distro: "debian"
|
||
|
suites:
|
||
|
--- 1,5 ----
|
||
|
---
|
||
|
! name: "zcash-1.0.3"
|
||
|
enable_cache: true
|
||
|
distro: "debian"
|
||
|
suites:
|
||
|
diff -crB ./depends/packages/miniupnpc.mk ../../komodo-jl777/depends/packages/miniupnpc.mk
|
||
|
*** ./depends/packages/miniupnpc.mk 2017-01-03 10:40:50.179327547 +0000
|
||
|
--- ../../komodo-jl777/depends/packages/miniupnpc.mk 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 3,8 ****
|
||
|
--- 3,9 ----
|
||
|
$(package)_download_path=http://miniupnp.free.fr/files
|
||
|
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||
|
$(package)_sha256_hash=d434ceb8986efbe199c5ca53f90ed53eab290b1e6d0530b717eb6fa49d61f93b
|
||
|
+ $(package)_patches=fix-solaris-compilation.patch strlen-before-memcmp.patch patch-strlen-patch.patch
|
||
|
|
||
|
define $(package)_set_vars
|
||
|
$(package)_build_opts=CC="$($(package)_cc)"
|
||
|
***************
|
||
|
*** 14,20 ****
|
||
|
define $(package)_preprocess_cmds
|
||
|
mkdir dll && \
|
||
|
sed -e 's|MINIUPNPC_VERSION_STRING \"version\"|MINIUPNPC_VERSION_STRING \"$($(package)_version)\"|' -e 's|OS/version|$(host)|' miniupnpcstrings.h.in > miniupnpcstrings.h && \
|
||
|
! sed -i.old "s|miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings|miniupnpcstrings.h: miniupnpcstrings.h.in|" Makefile.mingw
|
||
|
endef
|
||
|
|
||
|
define $(package)_build_cmds
|
||
|
--- 15,24 ----
|
||
|
define $(package)_preprocess_cmds
|
||
|
mkdir dll && \
|
||
|
sed -e 's|MINIUPNPC_VERSION_STRING \"version\"|MINIUPNPC_VERSION_STRING \"$($(package)_version)\"|' -e 's|OS/version|$(host)|' miniupnpcstrings.h.in > miniupnpcstrings.h && \
|
||
|
! sed -i.old "s|miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings|miniupnpcstrings.h: miniupnpcstrings.h.in|" Makefile.mingw && \
|
||
|
! patch -p2 < $($(package)_patch_dir)/fix-solaris-compilation.patch && \
|
||
|
! patch -p2 < $($(package)_patch_dir)/strlen-before-memcmp.patch && \
|
||
|
! patch -p2 < $($(package)_patch_dir)/patch-strlen-patch.patch
|
||
|
endef
|
||
|
|
||
|
define $(package)_build_cmds
|
||
|
Only in ../../komodo-jl777/depends/patches: miniupnpc
|
||
|
Only in ../../komodo-jl777/doc: authors.md
|
||
|
diff -crB ./doc/developer-notes.md ../../komodo-jl777/doc/developer-notes.md
|
||
|
*** ./doc/developer-notes.md 2017-01-03 10:40:50.191328153 +0000
|
||
|
--- ../../komodo-jl777/doc/developer-notes.md 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 102,108 ****
|
||
|
If the code is behaving strangely, take a look in the debug.log file in the data directory;
|
||
|
error and debugging messages are written there.
|
||
|
|
||
|
! The -debug=... command-line option controls debugging; running with just -debug will turn
|
||
|
on all categories (and give you a very large debug.log file).
|
||
|
|
||
|
The Qt code routes qDebug() output to debug.log under category "qt": run with -debug=qt
|
||
|
--- 102,108 ----
|
||
|
If the code is behaving strangely, take a look in the debug.log file in the data directory;
|
||
|
error and debugging messages are written there.
|
||
|
|
||
|
! The -debug=... command-line option controls debugging; running with just -debug or -debug=1 will turn
|
||
|
on all categories (and give you a very large debug.log file).
|
||
|
|
||
|
The Qt code routes qDebug() output to debug.log under category "qt": run with -debug=qt
|
||
|
diff -crB ./doc/payment-api.md ../../komodo-jl777/doc/payment-api.md
|
||
|
*** ./doc/payment-api.md 2017-01-03 10:40:50.191328153 +0000
|
||
|
--- ../../komodo-jl777/doc/payment-api.md 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 29,35 ****
|
||
|
RPC calls by category:
|
||
|
|
||
|
* Accounting: z_getbalance, z_gettotalbalance
|
||
|
! * Addresses : z_getnewaddress, z_listaddresses
|
||
|
* Keys : z_exportkey, z_importkey, z_exportwallet, z_importwallet
|
||
|
* Operation: z_getoperationresult, z_getoperationstatus, z_listoperationids
|
||
|
* Payment : z_listreceivedbyaddress, z_sendmany
|
||
|
--- 29,35 ----
|
||
|
RPC calls by category:
|
||
|
|
||
|
* Accounting: z_getbalance, z_gettotalbalance
|
||
|
! * Addresses : z_getnewaddress, z_listaddresses, z_validateaddress
|
||
|
* Keys : z_exportkey, z_importkey, z_exportwallet, z_importwallet
|
||
|
* Operation: z_getoperationresult, z_getoperationstatus, z_listoperationids
|
||
|
* Payment : z_listreceivedbyaddress, z_sendmany
|
||
|
***************
|
||
|
*** 55,60 ****
|
||
|
--- 55,61 ----
|
||
|
--- | --- | ---
|
||
|
z_getnewaddress | | Return a new zaddr for sending and receiving payments. The spending key for this zaddr will be added to the node’s wallet.<br><br>Output:<br>zN68D8hSs3...
|
||
|
z_listaddresses | | Returns a list of all the zaddrs in this node’s wallet for which you have a spending key.<br><br>Output:<br>{ [“z123…”, “z456...”, “z789...”] }
|
||
|
+ z_validateaddress | | Return information about a given zaddr.<br><br>Output:<br>{"isvalid" : true,<br>"address" : "zcWsmq...",<br>"payingkey" : "f5bb3c...",<br>"transmissionkey" : "7a58c7...",<br>"ismine" : true}
|
||
|
|
||
|
### Key Management
|
||
|
|
||
|
***************
|
||
|
*** 70,76 ****
|
||
|
Command | Parameters | Description
|
||
|
--- | --- | ---
|
||
|
z_listreceivedbyaddress<br> | zaddr [minconf=1] | Return a list of amounts received by a zaddr belonging to the node’s wallet.<br><br>Optionally set the minimum number of confirmations which a received amount must have in order to be included in the result. Use 0 to count unconfirmed transactions.<br><br>Output:<br>[{<br>“txid”: “4a0f…”,<br>“amount”: 0.54,<br>“memo”:”F0FF…”,}, {...}, {...}<br>]
|
||
|
! z_sendmany<br> | fromaddress amounts [minconf=1] | _This is an Asynchronous RPC call_<br><br>Send funds from an address to multiple outputs. The address can be either a taddr or a zaddr.<br><br>Amounts is a list containing key/value pairs corresponding to the addresses and amount to pay. Each output address can be in taddr or zaddr format.<br><br>When sending to a zaddr, you also have the option of attaching a memo in hexadecimal format.<br><br>**NOTE:**When sending coinbase funds to a zaddr, the node's wallet does not allow any change. Put another way, spending a partial amount of a coinbase utxo is not allowed. This is not a consensus rule but a local wallet rule due to the current implementation of z_sendmany. In future, this rule may be removed.<br><br>Example of Outputs parameter:<br>[{“address”:”t123…”, “amount”:0.005},<br>,{“address”:”z010…”,”amount”:0.03, “memo”:”f508af…”}]<br><br>Optionally set the minimum number of confirmations which a private or transparent transaction must have in order to be used as an input.<br><br>The transaction fee will be determined by the node’s wallet. Any transparent change will be sent to a new transparent address. Any private change will be sent back to the zaddr being used as the source of funds.<br><br>Returns an operationid. You use the operationid value with z_getoperationstatus and z_getoperationresult to obtain the result of sending funds, which if successful, will be a txid.
|
||
|
|
||
|
### Operations
|
||
|
|
||
|
--- 71,77 ----
|
||
|
Command | Parameters | Description
|
||
|
--- | --- | ---
|
||
|
z_listreceivedbyaddress<br> | zaddr [minconf=1] | Return a list of amounts received by a zaddr belonging to the node’s wallet.<br><br>Optionally set the minimum number of confirmations which a received amount must have in order to be included in the result. Use 0 to count unconfirmed transactions.<br><br>Output:<br>[{<br>“txid”: “4a0f…”,<br>“amount”: 0.54,<br>“memo”:”F0FF…”,}, {...}, {...}<br>]
|
||
|
! z_sendmany<br> | fromaddress amounts [minconf=1] [fee=0.0001] | _This is an Asynchronous RPC call_<br><br>Send funds from an address to multiple outputs. The address can be either a taddr or a zaddr.<br><br>Amounts is a list containing key/value pairs corresponding to the addresses and amount to pay. Each output address can be in taddr or zaddr format.<br><br>When sending to a zaddr, you also have the option of attaching a memo in hexadecimal format.<br><br>**NOTE:**When sending coinbase funds to a zaddr, the node's wallet does not allow any change. Put another way, spending a partial amount of a coinbase utxo is not allowed. This is not a consensus rule but a local wallet rule due to the current implementation of z_sendmany. In future, this rule may be removed.<br><br>Example of Outputs parameter:<br>[{“address”:”t123…”, “amount”:0.005},<br>,{“address”:”z010…”,”amount”:0.03, “memo”:”f508af…”}]<br><br>Optionally set the minimum number of confirmations which a private or transparent transaction must have in order to be used as an input.<br><br>Optionally set a transaction fee, which by default is 0.0001 ZEC.<br><br>Any transparent change will be sent to a new transparent address. Any private change will be sent back to the zaddr being used as the source of funds.<br><br>Returns an operationid. You use the operationid value with z_getoperationstatus and z_getoperationresult to obtain the result of sending funds, which if successful, will be a txid.
|
||
|
|
||
|
### Operations
|
||
|
|
||
|
***************
|
||
|
*** 97,99 ****
|
||
|
--- 98,168 ----
|
||
|
z_getoperationresult <br>| [operationids] | Return OperationStatus JSON objects for all completed operations the node is currently aware of, and then remove the operation from memory.<br><br>Operationids is an optional array to filter which operations you want to receive status objects for.<br><br>Output is a list of operation status objects, where the status is either "failed", "cancelled" or "success".<br>[<br>{“operationid”: “opid-11ee…”,<br>“status”: “cancelled”},<br>{“operationid”: “opid-9876”, “status”: ”failed”},<br>{“operationid”: “opid-0e0e”,<br>“status”:”success”,<br>“execution_time”:”25”,<br>“result”: {“txid”:”af3887654…”,...}<br>},<br>]
|
||
|
z_getoperationstatus <br>| [operationids] | Return OperationStatus JSON objects for all operations the node is currently aware of.<br><br>Operationids is an optional array to filter which operations you want to receive status objects for.<br><br>Output is a list of operation status objects.<br>[<br>{“operationid”: “opid-12ee…”,<br>“status”: “queued”},<br>{“operationid”: “opd-098a…”, “status”: ”executing”},<br>{“operationid”: “opid-9876”, “status”: ”failed”}<br>]<br><br>When the operation succeeds, the status object will also include the result.<br><br>{“operationid”: “opid-0e0e”,<br>“status”:”success”,<br>“execution_time”:”25”,<br>“result”: {“txid”:”af3887654…”,...}<br>}
|
||
|
z_listoperationids <br>| [state] | Return a list of operationids for all operations which the node is currently aware of.<br><br>State is an optional string parameter to filter the operations you want listed by their state. Acceptable parameter values are ‘queued’, ‘executing’, ‘success’, ‘failed’, ‘cancelled’.<br><br>[“opid-0e0e…”, “opid-1af4…”, … ]
|
||
|
+
|
||
|
+ ## Asynchronous RPC call Error Codes
|
||
|
+
|
||
|
+ Zcash error codes are defined in https://github.com/zcash/zcash/blob/master/src/rpcprotocol.h
|
||
|
+
|
||
|
+ ### z_sendmany error codes
|
||
|
+
|
||
|
+ RPC_INVALID_PARAMETER (-8) | _Invalid, missing or duplicate parameter_
|
||
|
+ ---------------------------| -------------------------------------------------
|
||
|
+ "Minconf cannot be negative" | Cannot accept negative minimum confirmation number.
|
||
|
+ "Minimum number of confirmations cannot be less than 0" | Cannot accept negative minimum confirmation number.
|
||
|
+ "From address parameter missing" | Missing an address to send funds from.
|
||
|
+ "No recipients" | Missing recipient addresses.
|
||
|
+ "Memo must be in hexadecimal format" | Encrypted memo field data must be in hexadecimal format.
|
||
|
+ "Memo size of __ is too big, maximum allowed is __ " | Encrypted memo field data exceeds maximum size of 512 bytes.
|
||
|
+ "From address does not belong to this node, zaddr spending key not found." | Sender address spending key not found.
|
||
|
+ "Invalid parameter, expected object" | Expected object.
|
||
|
+ "Invalid parameter, unknown key: __" | Unknown key.
|
||
|
+ "Invalid parameter, expected valid size" | Invalid size.
|
||
|
+ "Invalid parameter, expected hex txid" | Invalid txid.
|
||
|
+ "Invalid parameter, vout must be positive" | Invalid vout.
|
||
|
+ "Invalid parameter, duplicated address" | Address is duplicated.
|
||
|
+ "Invalid parameter, amounts array is empty" | Amounts array is empty.
|
||
|
+ "Invalid parameter, unknown key" | Key not found.
|
||
|
+ "Invalid parameter, unknown address format" | Unknown address format.
|
||
|
+ "Invalid parameter, size of memo" | Invalid memo field size.
|
||
|
+ "Invalid parameter, amount must be positive" | Invalid or negative amount.
|
||
|
+ "Invalid parameter, too many zaddr outputs" | z_address outputs exceed maximum allowed.
|
||
|
+ "Invalid parameter, expected memo data in hexadecimal format" | Encrypted memo field is not in hexadecimal format.
|
||
|
+ "Invalid parameter, size of memo is larger than maximum allowed __ " | Encrypted memo field data exceeds maximum size of 512 bytes.
|
||
|
+
|
||
|
+
|
||
|
+ RPC_INVALID_ADDRESS_OR_KEY (-5) | _Invalid address or key_
|
||
|
+ --------------------------------| ---------------------------
|
||
|
+ "Invalid from address, no spending key found for zaddr" | z_address spending key not found.
|
||
|
+ "Invalid output address, not a valid taddr." | Transparent output address is invalid.
|
||
|
+ "Invalid from address, should be a taddr or zaddr." | Sender address is invalid.
|
||
|
+ "From address does not belong to this node, zaddr spending key not found." | Sender address spending key not found.
|
||
|
+
|
||
|
+
|
||
|
+ RPC_WALLET_INSUFFICIENT_FUNDS (-6) | _Not enough funds in wallet or account_
|
||
|
+ -----------------------------------| ------------------------------------------
|
||
|
+ "Insufficient funds, no UTXOs found for taddr from address." | Insufficient funds for sending address.
|
||
|
+ "Could not find any non-coinbase UTXOs to spend. Coinbase UTXOs can only be sent to a single zaddr recipient." | Must send Coinbase UTXO to a single z_address.
|
||
|
+ "Could not find any non-coinbase UTXOs to spend." | No available non-coinbase UTXOs.
|
||
|
+ "Insufficient funds, no unspent notes found for zaddr from address." | Insufficient funds for sending address.
|
||
|
+ "Insufficient transparent funds, have __, need __ plus fee __" | Insufficient funds from transparent address.
|
||
|
+ "Insufficient protected funds, have __, need __ plus fee __" | Insufficient funds from shielded address.
|
||
|
+
|
||
|
+ RPC_WALLET_ERROR (-4) | _Unspecified problem with wallet_
|
||
|
+ ----------------------| -------------------------------------
|
||
|
+ "Could not find previous JoinSplit anchor" | Try restarting node with `-reindex`.
|
||
|
+ "Error decrypting output note of previous JoinSplit: __" |
|
||
|
+ "Could not find witness for note commitment" | Try restarting node with `-reindex`.
|
||
|
+ "Witness for note commitment is null" | Missing witness for note commitement.
|
||
|
+ "Witness for spendable note does not have same anchor as change input" | Invalid anchor for spendable note witness.
|
||
|
+ "Not enough funds to pay miners fee" | Retry with sufficient funds.
|
||
|
+ "Missing hex data for raw transaction" | Raw transaction data is null.
|
||
|
+ "Missing hex data for signed transaction" | Hex value for signed transaction is null.
|
||
|
+ "Send raw transaction did not return an error or a txid." |
|
||
|
+
|
||
|
+ RPC_WALLET_ENCRYPTION_FAILED (-16) | _Failed to encrypt the wallet_
|
||
|
+ -------------------------------------------------------------------------| -------------------------------------
|
||
|
+ "Failed to sign transaction" | Transaction was not signed, sign transaction and retry.
|
||
|
+
|
||
|
+ RPC_WALLET_KEYPOOL_RAN_OUT (-12) | _Keypool ran out, call keypoolrefill first_
|
||
|
+ -------------------------------------------------------------------------| -----------------------------------------------
|
||
|
+ "Could not generate a taddr to use as a change address" | Call keypoolrefill and retry.
|
||
|
diff -crB ./doc/release-notes/release-notes-0.11.2.z6.md ../../komodo-jl777/doc/release-notes/release-notes-0.11.2.z6.md
|
||
|
*** ./doc/release-notes/release-notes-0.11.2.z6.md 2017-01-03 10:40:50.191328153 +0000
|
||
|
--- ../../komodo-jl777/doc/release-notes/release-notes-0.11.2.z6.md 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 1,19 ****
|
||
|
! Jack Grigg:
|
||
|
Equihash: Only compare the first n/(k+1) bits when sorting.
|
||
|
Randomise the nonce in the block header.
|
||
|
Clear mempool before using it for benchmark test, fix parameter name.
|
||
|
Fix memory leak in large tx benchmark.
|
||
|
|
||
|
! Sean Bowe:
|
||
|
Increase block size to 2MB and update performance test.
|
||
|
Make sigop limit `20000` just as in Bitcoin, ignoring our change to the blocksize limit.
|
||
|
Remove the mainnet checkpoints.
|
||
|
Fix performance test for block verification.
|
||
|
Make `validatelargetx` test more accurate.
|
||
|
|
||
|
! Taylor Hornby:
|
||
|
Add example mock test of CheckTransaction.
|
||
|
|
||
|
! aniemerg:
|
||
|
Suppress Libsnark Debugging Info.
|
||
|
-
|
||
|
--- 1,18 ----
|
||
|
! Jack Grigg (4):
|
||
|
Equihash: Only compare the first n/(k+1) bits when sorting.
|
||
|
Randomise the nonce in the block header.
|
||
|
Clear mempool before using it for benchmark test, fix parameter name.
|
||
|
Fix memory leak in large tx benchmark.
|
||
|
|
||
|
! Sean Bowe (5):
|
||
|
Increase block size to 2MB and update performance test.
|
||
|
Make sigop limit `20000` just as in Bitcoin, ignoring our change to the blocksize limit.
|
||
|
Remove the mainnet checkpoints.
|
||
|
Fix performance test for block verification.
|
||
|
Make `validatelargetx` test more accurate.
|
||
|
|
||
|
! Taylor Hornby (1):
|
||
|
Add example mock test of CheckTransaction.
|
||
|
|
||
|
! aniemerg (1):
|
||
|
Suppress Libsnark Debugging Info.
|
||
|
diff -crB ./doc/release-notes/release-notes-0.11.2.z9.md ../../komodo-jl777/doc/release-notes/release-notes-0.11.2.z9.md
|
||
|
*** ./doc/release-notes/release-notes-0.11.2.z9.md 2017-01-03 10:40:50.191328153 +0000
|
||
|
--- ../../komodo-jl777/doc/release-notes/release-notes-0.11.2.z9.md 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 1,5 ****
|
||
|
!
|
||
|
! Sean Bowe:
|
||
|
Change memo field size and relocate `ciphertexts` field of JoinSplit description.
|
||
|
Implement zkSNARK compression.
|
||
|
Perform curve parameter initialization at start of gtest suite.
|
||
|
--- 1,4 ----
|
||
|
! Sean Bowe (6):
|
||
|
Change memo field size and relocate `ciphertexts` field of JoinSplit description.
|
||
|
Implement zkSNARK compression.
|
||
|
Perform curve parameter initialization at start of gtest suite.
|
||
|
***************
|
||
|
*** 7,13 ****
|
||
|
Enable MONTGOMERY_OUTPUT everywhere.
|
||
|
Update proving/verifying keys.
|
||
|
|
||
|
! Jack Grigg:
|
||
|
Add support for spending keys to the basic key store.
|
||
|
Merge AddSpendingKeyPaymentAddress into AddSpendingKey to simplify API.
|
||
|
Add methods for byte array expansion and compression.
|
||
|
--- 6,12 ----
|
||
|
Enable MONTGOMERY_OUTPUT everywhere.
|
||
|
Update proving/verifying keys.
|
||
|
|
||
|
! Jack Grigg (11):
|
||
|
Add support for spending keys to the basic key store.
|
||
|
Merge AddSpendingKeyPaymentAddress into AddSpendingKey to simplify API.
|
||
|
Add methods for byte array expansion and compression.
|
||
|
***************
|
||
|
*** 20,26 ****
|
||
|
Add separate lock for SpendingKey key store operations.
|
||
|
Test conversion between solution indices and minimal representation.
|
||
|
|
||
|
! Daira Hopwood:
|
||
|
Move bigint arithmetic implementations to libsnark.
|
||
|
Add mostly-static checks on consistency of Equihash parameters, MAX_HEADERS_RESULTS, and MAX_PROTOCOL_MESSAGE_LENGTH.
|
||
|
Change some asserts in equihash.cpp to be static.
|
||
|
--- 19,25 ----
|
||
|
Add separate lock for SpendingKey key store operations.
|
||
|
Test conversion between solution indices and minimal representation.
|
||
|
|
||
|
! Daira Hopwood (6):
|
||
|
Move bigint arithmetic implementations to libsnark.
|
||
|
Add mostly-static checks on consistency of Equihash parameters, MAX_HEADERS_RESULTS, and MAX_PROTOCOL_MESSAGE_LENGTH.
|
||
|
Change some asserts in equihash.cpp to be static.
|
||
|
***************
|
||
|
*** 28,57 ****
|
||
|
Increment version numbers for z9 release.
|
||
|
Add these release notes for z9.
|
||
|
|
||
|
! Taylor Hornby:
|
||
|
Disable hardening when building for coverage reports.
|
||
|
Upgrade libsodium for AVX2-detection bugfix.
|
||
|
Fix inconsistent optimization flags; single source of truth.
|
||
|
Add -fwrapv -fno-strict-aliasing; fix libzcash flags.
|
||
|
Use libsodium's s < L check, instead checking that libsodium checks that.
|
||
|
|
||
|
! Simon Liu:
|
||
|
Fixes #1193 so that during verification benchmarking it does not unncessarily create thousands of CTransaction objects.
|
||
|
Closes #701 by adding documentation about the Payment RPC interface.
|
||
|
Add note about zkey and encrypted wallets.
|
||
|
|
||
|
! Gaurav Rana:
|
||
|
Update zcash-cli stop message.
|
||
|
|
||
|
! Tom Ritter:
|
||
|
Clarify comment about nonce space for Note Encryption.
|
||
|
|
||
|
! Robert C. Seacord:
|
||
|
Memory safety and correctness fixes found in NCC audit.
|
||
|
|
||
|
! Patrick Strateman (merged by Taylor Hornby):
|
||
|
Pull in some DoS mitigations from upstream. (#1258)
|
||
|
|
||
|
! Wladimir J. van der Laan:
|
||
|
net: correctly initialize nMinPingUsecTime.
|
||
|
-
|
||
|
--- 27,55 ----
|
||
|
Increment version numbers for z9 release.
|
||
|
Add these release notes for z9.
|
||
|
|
||
|
! Taylor Hornby (5):
|
||
|
Disable hardening when building for coverage reports.
|
||
|
Upgrade libsodium for AVX2-detection bugfix.
|
||
|
Fix inconsistent optimization flags; single source of truth.
|
||
|
Add -fwrapv -fno-strict-aliasing; fix libzcash flags.
|
||
|
Use libsodium's s < L check, instead checking that libsodium checks that.
|
||
|
|
||
|
! Simon Liu (3):
|
||
|
Fixes #1193 so that during verification benchmarking it does not unncessarily create thousands of CTransaction objects.
|
||
|
Closes #701 by adding documentation about the Payment RPC interface.
|
||
|
Add note about zkey and encrypted wallets.
|
||
|
|
||
|
! Gaurav Rana (1):
|
||
|
Update zcash-cli stop message.
|
||
|
|
||
|
! Tom Ritter (1):
|
||
|
Clarify comment about nonce space for Note Encryption.
|
||
|
|
||
|
! Robert C. Seacord (1):
|
||
|
Memory safety and correctness fixes found in NCC audit.
|
||
|
|
||
|
! Patrick Strateman (1):
|
||
|
Pull in some DoS mitigations from upstream. (#1258)
|
||
|
|
||
|
! Wladimir J. van der Laan (1):
|
||
|
net: correctly initialize nMinPingUsecTime.
|
||
|
Only in ../../komodo-jl777/doc/release-notes: release-notes-1.0.1.md
|
||
|
Only in ../../komodo-jl777/doc/release-notes: release-notes-1.0.2.md
|
||
|
Only in ../../komodo-jl777/doc/release-notes: release-notes-1.0.3.md
|
||
|
diff -crB ./doc/release-process.md ../../komodo-jl777/doc/release-process.md
|
||
|
*** ./doc/release-process.md 2017-01-03 10:40:50.191328153 +0000
|
||
|
--- ../../komodo-jl777/doc/release-process.md 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 38,43 ****
|
||
|
--- 38,45 ----
|
||
|
contrib/DEBIAN/control
|
||
|
contrib/gitian-descriptors/gitian-linux.yml
|
||
|
|
||
|
+ Build and commit to update versions, and then perform the following commands:
|
||
|
+
|
||
|
help2man -n "RPC client for the Zcash daemon" src/zcash-cli > contrib/DEBIAN/manpages/zcash-cli.1
|
||
|
help2man -n "Network daemon for interacting with the Zcash blockchain" src/zcashd > contrib/DEBIAN/manpages/zcashd.1
|
||
|
|
||
|
***************
|
||
|
*** 57,66 ****
|
||
|
|
||
|
### B2. Write release notes
|
||
|
|
||
|
! git shortlog helps a lot, for example:
|
||
|
|
||
|
! $ git shortlog --no-merges v${ZCASH_RELEASE_PREV}..HEAD \
|
||
|
! > ./doc/release-notes/release-notes-${ZCASH_RELEASE}.md
|
||
|
|
||
|
Update the Debian package changelog:
|
||
|
|
||
|
--- 59,67 ----
|
||
|
|
||
|
### B2. Write release notes
|
||
|
|
||
|
! Run the release-notes.py script to generate release notes and update authors.md file. For example:
|
||
|
|
||
|
! $ python zcutil/release-notes.py --version $ZCASH_RELEASE
|
||
|
|
||
|
Update the Debian package changelog:
|
||
|
|
||
|
diff -crB ./doc/security-warnings.md ../../komodo-jl777/doc/security-warnings.md
|
||
|
*** ./doc/security-warnings.md 2017-01-03 10:40:50.191328153 +0000
|
||
|
--- ../../komodo-jl777/doc/security-warnings.md 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 35,44 ****
|
||
|
from the earlier issue).
|
||
|
|
||
|
- We were concerned about the resistance of the algorithm used to derive wallet
|
||
|
! encryption keys (inherited from Bitcoin) to dictionary attacks by a powerful
|
||
|
! attacker. If and when we re-enable wallet encryption, it is likely to be with
|
||
|
! a modern passphrase-based key derivation algorithm designed for greater
|
||
|
! resistance to dictionary attack, such as Argon2i.
|
||
|
|
||
|
You should use full-disk encryption (or encryption of your home directory) to
|
||
|
protect your wallet at rest, and should assume (even unprivileged) users who are
|
||
|
--- 35,44 ----
|
||
|
from the earlier issue).
|
||
|
|
||
|
- We were concerned about the resistance of the algorithm used to derive wallet
|
||
|
! encryption keys (inherited from [Bitcoin](https://bitcoin.org/en/secure-your-wallet))
|
||
|
! to dictionary attacks by a powerful attacker. If and when we re-enable wallet
|
||
|
! encryption, it is likely to be with a modern passphrase-based key derivation
|
||
|
! algorithm designed for greater resistance to dictionary attack, such as Argon2i.
|
||
|
|
||
|
You should use full-disk encryption (or encryption of your home directory) to
|
||
|
protect your wallet at rest, and should assume (even unprivileged) users who are
|
||
|
diff -crB ./doc/tor.md ../../komodo-jl777/doc/tor.md
|
||
|
*** ./doc/tor.md 2017-01-03 10:40:50.191328153 +0000
|
||
|
--- ../../komodo-jl777/doc/tor.md 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 18,24 ****
|
||
|
-proxy=ip:port Set the proxy server. If SOCKS5 is selected (default), this proxy
|
||
|
server will be used to try to reach .onion addresses as well.
|
||
|
|
||
|
! -onion=ip:port Set the proxy server to use for tor hidden services. You do not
|
||
|
need to set this if it's the same as -proxy. You can use -noonion
|
||
|
to explicitly disable access to hidden service.
|
||
|
|
||
|
--- 18,24 ----
|
||
|
-proxy=ip:port Set the proxy server. If SOCKS5 is selected (default), this proxy
|
||
|
server will be used to try to reach .onion addresses as well.
|
||
|
|
||
|
! -onion=ip:port Set the proxy server to use for Tor hidden services. You do not
|
||
|
need to set this if it's the same as -proxy. You can use -noonion
|
||
|
to explicitly disable access to hidden service.
|
||
|
|
||
|
diff -crB ./Dockerfile ../../komodo-jl777/Dockerfile
|
||
|
*** ./Dockerfile 2017-01-03 10:40:50.151326129 +0000
|
||
|
--- ../../komodo-jl777/Dockerfile 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 1,15 ****
|
||
|
! FROM ubuntu:16.04
|
||
|
! MAINTAINER Mihail Fedorov <mit-license@fedorov.net>
|
||
|
!
|
||
|
! # All the stuff
|
||
|
! # And clean out packages, keep space minimal
|
||
|
! RUN apt-get -y update && \
|
||
|
! apt-get -y upgrade && \
|
||
|
! apt-get -y install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev \
|
||
|
! unzip python zlib1g-dev wget bsdmainutils automake libboost-all-dev libssl-dev libprotobuf-dev \
|
||
|
! protobuf-compiler libqt4-dev libqrencode-dev libdb++-dev software-properties-common libcurl4-openssl-dev && \
|
||
|
! apt-get clean && \
|
||
|
! rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||
|
|
||
|
ADD ./ /komodo
|
||
|
ENV HOME /komodo
|
||
|
--- 1,5 ----
|
||
|
! FROM kolobus/ubuntu:komodo
|
||
|
! MAINTAINER Mihail Fedorov <tech@fedorov.net>
|
||
|
|
||
|
ADD ./ /komodo
|
||
|
ENV HOME /komodo
|
||
|
***************
|
||
|
*** 19,25 ****
|
||
|
RUN cd /komodo && \
|
||
|
./autogen.sh && \
|
||
|
./configure --with-incompatible-bdb --with-gui || true && \
|
||
|
! ./zcutil/build.sh -j4
|
||
|
|
||
|
# Unknown stuff goes here
|
||
|
|
||
|
--- 9,15 ----
|
||
|
RUN cd /komodo && \
|
||
|
./autogen.sh && \
|
||
|
./configure --with-incompatible-bdb --with-gui || true && \
|
||
|
! ./zcutil/build.sh -j$(nproc)
|
||
|
|
||
|
# Unknown stuff goes here
|
||
|
|
||
|
diff -crB ./.git/config ../../komodo-jl777/.git/config
|
||
|
*** ./.git/config 2017-01-03 10:40:50.131325117 +0000
|
||
|
--- ../../komodo-jl777/.git/config 2017-01-03 09:49:08.884507813 +0000
|
||
|
***************
|
||
|
*** 4,11 ****
|
||
|
bare = false
|
||
|
logallrefupdates = true
|
||
|
[remote "origin"]
|
||
|
! url = https://github.com/j-cimb-barker/komodo.git
|
||
|
fetch = +refs/heads/*:refs/remotes/origin/*
|
||
|
[branch "master"]
|
||
|
remote = origin
|
||
|
merge = refs/heads/master
|
||
|
--- 4,14 ----
|
||
|
bare = false
|
||
|
logallrefupdates = true
|
||
|
[remote "origin"]
|
||
|
! url = https://github.com/jl777/komodo.git
|
||
|
fetch = +refs/heads/*:refs/remotes/origin/*
|
||
|
[branch "master"]
|
||
|
remote = origin
|
||
|
merge = refs/heads/master
|
||
|
+ [branch "dev"]
|
||
|
+ remote = origin
|
||
|
+ merge = refs/heads/dev
|
||
|
diff -crB ./.git/HEAD ../../komodo-jl777/.git/HEAD
|
||
|
*** ./.git/HEAD 2017-01-03 10:40:50.131325117 +0000
|
||
|
--- ../../komodo-jl777/.git/HEAD 2017-01-03 09:49:08.884507813 +0000
|
||
|
***************
|
||
|
*** 1 ****
|
||
|
! ref: refs/heads/master
|
||
|
--- 1 ----
|
||
|
! ref: refs/heads/dev
|
||
|
Binary files ./.git/index and ../../komodo-jl777/.git/index differ
|
||
|
diff -crB ./.git/logs/HEAD ../../komodo-jl777/.git/logs/HEAD
|
||
|
*** ./.git/logs/HEAD 2017-01-03 10:40:50.131325117 +0000
|
||
|
--- ../../komodo-jl777/.git/logs/HEAD 2017-01-03 09:49:08.884507813 +0000
|
||
|
***************
|
||
|
*** 1 ****
|
||
|
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483440050 +0000 clone: from https://github.com/j-cimb-barker/komodo.git
|
||
|
--- 1,2 ----
|
||
|
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483436901 +0000 clone: from https://github.com/jl777/komodo.git
|
||
|
! d03fbd981fce86504b78d2a9582e4da988d59823 26ac06c4f5a6b4dc3163b36a1e5d24bfa7eccbd2 joel <joel@abigail> 1483436948 +0000 checkout: moving from master to dev
|
||
|
Only in ../../komodo-jl777/.git/logs/refs/heads: dev
|
||
|
diff -crB ./.git/logs/refs/heads/master ../../komodo-jl777/.git/logs/refs/heads/master
|
||
|
*** ./.git/logs/refs/heads/master 2017-01-03 10:40:50.131325117 +0000
|
||
|
--- ../../komodo-jl777/.git/logs/refs/heads/master 2017-01-03 09:48:21.598032424 +0000
|
||
|
***************
|
||
|
*** 1 ****
|
||
|
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483440050 +0000 clone: from https://github.com/j-cimb-barker/komodo.git
|
||
|
--- 1 ----
|
||
|
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483436901 +0000 clone: from https://github.com/jl777/komodo.git
|
||
|
diff -crB ./.git/logs/refs/remotes/origin/HEAD ../../komodo-jl777/.git/logs/refs/remotes/origin/HEAD
|
||
|
*** ./.git/logs/refs/remotes/origin/HEAD 2017-01-03 10:40:50.131325117 +0000
|
||
|
--- ../../komodo-jl777/.git/logs/refs/remotes/origin/HEAD 2017-01-03 09:48:21.598032424 +0000
|
||
|
***************
|
||
|
*** 1 ****
|
||
|
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483440050 +0000 clone: from https://github.com/j-cimb-barker/komodo.git
|
||
|
--- 1 ----
|
||
|
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483436901 +0000 clone: from https://github.com/jl777/komodo.git
|
||
|
Only in ./.git/objects/pack: pack-12e7bdf654b29f95604673fb1b3ee01a9bd52369.idx
|
||
|
Only in ./.git/objects/pack: pack-12e7bdf654b29f95604673fb1b3ee01a9bd52369.pack
|
||
|
Only in ../../komodo-jl777/.git/objects/pack: pack-3d08e40e89111c75a81ccd6099e05e09fd0e0f08.idx
|
||
|
Only in ../../komodo-jl777/.git/objects/pack: pack-3d08e40e89111c75a81ccd6099e05e09fd0e0f08.pack
|
||
|
diff -crB ./.git/packed-refs ../../komodo-jl777/.git/packed-refs
|
||
|
*** ./.git/packed-refs 2017-01-03 10:40:50.131325117 +0000
|
||
|
--- ../../komodo-jl777/.git/packed-refs 2017-01-03 09:48:21.598032424 +0000
|
||
|
***************
|
||
|
*** 2,10 ****
|
||
|
fcd361184f09fe17546698b0d13caddac5b63500 refs/remotes/origin/PoS
|
||
|
730a5006cbbfb0607ed93067db1a74d57584eb1f refs/remotes/origin/acspeed
|
||
|
80259d4b4f193c7c438f3c057ce70af3beb1a099 refs/remotes/origin/auto
|
||
|
! 060c9a92939c62bbedb5fe560bf8ef6856e2b8f1 refs/remotes/origin/beta
|
||
|
ba9104dd7e9b6ba2b68ad352253ac8f3298092f4 refs/remotes/origin/dPoW
|
||
|
! cb42e5518262235ed4e4dbff43179e0308114d6a refs/remotes/origin/dev
|
||
|
76b6eacf41395ddd2badd5d5dc3352e603c59df2 refs/remotes/origin/kolo
|
||
|
bb40eb8b043a1e63c3dc3b1c2e4d0f6e67e771d4 refs/remotes/origin/kolo-dev
|
||
|
d03fbd981fce86504b78d2a9582e4da988d59823 refs/remotes/origin/master
|
||
|
--- 2,10 ----
|
||
|
fcd361184f09fe17546698b0d13caddac5b63500 refs/remotes/origin/PoS
|
||
|
730a5006cbbfb0607ed93067db1a74d57584eb1f refs/remotes/origin/acspeed
|
||
|
80259d4b4f193c7c438f3c057ce70af3beb1a099 refs/remotes/origin/auto
|
||
|
! f6f296f1acf8c2b177451ed0c9f8660f3a80ec3d refs/remotes/origin/beta
|
||
|
ba9104dd7e9b6ba2b68ad352253ac8f3298092f4 refs/remotes/origin/dPoW
|
||
|
! 26ac06c4f5a6b4dc3163b36a1e5d24bfa7eccbd2 refs/remotes/origin/dev
|
||
|
76b6eacf41395ddd2badd5d5dc3352e603c59df2 refs/remotes/origin/kolo
|
||
|
bb40eb8b043a1e63c3dc3b1c2e4d0f6e67e771d4 refs/remotes/origin/kolo-dev
|
||
|
d03fbd981fce86504b78d2a9582e4da988d59823 refs/remotes/origin/master
|
||
|
Only in ../../komodo-jl777/.git/refs/heads: dev
|
||
|
diff -crB ./.gitignore ../../komodo-jl777/.gitignore
|
||
|
*** ./.gitignore 2017-01-03 10:40:50.151326129 +0000
|
||
|
--- ../../komodo-jl777/.gitignore 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 65,70 ****
|
||
|
--- 65,71 ----
|
||
|
*.a
|
||
|
*.pb.cc
|
||
|
*.pb.h
|
||
|
+ .vscode
|
||
|
|
||
|
*.log
|
||
|
*.trs
|
||
|
diff -crB ./Makefile.am ../../komodo-jl777/Makefile.am
|
||
|
*** ./Makefile.am 2017-01-03 10:40:50.151326129 +0000
|
||
|
--- ../../komodo-jl777/Makefile.am 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 258,267 ****
|
||
|
@qa/pull-tester/run-bitcoind-for-test.sh $(JAVA) -jar $(JAVA_COMPARISON_TOOL) qa/tmp/compTool $(COMPARISON_TOOL_REORG_TESTS) 2>&1
|
||
|
endif
|
||
|
|
||
|
! dist_noinst_SCRIPTS = autogen.sh
|
||
|
|
||
|
EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/rpc-tests.sh qa/pull-tester/run-bitcoin-cli qa/rpc-tests qa/zcash $(DIST_DOCS) $(BIN_CHECKS)
|
||
|
|
||
|
CLEANFILES = $(OSX_DMG) $(BITCOIN_WIN_INSTALLER)
|
||
|
|
||
|
.INTERMEDIATE: $(COVERAGE_INFO)
|
||
|
--- 258,271 ----
|
||
|
@qa/pull-tester/run-bitcoind-for-test.sh $(JAVA) -jar $(JAVA_COMPARISON_TOOL) qa/tmp/compTool $(COMPARISON_TOOL_REORG_TESTS) 2>&1
|
||
|
endif
|
||
|
|
||
|
! dist_bin_SCRIPTS = zcutil/fetch-params.sh
|
||
|
! dist_noinst_SCRIPTS = autogen.sh zcutil/build-debian-package.sh zcutil/build.sh
|
||
|
|
||
|
EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/rpc-tests.sh qa/pull-tester/run-bitcoin-cli qa/rpc-tests qa/zcash $(DIST_DOCS) $(BIN_CHECKS)
|
||
|
|
||
|
+ install-exec-hook:
|
||
|
+ mv $(DESTDIR)$(bindir)/fetch-params.sh $(DESTDIR)$(bindir)/zcash-fetch-params
|
||
|
+
|
||
|
CLEANFILES = $(OSX_DMG) $(BITCOIN_WIN_INSTALLER)
|
||
|
|
||
|
.INTERMEDIATE: $(COVERAGE_INFO)
|
||
|
Only in .: patches
|
||
|
diff -crB ./qa/pull-tester/rpc-tests.sh ../../komodo-jl777/qa/pull-tester/rpc-tests.sh
|
||
|
*** ./qa/pull-tester/rpc-tests.sh 2017-01-03 10:40:50.195328356 +0000
|
||
|
--- ../../komodo-jl777/qa/pull-tester/rpc-tests.sh 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 11,16 ****
|
||
|
--- 11,17 ----
|
||
|
#Run the tests
|
||
|
|
||
|
testScripts=(
|
||
|
+ 'wallet_treestate.py'
|
||
|
'wallet_protectcoinbase.py'
|
||
|
'wallet.py'
|
||
|
'wallet_nullifiers.py'
|
||
|
diff -crB ./qa/rpc-tests/httpbasics.py ../../komodo-jl777/qa/rpc-tests/httpbasics.py
|
||
|
*** ./qa/rpc-tests/httpbasics.py 2017-01-03 10:40:50.195328356 +0000
|
||
|
--- ../../komodo-jl777/qa/rpc-tests/httpbasics.py 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 38,50 ****
|
||
|
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
|
||
|
out1 = conn.getresponse().read();
|
||
|
assert_equal('"error":null' in out1, True)
|
||
|
! assert_equal(conn.sock!=None, True) #according to http/1.1 connection must still be open!
|
||
|
!
|
||
|
! #send 2nd request without closing connection
|
||
|
! conn.request('POST', '/', '{"method": "getchaintips"}', headers)
|
||
|
! out2 = conn.getresponse().read();
|
||
|
! assert_equal('"error":null' in out1, True) #must also response with a correct json-rpc message
|
||
|
! assert_equal(conn.sock!=None, True) #according to http/1.1 connection must still be open!
|
||
|
conn.close()
|
||
|
|
||
|
#same should be if we add keep-alive because this should be the std. behaviour
|
||
|
--- 38,46 ----
|
||
|
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
|
||
|
out1 = conn.getresponse().read();
|
||
|
assert_equal('"error":null' in out1, True)
|
||
|
!
|
||
|
! # TODO #1856: Re-enable support for persistent connections.
|
||
|
! assert_equal(conn.sock!=None, False)
|
||
|
conn.close()
|
||
|
|
||
|
#same should be if we add keep-alive because this should be the std. behaviour
|
||
|
***************
|
||
|
*** 55,67 ****
|
||
|
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
|
||
|
out1 = conn.getresponse().read();
|
||
|
assert_equal('"error":null' in out1, True)
|
||
|
! assert_equal(conn.sock!=None, True) #according to http/1.1 connection must still be open!
|
||
|
!
|
||
|
! #send 2nd request without closing connection
|
||
|
! conn.request('POST', '/', '{"method": "getchaintips"}', headers)
|
||
|
! out2 = conn.getresponse().read();
|
||
|
! assert_equal('"error":null' in out1, True) #must also response with a correct json-rpc message
|
||
|
! assert_equal(conn.sock!=None, True) #according to http/1.1 connection must still be open!
|
||
|
conn.close()
|
||
|
|
||
|
#now do the same with "Connection: close"
|
||
|
--- 51,59 ----
|
||
|
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
|
||
|
out1 = conn.getresponse().read();
|
||
|
assert_equal('"error":null' in out1, True)
|
||
|
!
|
||
|
! # TODO #1856: Re-enable support for persistent connections.
|
||
|
! assert_equal(conn.sock!=None, False)
|
||
|
conn.close()
|
||
|
|
||
|
#now do the same with "Connection: close"
|
||
|
***************
|
||
|
*** 96,102 ****
|
||
|
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
|
||
|
out1 = conn.getresponse().read();
|
||
|
assert_equal('"error":null' in out1, True)
|
||
|
! assert_equal(conn.sock!=None, True) #connection must be closed because bitcoind should use keep-alive by default
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
HTTPBasicsTest ().main ()
|
||
|
--- 88,97 ----
|
||
|
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
|
||
|
out1 = conn.getresponse().read();
|
||
|
assert_equal('"error":null' in out1, True)
|
||
|
!
|
||
|
! # TODO #1856: Re-enable support for persistent connections.
|
||
|
! assert_equal(conn.sock!=None, False)
|
||
|
! conn.close()
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
HTTPBasicsTest ().main ()
|
||
|
diff -crB ./qa/rpc-tests/wallet_protectcoinbase.py ../../komodo-jl777/qa/rpc-tests/wallet_protectcoinbase.py
|
||
|
*** ./qa/rpc-tests/wallet_protectcoinbase.py 2017-01-03 10:40:50.199328558 +0000
|
||
|
--- ../../komodo-jl777/qa/rpc-tests/wallet_protectcoinbase.py 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 8,14 ****
|
||
|
from test_framework.util import *
|
||
|
from time import *
|
||
|
|
||
|
! class Wallet2Test (BitcoinTestFramework):
|
||
|
|
||
|
def setup_chain(self):
|
||
|
print("Initializing test directory "+self.options.tmpdir)
|
||
|
--- 8,14 ----
|
||
|
from test_framework.util import *
|
||
|
from time import *
|
||
|
|
||
|
! class WalletProtectCoinbaseTest (BitcoinTestFramework):
|
||
|
|
||
|
def setup_chain(self):
|
||
|
print("Initializing test directory "+self.options.tmpdir)
|
||
|
***************
|
||
|
*** 23,43 ****
|
||
|
self.is_network_split=False
|
||
|
self.sync_all()
|
||
|
|
||
|
! def wait_for_operationd_success(self, myopid):
|
||
|
print('waiting for async operation {}'.format(myopid))
|
||
|
opids = []
|
||
|
opids.append(myopid)
|
||
|
! timeout = 120
|
||
|
status = None
|
||
|
for x in xrange(1, timeout):
|
||
|
results = self.nodes[0].z_getoperationresult(opids)
|
||
|
if len(results)==0:
|
||
|
sleep(1)
|
||
|
else:
|
||
|
status = results[0]["status"]
|
||
|
break
|
||
|
print('...returned status: {}'.format(status))
|
||
|
! assert_equal("success", status)
|
||
|
|
||
|
def run_test (self):
|
||
|
print "Mining blocks..."
|
||
|
--- 23,55 ----
|
||
|
self.is_network_split=False
|
||
|
self.sync_all()
|
||
|
|
||
|
! # Returns txid if operation was a success or None
|
||
|
! def wait_and_assert_operationid_status(self, myopid, in_status='success', in_errormsg=None):
|
||
|
print('waiting for async operation {}'.format(myopid))
|
||
|
opids = []
|
||
|
opids.append(myopid)
|
||
|
! timeout = 300
|
||
|
status = None
|
||
|
+ errormsg = None
|
||
|
+ txid = None
|
||
|
for x in xrange(1, timeout):
|
||
|
results = self.nodes[0].z_getoperationresult(opids)
|
||
|
if len(results)==0:
|
||
|
sleep(1)
|
||
|
else:
|
||
|
status = results[0]["status"]
|
||
|
+ if status == "failed":
|
||
|
+ errormsg = results[0]['error']['message']
|
||
|
+ elif status == "success":
|
||
|
+ txid = results[0]['result']['txid']
|
||
|
break
|
||
|
print('...returned status: {}'.format(status))
|
||
|
! assert_equal(in_status, status)
|
||
|
! if errormsg is not None:
|
||
|
! assert(in_errormsg is not None)
|
||
|
! assert_equal(in_errormsg in errormsg, True)
|
||
|
! print('...returned error: {}'.format(errormsg))
|
||
|
! return txid
|
||
|
|
||
|
def run_test (self):
|
||
|
print "Mining blocks..."
|
||
|
***************
|
||
|
*** 94,100 ****
|
||
|
recipients = []
|
||
|
recipients.append({"address":myzaddr, "amount": Decimal('20.0') - Decimal('0.0001')})
|
||
|
myopid = self.nodes[0].z_sendmany(mytaddr, recipients)
|
||
|
! self.wait_for_operationd_success(myopid)
|
||
|
self.sync_all()
|
||
|
self.nodes[1].generate(1)
|
||
|
self.sync_all()
|
||
|
--- 106,112 ----
|
||
|
recipients = []
|
||
|
recipients.append({"address":myzaddr, "amount": Decimal('20.0') - Decimal('0.0001')})
|
||
|
myopid = self.nodes[0].z_sendmany(mytaddr, recipients)
|
||
|
! self.wait_and_assert_operationid_status(myopid)
|
||
|
self.sync_all()
|
||
|
self.nodes[1].generate(1)
|
||
|
self.sync_all()
|
||
|
***************
|
||
|
*** 109,116 ****
|
||
|
recipients = []
|
||
|
recipients.append({"address":mytaddr, "amount":Decimal('10.0')})
|
||
|
myopid = self.nodes[0].z_sendmany(myzaddr, recipients)
|
||
|
! self.wait_for_operationd_success(myopid)
|
||
|
self.sync_all()
|
||
|
self.nodes[1].generate(1)
|
||
|
self.sync_all()
|
||
|
|
||
|
--- 121,134 ----
|
||
|
recipients = []
|
||
|
recipients.append({"address":mytaddr, "amount":Decimal('10.0')})
|
||
|
myopid = self.nodes[0].z_sendmany(myzaddr, recipients)
|
||
|
! mytxid = self.wait_and_assert_operationid_status(myopid)
|
||
|
! assert(mytxid is not None)
|
||
|
self.sync_all()
|
||
|
+
|
||
|
+ # check that priority of the tx sending from a zaddr is not 0
|
||
|
+ mempool = self.nodes[0].getrawmempool(True)
|
||
|
+ assert(Decimal(mempool[mytxid]['startingpriority']) >= Decimal('1000000000000'))
|
||
|
+
|
||
|
self.nodes[1].generate(1)
|
||
|
self.sync_all()
|
||
|
|
||
|
***************
|
||
|
*** 120,125 ****
|
||
|
--- 138,152 ----
|
||
|
assert_equal(Decimal(resp["private"]), Decimal('9.9998'))
|
||
|
assert_equal(Decimal(resp["total"]), Decimal('39.9998'))
|
||
|
|
||
|
+ # z_sendmany will return an error if there is transparent change output considered dust.
|
||
|
+ # UTXO selection in z_sendmany sorts in ascending order, so smallest utxos are consumed first.
|
||
|
+ # At this point in time, unspent notes all have a value of 10.0 and standard z_sendmany fee is 0.0001.
|
||
|
+ recipients = []
|
||
|
+ amount = Decimal('10.0') - Decimal('0.00010000') - Decimal('0.00000001') # this leaves change at 1 zatoshi less than dust threshold
|
||
|
+ recipients.append({"address":self.nodes[0].getnewaddress(), "amount":amount })
|
||
|
+ myopid = self.nodes[0].z_sendmany(mytaddr, recipients)
|
||
|
+ self.wait_and_assert_operationid_status(myopid, "failed", "Insufficient transparent funds, have 10.00, need 0.00000545 more to avoid creating invalid change output 0.00000001 (dust threshold is 0.00000546)")
|
||
|
+
|
||
|
# Send will fail because send amount is too big, even when including coinbase utxos
|
||
|
errorString = ""
|
||
|
try:
|
||
|
***************
|
||
|
*** 128,133 ****
|
||
|
--- 155,168 ----
|
||
|
errorString = e.error['message']
|
||
|
assert_equal("Insufficient funds" in errorString, True)
|
||
|
|
||
|
+ # z_sendmany will fail because of insufficient funds
|
||
|
+ recipients = []
|
||
|
+ recipients.append({"address":self.nodes[1].getnewaddress(), "amount":Decimal('10000.0')})
|
||
|
+ myopid = self.nodes[0].z_sendmany(mytaddr, recipients)
|
||
|
+ self.wait_and_assert_operationid_status(myopid, "failed", "Insufficient transparent funds, have 10.00, need 10000.0001")
|
||
|
+ myopid = self.nodes[0].z_sendmany(myzaddr, recipients)
|
||
|
+ self.wait_and_assert_operationid_status(myopid, "failed", "Insufficient protected funds, have 9.9998, need 10000.0001")
|
||
|
+
|
||
|
# Send will fail because of insufficient funds unless sender uses coinbase utxos
|
||
|
try:
|
||
|
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 21)
|
||
|
***************
|
||
|
*** 135,140 ****
|
||
|
--- 170,227 ----
|
||
|
errorString = e.error['message']
|
||
|
assert_equal("Insufficient funds, coinbase funds can only be spent after they have been sent to a zaddr" in errorString, True)
|
||
|
|
||
|
+ # Verify that mempools accept tx with joinsplits which have at least the default z_sendmany fee.
|
||
|
+ # If this test passes, it confirms that issue #1851 has been resolved, where sending from
|
||
|
+ # a zaddr to 1385 taddr recipients fails because the default fee was considered too low
|
||
|
+ # given the tx size, resulting in mempool rejection.
|
||
|
+ errorString = ''
|
||
|
+ recipients = []
|
||
|
+ num_t_recipients = 2500
|
||
|
+ amount_per_recipient = Decimal('0.00000546') # dust threshold
|
||
|
+ # Note that regtest chainparams does not require standard tx, so setting the amount to be
|
||
|
+ # less than the dust threshold, e.g. 0.00000001 will not result in mempool rejection.
|
||
|
+ for i in xrange(0,num_t_recipients):
|
||
|
+ newtaddr = self.nodes[2].getnewaddress()
|
||
|
+ recipients.append({"address":newtaddr, "amount":amount_per_recipient})
|
||
|
+ myopid = self.nodes[0].z_sendmany(myzaddr, recipients)
|
||
|
+ try:
|
||
|
+ self.wait_and_assert_operationid_status(myopid)
|
||
|
+ except JSONRPCException as e:
|
||
|
+ print("JSONRPC error: "+e.error['message'])
|
||
|
+ assert(False)
|
||
|
+ except Exception as e:
|
||
|
+ print("Unexpected exception caught during testing: "+str(sys.exc_info()[0]))
|
||
|
+ assert(False)
|
||
|
+
|
||
|
+ self.sync_all()
|
||
|
+ self.nodes[1].generate(1)
|
||
|
+ self.sync_all()
|
||
|
+
|
||
|
+ # check balance
|
||
|
+ node2balance = amount_per_recipient * num_t_recipients
|
||
|
+ assert_equal(self.nodes[2].getbalance(), node2balance)
|
||
|
+
|
||
|
+ # Send will fail because fee is negative
|
||
|
+ try:
|
||
|
+ self.nodes[0].z_sendmany(myzaddr, recipients, 1, -1)
|
||
|
+ except JSONRPCException,e:
|
||
|
+ errorString = e.error['message']
|
||
|
+ assert_equal("Invalid amount" in errorString, True)
|
||
|
+
|
||
|
+ # Send will fail because fee is larger than MAX_MONEY
|
||
|
+ try:
|
||
|
+ self.nodes[0].z_sendmany(myzaddr, recipients, 1, Decimal('21000000.00000001'))
|
||
|
+ except JSONRPCException,e:
|
||
|
+ errorString = e.error['message']
|
||
|
+ assert_equal("Invalid amount" in errorString, True)
|
||
|
+
|
||
|
+ # Send will fail because fee is larger than sum of outputs
|
||
|
+ try:
|
||
|
+ self.nodes[0].z_sendmany(myzaddr, recipients, 1, (amount_per_recipient * num_t_recipients) + Decimal('0.00000001'))
|
||
|
+ except JSONRPCException,e:
|
||
|
+ errorString = e.error['message']
|
||
|
+ assert_equal("is greater than the sum of outputs" in errorString, True)
|
||
|
+
|
||
|
# Send will succeed because the balance of non-coinbase utxos is 10.0
|
||
|
try:
|
||
|
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 9)
|
||
|
***************
|
||
|
*** 146,152 ****
|
||
|
self.sync_all()
|
||
|
|
||
|
# check balance
|
||
|
! assert_equal(self.nodes[2].getbalance(), 9)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
! Wallet2Test ().main ()
|
||
|
--- 233,263 ----
|
||
|
self.sync_all()
|
||
|
|
||
|
# check balance
|
||
|
! node2balance = node2balance + 9
|
||
|
! assert_equal(self.nodes[2].getbalance(), node2balance)
|
||
|
!
|
||
|
! # Check that chained joinsplits in a single tx are created successfully.
|
||
|
! recipients = []
|
||
|
! num_recipients = 3
|
||
|
! amount_per_recipient = Decimal('0.002')
|
||
|
! minconf = 1
|
||
|
! send_amount = num_recipients * amount_per_recipient
|
||
|
! custom_fee = Decimal('0.00012345')
|
||
|
! zbalance = self.nodes[0].z_getbalance(myzaddr)
|
||
|
! for i in xrange(0,num_recipients):
|
||
|
! newzaddr = self.nodes[2].z_getnewaddress()
|
||
|
! recipients.append({"address":newzaddr, "amount":amount_per_recipient})
|
||
|
! myopid = self.nodes[0].z_sendmany(myzaddr, recipients, minconf, custom_fee)
|
||
|
! self.wait_and_assert_operationid_status(myopid)
|
||
|
! self.sync_all()
|
||
|
! self.nodes[1].generate(1)
|
||
|
! self.sync_all()
|
||
|
!
|
||
|
! # check balances
|
||
|
! resp = self.nodes[2].z_gettotalbalance()
|
||
|
! assert_equal(Decimal(resp["private"]), send_amount)
|
||
|
! resp = self.nodes[0].z_getbalance(myzaddr)
|
||
|
! assert_equal(Decimal(resp), zbalance - custom_fee - send_amount)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
! WalletProtectCoinbaseTest().main()
|
||
|
diff -crB ./qa/rpc-tests/wallet.py ../../komodo-jl777/qa/rpc-tests/wallet.py
|
||
|
*** ./qa/rpc-tests/wallet.py 2017-01-03 10:40:50.199328558 +0000
|
||
|
--- ../../komodo-jl777/qa/rpc-tests/wallet.py 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 244,249 ****
|
||
|
--- 244,295 ----
|
||
|
myvjoinsplits = mytxdetails["vjoinsplit"]
|
||
|
assert_equal(0, len(myvjoinsplits))
|
||
|
|
||
|
+ # z_sendmany is expected to fail if tx size breaks limit
|
||
|
+ myzaddr = self.nodes[0].z_getnewaddress()
|
||
|
+
|
||
|
+ recipients = []
|
||
|
+ num_t_recipients = 3000
|
||
|
+ amount_per_recipient = Decimal('0.00000001')
|
||
|
+ errorString = ''
|
||
|
+ for i in xrange(0,num_t_recipients):
|
||
|
+ newtaddr = self.nodes[2].getnewaddress()
|
||
|
+ recipients.append({"address":newtaddr, "amount":amount_per_recipient})
|
||
|
+ try:
|
||
|
+ self.nodes[0].z_sendmany(myzaddr, recipients)
|
||
|
+ except JSONRPCException,e:
|
||
|
+ errorString = e.error['message']
|
||
|
+ assert("Too many outputs, size of raw transaction" in errorString)
|
||
|
+
|
||
|
+ recipients = []
|
||
|
+ num_t_recipients = 2000
|
||
|
+ num_z_recipients = 50
|
||
|
+ amount_per_recipient = Decimal('0.00000001')
|
||
|
+ errorString = ''
|
||
|
+ for i in xrange(0,num_t_recipients):
|
||
|
+ newtaddr = self.nodes[2].getnewaddress()
|
||
|
+ recipients.append({"address":newtaddr, "amount":amount_per_recipient})
|
||
|
+ for i in xrange(0,num_z_recipients):
|
||
|
+ newzaddr = self.nodes[2].z_getnewaddress()
|
||
|
+ recipients.append({"address":newzaddr, "amount":amount_per_recipient})
|
||
|
+ try:
|
||
|
+ self.nodes[0].z_sendmany(myzaddr, recipients)
|
||
|
+ except JSONRPCException,e:
|
||
|
+ errorString = e.error['message']
|
||
|
+ assert("size of raw transaction would be larger than limit" in errorString)
|
||
|
+
|
||
|
+ recipients = []
|
||
|
+ num_z_recipients = 100
|
||
|
+ amount_per_recipient = Decimal('0.00000001')
|
||
|
+ errorString = ''
|
||
|
+ for i in xrange(0,num_z_recipients):
|
||
|
+ newzaddr = self.nodes[2].z_getnewaddress()
|
||
|
+ recipients.append({"address":newzaddr, "amount":amount_per_recipient})
|
||
|
+ try:
|
||
|
+ self.nodes[0].z_sendmany(myzaddr, recipients)
|
||
|
+ except JSONRPCException,e:
|
||
|
+ errorString = e.error['message']
|
||
|
+ assert("Invalid parameter, too many zaddr outputs" in errorString)
|
||
|
+
|
||
|
# add zaddr to node 2
|
||
|
myzaddr = self.nodes[2].z_getnewaddress()
|
||
|
|
||
|
Only in ../../komodo-jl777/qa/rpc-tests: wallet_treestate.py
|
||
|
diff -crB ./qa/rpc-tests/zcjoinsplit.py ../../komodo-jl777/qa/rpc-tests/zcjoinsplit.py
|
||
|
*** ./qa/rpc-tests/zcjoinsplit.py 2017-01-03 10:40:50.203328760 +0000
|
||
|
--- ../../komodo-jl777/qa/rpc-tests/zcjoinsplit.py 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 36,41 ****
|
||
|
--- 36,49 ----
|
||
|
receive_result = self.nodes[0].zcrawreceive(zcsecretkey, joinsplit_result["encryptednote1"])
|
||
|
assert_equal(receive_result["exists"], True)
|
||
|
|
||
|
+ # The pure joinsplit we create should be mined in the next block
|
||
|
+ # despite other transactions being in the mempool.
|
||
|
+ addrtest = self.nodes[0].getnewaddress()
|
||
|
+ for xx in range(0,10):
|
||
|
+ self.nodes[0].generate(1)
|
||
|
+ for x in range(0,50):
|
||
|
+ self.nodes[0].sendtoaddress(addrtest, 0.01);
|
||
|
+
|
||
|
joinsplit_tx = self.nodes[0].createrawtransaction([], {})
|
||
|
joinsplit_result = self.nodes[0].zcrawjoinsplit(joinsplit_tx, {receive_result["note"] : zcsecretkey}, {zcaddress: 39.8}, 0, 0.1)
|
||
|
|
||
|
diff -crB ./qa/zcash/performance-measurements.sh ../../komodo-jl777/qa/zcash/performance-measurements.sh
|
||
|
*** ./qa/zcash/performance-measurements.sh 2017-01-03 10:40:50.203328760 +0000
|
||
|
--- ../../komodo-jl777/qa/zcash/performance-measurements.sh 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 88,93 ****
|
||
|
--- 88,99 ----
|
||
|
validatelargetx)
|
||
|
zcash_rpc zcbenchmark validatelargetx 5
|
||
|
;;
|
||
|
+ trydecryptnotes)
|
||
|
+ zcash_rpc zcbenchmark trydecryptnotes 1000 "${@:3}"
|
||
|
+ ;;
|
||
|
+ incnotewitnesses)
|
||
|
+ zcash_rpc zcbenchmark incnotewitnesses 100 "${@:3}"
|
||
|
+ ;;
|
||
|
*)
|
||
|
zcashd_stop
|
||
|
echo "Bad arguments."
|
||
|
***************
|
||
|
*** 116,121 ****
|
||
|
--- 122,133 ----
|
||
|
verifyequihash)
|
||
|
zcash_rpc zcbenchmark verifyequihash 1
|
||
|
;;
|
||
|
+ trydecryptnotes)
|
||
|
+ zcash_rpc zcbenchmark trydecryptnotes 1 "${@:3}"
|
||
|
+ ;;
|
||
|
+ incnotewitnesses)
|
||
|
+ zcash_rpc zcbenchmark incnotewitnesses 1 "${@:3}"
|
||
|
+ ;;
|
||
|
*)
|
||
|
zcashd_massif_stop
|
||
|
echo "Bad arguments."
|
||
|
***************
|
||
|
*** 145,150 ****
|
||
|
--- 157,168 ----
|
||
|
verifyequihash)
|
||
|
zcash_rpc zcbenchmark verifyequihash 1
|
||
|
;;
|
||
|
+ trydecryptnotes)
|
||
|
+ zcash_rpc zcbenchmark trydecryptnotes 1 "${@:3}"
|
||
|
+ ;;
|
||
|
+ incnotewitnesses)
|
||
|
+ zcash_rpc zcbenchmark incnotewitnesses 1 "${@:3}"
|
||
|
+ ;;
|
||
|
*)
|
||
|
zcashd_valgrind_stop
|
||
|
echo "Bad arguments."
|
||
|
diff -crB ./README.md ../../komodo-jl777/README.md
|
||
|
*** ./README.md 2017-01-03 10:40:50.151326129 +0000
|
||
|
--- ../../komodo-jl777/README.md 2017-01-03 09:49:08.848505929 +0000
|
||
|
***************
|
||
|
*** 1,43 ****
|
||
|
- <<<<<<< HEAD
|
||
|
|
||
|
- Zcash
|
||
|
- =====
|
||
|
-
|
||
|
- https://z.cash/
|
||
|
-
|
||
|
- Where do I begin?
|
||
|
- -----------------
|
||
|
-
|
||
|
- We have a guide for joining the public testnet: https://github.com/zcash/zcash/wiki/Beta-Guide
|
||
|
-
|
||
|
- What is Zcash?
|
||
|
- --------------
|
||
|
-
|
||
|
- Zcash is an implementation of the "Zerocash" protocol. Based on Bitcoin's code, it intends to
|
||
|
- offer a far higher standard of privacy and anonymity through a sophisticiated zero-knowledge
|
||
|
- proving scheme which preserves confidentiality of transaction metadata.
|
||
|
-
|
||
|
- **Zcash is unfinished and highly experimental.** Use at your own risk.
|
||
|
-
|
||
|
- Participation in the Zcash project is subject to a [Code of Conduct](code_of_conduct.md).
|
||
|
-
|
||
|
- =======
|
||
|
- Zcash 1.0.0
|
||
|
- ===========
|
||
|
|
||
|
What is Zcash?
|
||
|
--------------
|
||
|
|
||
|
[Zcash](https://z.cash/) is an implementation of the "Zerocash" protocol.
|
||
|
Based on Bitcoin's code, it intends to offer a far higher standard of privacy
|
||
|
! and anonymity through a sophisticated zero-knowledge proving scheme that
|
||
|
! preserves confidentiality of transaction metadata. Technical details are
|
||
|
! available in our [Protocol Specification](https://github.com/zcash/zips/raw/master/protocol/protocol.pdf).
|
||
|
|
||
|
This software is the Zcash client. It downloads and stores the entire history
|
||
|
of Zcash transactions; depending on the speed of your computer and network
|
||
|
connection, the synchronization process could take a day or more once the
|
||
|
! block chain has reached a significant size.
|
||
|
|
||
|
Security Warnings
|
||
|
-----------------
|
||
|
--- 1,18 ----
|
||
|
|
||
|
|
||
|
What is Zcash?
|
||
|
--------------
|
||
|
|
||
|
[Zcash](https://z.cash/) is an implementation of the "Zerocash" protocol.
|
||
|
Based on Bitcoin's code, it intends to offer a far higher standard of privacy
|
||
|
! through a sophisticated zero-knowledge proving scheme that preserves
|
||
|
! confidentiality of transaction metadata. Technical details are available
|
||
|
! in our [Protocol Specification](https://github.com/zcash/zips/raw/master/protocol/protocol.pdf).
|
||
|
|
||
|
This software is the Zcash client. It downloads and stores the entire history
|
||
|
of Zcash transactions; depending on the speed of your computer and network
|
||
|
connection, the synchronization process could take a day or more once the
|
||
|
! blockchain has reached a significant size.
|
||
|
|
||
|
Security Warnings
|
||
|
-----------------
|
||
|
***************
|
||
|
*** 165,173 ****
|
||
|
|
||
|
Where do I begin?
|
||
|
-----------------
|
||
|
!
|
||
|
! We have a guide for joining the public testnet:
|
||
|
! https://github.com/zcash/zcash/wiki/Beta-Guide
|
||
|
|
||
|
### Need Help?
|
||
|
|
||
|
--- 140,147 ----
|
||
|
|
||
|
Where do I begin?
|
||
|
-----------------
|
||
|
! We have a guide for joining the main Zcash network:
|
||
|
! https://github.com/zcash/zcash/wiki/1.0-User-Guide
|
||
|
|
||
|
### Need Help?
|
||
|
|
||
|
***************
|
||
|
*** 182,188 ****
|
||
|
--------
|
||
|
|
||
|
Build Zcash along with most dependencies from source by running
|
||
|
! ./zcutil/build.sh. Currently only Linux is supported.
|
||
|
|
||
|
License
|
||
|
-------
|
||
|
--- 156,162 ----
|
||
|
--------
|
||
|
|
||
|
Build Zcash along with most dependencies from source by running
|
||
|
! ./zcutil/build.sh. Currently only Linux is officially supported.
|
||
|
|
||
|
License
|
||
|
-------
|
||
|
diff -crB ./src/assetchains ../../komodo-jl777/src/assetchains
|
||
|
*** ./src/assetchains 2017-01-03 10:40:50.211329166 +0000
|
||
|
--- ../../komodo-jl777/src/assetchains 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 3,96 ****
|
||
|
source pubkey.txt
|
||
|
echo $pubkey
|
||
|
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=REVS -ac_supply=1300000 -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=SUPERNET -ac_supply=816061 -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=DEX -ac_supply=999999 -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=PANGEA -ac_supply=999999 -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=JUMBLR -ac_supply=999999 -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=BET -ac_supply=999999 -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=CRYPTO -ac_supply=999999 -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=HODL -ac_supply=9999999 -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=SHARK -ac_supply=1401 -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=BOTS -ac_supply=999999 -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=MGW -ac_supply=999999 -addnode=78.47.196.146 $1 &
|
||
|
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=USD -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=EUR -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=JPY -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=GBP -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=AUD -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=CAD -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=CHF -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=NZD -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=CNY -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=RUB -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=MXN -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=BRL -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=INR -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=HKD -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=TRY -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=ZAR -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=PLN -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=NOK -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=SEK -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=DKK -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=CZK -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=HUF -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=ILS -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=KRW -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=MYR -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=PHP -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=RON -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=SGD -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=THB -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=BGN -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=IDR -addnode=78.47.196.146 $1 &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=HRK -addnode=78.47.196.146 $1 &
|
||
|
!
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"timeout\":60000,\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"REVS\",\"pubkey\":\"$pubkey\"}"
|
||
|
!
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SUPERNET\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"DEX\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"PANGEA\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"JUMBLR\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BET\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CRYPTO\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HODL\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SHARK\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BOTS\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MGW\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"USD\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"EUR\",\"pubkey\":\"$pubkey\"}"
|
||
|
!
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"JPY\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"GBP\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"AUD\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CAD\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CHF\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"NZD\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CNY\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"RUB\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MXN\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BRL\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"INR\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HKD\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"TRY\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"ZAR\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"PLN\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"NOK\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SEK\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"DKK\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CZK\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HUF\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"ILS\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"KRW\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MYR\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"PHP\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"RON\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SGD\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"THB\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BGN\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"IDR\",\"pubkey\":\"$pubkey\"}"
|
||
|
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HRK\",\"pubkey\":\"$pubkey\"}"
|
||
|
|
||
|
--- 3,50 ----
|
||
|
source pubkey.txt
|
||
|
echo $pubkey
|
||
|
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=REVS -ac_supply=1300000 -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=SUPERNET -ac_supply=816061 -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=DEX -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=PANGEA -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=JUMBLR -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=BET -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=CRYPTO -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=HODL -ac_supply=9999999 -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=SHARK -ac_supply=1401 -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=BOTS -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=MGW -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
|
||
|
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=USD -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=EUR -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=JPY -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=GBP -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=AUD -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=CAD -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=CHF -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=NZD -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=CNY -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=RUB -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=MXN -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=BRL -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=INR -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=HKD -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=TRY -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=ZAR -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=PLN -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=NOK -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=SEK -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=DKK -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=CZK -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=HUF -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=ILS -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=KRW -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=MYR -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=PHP -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=RON -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=SGD -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=THB -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=BGN -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=IDR -addnode=78.47.196.146 $1 -gen &
|
||
|
! ./komodod -pubkey=$pubkey -ac_name=HRK -addnode=78.47.196.146 $1 -gen &
|
||
|
|
||
|
diff -crB ./src/bitcoind.cpp ../../komodo-jl777/src/bitcoind.cpp
|
||
|
*** ./src/bitcoind.cpp 2017-01-03 10:40:50.215329368 +0000
|
||
|
--- ../../komodo-jl777/src/bitcoind.cpp 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 41,47 ****
|
||
|
// Tell the main threads to shutdown.
|
||
|
while (!fShutdown)
|
||
|
{
|
||
|
! MilliSleep(10000);
|
||
|
komodo_passport_iteration();
|
||
|
fShutdown = ShutdownRequested();
|
||
|
}
|
||
|
--- 41,47 ----
|
||
|
// Tell the main threads to shutdown.
|
||
|
while (!fShutdown)
|
||
|
{
|
||
|
! MilliSleep(16000);
|
||
|
komodo_passport_iteration();
|
||
|
fShutdown = ShutdownRequested();
|
||
|
}
|
||
|
diff -crB ./src/chainparams.cpp ../../komodo-jl777/src/chainparams.cpp
|
||
|
*** ./src/chainparams.cpp 2017-01-03 10:40:50.215329368 +0000
|
||
|
--- ../../komodo-jl777/src/chainparams.cpp 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 43,48 ****
|
||
|
--- 43,49 ----
|
||
|
CMainParams()
|
||
|
{
|
||
|
strNetworkID = "main";
|
||
|
+ strCurrencyUnits = "KMD";
|
||
|
consensus.fCoinbaseMustBeProtected = false;//true;
|
||
|
consensus.nSubsidySlowStartInterval = 20000;
|
||
|
consensus.nSubsidyHalvingInterval = 840000;
|
||
|
***************
|
||
|
*** 119,129 ****
|
||
|
checkpointData = (Checkpoints::CCheckpointData)
|
||
|
{
|
||
|
boost::assign::map_list_of
|
||
|
! ( 0, consensus.hashGenesisBlock),
|
||
|
! genesis.nTime, // * UNIX timestamp of last checkpoint block
|
||
|
! 0, // * total number of transactions between genesis and last checkpoint
|
||
|
! // (the tx=... number in the SetBestChain debug.log lines)
|
||
|
! 0 // * estimated number of transactions per day after checkpoint
|
||
|
};
|
||
|
if ( pthread_create((pthread_t *)malloc(sizeof(pthread_t)),NULL,chainparams_commandline,(void *)&consensus) != 0 )
|
||
|
{
|
||
|
--- 120,134 ----
|
||
|
checkpointData = (Checkpoints::CCheckpointData)
|
||
|
{
|
||
|
boost::assign::map_list_of
|
||
|
! (0, consensus.hashGenesisBlock),
|
||
|
! //(2500, uint256S("0x0e6a3d5a46eba97c4e7618d66a39f115729e1176433c98481124c2bf733aa54e"))
|
||
|
! //(15000, uint256S("0x00f0bd236790e903321a2d22f85bd6bf8a505f6ef4eddb20458a65d37e14d142")),
|
||
|
! //(100000, uint256S("0x0f02eb1f3a4b89df9909fec81a4bd7d023e32e24e1f5262d9fc2cc36a715be6f")),
|
||
|
! 1481120910, // * UNIX timestamp of last checkpoint block
|
||
|
! 110415, // * total number of transactions between genesis and last checkpoint
|
||
|
! // (the tx=... number in the SetBestChain debug.log lines)
|
||
|
! 4240 // * estimated number of transactions per day after checkpoint
|
||
|
! // total number of tx / (checkpoint block height / (24 * 24))
|
||
|
};
|
||
|
if ( pthread_create((pthread_t *)malloc(sizeof(pthread_t)),NULL,chainparams_commandline,(void *)&consensus) != 0 )
|
||
|
{
|
||
|
***************
|
||
|
*** 160,165 ****
|
||
|
--- 165,171 ----
|
||
|
public:
|
||
|
CTestNetParams() {
|
||
|
strNetworkID = "test";
|
||
|
+ strCurrencyUnits = "TAZ";
|
||
|
consensus.nMajorityEnforceBlockUpgrade = 51;
|
||
|
consensus.nMajorityRejectBlockOutdated = 75;
|
||
|
consensus.nMajorityWindow = 400;
|
||
|
***************
|
||
|
*** 222,227 ****
|
||
|
--- 228,234 ----
|
||
|
public:
|
||
|
CRegTestParams() {
|
||
|
strNetworkID = "regtest";
|
||
|
+ strCurrencyUnits = "REG";
|
||
|
consensus.fCoinbaseMustBeProtected = false;
|
||
|
consensus.nSubsidySlowStartInterval = 0;
|
||
|
consensus.nSubsidyHalvingInterval = 150;
|
||
|
diff -crB ./src/chainparams.h ../../komodo-jl777/src/chainparams.h
|
||
|
*** ./src/chainparams.h 2017-01-03 10:40:50.215329368 +0000
|
||
|
--- ../../komodo-jl777/src/chainparams.h 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 69,74 ****
|
||
|
--- 69,75 ----
|
||
|
int64_t PruneAfterHeight() const { return nPruneAfterHeight; }
|
||
|
unsigned int EquihashN() const { return nEquihashN; }
|
||
|
unsigned int EquihashK() const { return nEquihashK; }
|
||
|
+ std::string CurrencyUnits() const { return strCurrencyUnits; }
|
||
|
/** Make miner stop after a block is found. In RPC, don't return until nGenProcLimit blocks are generated */
|
||
|
bool MineBlocksOnDemand() const { return fMineBlocksOnDemand; }
|
||
|
/** In the future use NetworkIDString() for RPC fields */
|
||
|
***************
|
||
|
*** 107,112 ****
|
||
|
--- 108,114 ----
|
||
|
std::vector<CDNSSeedData> vSeeds;
|
||
|
std::vector<unsigned char> base58Prefixes[MAX_BASE58_TYPES];
|
||
|
std::string strNetworkID;
|
||
|
+ std::string strCurrencyUnits;
|
||
|
CBlock genesis;
|
||
|
std::vector<SeedSpec6> vFixedSeeds;
|
||
|
bool fRequireRPCPassword = false;
|
||
|
diff -crB ./src/clientversion.h ../../komodo-jl777/src/clientversion.h
|
||
|
*** ./src/clientversion.h 2017-01-03 10:40:50.215329368 +0000
|
||
|
--- ../../komodo-jl777/src/clientversion.h 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 16,22 ****
|
||
|
//! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it
|
||
|
#define CLIENT_VERSION_MAJOR 1
|
||
|
#define CLIENT_VERSION_MINOR 0
|
||
|
! #define CLIENT_VERSION_REVISION 0
|
||
|
#define CLIENT_VERSION_BUILD 50
|
||
|
|
||
|
//! Set to true for release, false for prerelease or test build
|
||
|
--- 16,22 ----
|
||
|
//! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it
|
||
|
#define CLIENT_VERSION_MAJOR 1
|
||
|
#define CLIENT_VERSION_MINOR 0
|
||
|
! #define CLIENT_VERSION_REVISION 3
|
||
|
#define CLIENT_VERSION_BUILD 50
|
||
|
|
||
|
//! Set to true for release, false for prerelease or test build
|
||
|
diff -crB ./src/coins.cpp ../../komodo-jl777/src/coins.cpp
|
||
|
*** ./src/coins.cpp 2017-01-03 10:40:50.215329368 +0000
|
||
|
--- ../../komodo-jl777/src/coins.cpp 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 6,11 ****
|
||
|
--- 6,12 ----
|
||
|
|
||
|
#include "memusage.h"
|
||
|
#include "random.h"
|
||
|
+ #include "version.h"
|
||
|
|
||
|
#include <assert.h>
|
||
|
|
||
|
***************
|
||
|
*** 176,186 ****
|
||
|
// case restoring the "old" anchor during a reorg must
|
||
|
// have no effect.
|
||
|
if (currentRoot != newrt) {
|
||
|
! CAnchorsMap::iterator ret = cacheAnchors.insert(std::make_pair(currentRoot, CAnchorsCacheEntry())).first;
|
||
|
|
||
|
! ret->second.entered = false;
|
||
|
! ret->second.flags = CAnchorsCacheEntry::DIRTY;
|
||
|
|
||
|
hashAnchor = newrt;
|
||
|
}
|
||
|
}
|
||
|
--- 177,196 ----
|
||
|
// case restoring the "old" anchor during a reorg must
|
||
|
// have no effect.
|
||
|
if (currentRoot != newrt) {
|
||
|
! // Bring the current best anchor into our local cache
|
||
|
! // so that its tree exists in memory.
|
||
|
! {
|
||
|
! ZCIncrementalMerkleTree tree;
|
||
|
! assert(GetAnchorAt(currentRoot, tree));
|
||
|
! }
|
||
|
|
||
|
! // Mark the anchor as unentered, removing it from view
|
||
|
! cacheAnchors[currentRoot].entered = false;
|
||
|
|
||
|
+ // Mark the cache entry as dirty so it's propagated
|
||
|
+ cacheAnchors[currentRoot].flags = CAnchorsCacheEntry::DIRTY;
|
||
|
+
|
||
|
+ // Mark the new root as the best anchor
|
||
|
hashAnchor = newrt;
|
||
|
}
|
||
|
}
|
||
|
***************
|
||
|
*** 303,318 ****
|
||
|
CAnchorsMap::iterator parent_it = cacheAnchors.find(child_it->first);
|
||
|
|
||
|
if (parent_it == cacheAnchors.end()) {
|
||
|
! if (child_it->second.entered) {
|
||
|
! // Parent doesn't have an entry, but child has a new commitment root.
|
||
|
!
|
||
|
! CAnchorsCacheEntry& entry = cacheAnchors[child_it->first];
|
||
|
! entry.entered = true;
|
||
|
! entry.tree = child_it->second.tree;
|
||
|
! entry.flags = CAnchorsCacheEntry::DIRTY;
|
||
|
|
||
|
! cachedCoinsUsage += memusage::DynamicUsage(entry.tree);
|
||
|
! }
|
||
|
} else {
|
||
|
if (parent_it->second.entered != child_it->second.entered) {
|
||
|
// The parent may have removed the entry.
|
||
|
--- 313,324 ----
|
||
|
CAnchorsMap::iterator parent_it = cacheAnchors.find(child_it->first);
|
||
|
|
||
|
if (parent_it == cacheAnchors.end()) {
|
||
|
! CAnchorsCacheEntry& entry = cacheAnchors[child_it->first];
|
||
|
! entry.entered = child_it->second.entered;
|
||
|
! entry.tree = child_it->second.tree;
|
||
|
! entry.flags = CAnchorsCacheEntry::DIRTY;
|
||
|
|
||
|
! cachedCoinsUsage += memusage::DynamicUsage(entry.tree);
|
||
|
} else {
|
||
|
if (parent_it->second.entered != child_it->second.entered) {
|
||
|
// The parent may have removed the entry.
|
||
|
***************
|
||
|
*** 332,345 ****
|
||
|
CNullifiersMap::iterator parent_it = cacheNullifiers.find(child_it->first);
|
||
|
|
||
|
if (parent_it == cacheNullifiers.end()) {
|
||
|
! if (child_it->second.entered) {
|
||
|
! // Parent doesn't have an entry, but child has a SPENT nullifier.
|
||
|
! // Move the spent nullifier up.
|
||
|
!
|
||
|
! CNullifiersCacheEntry& entry = cacheNullifiers[child_it->first];
|
||
|
! entry.entered = true;
|
||
|
! entry.flags = CNullifiersCacheEntry::DIRTY;
|
||
|
! }
|
||
|
} else {
|
||
|
if (parent_it->second.entered != child_it->second.entered) {
|
||
|
parent_it->second.entered = child_it->second.entered;
|
||
|
--- 338,346 ----
|
||
|
CNullifiersMap::iterator parent_it = cacheNullifiers.find(child_it->first);
|
||
|
|
||
|
if (parent_it == cacheNullifiers.end()) {
|
||
|
! CNullifiersCacheEntry& entry = cacheNullifiers[child_it->first];
|
||
|
! entry.entered = child_it->second.entered;
|
||
|
! entry.flags = CNullifiersCacheEntry::DIRTY;
|
||
|
} else {
|
||
|
if (parent_it->second.entered != child_it->second.entered) {
|
||
|
parent_it->second.entered = child_it->second.entered;
|
||
|
***************
|
||
|
*** 469,474 ****
|
||
|
--- 470,476 ----
|
||
|
{
|
||
|
if (tx.IsCoinBase())
|
||
|
return 0.0;
|
||
|
+ CAmount nTotalIn = 0;
|
||
|
double dResult = 0.0;
|
||
|
BOOST_FOREACH(const CTxIn& txin, tx.vin)
|
||
|
{
|
||
|
***************
|
||
|
*** 477,484 ****
|
||
|
--- 479,512 ----
|
||
|
if (!coins->IsAvailable(txin.prevout.n)) continue;
|
||
|
if (coins->nHeight < nHeight) {
|
||
|
dResult += coins->vout[txin.prevout.n].nValue * (nHeight-coins->nHeight);
|
||
|
+ nTotalIn += coins->vout[txin.prevout.n].nValue;
|
||
|
}
|
||
|
}
|
||
|
+
|
||
|
+ // If a transaction contains a joinsplit, we boost the priority of the transaction.
|
||
|
+ // Joinsplits do not reveal any information about the value or age of a note, so we
|
||
|
+ // cannot apply the priority algorithm used for transparent utxos. Instead, we pick a
|
||
|
+ // very large number and multiply it by the transaction's fee per 1000 bytes of data.
|
||
|
+ // One trillion, 1000000000000, is equivalent to 1 ZEC utxo * 10000 blocks (~17 days).
|
||
|
+ if (tx.vjoinsplit.size() > 0) {
|
||
|
+ unsigned int nTxSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION);
|
||
|
+ nTotalIn += tx.GetJoinSplitValueIn();
|
||
|
+ CAmount fee = nTotalIn - tx.GetValueOut();
|
||
|
+ CFeeRate feeRate(fee, nTxSize);
|
||
|
+ CAmount feePerK = feeRate.GetFeePerK();
|
||
|
+
|
||
|
+ if (feePerK == 0) {
|
||
|
+ feePerK = 1;
|
||
|
+ }
|
||
|
+
|
||
|
+ dResult += 1000000000000 * double(feePerK);
|
||
|
+ // We cast feePerK from int64_t to double because if feePerK is a large number, say
|
||
|
+ // close to MAX_MONEY, the multiplication operation will result in an integer overflow.
|
||
|
+ // The variable dResult should never overflow since a 64-bit double in C++ is typically
|
||
|
+ // a double-precision floating-point number as specified by IEE 754, with a maximum
|
||
|
+ // value DBL_MAX of 1.79769e+308.
|
||
|
+ }
|
||
|
+
|
||
|
return tx.ComputePriority(dResult);
|
||
|
}
|
||
|
|
||
|
Only in ../../komodo-jl777/src: dpowassets
|
||
|
Only in ../../komodo-jl777/src: fundnotaries
|
||
|
diff -crB ./src/gtest/test_checkblock.cpp ../../komodo-jl777/src/gtest/test_checkblock.cpp
|
||
|
*** ./src/gtest/test_checkblock.cpp 2017-01-03 10:40:50.227329975 +0000
|
||
|
--- ../../komodo-jl777/src/gtest/test_checkblock.cpp 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 29,31 ****
|
||
|
--- 29,74 ----
|
||
|
EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "version-too-low", false)).Times(1);
|
||
|
EXPECT_FALSE(CheckBlock(0,0,block, state, false, false));
|
||
|
}
|
||
|
+
|
||
|
+ TEST(ContextualCheckBlock, BadCoinbaseHeight) {
|
||
|
+ SelectParams(CBaseChainParams::MAIN);
|
||
|
+
|
||
|
+ // Create a block with no height in scriptSig
|
||
|
+ CMutableTransaction mtx;
|
||
|
+ mtx.vin.resize(1);
|
||
|
+ mtx.vin[0].prevout.SetNull();
|
||
|
+ mtx.vin[0].scriptSig = CScript() << OP_0;
|
||
|
+ mtx.vout.resize(1);
|
||
|
+ mtx.vout[0].scriptPubKey = CScript() << OP_TRUE;
|
||
|
+ mtx.vout[0].nValue = 0;
|
||
|
+ CTransaction tx {mtx};
|
||
|
+ CBlock block;
|
||
|
+ block.vtx.push_back(tx);
|
||
|
+
|
||
|
+ // Treating block as genesis should pass
|
||
|
+ MockCValidationState state;
|
||
|
+ EXPECT_TRUE(ContextualCheckBlock(block, state, NULL));
|
||
|
+
|
||
|
+ // Treating block as non-genesis should fail
|
||
|
+ mtx.vout.push_back(CTxOut(GetBlockSubsidy(1, Params().GetConsensus())/5, Params().GetFoundersRewardScriptAtHeight(1)));
|
||
|
+ CTransaction tx2 {mtx};
|
||
|
+ block.vtx[0] = tx2;
|
||
|
+ CBlock prev;
|
||
|
+ CBlockIndex indexPrev {prev};
|
||
|
+ indexPrev.nHeight = 0;
|
||
|
+ EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "bad-cb-height", false)).Times(1);
|
||
|
+ EXPECT_FALSE(ContextualCheckBlock(block, state, &indexPrev));
|
||
|
+
|
||
|
+ // Setting to an incorrect height should fail
|
||
|
+ mtx.vin[0].scriptSig = CScript() << 2 << OP_0;
|
||
|
+ CTransaction tx3 {mtx};
|
||
|
+ block.vtx[0] = tx3;
|
||
|
+ EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "bad-cb-height", false)).Times(1);
|
||
|
+ EXPECT_FALSE(ContextualCheckBlock(block, state, &indexPrev));
|
||
|
+
|
||
|
+ // After correcting the scriptSig, should pass
|
||
|
+ mtx.vin[0].scriptSig = CScript() << 1 << OP_0;
|
||
|
+ CTransaction tx4 {mtx};
|
||
|
+ block.vtx[0] = tx4;
|
||
|
+ EXPECT_TRUE(ContextualCheckBlock(block, state, &indexPrev));
|
||
|
+ }
|
||
|
diff -crB ./src/gtest/test_joinsplit.cpp ../../komodo-jl777/src/gtest/test_joinsplit.cpp
|
||
|
*** ./src/gtest/test_joinsplit.cpp 2017-01-03 10:40:50.227329975 +0000
|
||
|
--- ../../komodo-jl777/src/gtest/test_joinsplit.cpp 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 15,20 ****
|
||
|
--- 15,23 ----
|
||
|
|
||
|
void test_full_api(ZCJoinSplit* js)
|
||
|
{
|
||
|
+ // Create verification context.
|
||
|
+ auto verifier = libzcash::ProofVerifier::Strict();
|
||
|
+
|
||
|
// The recipient's information.
|
||
|
SpendingKey recipient_key = SpendingKey::random();
|
||
|
PaymentAddress recipient_addr = recipient_key.address();
|
||
|
***************
|
||
|
*** 69,74 ****
|
||
|
--- 72,78 ----
|
||
|
// Verify the transaction:
|
||
|
ASSERT_TRUE(js->verify(
|
||
|
proof,
|
||
|
+ verifier,
|
||
|
pubKeyHash,
|
||
|
randomSeed,
|
||
|
macs,
|
||
|
***************
|
||
|
*** 143,148 ****
|
||
|
--- 147,153 ----
|
||
|
// Verify the transaction:
|
||
|
ASSERT_TRUE(js->verify(
|
||
|
proof,
|
||
|
+ verifier,
|
||
|
pubKeyHash,
|
||
|
randomSeed,
|
||
|
macs,
|
||
|
***************
|
||
|
*** 154,159 ****
|
||
|
--- 159,222 ----
|
||
|
));
|
||
|
}
|
||
|
|
||
|
+ // Invokes the API (but does not compute a proof)
|
||
|
+ // to test exceptions
|
||
|
+ void invokeAPI(
|
||
|
+ ZCJoinSplit* js,
|
||
|
+ const boost::array<JSInput, 2>& inputs,
|
||
|
+ const boost::array<JSOutput, 2>& outputs,
|
||
|
+ uint64_t vpub_old,
|
||
|
+ uint64_t vpub_new,
|
||
|
+ const uint256& rt
|
||
|
+ ) {
|
||
|
+ uint256 ephemeralKey;
|
||
|
+ uint256 randomSeed;
|
||
|
+ uint256 pubKeyHash = random_uint256();
|
||
|
+ boost::array<uint256, 2> macs;
|
||
|
+ boost::array<uint256, 2> nullifiers;
|
||
|
+ boost::array<uint256, 2> commitments;
|
||
|
+ boost::array<ZCNoteEncryption::Ciphertext, 2> ciphertexts;
|
||
|
+
|
||
|
+ boost::array<Note, 2> output_notes;
|
||
|
+
|
||
|
+ ZCProof proof = js->prove(
|
||
|
+ inputs,
|
||
|
+ outputs,
|
||
|
+ output_notes,
|
||
|
+ ciphertexts,
|
||
|
+ ephemeralKey,
|
||
|
+ pubKeyHash,
|
||
|
+ randomSeed,
|
||
|
+ macs,
|
||
|
+ nullifiers,
|
||
|
+ commitments,
|
||
|
+ vpub_old,
|
||
|
+ vpub_new,
|
||
|
+ rt,
|
||
|
+ false
|
||
|
+ );
|
||
|
+ }
|
||
|
+
|
||
|
+ void invokeAPIFailure(
|
||
|
+ ZCJoinSplit* js,
|
||
|
+ const boost::array<JSInput, 2>& inputs,
|
||
|
+ const boost::array<JSOutput, 2>& outputs,
|
||
|
+ uint64_t vpub_old,
|
||
|
+ uint64_t vpub_new,
|
||
|
+ const uint256& rt,
|
||
|
+ std::string reason
|
||
|
+ )
|
||
|
+ {
|
||
|
+ try {
|
||
|
+ invokeAPI(js, inputs, outputs, vpub_old, vpub_new, rt);
|
||
|
+ FAIL() << "It worked, when it shouldn't have!";
|
||
|
+ } catch(std::invalid_argument const & err) {
|
||
|
+ EXPECT_EQ(err.what(), reason);
|
||
|
+ } catch(...) {
|
||
|
+ FAIL() << "Expected invalid_argument exception.";
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
TEST(joinsplit, h_sig)
|
||
|
{
|
||
|
auto js = ZCJoinSplit::Unopened();
|
||
|
***************
|
||
|
*** 233,242 ****
|
||
|
--- 296,515 ----
|
||
|
delete js;
|
||
|
}
|
||
|
|
||
|
+ void increment_note_witnesses(
|
||
|
+ const uint256& element,
|
||
|
+ std::vector<ZCIncrementalWitness>& witnesses,
|
||
|
+ ZCIncrementalMerkleTree& tree
|
||
|
+ )
|
||
|
+ {
|
||
|
+ tree.append(element);
|
||
|
+ for (ZCIncrementalWitness& w : witnesses) {
|
||
|
+ w.append(element);
|
||
|
+ }
|
||
|
+ witnesses.push_back(tree.witness());
|
||
|
+ }
|
||
|
+
|
||
|
TEST(joinsplit, full_api_test)
|
||
|
{
|
||
|
auto js = ZCJoinSplit::Generate();
|
||
|
|
||
|
+ {
|
||
|
+ std::vector<ZCIncrementalWitness> witnesses;
|
||
|
+ ZCIncrementalMerkleTree tree;
|
||
|
+ increment_note_witnesses(uint256(), witnesses, tree);
|
||
|
+ SpendingKey sk = SpendingKey::random();
|
||
|
+ PaymentAddress addr = sk.address();
|
||
|
+ Note note1(addr.a_pk, 100, random_uint256(), random_uint256());
|
||
|
+ increment_note_witnesses(note1.cm(), witnesses, tree);
|
||
|
+ Note note2(addr.a_pk, 100, random_uint256(), random_uint256());
|
||
|
+ increment_note_witnesses(note2.cm(), witnesses, tree);
|
||
|
+ Note note3(addr.a_pk, 2100000000000001, random_uint256(), random_uint256());
|
||
|
+ increment_note_witnesses(note3.cm(), witnesses, tree);
|
||
|
+ Note note4(addr.a_pk, 1900000000000000, random_uint256(), random_uint256());
|
||
|
+ increment_note_witnesses(note4.cm(), witnesses, tree);
|
||
|
+ Note note5(addr.a_pk, 1900000000000000, random_uint256(), random_uint256());
|
||
|
+ increment_note_witnesses(note5.cm(), witnesses, tree);
|
||
|
+
|
||
|
+ // Should work
|
||
|
+ invokeAPI(js,
|
||
|
+ {
|
||
|
+ JSInput(),
|
||
|
+ JSInput()
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(),
|
||
|
+ JSOutput()
|
||
|
+ },
|
||
|
+ 0,
|
||
|
+ 0,
|
||
|
+ tree.root());
|
||
|
+
|
||
|
+ // lhs > MAX_MONEY
|
||
|
+ invokeAPIFailure(js,
|
||
|
+ {
|
||
|
+ JSInput(),
|
||
|
+ JSInput()
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(),
|
||
|
+ JSOutput()
|
||
|
+ },
|
||
|
+ 2100000000000001,
|
||
|
+ 0,
|
||
|
+ tree.root(),
|
||
|
+ "nonsensical vpub_old value");
|
||
|
+
|
||
|
+ // rhs > MAX_MONEY
|
||
|
+ invokeAPIFailure(js,
|
||
|
+ {
|
||
|
+ JSInput(),
|
||
|
+ JSInput()
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(),
|
||
|
+ JSOutput()
|
||
|
+ },
|
||
|
+ 0,
|
||
|
+ 2100000000000001,
|
||
|
+ tree.root(),
|
||
|
+ "nonsensical vpub_new value");
|
||
|
+
|
||
|
+ // input witness for the wrong element
|
||
|
+ invokeAPIFailure(js,
|
||
|
+ {
|
||
|
+ JSInput(witnesses[0], note1, sk),
|
||
|
+ JSInput()
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(),
|
||
|
+ JSOutput()
|
||
|
+ },
|
||
|
+ 0,
|
||
|
+ 100,
|
||
|
+ tree.root(),
|
||
|
+ "witness of wrong element for joinsplit input");
|
||
|
+
|
||
|
+ // input witness doesn't match up with
|
||
|
+ // real root
|
||
|
+ invokeAPIFailure(js,
|
||
|
+ {
|
||
|
+ JSInput(witnesses[1], note1, sk),
|
||
|
+ JSInput()
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(),
|
||
|
+ JSOutput()
|
||
|
+ },
|
||
|
+ 0,
|
||
|
+ 100,
|
||
|
+ uint256(),
|
||
|
+ "joinsplit not anchored to the correct root");
|
||
|
+
|
||
|
+ // input is in the tree now! this should work
|
||
|
+ invokeAPI(js,
|
||
|
+ {
|
||
|
+ JSInput(witnesses[1], note1, sk),
|
||
|
+ JSInput()
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(),
|
||
|
+ JSOutput()
|
||
|
+ },
|
||
|
+ 0,
|
||
|
+ 100,
|
||
|
+ tree.root());
|
||
|
+
|
||
|
+ // Wrong secret key
|
||
|
+ invokeAPIFailure(js,
|
||
|
+ {
|
||
|
+ JSInput(witnesses[1], note1, SpendingKey::random()),
|
||
|
+ JSInput()
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(),
|
||
|
+ JSOutput()
|
||
|
+ },
|
||
|
+ 0,
|
||
|
+ 0,
|
||
|
+ tree.root(),
|
||
|
+ "input note not authorized to spend with given key");
|
||
|
+
|
||
|
+ // Absurd input value
|
||
|
+ invokeAPIFailure(js,
|
||
|
+ {
|
||
|
+ JSInput(witnesses[3], note3, sk),
|
||
|
+ JSInput()
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(),
|
||
|
+ JSOutput()
|
||
|
+ },
|
||
|
+ 0,
|
||
|
+ 0,
|
||
|
+ tree.root(),
|
||
|
+ "nonsensical input note value");
|
||
|
+
|
||
|
+ // Absurd total input value
|
||
|
+ invokeAPIFailure(js,
|
||
|
+ {
|
||
|
+ JSInput(witnesses[4], note4, sk),
|
||
|
+ JSInput(witnesses[5], note5, sk)
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(),
|
||
|
+ JSOutput()
|
||
|
+ },
|
||
|
+ 0,
|
||
|
+ 0,
|
||
|
+ tree.root(),
|
||
|
+ "nonsensical left hand size of joinsplit balance");
|
||
|
+
|
||
|
+ // Absurd output value
|
||
|
+ invokeAPIFailure(js,
|
||
|
+ {
|
||
|
+ JSInput(),
|
||
|
+ JSInput()
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(addr, 2100000000000001),
|
||
|
+ JSOutput()
|
||
|
+ },
|
||
|
+ 0,
|
||
|
+ 0,
|
||
|
+ tree.root(),
|
||
|
+ "nonsensical output value");
|
||
|
+
|
||
|
+ // Absurd total output value
|
||
|
+ invokeAPIFailure(js,
|
||
|
+ {
|
||
|
+ JSInput(),
|
||
|
+ JSInput()
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(addr, 1900000000000000),
|
||
|
+ JSOutput(addr, 1900000000000000)
|
||
|
+ },
|
||
|
+ 0,
|
||
|
+ 0,
|
||
|
+ tree.root(),
|
||
|
+ "nonsensical right hand side of joinsplit balance");
|
||
|
+
|
||
|
+ // Absurd total output value
|
||
|
+ invokeAPIFailure(js,
|
||
|
+ {
|
||
|
+ JSInput(),
|
||
|
+ JSInput()
|
||
|
+ },
|
||
|
+ {
|
||
|
+ JSOutput(addr, 1900000000000000),
|
||
|
+ JSOutput()
|
||
|
+ },
|
||
|
+ 0,
|
||
|
+ 0,
|
||
|
+ tree.root(),
|
||
|
+ "invalid joinsplit balance");
|
||
|
+ }
|
||
|
+
|
||
|
test_full_api(js);
|
||
|
|
||
|
js->saveProvingKey("./zcashTest.pk");
|
||
|
diff -crB ./src/gtest/test_merkletree.cpp ../../komodo-jl777/src/gtest/test_merkletree.cpp
|
||
|
*** ./src/gtest/test_merkletree.cpp 2017-01-03 10:40:50.227329975 +0000
|
||
|
--- ../../komodo-jl777/src/gtest/test_merkletree.cpp 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 5,10 ****
|
||
|
--- 5,11 ----
|
||
|
#include "test/data/merkle_serialization.json.h"
|
||
|
#include "test/data/merkle_witness_serialization.json.h"
|
||
|
#include "test/data/merkle_path.json.h"
|
||
|
+ #include "test/data/merkle_commitments.json.h"
|
||
|
|
||
|
#include <iostream>
|
||
|
|
||
|
***************
|
||
|
*** 55,86 ****
|
||
|
}
|
||
|
|
||
|
template<typename Tree, typename Witness>
|
||
|
! void test_tree(Array root_tests, Array ser_tests, Array witness_ser_tests, Array path_tests) {
|
||
|
Array::iterator root_iterator = root_tests.begin();
|
||
|
Array::iterator ser_iterator = ser_tests.begin();
|
||
|
Array::iterator witness_ser_iterator = witness_ser_tests.begin();
|
||
|
Array::iterator path_iterator = path_tests.begin();
|
||
|
|
||
|
- uint256 test_commitment = uint256S("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
|
||
|
-
|
||
|
Tree tree;
|
||
|
|
||
|
// The root of the tree at this point is expected to be the root of the
|
||
|
// empty tree.
|
||
|
ASSERT_TRUE(tree.root() == Tree::empty_root());
|
||
|
|
||
|
// We need to witness at every single point in the tree, so
|
||
|
// that the consistency of the tree and the merkle paths can
|
||
|
// be checked.
|
||
|
vector<Witness> witnesses;
|
||
|
|
||
|
for (size_t i = 0; i < 16; i++) {
|
||
|
// Witness here
|
||
|
witnesses.push_back(tree.witness());
|
||
|
|
||
|
// Now append a commitment to the tree
|
||
|
tree.append(test_commitment);
|
||
|
|
||
|
// Check tree root consistency
|
||
|
expect_test_vector(root_iterator, tree.root());
|
||
|
|
||
|
--- 56,101 ----
|
||
|
}
|
||
|
|
||
|
template<typename Tree, typename Witness>
|
||
|
! void test_tree(
|
||
|
! Array commitment_tests,
|
||
|
! Array root_tests,
|
||
|
! Array ser_tests,
|
||
|
! Array witness_ser_tests,
|
||
|
! Array path_tests
|
||
|
! )
|
||
|
! {
|
||
|
! Array::iterator commitment_iterator = commitment_tests.begin();
|
||
|
Array::iterator root_iterator = root_tests.begin();
|
||
|
Array::iterator ser_iterator = ser_tests.begin();
|
||
|
Array::iterator witness_ser_iterator = witness_ser_tests.begin();
|
||
|
Array::iterator path_iterator = path_tests.begin();
|
||
|
|
||
|
Tree tree;
|
||
|
|
||
|
// The root of the tree at this point is expected to be the root of the
|
||
|
// empty tree.
|
||
|
ASSERT_TRUE(tree.root() == Tree::empty_root());
|
||
|
|
||
|
+ // The tree doesn't have a 'last' element added since it's blank.
|
||
|
+ ASSERT_THROW(tree.last(), std::runtime_error);
|
||
|
+
|
||
|
// We need to witness at every single point in the tree, so
|
||
|
// that the consistency of the tree and the merkle paths can
|
||
|
// be checked.
|
||
|
vector<Witness> witnesses;
|
||
|
|
||
|
for (size_t i = 0; i < 16; i++) {
|
||
|
+ uint256 test_commitment = uint256S((commitment_iterator++)->get_str());
|
||
|
+
|
||
|
// Witness here
|
||
|
witnesses.push_back(tree.witness());
|
||
|
|
||
|
// Now append a commitment to the tree
|
||
|
tree.append(test_commitment);
|
||
|
|
||
|
+ // Last element added to the tree was `test_commitment`
|
||
|
+ ASSERT_TRUE(tree.last() == test_commitment);
|
||
|
+
|
||
|
// Check tree root consistency
|
||
|
expect_test_vector(root_iterator, tree.root());
|
||
|
|
||
|
***************
|
||
|
*** 95,100 ****
|
||
|
--- 110,116 ----
|
||
|
|
||
|
if (first) {
|
||
|
ASSERT_THROW(wit.path(), std::runtime_error);
|
||
|
+ ASSERT_THROW(wit.element(), std::runtime_error);
|
||
|
} else {
|
||
|
auto path = wit.path();
|
||
|
|
||
|
***************
|
||
|
*** 119,125 ****
|
||
|
|
||
|
std::vector<bool> commitment_bv;
|
||
|
{
|
||
|
! std::vector<unsigned char> commitment_v(test_commitment.begin(), test_commitment.end());
|
||
|
commitment_bv = convertBytesVectorToVector(commitment_v);
|
||
|
}
|
||
|
|
||
|
--- 135,142 ----
|
||
|
|
||
|
std::vector<bool> commitment_bv;
|
||
|
{
|
||
|
! uint256 witnessed_commitment = wit.element();
|
||
|
! std::vector<unsigned char> commitment_v(witnessed_commitment.begin(), witnessed_commitment.end());
|
||
|
commitment_bv = convertBytesVectorToVector(commitment_v);
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 174,181 ****
|
||
|
Array ser_tests = read_json(std::string(json_tests::merkle_serialization, json_tests::merkle_serialization + sizeof(json_tests::merkle_serialization)));
|
||
|
Array witness_ser_tests = read_json(std::string(json_tests::merkle_witness_serialization, json_tests::merkle_witness_serialization + sizeof(json_tests::merkle_witness_serialization)));
|
||
|
Array path_tests = read_json(std::string(json_tests::merkle_path, json_tests::merkle_path + sizeof(json_tests::merkle_path)));
|
||
|
|
||
|
! test_tree<ZCTestingIncrementalMerkleTree, ZCTestingIncrementalWitness>(root_tests, ser_tests, witness_ser_tests, path_tests);
|
||
|
}
|
||
|
|
||
|
TEST(merkletree, emptyroots) {
|
||
|
--- 191,199 ----
|
||
|
Array ser_tests = read_json(std::string(json_tests::merkle_serialization, json_tests::merkle_serialization + sizeof(json_tests::merkle_serialization)));
|
||
|
Array witness_ser_tests = read_json(std::string(json_tests::merkle_witness_serialization, json_tests::merkle_witness_serialization + sizeof(json_tests::merkle_witness_serialization)));
|
||
|
Array path_tests = read_json(std::string(json_tests::merkle_path, json_tests::merkle_path + sizeof(json_tests::merkle_path)));
|
||
|
+ Array commitment_tests = read_json(std::string(json_tests::merkle_commitments, json_tests::merkle_commitments + sizeof(json_tests::merkle_commitments)));
|
||
|
|
||
|
! test_tree<ZCTestingIncrementalMerkleTree, ZCTestingIncrementalWitness>(commitment_tests, root_tests, ser_tests, witness_ser_tests, path_tests);
|
||
|
}
|
||
|
|
||
|
TEST(merkletree, emptyroots) {
|
||
|
Only in ../../komodo-jl777/src/gtest: test_metrics.cpp
|
||
|
diff -crB ./src/gtest/test_proofs.cpp ../../komodo-jl777/src/gtest/test_proofs.cpp
|
||
|
*** ./src/gtest/test_proofs.cpp 2017-01-03 10:40:50.227329975 +0000
|
||
|
--- ../../komodo-jl777/src/gtest/test_proofs.cpp 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 336,341 ****
|
||
|
--- 336,364 ----
|
||
|
auto example = libsnark::generate_r1cs_example_with_field_input<curve_Fr>(250, 4);
|
||
|
example.constraint_system.swap_AB_if_beneficial();
|
||
|
auto kp = libsnark::r1cs_ppzksnark_generator<curve_pp>(example.constraint_system);
|
||
|
+ auto vkprecomp = libsnark::r1cs_ppzksnark_verifier_process_vk(kp.vk);
|
||
|
+
|
||
|
+ for (size_t i = 0; i < 20; i++) {
|
||
|
+ auto badproof = ZCProof::random_invalid();
|
||
|
+ auto proof = badproof.to_libsnark_proof<libsnark::r1cs_ppzksnark_proof<curve_pp>>();
|
||
|
+
|
||
|
+ auto verifierEnabled = ProofVerifier::Strict();
|
||
|
+ auto verifierDisabled = ProofVerifier::Disabled();
|
||
|
+ // This verifier should catch the bad proof
|
||
|
+ ASSERT_FALSE(verifierEnabled.check(
|
||
|
+ kp.vk,
|
||
|
+ vkprecomp,
|
||
|
+ example.primary_input,
|
||
|
+ proof
|
||
|
+ ));
|
||
|
+ // This verifier won't!
|
||
|
+ ASSERT_TRUE(verifierDisabled.check(
|
||
|
+ kp.vk,
|
||
|
+ vkprecomp,
|
||
|
+ example.primary_input,
|
||
|
+ proof
|
||
|
+ ));
|
||
|
+ }
|
||
|
|
||
|
for (size_t i = 0; i < 20; i++) {
|
||
|
auto proof = libsnark::r1cs_ppzksnark_prover<curve_pp>(
|
||
|
***************
|
||
|
*** 345,350 ****
|
||
|
--- 368,390 ----
|
||
|
example.constraint_system
|
||
|
);
|
||
|
|
||
|
+ {
|
||
|
+ auto verifierEnabled = ProofVerifier::Strict();
|
||
|
+ auto verifierDisabled = ProofVerifier::Disabled();
|
||
|
+ ASSERT_TRUE(verifierEnabled.check(
|
||
|
+ kp.vk,
|
||
|
+ vkprecomp,
|
||
|
+ example.primary_input,
|
||
|
+ proof
|
||
|
+ ));
|
||
|
+ ASSERT_TRUE(verifierDisabled.check(
|
||
|
+ kp.vk,
|
||
|
+ vkprecomp,
|
||
|
+ example.primary_input,
|
||
|
+ proof
|
||
|
+ ));
|
||
|
+ }
|
||
|
+
|
||
|
ASSERT_TRUE(libsnark::r1cs_ppzksnark_verifier_strong_IC<curve_pp>(
|
||
|
kp.vk,
|
||
|
example.primary_input,
|
||
|
diff -crB ./src/gtest/test_random.cpp ../../komodo-jl777/src/gtest/test_random.cpp
|
||
|
*** ./src/gtest/test_random.cpp 2017-01-03 10:40:50.227329975 +0000
|
||
|
--- ../../komodo-jl777/src/gtest/test_random.cpp 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 24,27 ****
|
||
|
--- 24,35 ----
|
||
|
std::vector<int> em2 {0, 1, 2, 3, 4};
|
||
|
EXPECT_EQ(ea2, a2);
|
||
|
EXPECT_EQ(em2, m2);
|
||
|
+
|
||
|
+ auto a3 = a;
|
||
|
+ auto m3 = m;
|
||
|
+ MappedShuffle(a3.begin(), m3.begin(), a3.size(), GenIdentity);
|
||
|
+ std::vector<int> ea3 {8, 4, 6, 3, 5};
|
||
|
+ std::vector<int> em3 {0, 1, 2, 3, 4};
|
||
|
+ EXPECT_EQ(ea3, a3);
|
||
|
+ EXPECT_EQ(em3, m3);
|
||
|
}
|
||
|
diff -crB ./src/init.cpp ../../komodo-jl777/src/init.cpp
|
||
|
*** ./src/init.cpp 2017-01-03 10:40:50.227329975 +0000
|
||
|
--- ../../komodo-jl777/src/init.cpp 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 62,68 ****
|
||
|
bool fFeeEstimatesInitialized = false;
|
||
|
|
||
|
#ifdef WIN32
|
||
|
! // Win32 LevelDB doesn't use filedescriptors, and the ones used for
|
||
|
// accessing block files don't count towards the fd_set size limit
|
||
|
// anyway.
|
||
|
#define MIN_CORE_FILEDESCRIPTORS 0
|
||
|
--- 62,68 ----
|
||
|
bool fFeeEstimatesInitialized = false;
|
||
|
|
||
|
#ifdef WIN32
|
||
|
! // Win32 LevelDB doesn't use file descriptors, and the ones used for
|
||
|
// accessing block files don't count towards the fd_set size limit
|
||
|
// anyway.
|
||
|
#define MIN_CORE_FILEDESCRIPTORS 0
|
||
|
***************
|
||
|
*** 348,354 ****
|
||
|
strUsage += HelpMessageOpt("-mintxfee=<amt>", strprintf("Fees (in BTC/Kb) smaller than this are considered zero fee for transaction creation (default: %s)",
|
||
|
FormatMoney(CWallet::minTxFee.GetFeePerK())));
|
||
|
strUsage += HelpMessageOpt("-paytxfee=<amt>", strprintf(_("Fee (in BTC/kB) to add to transactions you send (default: %s)"), FormatMoney(payTxFee.GetFeePerK())));
|
||
|
! strUsage += HelpMessageOpt("-rescan", _("Rescan the block chain for missing wallet transactions") + " " + _("on startup"));
|
||
|
strUsage += HelpMessageOpt("-salvagewallet", _("Attempt to recover private keys from a corrupt wallet.dat") + " " + _("on startup"));
|
||
|
strUsage += HelpMessageOpt("-sendfreetransactions", strprintf(_("Send transactions as zero-fee transactions if possible (default: %u)"), 0));
|
||
|
strUsage += HelpMessageOpt("-spendzeroconfchange", strprintf(_("Spend unconfirmed change when sending transactions (default: %u)"), 1));
|
||
|
--- 348,354 ----
|
||
|
strUsage += HelpMessageOpt("-mintxfee=<amt>", strprintf("Fees (in BTC/Kb) smaller than this are considered zero fee for transaction creation (default: %s)",
|
||
|
FormatMoney(CWallet::minTxFee.GetFeePerK())));
|
||
|
strUsage += HelpMessageOpt("-paytxfee=<amt>", strprintf(_("Fee (in BTC/kB) to add to transactions you send (default: %s)"), FormatMoney(payTxFee.GetFeePerK())));
|
||
|
! strUsage += HelpMessageOpt("-rescan", _("Rescan the blockchain for missing wallet transactions") + " " + _("on startup"));
|
||
|
strUsage += HelpMessageOpt("-salvagewallet", _("Attempt to recover private keys from a corrupt wallet.dat") + " " + _("on startup"));
|
||
|
strUsage += HelpMessageOpt("-sendfreetransactions", strprintf(_("Send transactions as zero-fee transactions if possible (default: %u)"), 0));
|
||
|
strUsage += HelpMessageOpt("-spendzeroconfchange", strprintf(_("Spend unconfirmed change when sending transactions (default: %u)"), 1));
|
||
|
***************
|
||
|
*** 380,386 ****
|
||
|
if (mode == HMM_BITCOIN_QT)
|
||
|
debugCategories += ", qt";
|
||
|
strUsage += HelpMessageOpt("-debug=<category>", strprintf(_("Output debugging information (default: %u, supplying <category> is optional)"), 0) + ". " +
|
||
|
! _("If <category> is not supplied, output all debugging information.") + _("<category> can be:") + " " + debugCategories + ".");
|
||
|
#ifdef ENABLE_WALLET
|
||
|
strUsage += HelpMessageOpt("-gen", strprintf(_("Generate coins (default: %u)"), 0));
|
||
|
strUsage += HelpMessageOpt("-genproclimit=<n>", strprintf(_("Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)"), 1));
|
||
|
--- 380,386 ----
|
||
|
if (mode == HMM_BITCOIN_QT)
|
||
|
debugCategories += ", qt";
|
||
|
strUsage += HelpMessageOpt("-debug=<category>", strprintf(_("Output debugging information (default: %u, supplying <category> is optional)"), 0) + ". " +
|
||
|
! _("If <category> is not supplied or if <category> = 1, output all debugging information.") + _("<category> can be:") + " " + debugCategories + ".");
|
||
|
#ifdef ENABLE_WALLET
|
||
|
strUsage += HelpMessageOpt("-gen", strprintf(_("Generate coins (default: %u)"), 0));
|
||
|
strUsage += HelpMessageOpt("-genproclimit=<n>", strprintf(_("Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)"), 1));
|
||
|
***************
|
||
|
*** 425,431 ****
|
||
|
strUsage += HelpMessageOpt("-rpcport=<port>", strprintf(_("Listen for JSON-RPC connections on <port> (default: %u or testnet: %u)"), 8232, 18232));
|
||
|
strUsage += HelpMessageOpt("-rpcallowip=<ip>", _("Allow JSON-RPC connections from specified source. Valid for <ip> are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times"));
|
||
|
strUsage += HelpMessageOpt("-rpcthreads=<n>", strprintf(_("Set the number of threads to service RPC calls (default: %d)"), 4));
|
||
|
! strUsage += HelpMessageOpt("-rpckeepalive", strprintf(_("RPC support for HTTP persistent connections (default: %d)"), 1));
|
||
|
|
||
|
// Disabled until we can lock notes and also tune performance of libsnark which by default uses multiple threads
|
||
|
//strUsage += HelpMessageOpt("-rpcasyncthreads=<n>", strprintf(_("Set the number of threads to service Async RPC calls (default: %d)"), 1));
|
||
|
--- 425,434 ----
|
||
|
strUsage += HelpMessageOpt("-rpcport=<port>", strprintf(_("Listen for JSON-RPC connections on <port> (default: %u or testnet: %u)"), 8232, 18232));
|
||
|
strUsage += HelpMessageOpt("-rpcallowip=<ip>", _("Allow JSON-RPC connections from specified source. Valid for <ip> are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times"));
|
||
|
strUsage += HelpMessageOpt("-rpcthreads=<n>", strprintf(_("Set the number of threads to service RPC calls (default: %d)"), 4));
|
||
|
!
|
||
|
! // TODO #1856: Re-enable support for persistent connections.
|
||
|
! // Disabled to avoid rpc deadlock #1680, until we backport upstream changes which replace boost::asio with libevent, or another solution is implemented.
|
||
|
! //strUsage += HelpMessageOpt("-rpckeepalive", strprintf(_("RPC support for HTTP persistent connections (default: %d)"), 1));
|
||
|
|
||
|
// Disabled until we can lock notes and also tune performance of libsnark which by default uses multiple threads
|
||
|
//strUsage += HelpMessageOpt("-rpcasyncthreads=<n>", strprintf(_("Set the number of threads to service Async RPC calls (default: %d)"), 1));
|
||
|
***************
|
||
|
*** 447,452 ****
|
||
|
--- 450,460 ----
|
||
|
strUsage += HelpMessageOpt("-min", _("Start minimized"));
|
||
|
strUsage += HelpMessageOpt("-rootcertificates=<file>", _("Set SSL root certificates for payment request (default: -system-)"));
|
||
|
strUsage += HelpMessageOpt("-splash", _("Show splash screen on startup (default: 1)"));
|
||
|
+ } else if (mode == HMM_BITCOIND) {
|
||
|
+ strUsage += HelpMessageGroup(_("Metrics Options (only if -daemon and -printtoconsole are not set):"));
|
||
|
+ strUsage += HelpMessageOpt("-showmetrics", _("Show metrics on stdout (default: 1 if running in a console, 0 otherwise)"));
|
||
|
+ strUsage += HelpMessageOpt("-metricsui", _("Set to 1 for a persistent metrics screen, 0 for sequential metrics output (default: 1 if running in a console, 0 otherwise)"));
|
||
|
+ strUsage += HelpMessageOpt("-metricsrefreshtime", strprintf(_("Number of seconds between metrics refreshes (default: %u if running in a console, %u otherwise)"), 1, 600));
|
||
|
}
|
||
|
|
||
|
return strUsage;
|
||
|
***************
|
||
|
*** 538,548 ****
|
||
|
RenameThread("zcash-loadblk");
|
||
|
// -reindex
|
||
|
if (fReindex) {
|
||
|
- #ifdef ENABLE_WALLET
|
||
|
- if (pwalletMain) {
|
||
|
- pwalletMain->ClearNoteWitnessCache();
|
||
|
- }
|
||
|
- #endif
|
||
|
CImportingNow imp;
|
||
|
int nFile = 0;
|
||
|
while (true) {
|
||
|
--- 546,551 ----
|
||
|
***************
|
||
|
*** 980,1000 ****
|
||
|
CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler);
|
||
|
threadGroup.create_thread(boost::bind(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop));
|
||
|
|
||
|
if ((chainparams.NetworkIDString() != "regtest") &&
|
||
|
! GetBoolArg("-showmetrics", false) &&
|
||
|
!fPrintToConsole && !GetBoolArg("-daemon", false)) {
|
||
|
// Start the persistent metrics interface
|
||
|
ConnectMetricsScreen();
|
||
|
threadGroup.create_thread(&ThreadShowMetricsScreen);
|
||
|
}
|
||
|
|
||
|
- // Initialize Zcash circuit parameters
|
||
|
- ZC_LoadParams();
|
||
|
// These must be disabled for now, they are buggy and we probably don't
|
||
|
// want any of libsnark's profiling in production anyway.
|
||
|
libsnark::inhibit_profiling_info = true;
|
||
|
libsnark::inhibit_profiling_counters = true;
|
||
|
|
||
|
/* Start the RPC server already. It will be started in "warmup" mode
|
||
|
* and not really process calls already (but it will signify connections
|
||
|
* that the server is there and will be ready later). Warmup mode will
|
||
|
--- 983,1007 ----
|
||
|
CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler);
|
||
|
threadGroup.create_thread(boost::bind(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop));
|
||
|
|
||
|
+ // Count uptime
|
||
|
+ MarkStartTime();
|
||
|
+
|
||
|
if ((chainparams.NetworkIDString() != "regtest") &&
|
||
|
! GetBoolArg("-showmetrics", 0) &&
|
||
|
!fPrintToConsole && !GetBoolArg("-daemon", false)) {
|
||
|
// Start the persistent metrics interface
|
||
|
ConnectMetricsScreen();
|
||
|
threadGroup.create_thread(&ThreadShowMetricsScreen);
|
||
|
}
|
||
|
|
||
|
// These must be disabled for now, they are buggy and we probably don't
|
||
|
// want any of libsnark's profiling in production anyway.
|
||
|
libsnark::inhibit_profiling_info = true;
|
||
|
libsnark::inhibit_profiling_counters = true;
|
||
|
|
||
|
+ // Initialize Zcash circuit parameters
|
||
|
+ ZC_LoadParams();
|
||
|
+
|
||
|
/* Start the RPC server already. It will be started in "warmup" mode
|
||
|
* and not really process calls already (but it will signify connections
|
||
|
* that the server is there and will be ready later). Warmup mode will
|
||
|
***************
|
||
|
*** 1379,1385 ****
|
||
|
--- 1386,1395 ----
|
||
|
|
||
|
CBlockIndex *pindexRescan = chainActive.Tip();
|
||
|
if (GetBoolArg("-rescan", false))
|
||
|
+ {
|
||
|
+ pwalletMain->ClearNoteWitnessCache();
|
||
|
pindexRescan = chainActive.Genesis();
|
||
|
+ }
|
||
|
else
|
||
|
{
|
||
|
CWalletDB walletdb(strWalletFile);
|
||
|
diff -crB ./src/komodo_gateway.h ../../komodo-jl777/src/komodo_gateway.h
|
||
|
*** ./src/komodo_gateway.h 2017-01-03 10:40:50.231330177 +0000
|
||
|
--- ../../komodo-jl777/src/komodo_gateway.h 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 87,95 ****
|
||
|
--- 87,105 ----
|
||
|
return(pax);
|
||
|
}
|
||
|
|
||
|
+ void komodo_paxdelete(struct pax_transaction *pax)
|
||
|
+ {
|
||
|
+ return; // breaks when out of order
|
||
|
+ pthread_mutex_lock(&komodo_mutex);
|
||
|
+ HASH_DELETE(hh,PAX,pax);
|
||
|
+ pthread_mutex_unlock(&komodo_mutex);
|
||
|
+ }
|
||
|
+
|
||
|
void komodo_gateway_deposit(char *coinaddr,uint64_t value,char *symbol,uint64_t fiatoshis,uint8_t *rmd160,uint256 txid,uint16_t vout,uint8_t type,int32_t height,int32_t otherheight,char *source,int32_t approved) // assetchain context
|
||
|
{
|
||
|
struct pax_transaction *pax; uint8_t buf[35]; int32_t addflag = 0; struct komodo_state *sp; char str[16],dest[16],*s;
|
||
|
+ if ( KOMODO_PAX == 0 )
|
||
|
+ return;
|
||
|
sp = komodo_stateptr(str,dest);
|
||
|
pthread_mutex_lock(&komodo_mutex);
|
||
|
pax_keyset(buf,txid,vout,type);
|
||
|
***************
|
||
|
*** 178,190 ****
|
||
|
int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,int64_t *values,int64_t *srcvalues,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,uint8_t *rmd160s,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo)
|
||
|
{
|
||
|
struct pax_transaction p,*pax; int32_t i,n=0,j,len=0,incr,height,otherheight; uint8_t type,rmd160[20]; uint64_t fiatoshis; char symbol[16];
|
||
|
! incr = 34 + (iskomodo * (2*sizeof(fiatoshis) + 2*sizeof(height) + 20 + 4));
|
||
|
! for (i=0; i<4; i++)
|
||
|
! base[i] = opretbuf[opretlen-4+i];
|
||
|
//for (i=0; i<opretlen; i++)
|
||
|
// printf("%02x",opretbuf[i]);
|
||
|
//printf(" opretlen.%d (%s)\n",opretlen,base);
|
||
|
! //printf(" opretlen.%d vs %d incr.%d\n",opretlen,(int32_t)(2*sizeof(fiatoshis) + 2*sizeof(height) + 20 + 4),incr);
|
||
|
//if ( ASSETCHAINS_SYMBOL[0] == 0 || strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0 )
|
||
|
{
|
||
|
type = opretbuf[0];
|
||
|
--- 188,201 ----
|
||
|
int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,int64_t *values,int64_t *srcvalues,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,uint8_t *rmd160s,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo)
|
||
|
{
|
||
|
struct pax_transaction p,*pax; int32_t i,n=0,j,len=0,incr,height,otherheight; uint8_t type,rmd160[20]; uint64_t fiatoshis; char symbol[16];
|
||
|
! if ( KOMODO_PAX == 0 )
|
||
|
! return(0);
|
||
|
! incr = 34 + (iskomodo * (2*sizeof(fiatoshis) + 2*sizeof(height) + 20));
|
||
|
! //41e77b91cb68dc2aa02fa88550eae6b6d44db676a7e935337b6d1392d9718f03cb0200305c90660400000000fbcbeb1f000000bde801006201000058e7945ad08ddba1eac9c9b6c8e1e97e8016a2d152
|
||
|
//for (i=0; i<opretlen; i++)
|
||
|
// printf("%02x",opretbuf[i]);
|
||
|
//printf(" opretlen.%d (%s)\n",opretlen,base);
|
||
|
! //printf(" opretlen.%d vs %d incr.%d (%d)\n",opretlen,(int32_t)(2*sizeof(fiatoshis) + 2*sizeof(height) + 20 + 2),incr,opretlen/incr);
|
||
|
//if ( ASSETCHAINS_SYMBOL[0] == 0 || strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0 )
|
||
|
{
|
||
|
type = opretbuf[0];
|
||
|
***************
|
||
|
*** 215,220 ****
|
||
|
--- 226,233 ----
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
+ for (i=0; i<4; i++)
|
||
|
+ base[i] = opretbuf[opretlen-4+i];
|
||
|
for (j=0; j<32; j++)
|
||
|
{
|
||
|
((uint8_t *)&txids[n])[j] = opretbuf[len++];
|
||
|
***************
|
||
|
*** 238,259 ****
|
||
|
return(n);
|
||
|
}
|
||
|
|
||
|
uint64_t komodo_paxtotal()
|
||
|
{
|
||
|
struct pax_transaction *pax,*pax2,*tmp,*tmp2; char symbol[16],dest[16],*str; int32_t i,ht; int64_t checktoshis; uint64_t seed,total = 0; struct komodo_state *basesp;
|
||
|
if ( komodo_isrealtime(&ht) == 0 )
|
||
|
return(0);
|
||
|
else
|
||
|
{
|
||
|
HASH_ITER(hh,PAX,pax,tmp)
|
||
|
{
|
||
|
if ( pax->type == 'A' || pax->type == 'D' || pax->type == 'X' )
|
||
|
str = pax->symbol;
|
||
|
else str = pax->source;
|
||
|
basesp = komodo_stateptrget(str);
|
||
|
! if ( basesp != 0 && pax->didstats == 0 && pax->type == 'I' )
|
||
|
{
|
||
|
! if ( (pax2= komodo_paxfind(pax->txid,pax->vout,'D')) != 0 )
|
||
|
{
|
||
|
if ( pax2->fiatoshis != 0 )
|
||
|
{
|
||
|
--- 251,300 ----
|
||
|
return(n);
|
||
|
}
|
||
|
|
||
|
+ int32_t komodo_paxcmp(char *symbol,int32_t kmdheight,uint64_t value,uint64_t checkvalue,uint64_t seed)
|
||
|
+ {
|
||
|
+ int32_t ratio;
|
||
|
+ if ( seed == 0 && checkvalue != 0 )
|
||
|
+ {
|
||
|
+ ratio = ((value << 6) / checkvalue);
|
||
|
+ if ( ratio >= 63 && ratio <= 65 )
|
||
|
+ return(0);
|
||
|
+ else
|
||
|
+ {
|
||
|
+ if ( kmdheight >= 86150 )
|
||
|
+ printf("ht.%d ignore mismatched %s value %lld vs checkvalue %lld -> ratio.%d\n",kmdheight,symbol,(long long)value,(long long)checkvalue,ratio);
|
||
|
+ return(-1);
|
||
|
+ }
|
||
|
+ }
|
||
|
+ else if ( checkvalue != 0 )
|
||
|
+ {
|
||
|
+ ratio = ((value << 10) / checkvalue);
|
||
|
+ if ( ratio >= 1023 && ratio <= 1025 )
|
||
|
+ return(0);
|
||
|
+ }
|
||
|
+ return(value != checkvalue);
|
||
|
+ }
|
||
|
+
|
||
|
uint64_t komodo_paxtotal()
|
||
|
{
|
||
|
struct pax_transaction *pax,*pax2,*tmp,*tmp2; char symbol[16],dest[16],*str; int32_t i,ht; int64_t checktoshis; uint64_t seed,total = 0; struct komodo_state *basesp;
|
||
|
+ if ( KOMODO_PAX == 0 )
|
||
|
+ return(0);
|
||
|
if ( komodo_isrealtime(&ht) == 0 )
|
||
|
return(0);
|
||
|
else
|
||
|
{
|
||
|
HASH_ITER(hh,PAX,pax,tmp)
|
||
|
{
|
||
|
+ if ( pax->marked != 0 )
|
||
|
+ continue;
|
||
|
if ( pax->type == 'A' || pax->type == 'D' || pax->type == 'X' )
|
||
|
str = pax->symbol;
|
||
|
else str = pax->source;
|
||
|
basesp = komodo_stateptrget(str);
|
||
|
! if ( basesp != 0 && pax->didstats == 0 )
|
||
|
{
|
||
|
! if ( pax->type == 'I' && (pax2= komodo_paxfind(pax->txid,pax->vout,'D')) != 0 )
|
||
|
{
|
||
|
if ( pax2->fiatoshis != 0 )
|
||
|
{
|
||
|
***************
|
||
|
*** 267,305 ****
|
||
|
pax->marked = pax->height;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
komodo_stateptr(symbol,dest);
|
||
|
HASH_ITER(hh,PAX,pax,tmp)
|
||
|
{
|
||
|
! //printf("pax.%s marked.%d %.8f -> %.8f\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis));
|
||
|
! if ( strcmp(symbol,pax->symbol) == 0 )
|
||
|
{
|
||
|
if ( pax->marked == 0 )
|
||
|
{
|
||
|
if ( komodo_is_issuer() != 0 )
|
||
|
! total += pax->fiatoshis;
|
||
|
! else if ( pax->approved != 0 )
|
||
|
{
|
||
|
if ( pax->validated != 0 )
|
||
|
total += pax->komodoshis;
|
||
|
else
|
||
|
{
|
||
|
seed = 0;
|
||
|
checktoshis = komodo_paxprice(&seed,pax->height,pax->source,(char *)"KMD",(uint64_t)pax->fiatoshis);
|
||
|
//printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f vs %.8f\n",pax->height,pax->symbol,(double)pax->fiatoshis/COIN,(double)pax->komodoshis/COIN,(double)checktoshis/COIN);
|
||
|
//printf(" v%d %.8f k.%d ht.%d\n",pax->vout,dstr(pax->komodoshis),pax->height,pax->otherheight);
|
||
|
! if ( seed != 0 )
|
||
|
{
|
||
|
! if ( checktoshis >= pax->komodoshis )
|
||
|
{
|
||
|
total += pax->komodoshis;
|
||
|
pax->validated = pax->komodoshis;
|
||
|
} else pax->marked = pax->height;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
--- 308,382 ----
|
||
|
pax->marked = pax->height;
|
||
|
}
|
||
|
}
|
||
|
+ else if ( pax->type == 'W' )
|
||
|
+ {
|
||
|
+ //bitcoin_address(coinaddr,addrtype,rmd160,20);
|
||
|
+ if ( (checktoshis= komodo_paxprice(&seed,pax->height,pax->source,(char *)"KMD",(uint64_t)pax->fiatoshis)) != 0 )
|
||
|
+ {
|
||
|
+ if ( komodo_paxcmp(pax->source,pax->height,pax->komodoshis,checktoshis,seed) != 0 )
|
||
|
+ {
|
||
|
+ pax->marked = pax->height;
|
||
|
+ //printf("WITHDRAW.%s mark <- %d %.8f != %.8f\n",pax->source,pax->height,dstr(checktoshis),dstr(pax->komodoshis));
|
||
|
+ }
|
||
|
+ else if ( pax->validated == 0 )
|
||
|
+ {
|
||
|
+ pax->validated = pax->komodoshis = checktoshis;
|
||
|
+ //int32_t j; for (j=0; j<32; j++)
|
||
|
+ // printf("%02x",((uint8_t *)&pax->txid)[j]);
|
||
|
+ //if ( strcmp(str,ASSETCHAINS_SYMBOL) == 0 )
|
||
|
+ // printf(" v%d %p got WITHDRAW.%s kmd.%d ht.%d %.8f -> %.8f/%.8f\n",pax->vout,pax,pax->source,pax->height,pax->otherheight,dstr(pax->fiatoshis),dstr(pax->komodoshis),dstr(checktoshis));
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
komodo_stateptr(symbol,dest);
|
||
|
HASH_ITER(hh,PAX,pax,tmp)
|
||
|
{
|
||
|
! pax->ready = 0;
|
||
|
! if ( 0 && pax->type == 'A' )
|
||
|
! printf("%p pax.%s <- %s marked.%d %.8f -> %.8f validated.%d approved.%d\n",pax,pax->symbol,pax->source,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis),pax->validated != 0,pax->approved != 0);
|
||
|
! if ( pax->marked != 0 )
|
||
|
! continue;
|
||
|
! if ( strcmp(symbol,pax->symbol) == 0 || pax->type == 'A' )
|
||
|
{
|
||
|
if ( pax->marked == 0 )
|
||
|
{
|
||
|
if ( komodo_is_issuer() != 0 )
|
||
|
! {
|
||
|
! if ( pax->validated != 0 && pax->type == 'D' )
|
||
|
! {
|
||
|
! total += pax->fiatoshis;
|
||
|
! pax->ready = 1;
|
||
|
! }
|
||
|
! }
|
||
|
! else if ( pax->approved != 0 && pax->type == 'A' )
|
||
|
{
|
||
|
if ( pax->validated != 0 )
|
||
|
+ {
|
||
|
total += pax->komodoshis;
|
||
|
+ pax->ready = 1;
|
||
|
+ }
|
||
|
else
|
||
|
{
|
||
|
seed = 0;
|
||
|
checktoshis = komodo_paxprice(&seed,pax->height,pax->source,(char *)"KMD",(uint64_t)pax->fiatoshis);
|
||
|
//printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f vs %.8f\n",pax->height,pax->symbol,(double)pax->fiatoshis/COIN,(double)pax->komodoshis/COIN,(double)checktoshis/COIN);
|
||
|
//printf(" v%d %.8f k.%d ht.%d\n",pax->vout,dstr(pax->komodoshis),pax->height,pax->otherheight);
|
||
|
! if ( seed != 0 && checktoshis != 0 )
|
||
|
{
|
||
|
! if ( checktoshis == pax->komodoshis )
|
||
|
{
|
||
|
total += pax->komodoshis;
|
||
|
pax->validated = pax->komodoshis;
|
||
|
+ pax->ready = 1;
|
||
|
} else pax->marked = pax->height;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
+ if ( 0 && pax->ready != 0 )
|
||
|
+ printf("%p (%c) pax.%s marked.%d %.8f -> %.8f validated.%d approved.%d\n",pax,pax->type,pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis),pax->validated != 0,pax->approved != 0);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
***************
|
||
|
*** 307,373 ****
|
||
|
return(total);
|
||
|
}
|
||
|
|
||
|
! int32_t komodo_pending_withdraws(char *opretstr)
|
||
|
{
|
||
|
! struct pax_transaction *pax,*tmp; uint8_t opretbuf[16384]; int32_t ht,len=0; uint64_t total = 0;
|
||
|
if ( komodo_isrealtime(&ht) == 0 || ASSETCHAINS_SYMBOL[0] != 0 )
|
||
|
return(0);
|
||
|
HASH_ITER(hh,PAX,pax,tmp)
|
||
|
{
|
||
|
! //printf("pax %s marked.%u approved.%u\n",pax->symbol,pax->marked,pax->approved);
|
||
|
! if ( pax->marked == 0 && strcmp((char *)"KMD",pax->symbol) == 0 && pax->approved == 0 )
|
||
|
{
|
||
|
! // add 'A' opreturn entry
|
||
|
! if ( len == 0 )
|
||
|
! opretbuf[len++] = 'A';
|
||
|
! len += komodo_rwapproval(1,&opretbuf[len],pax);
|
||
|
! //printf("%s.(marked.%u approved.%d) %p\n",pax->source,pax->marked,pax->approved,pax);
|
||
|
}
|
||
|
}
|
||
|
! if ( len > 0 )
|
||
|
! init_hexbytes_noT(opretstr,opretbuf,len);
|
||
|
! else opretstr[0] = 0;
|
||
|
! fprintf(stderr,"komodo_pending_withdraws len.%d PAXTOTAL %.8f\n",len,dstr(komodo_paxtotal()));
|
||
|
return(len);
|
||
|
}
|
||
|
|
||
|
int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo)
|
||
|
{
|
||
|
struct pax_transaction *pax,*tmp; char symbol[16],dest[16]; uint8_t *script,opcode,opret[16384],data[16384]; int32_t i,baseid,ht,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; uint64_t available,deposited,issued,withdrawn,approved,redeemed,mask;
|
||
|
sp = komodo_stateptr(symbol,dest);
|
||
|
strcpy(symbol,base);
|
||
|
PENDING_KOMODO_TX = 0;
|
||
|
if ( tokomodo == 0 )
|
||
|
{
|
||
|
opcode = 'I';
|
||
|
if ( komodo_isrealtime(&ht) == 0 )
|
||
|
return(0);
|
||
|
! } else opcode = 'X';
|
||
|
HASH_ITER(hh,PAX,pax,tmp)
|
||
|
{
|
||
|
- //printf("pax.%s marked.%d %.8f -> %.8f\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis));
|
||
|
- if ( strcmp(symbol,"KMD") == 0 && pax->approved == 0 )
|
||
|
- continue;
|
||
|
- //else if ( strcmp(symbol,"KMD") != 0 )
|
||
|
{
|
||
|
#ifdef KOMODO_ASSETCHAINS_WAITNOTARIZE
|
||
|
! struct komodo_state *kmdsp = komodo_stateptrget((char *)"KMD");
|
||
|
! if ( kmdsp != 0 && kmdsp->NOTARIZED_HEIGHT >= pax->height ) // assumes same chain as notarize
|
||
|
pax->validated = pax->komodoshis; //kmdsp->NOTARIZED_HEIGHT;
|
||
|
#endif
|
||
|
}
|
||
|
! if ( pax_fiatstatus(&available,&deposited,&issued,&withdrawn,&approved,&redeemed,symbol) != 0 || available < pax->fiatoshis )
|
||
|
{
|
||
|
! printf("miner: skip %s %.8f when avail %.8f\n",symbol,dstr(pax->fiatoshis),dstr(available));
|
||
|
continue;
|
||
|
}
|
||
|
! if ( pax->marked != 0 )
|
||
|
continue;
|
||
|
! if ( strcmp(pax->symbol,symbol) != 0 || pax->validated == 0 )
|
||
|
{
|
||
|
//printf("pax->symbol.%s != %s or null pax->validated %.8f\n",pax->symbol,symbol,dstr(pax->validated));
|
||
|
continue;
|
||
|
}
|
||
|
if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 )
|
||
|
printf("pax.%s marked.%d %.8f -> %.8f\n",ASSETCHAINS_SYMBOL,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis));
|
||
|
txNew->vout.resize(numvouts+1);
|
||
|
--- 384,518 ----
|
||
|
return(total);
|
||
|
}
|
||
|
|
||
|
! static int _paxorder(const void *a,const void *b)
|
||
|
{
|
||
|
! #define pax_a (*(struct pax_transaction **)a)
|
||
|
! #define pax_b (*(struct pax_transaction **)b)
|
||
|
! uint64_t aval,bval;
|
||
|
! aval = pax_a->fiatoshis + pax_a->komodoshis + pax_a->height;
|
||
|
! bval = pax_b->fiatoshis + pax_b->komodoshis + pax_b->height;
|
||
|
! if ( bval > aval )
|
||
|
! return(-1);
|
||
|
! else if ( bval < aval )
|
||
|
! return(1);
|
||
|
! return(0);
|
||
|
! #undef pax_a
|
||
|
! #undef pax_b
|
||
|
! }
|
||
|
!
|
||
|
! int32_t komodo_pending_withdraws(char *opretstr) // todo: enforce deterministic order
|
||
|
! {
|
||
|
! struct pax_transaction *pax,*pax2,*tmp,*paxes[64]; uint8_t opretbuf[16384]; int32_t i,n,ht,len=0; uint64_t total = 0;
|
||
|
! if ( KOMODO_PAX == 0 )
|
||
|
! return(0);
|
||
|
if ( komodo_isrealtime(&ht) == 0 || ASSETCHAINS_SYMBOL[0] != 0 )
|
||
|
return(0);
|
||
|
+ n = 0;
|
||
|
HASH_ITER(hh,PAX,pax,tmp)
|
||
|
{
|
||
|
! if ( pax->type == 'W' )
|
||
|
{
|
||
|
! if ( (pax2= komodo_paxfind(pax->txid,pax->vout,'A')) != 0 )
|
||
|
! {
|
||
|
! if ( pax2->approved != 0 )
|
||
|
! pax->approved = pax2->approved;
|
||
|
! }
|
||
|
! else if ( (pax2= komodo_paxfind(pax->txid,pax->vout,'X')) != 0 )
|
||
|
! pax->approved = pax->height;
|
||
|
! //printf("pax %s marked.%u approved.%u validated.%llu\n",pax->symbol,pax->marked,pax->approved,(long long)pax->validated);
|
||
|
! if ( pax->marked == 0 && strcmp((char *)"KMD",pax->symbol) == 0 && pax->approved == 0 && pax->validated != 0 )
|
||
|
! {
|
||
|
! if ( n < sizeof(paxes)/sizeof(*paxes) )
|
||
|
! {
|
||
|
! paxes[n++] = pax;
|
||
|
! //int32_t j; for (j=0; j<32; j++)
|
||
|
! // printf("%02x",((uint8_t *)&pax->txid)[j]);
|
||
|
! //printf(" %s.(kmdht.%d ht.%d marked.%u approved.%d validated %.8f) %.8f\n",pax->source,pax->height,pax->otherheight,pax->marked,pax->approved,dstr(pax->validated),dstr(pax->komodoshis));
|
||
|
! }
|
||
|
! }
|
||
|
}
|
||
|
}
|
||
|
! opretstr[0] = 0;
|
||
|
! if ( n > 0 )
|
||
|
! {
|
||
|
! opretbuf[len++] = 'A';
|
||
|
! qsort(paxes,n,sizeof(*paxes),_paxorder);
|
||
|
! for (i=0; i<n; i++)
|
||
|
! {
|
||
|
! if ( len < (sizeof(opretbuf)>>3)*7 )
|
||
|
! len += komodo_rwapproval(1,&opretbuf[len],paxes[i]);
|
||
|
! }
|
||
|
! if ( len > 0 )
|
||
|
! init_hexbytes_noT(opretstr,opretbuf,len);
|
||
|
! }
|
||
|
! //fprintf(stderr,"komodo_pending_withdraws len.%d PAXTOTAL %.8f\n",len,dstr(komodo_paxtotal()));
|
||
|
return(len);
|
||
|
}
|
||
|
|
||
|
int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo)
|
||
|
{
|
||
|
struct pax_transaction *pax,*tmp; char symbol[16],dest[16]; uint8_t *script,opcode,opret[16384],data[16384]; int32_t i,baseid,ht,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; uint64_t available,deposited,issued,withdrawn,approved,redeemed,mask;
|
||
|
+ if ( KOMODO_PAX == 0 )
|
||
|
+ return(0);
|
||
|
+ struct komodo_state *kmdsp = komodo_stateptrget((char *)"KMD");
|
||
|
sp = komodo_stateptr(symbol,dest);
|
||
|
strcpy(symbol,base);
|
||
|
+ if ( ASSETCHAINS_SYMBOL[0] != 0 && komodo_baseid(ASSETCHAINS_SYMBOL) < 0 )
|
||
|
+ return(0);
|
||
|
PENDING_KOMODO_TX = 0;
|
||
|
if ( tokomodo == 0 )
|
||
|
{
|
||
|
opcode = 'I';
|
||
|
if ( komodo_isrealtime(&ht) == 0 )
|
||
|
return(0);
|
||
|
! }
|
||
|
! else
|
||
|
! {
|
||
|
! opcode = 'X';
|
||
|
! if ( komodo_paxtotal() == 0 )
|
||
|
! return(0);
|
||
|
! }
|
||
|
HASH_ITER(hh,PAX,pax,tmp)
|
||
|
{
|
||
|
{
|
||
|
#ifdef KOMODO_ASSETCHAINS_WAITNOTARIZE
|
||
|
! if ( kmdsp != 0 && (kmdsp->NOTARIZED_HEIGHT >= pax->height || kmdsp->CURRENT_HEIGHT > pax->height+30) ) // assumes same chain as notarize
|
||
|
pax->validated = pax->komodoshis; //kmdsp->NOTARIZED_HEIGHT;
|
||
|
+ else pax->validated = pax->ready = 0;
|
||
|
#endif
|
||
|
}
|
||
|
! if ( ASSETCHAINS_SYMBOL[0] != 0 && (pax_fiatstatus(&available,&deposited,&issued,&withdrawn,&approved,&redeemed,symbol) != 0 || available < pax->fiatoshis) )
|
||
|
{
|
||
|
! if ( strcmp(ASSETCHAINS_SYMBOL,symbol) == 0 )
|
||
|
! printf("miner.[%s]: skip %s %.8f when avail %.8f\n",ASSETCHAINS_SYMBOL,symbol,dstr(pax->fiatoshis),dstr(available));
|
||
|
continue;
|
||
|
}
|
||
|
! /*printf("pax.%s marked.%d %.8f -> %.8f ready.%d validated.%d\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis),pax->ready!=0,pax->validated!=0);
|
||
|
! if ( pax->marked != 0 || (pax->type != 'D' && pax->type != 'A') || pax->ready == 0 )
|
||
|
! {
|
||
|
! printf("reject 2\n");
|
||
|
continue;
|
||
|
! }*/
|
||
|
! if ( ASSETCHAINS_SYMBOL[0] != 0 && (strcmp(pax->symbol,symbol) != 0 || pax->validated == 0) )
|
||
|
{
|
||
|
//printf("pax->symbol.%s != %s or null pax->validated %.8f\n",pax->symbol,symbol,dstr(pax->validated));
|
||
|
continue;
|
||
|
}
|
||
|
+ if ( pax->ready == 0 )
|
||
|
+ continue;
|
||
|
+ if ( pax->type == 'A' && ASSETCHAINS_SYMBOL[0] == 0 )
|
||
|
+ {
|
||
|
+ if ( kmdsp != 0 )
|
||
|
+ {
|
||
|
+ if ( (baseid= komodo_baseid(pax->symbol)) < 0 || ((1LL << baseid) & sp->RTmask) == 0 )
|
||
|
+ {
|
||
|
+ printf("not RT for (%s) %llx baseid.%d %llx\n",pax->symbol,(long long)sp->RTmask,baseid,(long long)(1LL<<baseid));
|
||
|
+ continue;
|
||
|
+ }
|
||
|
+ } else continue;
|
||
|
+ }
|
||
|
+
|
||
|
+ //printf("redeem.%d? (%c) %p pax.%s marked.%d %.8f -> %.8f ready.%d validated.%d approved.%d\n",tokomodo,pax->type,pax,pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis),pax->ready!=0,pax->validated!=0,pax->approved!=0);
|
||
|
if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 )
|
||
|
printf("pax.%s marked.%d %.8f -> %.8f\n",ASSETCHAINS_SYMBOL,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis));
|
||
|
txNew->vout.resize(numvouts+1);
|
||
|
***************
|
||
|
*** 392,398 ****
|
||
|
{
|
||
|
len += komodo_rwapproval(1,&data[len],pax);
|
||
|
PENDING_KOMODO_TX += pax->komodoshis;
|
||
|
! //printf(" vout.%u DEPOSIT %.8f <- pax.%s pending %.8f | ",pax->vout,(double)txNew->vout[numvouts].nValue/COIN,symbol,dstr(PENDING_KOMODO_TX));
|
||
|
}
|
||
|
if ( numvouts++ >= 64 )
|
||
|
break;
|
||
|
--- 537,543 ----
|
||
|
{
|
||
|
len += komodo_rwapproval(1,&data[len],pax);
|
||
|
PENDING_KOMODO_TX += pax->komodoshis;
|
||
|
! printf(" vout.%u DEPOSIT %.8f <- pax.%s pending %.8f | ",pax->vout,(double)txNew->vout[numvouts].nValue/COIN,symbol,dstr(PENDING_KOMODO_TX));
|
||
|
}
|
||
|
if ( numvouts++ >= 64 )
|
||
|
break;
|
||
|
***************
|
||
|
*** 419,424 ****
|
||
|
--- 564,571 ----
|
||
|
int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above block is valid pax pricing
|
||
|
{
|
||
|
int32_t i,j,n,num,opretlen,offset=1,errs=0,matched=0,kmdheights[64],otherheights[64]; uint256 hash,txids[64]; char symbol[16],base[16]; uint16_t vouts[64]; int8_t baseids[64]; uint8_t *script,opcode,rmd160s[64*20]; uint64_t available,deposited,issued,withdrawn,approved,redeemed; int64_t values[64],srcvalues[64]; struct pax_transaction *pax;
|
||
|
+ if ( KOMODO_PAX == 0 )
|
||
|
+ return(0);
|
||
|
memset(baseids,0xff,sizeof(baseids));
|
||
|
memset(values,0,sizeof(values));
|
||
|
memset(srcvalues,0,sizeof(srcvalues));
|
||
|
***************
|
||
|
*** 442,447 ****
|
||
|
--- 589,603 ----
|
||
|
{
|
||
|
strcpy(symbol,ASSETCHAINS_SYMBOL);
|
||
|
opcode = 'I';
|
||
|
+ if ( komodo_baseid(symbol) < 0 )
|
||
|
+ {
|
||
|
+ if ( block.vtx[0].vout.size() != 1 )
|
||
|
+ {
|
||
|
+ printf("%s has more than one coinbase?\n",symbol);
|
||
|
+ return(-1);
|
||
|
+ }
|
||
|
+ return(0);
|
||
|
+ }
|
||
|
}
|
||
|
if ( script[offset] == opcode && opretlen < block.vtx[0].vout[n-1].scriptPubKey.size() )
|
||
|
{
|
||
|
***************
|
||
|
*** 449,455 ****
|
||
|
{
|
||
|
for (i=1; i<n-1; i++)
|
||
|
{
|
||
|
! if ( (pax= komodo_paxfinds(txids[i-1],vouts[i-1])) != 0 )
|
||
|
{
|
||
|
pax->type = opcode;
|
||
|
if ( opcode == 'I' && pax_fiatstatus(&available,&deposited,&issued,&withdrawn,&approved,&redeemed,symbol) != 0 || available < pax->fiatoshis )
|
||
|
--- 605,611 ----
|
||
|
{
|
||
|
for (i=1; i<n-1; i++)
|
||
|
{
|
||
|
! if ( (pax= komodo_paxfinds(txids[i-1],vouts[i-1])) != 0 ) // finds... make sure right one
|
||
|
{
|
||
|
pax->type = opcode;
|
||
|
if ( opcode == 'I' && pax_fiatstatus(&available,&deposited,&issued,&withdrawn,&approved,&redeemed,symbol) != 0 || available < pax->fiatoshis )
|
||
|
***************
|
||
|
*** 461,476 ****
|
||
|
{
|
||
|
if ( pax->marked != 0 && height >= 80820 )
|
||
|
{
|
||
|
! printf("%c errs.%d i.%d match %.8f vs %.8f pax.%p\n",opcode,errs,i,dstr(opcode == 'I' ? pax->fiatoshis : pax->komodoshis),dstr(block.vtx[0].vout[i].nValue),pax);
|
||
|
errs++;
|
||
|
! } else matched++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
for (j=0; j<32; j++)
|
||
|
printf("%02x",((uint8_t *)&txids[i-1])[j]);
|
||
|
printf(" cant paxfind %c txid\n",opcode);
|
||
|
! printf("%c errs.%d i.%d match %.8f vs %.8f pax.%p\n",opcode,errs,i,dstr(opcode == 'I' ? pax->fiatoshis : pax->komodoshis),dstr(block.vtx[0].vout[i].nValue),pax);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
--- 617,638 ----
|
||
|
{
|
||
|
if ( pax->marked != 0 && height >= 80820 )
|
||
|
{
|
||
|
! printf(">>>>>>>>>>> %c errs.%d i.%d match %.8f vs %.8f pax.%p\n",opcode,errs,i,dstr(opcode == 'I' ? pax->fiatoshis : pax->komodoshis),dstr(block.vtx[0].vout[i].nValue),pax);
|
||
|
errs++;
|
||
|
! }
|
||
|
! else
|
||
|
! {
|
||
|
! if ( opcode == 'X' )
|
||
|
! printf("check deposit validates %s %.8f -> %.8f\n",CURRENCIES[baseids[i]],dstr(srcvalues[i]),dstr(values[i]));
|
||
|
! matched++;
|
||
|
! }
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
for (j=0; j<32; j++)
|
||
|
printf("%02x",((uint8_t *)&txids[i-1])[j]);
|
||
|
printf(" cant paxfind %c txid\n",opcode);
|
||
|
! printf(">>>>>>>>>>> %c errs.%d i.%d match %.8f vs %.8f pax.%p\n",opcode,errs,i,dstr(opcode == 'I' ? pax->fiatoshis : pax->komodoshis),dstr(block.vtx[0].vout[i].nValue),pax);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
***************
|
||
|
*** 478,491 ****
|
||
|
hash = block.GetHash();
|
||
|
for (j=0; j<32; j++)
|
||
|
printf("%02x",((uint8_t *)&hash)[j]);
|
||
|
! printf(" ht.%d blockhash X couldnt find vout.[%d]\n",height,i);
|
||
|
}
|
||
|
}
|
||
|
! if ( matched != num )
|
||
|
{
|
||
|
printf("WOULD REJECT %s: ht.%d (%c) matched.%d vs num.%d\n",symbol,height,opcode,matched,num);
|
||
|
// can easily happen depending on order of loading
|
||
|
! if ( height > 100000 ) //&& opcode == 'X' )
|
||
|
{
|
||
|
printf("REJECT: ht.%d (%c) matched.%d vs num.%d\n",height,opcode,matched,num);
|
||
|
return(-1);
|
||
|
--- 640,653 ----
|
||
|
hash = block.GetHash();
|
||
|
for (j=0; j<32; j++)
|
||
|
printf("%02x",((uint8_t *)&hash)[j]);
|
||
|
! printf(" kht.%d ht.%d %.8f %.8f blockhash couldnt find vout.[%d]\n",kmdheights[i-1],otherheights[i-1],dstr(values[i-1]),dstr(srcvalues[i]),i);
|
||
|
}
|
||
|
}
|
||
|
! if ( height <= chainActive.Tip()->nHeight && matched != num )
|
||
|
{
|
||
|
printf("WOULD REJECT %s: ht.%d (%c) matched.%d vs num.%d\n",symbol,height,opcode,matched,num);
|
||
|
// can easily happen depending on order of loading
|
||
|
! if ( height > 200000 )
|
||
|
{
|
||
|
printf("REJECT: ht.%d (%c) matched.%d vs num.%d\n",height,opcode,matched,num);
|
||
|
return(-1);
|
||
|
***************
|
||
|
*** 497,530 ****
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
- int32_t komodo_paxcmp(char *symbol,int32_t kmdheight,uint64_t value,uint64_t checkvalue,uint64_t seed)
|
||
|
- {
|
||
|
- int32_t ratio;
|
||
|
- if ( seed == 0 && checkvalue != 0 )
|
||
|
- {
|
||
|
- ratio = ((value << 6) / checkvalue);
|
||
|
- if ( ratio >= 63 && ratio <= 65 )
|
||
|
- return(0);
|
||
|
- else
|
||
|
- {
|
||
|
- if ( kmdheight >= 86150 )
|
||
|
- printf("ht.%d ignore mismatched %s value %lld vs checkvalue %lld -> ratio.%d\n",kmdheight,symbol,(long long)value,(long long)checkvalue,ratio);
|
||
|
- return(-1);
|
||
|
- }
|
||
|
- }
|
||
|
- else if ( checkvalue != 0 )
|
||
|
- {
|
||
|
- ratio = ((value << 10) / checkvalue);
|
||
|
- if ( ratio >= 1023 && ratio <= 1025 )
|
||
|
- return(0);
|
||
|
- }
|
||
|
- return(value != checkvalue);
|
||
|
- }
|
||
|
-
|
||
|
const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int32_t opretlen,uint256 txid,uint16_t vout,char *source)
|
||
|
{
|
||
|
uint8_t rmd160[20],rmd160s[64*20],addrtype,shortflag,pubkey33[33]; int32_t didstats,i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; uint256 txids[64]; uint16_t vouts[64]; uint64_t convtoshis,seed; int64_t fiatoshis,komodoshis,checktoshis,values[64],srcvalues[64]; struct pax_transaction *pax,*pax2; struct komodo_state *basesp; double diff;
|
||
|
const char *typestr = "unknown";
|
||
|
memset(baseids,0xff,sizeof(baseids));
|
||
|
memset(values,0,sizeof(values));
|
||
|
memset(srcvalues,0,sizeof(srcvalues));
|
||
|
--- 659,675 ----
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int32_t opretlen,uint256 txid,uint16_t vout,char *source)
|
||
|
{
|
||
|
uint8_t rmd160[20],rmd160s[64*20],addrtype,shortflag,pubkey33[33]; int32_t didstats,i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; uint256 txids[64]; uint16_t vouts[64]; uint64_t convtoshis,seed; int64_t fiatoshis,komodoshis,checktoshis,values[64],srcvalues[64]; struct pax_transaction *pax,*pax2; struct komodo_state *basesp; double diff;
|
||
|
const char *typestr = "unknown";
|
||
|
+ if ( KOMODO_PAX == 0 )
|
||
|
+ return("nopax");
|
||
|
+ if ( ASSETCHAINS_SYMBOL[0] != 0 && komodo_baseid(ASSETCHAINS_SYMBOL) < 0 )
|
||
|
+ {
|
||
|
+ //printf("komodo_opreturn skip %s\n",ASSETCHAINS_SYMBOL);
|
||
|
+ return("assetchain");
|
||
|
+ }
|
||
|
memset(baseids,0xff,sizeof(baseids));
|
||
|
memset(values,0,sizeof(values));
|
||
|
memset(srcvalues,0,sizeof(srcvalues));
|
||
|
***************
|
||
|
*** 546,552 ****
|
||
|
if ( kmdheight <= height )
|
||
|
{
|
||
|
didstats = 0;
|
||
|
! if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 )
|
||
|
{
|
||
|
printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed);
|
||
|
for (i=0; i<32; i++)
|
||
|
--- 691,697 ----
|
||
|
if ( kmdheight <= height )
|
||
|
{
|
||
|
didstats = 0;
|
||
|
! if ( 0 && strcmp(base,ASSETCHAINS_SYMBOL) == 0 )
|
||
|
{
|
||
|
printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed);
|
||
|
for (i=0; i<32; i++)
|
||
|
***************
|
||
|
*** 592,598 ****
|
||
|
pax2->fiatoshis = pax->fiatoshis;
|
||
|
pax2->komodoshis = pax->komodoshis;
|
||
|
pax->marked = pax2->marked = pax->height;
|
||
|
! pax->otherheight = height;
|
||
|
if ( pax2->didstats == 0 )
|
||
|
{
|
||
|
if ( (basesp= komodo_stateptrget(base)) != 0 )
|
||
|
--- 737,743 ----
|
||
|
pax2->fiatoshis = pax->fiatoshis;
|
||
|
pax2->komodoshis = pax->komodoshis;
|
||
|
pax->marked = pax2->marked = pax->height;
|
||
|
! pax2->height = pax->height = height;
|
||
|
if ( pax2->didstats == 0 )
|
||
|
{
|
||
|
if ( (basesp= komodo_stateptrget(base)) != 0 )
|
||
|
***************
|
||
|
*** 632,638 ****
|
||
|
{
|
||
|
pax->type = opretbuf[0];
|
||
|
strcpy(pax->source,(char *)&opretbuf[opretlen-4]);
|
||
|
! if ( (pax2= komodo_paxfind(txids[i],vouts[i],'D')) != 0 )
|
||
|
{
|
||
|
// realtime path?
|
||
|
pax->fiatoshis = pax2->fiatoshis;
|
||
|
--- 777,783 ----
|
||
|
{
|
||
|
pax->type = opretbuf[0];
|
||
|
strcpy(pax->source,(char *)&opretbuf[opretlen-4]);
|
||
|
! if ( (pax2= komodo_paxfind(txids[i],vouts[i],'D')) != 0 && pax2->fiatoshis != 0 && pax2->komodoshis != 0 )
|
||
|
{
|
||
|
// realtime path?
|
||
|
pax->fiatoshis = pax2->fiatoshis;
|
||
|
***************
|
||
|
*** 651,665 ****
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
- komodo_paxmark(pax->height,txids[i],vouts[i],'D',height);
|
||
|
}
|
||
|
}
|
||
|
} else printf("opreturn none issued?\n");
|
||
|
}
|
||
|
- if ( strcmp(source,ASSETCHAINS_SYMBOL) == 0 )
|
||
|
- printf("source.%s opreturn[I] matches %s\n",source,(char *)&opretbuf[opretlen-4]);
|
||
|
}
|
||
|
! else if ( opretbuf[0] == 'W' && opretlen >= 38 )
|
||
|
{
|
||
|
tokomodo = 1;
|
||
|
iguana_rwnum(0,&opretbuf[34],sizeof(kmdheight),&kmdheight);
|
||
|
--- 796,811 ----
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
+ if ( (pax= komodo_paxmark(height,txids[i],vouts[i],'I',height)) != 0 )
|
||
|
+ komodo_paxdelete(pax);
|
||
|
+ if ( (pax= komodo_paxmark(height,txids[i],vouts[i],'D',height)) != 0 )
|
||
|
+ komodo_paxdelete(pax);
|
||
|
}
|
||
|
} else printf("opreturn none issued?\n");
|
||
|
}
|
||
|
}
|
||
|
! else if ( opretbuf[0] == 'W' )//&& opretlen >= 38 )
|
||
|
{
|
||
|
tokomodo = 1;
|
||
|
iguana_rwnum(0,&opretbuf[34],sizeof(kmdheight),&kmdheight);
|
||
|
***************
|
||
|
*** 668,676 ****
|
||
|
bitcoin_address(coinaddr,addrtype,rmd160,20);
|
||
|
checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,value);
|
||
|
typestr = "withdraw";
|
||
|
! //printf("%s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> (%s)\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(komodoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,coinaddr);
|
||
|
didstats = 0;
|
||
|
! if ( komodo_paxcmp(base,kmdheight,komodoshis,checktoshis,seed) == 0 )
|
||
|
{
|
||
|
if ( value != 0 && ((pax= komodo_paxfind(txid,vout,'W')) == 0 || pax->didstats == 0) )
|
||
|
{
|
||
|
--- 814,823 ----
|
||
|
bitcoin_address(coinaddr,addrtype,rmd160,20);
|
||
|
checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,value);
|
||
|
typestr = "withdraw";
|
||
|
! if ( 0 && strcmp(base,"RUB") == 0 )
|
||
|
! printf("RUB WITHDRAW %s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> (%s) len.%d\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(komodoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,coinaddr,opretlen);
|
||
|
didstats = 0;
|
||
|
! //if ( komodo_paxcmp(base,kmdheight,komodoshis,checktoshis,seed) == 0 )
|
||
|
{
|
||
|
if ( value != 0 && ((pax= komodo_paxfind(txid,vout,'W')) == 0 || pax->didstats == 0) )
|
||
|
{
|
||
|
***************
|
||
|
*** 679,697 ****
|
||
|
basesp->withdrawn += value;
|
||
|
didstats = 1;
|
||
|
if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 )
|
||
|
! printf("########### %p withdrawn %s += %.8f\n",basesp,base,dstr(value));
|
||
|
}
|
||
|
! //printf("notarize %s %.8f -> %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),dstr(komodoshis),kmdheight,height);
|
||
|
}
|
||
|
! komodo_gateway_deposit(coinaddr,komodoshis,(char *)"KMD",value,rmd160,txid,vout,'W',kmdheight,height,source,0);
|
||
|
if ( (pax= komodo_paxfind(txid,vout,'W')) != 0 )
|
||
|
{
|
||
|
- if ( didstats != 0 )
|
||
|
- pax->didstats = 1;
|
||
|
pax->type = opretbuf[0];
|
||
|
! pax->validated = komodoshis;
|
||
|
}
|
||
|
! }
|
||
|
}
|
||
|
else if ( tokomodo != 0 && opretbuf[0] == 'A' )
|
||
|
{
|
||
|
--- 826,848 ----
|
||
|
basesp->withdrawn += value;
|
||
|
didstats = 1;
|
||
|
if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 )
|
||
|
! printf("########### %p withdrawn %s += %.8f check %.8f\n",basesp,base,dstr(value),dstr(checktoshis));
|
||
|
}
|
||
|
! if ( 0 && strcmp(base,"RUB") == 0 && (pax == 0 || pax->approved == 0) )
|
||
|
! printf("notarize %s %.8f -> %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),dstr(komodoshis),kmdheight,height);
|
||
|
}
|
||
|
! komodo_gateway_deposit(coinaddr,0,(char *)"KMD",value,rmd160,txid,vout,'W',kmdheight,height,source,0);
|
||
|
if ( (pax= komodo_paxfind(txid,vout,'W')) != 0 )
|
||
|
{
|
||
|
pax->type = opretbuf[0];
|
||
|
! strcpy(pax->source,base);
|
||
|
! strcpy(pax->symbol,"KMD");
|
||
|
! pax->height = kmdheight;
|
||
|
! pax->otherheight = height;
|
||
|
! pax->komodoshis = komodoshis;
|
||
|
}
|
||
|
! } // else printf("withdraw %s paxcmp ht.%d %d error value %.8f -> %.8f vs %.8f\n",base,kmdheight,height,dstr(value),dstr(komodoshis),dstr(checktoshis));
|
||
|
! // need to allocate pax
|
||
|
}
|
||
|
else if ( tokomodo != 0 && opretbuf[0] == 'A' )
|
||
|
{
|
||
|
***************
|
||
|
*** 700,756 ****
|
||
|
{
|
||
|
for (i=0; i<opretlen; i++)
|
||
|
printf("%02x",opretbuf[i]);
|
||
|
! printf(" opret[%c] else path tokomodo.%d ht.%d before %.8f\n",opretbuf[0],tokomodo,height,dstr(komodo_paxtotal()));
|
||
|
}
|
||
|
if ( (n= komodo_issued_opreturn(base,txids,vouts,values,srcvalues,kmdheights,otherheights,baseids,rmd160s,opretbuf,opretlen,1)) > 0 )
|
||
|
{
|
||
|
for (i=0; i<n; i++)
|
||
|
{
|
||
|
if ( baseids[i] < 0 )
|
||
|
- continue;
|
||
|
- didstats = 0;
|
||
|
- seed = 0;
|
||
|
- checktoshis = komodo_paxprice(&seed,kmdheights[i],CURRENCIES[baseids[i]],(char *)"KMD",(uint64_t)srcvalues[i]);
|
||
|
- /*printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f vs %.8f\n",kmdheights[i],CURRENCIES[baseids[i]],(double)srcvalues[i]/COIN,(double)values[i]/COIN,(double)checktoshis/COIN);
|
||
|
- for (j=0; j<32; j++)
|
||
|
- printf("%02x",((uint8_t *)&txids[i])[j]);
|
||
|
- printf(" v%d %.8f k.%d ht.%d base.%d\n",vouts[i],dstr(values[i]),kmdheights[i],otherheights[i],baseids[i]);*/
|
||
|
- if ( (pax= komodo_paxfind(txids[i],vouts[i],'A')) == 0 )
|
||
|
{
|
||
|
! bitcoin_address(coinaddr,60,&rmd160s[i*20],20);
|
||
|
! komodo_gateway_deposit(coinaddr,values[i],CURRENCIES[baseids[i]],srcvalues[i],&rmd160s[i*20],txids[i],vouts[i],'A',kmdheights[i],otherheights[i],CURRENCIES[baseids[i]],kmdheights[i]);
|
||
|
! komodo_paxmark(height,txids[i],vouts[i],'W',height);
|
||
|
! komodo_paxmark(height,txids[i],vouts[i],'A',height);
|
||
|
! if ( srcvalues[i] != 0 && (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
|
||
|
{
|
||
|
! basesp->approved += srcvalues[i];
|
||
|
! didstats = 1;
|
||
|
! if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
|
||
|
! printf("########### %p approved %s += %.8f\n",basesp,CURRENCIES[baseids[i]],dstr(srcvalues[i]));
|
||
|
}
|
||
|
! //printf(" i.%d (%s) <- %.8f ADDFLAG APPROVED\n",i,coinaddr,dstr(values[i]));
|
||
|
}
|
||
|
! else if ( pax->didstats == 0 && srcvalues[i] != 0 )
|
||
|
! {
|
||
|
! if ( (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
|
||
|
{
|
||
|
! basesp->approved += srcvalues[i];
|
||
|
! didstats = 1;
|
||
|
! if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
|
||
|
! printf("########### %p approved %s += %.8f\n",basesp,CURRENCIES[baseids[i]],dstr(srcvalues[i]));
|
||
|
}
|
||
|
- } //else printf(" i.%d of n.%d pax.%p baseids[] %d\n",i,n,pax,baseids[i]);
|
||
|
- if ( (pax= komodo_paxfind(txids[i],vouts[i],'A')) != 0 )
|
||
|
- {
|
||
|
- pax->type = opretbuf[0];
|
||
|
- pax->approved = kmdheights[i];
|
||
|
- if ( didstats != 0 )
|
||
|
- pax->didstats = 1;
|
||
|
- if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
|
||
|
- printf(" i.%d approved.%d <<<<<<<<<<<<< APPROVED %p\n",i,kmdheights[i],pax);
|
||
|
}
|
||
|
}
|
||
|
! }
|
||
|
//printf("extra.[%d] after %.8f\n",n,dstr(komodo_paxtotal()));
|
||
|
}
|
||
|
else if ( opretbuf[0] == 'X' )
|
||
|
--- 851,928 ----
|
||
|
{
|
||
|
for (i=0; i<opretlen; i++)
|
||
|
printf("%02x",opretbuf[i]);
|
||
|
! printf(" opret[%c] else path tokomodo.%d ht.%d before %.8f opretlen.%d\n",opretbuf[0],tokomodo,height,dstr(komodo_paxtotal()),opretlen);
|
||
|
}
|
||
|
if ( (n= komodo_issued_opreturn(base,txids,vouts,values,srcvalues,kmdheights,otherheights,baseids,rmd160s,opretbuf,opretlen,1)) > 0 )
|
||
|
{
|
||
|
for (i=0; i<n; i++)
|
||
|
{
|
||
|
+ //for (j=0; j<32; j++)
|
||
|
+ // printf("%02x",((uint8_t *)&txids[i])[j]);
|
||
|
+ //printf(" v%d %.8f %.8f k.%d ht.%d base.%d\n",vouts[i],dstr(values[i]),dstr(srcvalues[i]),kmdheights[i],otherheights[i],baseids[i]);
|
||
|
if ( baseids[i] < 0 )
|
||
|
{
|
||
|
! for (i=0; i<opretlen; i++)
|
||
|
! printf("%02x",opretbuf[i]);
|
||
|
! printf(" opret[%c] else path tokomodo.%d ht.%d before %.8f opretlen.%d\n",opretbuf[0],tokomodo,height,dstr(komodo_paxtotal()),opretlen);
|
||
|
! //printf("baseids[%d] %d\n",i,baseids[i]);
|
||
|
! if ( (pax= komodo_paxfind(txids[i],vouts[i],'W')) != 0 || (pax= komodo_paxfind(txids[i],vouts[i],'X')) != 0 )
|
||
|
{
|
||
|
! baseids[i] = komodo_baseid(pax->symbol);
|
||
|
! printf("override neg1 with (%s)\n",pax->symbol);
|
||
|
}
|
||
|
! if ( baseids[i] < 0 )
|
||
|
! continue;
|
||
|
}
|
||
|
! didstats = 0;
|
||
|
! seed = 0;
|
||
|
! checktoshis = komodo_paxprice(&seed,kmdheights[i],CURRENCIES[baseids[i]],(char *)"KMD",(uint64_t)values[i]);
|
||
|
! //printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f vs %.8f\n",kmdheights[i],CURRENCIES[baseids[i]],(double)values[i]/COIN,(double)srcvalues[i]/COIN,(double)checktoshis/COIN);
|
||
|
! if ( srcvalues[i] == checktoshis )
|
||
|
! {
|
||
|
! if ( (pax= komodo_paxfind(txids[i],vouts[i],'A')) == 0 )
|
||
|
! {
|
||
|
! bitcoin_address(coinaddr,60,&rmd160s[i*20],20);
|
||
|
! komodo_gateway_deposit(coinaddr,srcvalues[i],CURRENCIES[baseids[i]],values[i],&rmd160s[i*20],txids[i],vouts[i],'A',kmdheights[i],otherheights[i],CURRENCIES[baseids[i]],kmdheights[i]);
|
||
|
! if ( (pax= komodo_paxfind(txids[i],vouts[i],'A')) == 0 )
|
||
|
! printf("unexpected null pax for approve\n");
|
||
|
! else pax->validated = checktoshis;
|
||
|
! if ( (pax2= komodo_paxfind(txids[i],vouts[i],'W')) != 0 )
|
||
|
! pax2->approved = kmdheights[i];
|
||
|
! komodo_paxmark(height,txids[i],vouts[i],'W',height);
|
||
|
! //komodo_paxmark(height,txids[i],vouts[i],'A',height);
|
||
|
! if ( values[i] != 0 && (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
|
||
|
! {
|
||
|
! basesp->approved += values[i];
|
||
|
! didstats = 1;
|
||
|
! if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
|
||
|
! printf("pax.%p ########### %p approved %s += %.8f -> %.8f/%.8f kht.%d %d\n",pax,basesp,CURRENCIES[baseids[i]],dstr(values[i]),dstr(srcvalues[i]),dstr(checktoshis),kmdheights[i],otherheights[i]);
|
||
|
! }
|
||
|
! //printf(" i.%d (%s) <- %.8f ADDFLAG APPROVED\n",i,coinaddr,dstr(values[i]));
|
||
|
! }
|
||
|
! else if ( pax->didstats == 0 && srcvalues[i] != 0 )
|
||
|
{
|
||
|
! if ( (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
|
||
|
! {
|
||
|
! basesp->approved += values[i];
|
||
|
! didstats = 1;
|
||
|
! if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
|
||
|
! printf("pax.%p ########### %p approved %s += %.8f -> %.8f/%.8f\n",pax,basesp,CURRENCIES[baseids[i]],dstr(values[i]),dstr(srcvalues[i]),dstr(checktoshis));
|
||
|
! }
|
||
|
! } //else printf(" i.%d of n.%d pax.%p baseids[] %d\n",i,n,pax,baseids[i]);
|
||
|
! if ( (pax= komodo_paxfind(txids[i],vouts[i],'A')) != 0 )
|
||
|
! {
|
||
|
! pax->type = opretbuf[0];
|
||
|
! pax->approved = kmdheights[i];
|
||
|
! pax->validated = checktoshis;
|
||
|
! if ( didstats != 0 )
|
||
|
! pax->didstats = 1;
|
||
|
! //if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
|
||
|
! //printf(" i.%d approved.%d <<<<<<<<<<<<< APPROVED %p\n",i,kmdheights[i],pax);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
! } else printf("n.%d from opreturns\n",n);
|
||
|
//printf("extra.[%d] after %.8f\n",n,dstr(komodo_paxtotal()));
|
||
|
}
|
||
|
else if ( opretbuf[0] == 'X' )
|
||
|
***************
|
||
|
*** 770,783 ****
|
||
|
if ( (pax= komodo_paxfind(txids[i],vouts[i],'X')) != 0 )
|
||
|
{
|
||
|
pax->type = opretbuf[0];
|
||
|
! if ( baseids[i] >= 0 && srcvalues[i] != 0 && (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
|
||
|
{
|
||
|
! basesp->redeemed += srcvalues[i];
|
||
|
pax->didstats = 1;
|
||
|
! if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
|
||
|
! printf("########### %p redeemed %s += %.8f\n",basesp,CURRENCIES[baseids[i]],dstr(srcvalues[i]));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
} //else printf("komodo_issued_opreturn returned %d\n",n);
|
||
|
}
|
||
|
--- 942,964 ----
|
||
|
if ( (pax= komodo_paxfind(txids[i],vouts[i],'X')) != 0 )
|
||
|
{
|
||
|
pax->type = opretbuf[0];
|
||
|
! if ( height < 121842 ) // fields got switched around due to legacy issues and approves
|
||
|
! value = srcvalues[i];
|
||
|
! else value = values[i];
|
||
|
! if ( baseids[i] >= 0 && value != 0 && (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
|
||
|
{
|
||
|
! basesp->redeemed += value;
|
||
|
pax->didstats = 1;
|
||
|
! //if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
|
||
|
! printf("ht.%d %.8f ########### %p redeemed %s += %.8f %.8f kht.%d ht.%d\n",height,dstr(value),basesp,CURRENCIES[baseids[i]],dstr(value),dstr(srcvalues[i]),kmdheights[i],otherheights[i]);
|
||
|
}
|
||
|
}
|
||
|
+ if ( (pax= komodo_paxmark(height,txids[i],vouts[i],'W',height)) != 0 )
|
||
|
+ komodo_paxdelete(pax);
|
||
|
+ if ( (pax= komodo_paxmark(height,txids[i],vouts[i],'A',height)) != 0 )
|
||
|
+ komodo_paxdelete(pax);
|
||
|
+ if ( (pax= komodo_paxmark(height,txids[i],vouts[i],'X',height)) != 0 )
|
||
|
+ komodo_paxdelete(pax);
|
||
|
}
|
||
|
} //else printf("komodo_issued_opreturn returned %d\n",n);
|
||
|
}
|
||
|
***************
|
||
|
*** 788,802 ****
|
||
|
{
|
||
|
static long lastpos[34]; static char userpass[33][1024];
|
||
|
FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp,*refsp; char *retstr,fname[512],*base,symbol[16],dest[16]; uint32_t buf[3]; cJSON *infoobj,*result; uint64_t RTmask = 0;
|
||
|
while ( KOMODO_INITDONE == 0 )
|
||
|
{
|
||
|
! fprintf(stderr,"PASSPORT iteration waiting for KOMODO_INITDONE\n");
|
||
|
sleep(3);
|
||
|
}
|
||
|
refsp = komodo_stateptr(symbol,dest);
|
||
|
if ( ASSETCHAINS_SYMBOL[0] == 0 )
|
||
|
refid = 33;
|
||
|
! else refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; // illegal base -> baseid.-1 -> 0
|
||
|
//printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid);
|
||
|
for (baseid=32; baseid>=0; baseid--)
|
||
|
{
|
||
|
--- 969,997 ----
|
||
|
{
|
||
|
static long lastpos[34]; static char userpass[33][1024];
|
||
|
FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp,*refsp; char *retstr,fname[512],*base,symbol[16],dest[16]; uint32_t buf[3]; cJSON *infoobj,*result; uint64_t RTmask = 0;
|
||
|
+ //printf("PASSPORT.(%s)\n",ASSETCHAINS_SYMBOL);
|
||
|
while ( KOMODO_INITDONE == 0 )
|
||
|
{
|
||
|
! fprintf(stderr,"[%s] PASSPORT iteration waiting for KOMODO_INITDONE\n",ASSETCHAINS_SYMBOL);
|
||
|
sleep(3);
|
||
|
}
|
||
|
refsp = komodo_stateptr(symbol,dest);
|
||
|
if ( ASSETCHAINS_SYMBOL[0] == 0 )
|
||
|
refid = 33;
|
||
|
! else
|
||
|
! {
|
||
|
! refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; // illegal base -> baseid.-1 -> 0
|
||
|
! if ( refid == 0 )
|
||
|
! {
|
||
|
! KOMODO_PASSPORT_INITDONE = 1;
|
||
|
! return;
|
||
|
! }
|
||
|
! }
|
||
|
! if ( KOMODO_PAX == 0 )
|
||
|
! {
|
||
|
! KOMODO_PASSPORT_INITDONE = 1;
|
||
|
! return;
|
||
|
! }
|
||
|
//printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid);
|
||
|
for (baseid=32; baseid>=0; baseid--)
|
||
|
{
|
||
|
***************
|
||
|
*** 807,813 ****
|
||
|
{
|
||
|
komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"komodostate");
|
||
|
komodo_nameset(symbol,dest,base);
|
||
|
! if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 )
|
||
|
{
|
||
|
fseek(fp,0,SEEK_END);
|
||
|
if ( ftell(fp) > lastpos[baseid] )
|
||
|
--- 1002,1009 ----
|
||
|
{
|
||
|
komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"komodostate");
|
||
|
komodo_nameset(symbol,dest,base);
|
||
|
! sp = komodo_stateptrget(symbol);
|
||
|
! if ( (fp= fopen(fname,"rb")) != 0 && sp != 0 )
|
||
|
{
|
||
|
fseek(fp,0,SEEK_END);
|
||
|
if ( ftell(fp) > lastpos[baseid] )
|
||
|
***************
|
||
|
*** 822,840 ****
|
||
|
printf("from.(%s) lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]);
|
||
|
} //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp));
|
||
|
fclose(fp);
|
||
|
! }
|
||
|
komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime");
|
||
|
if ( (fp= fopen(fname,"rb")) != 0 )
|
||
|
{
|
||
|
if ( fread(buf,1,sizeof(buf),fp) == sizeof(buf) )
|
||
|
{
|
||
|
sp->CURRENT_HEIGHT = buf[0];
|
||
|
! if ( buf[0] != 0 && buf[0] == buf[1] && buf[2] > time(NULL)-60 )
|
||
|
{
|
||
|
isrealtime = 1;
|
||
|
RTmask |= (1LL << baseid);
|
||
|
memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1]));
|
||
|
! } //else fprintf(stderr,"%s not RT\n",base);
|
||
|
} //else fprintf(stderr,"%s size error RT\n",base);
|
||
|
fclose(fp);
|
||
|
} //else fprintf(stderr,"%s open error RT\n",base);
|
||
|
--- 1018,1036 ----
|
||
|
printf("from.(%s) lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]);
|
||
|
} //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp));
|
||
|
fclose(fp);
|
||
|
! } else printf("error.(%s) %p\n",fname,sp);
|
||
|
komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime");
|
||
|
if ( (fp= fopen(fname,"rb")) != 0 )
|
||
|
{
|
||
|
if ( fread(buf,1,sizeof(buf),fp) == sizeof(buf) )
|
||
|
{
|
||
|
sp->CURRENT_HEIGHT = buf[0];
|
||
|
! if ( buf[0] != 0 && buf[0] >= buf[1] && buf[2] > time(NULL)-300 )
|
||
|
{
|
||
|
isrealtime = 1;
|
||
|
RTmask |= (1LL << baseid);
|
||
|
memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1]));
|
||
|
! } else fprintf(stderr,"[%s]: %s not RT %u %u %d\n",ASSETCHAINS_SYMBOL,base,buf[0],buf[1],(int32_t)(time(NULL)-buf[2]));
|
||
|
} //else fprintf(stderr,"%s size error RT\n",base);
|
||
|
fclose(fp);
|
||
|
} //else fprintf(stderr,"%s open error RT\n",base);
|
||
|
***************
|
||
|
*** 849,855 ****
|
||
|
if ( buf[0] != 0 && buf[0] == buf[1] )
|
||
|
{
|
||
|
buf[2] = (uint32_t)time(NULL);
|
||
|
! RTmask |= (1LL << baseid) | 1;
|
||
|
memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1]));
|
||
|
if ( refid != 0 )
|
||
|
memcpy(refsp->RTbufs[0],buf,sizeof(refsp->RTbufs[0]));
|
||
|
--- 1045,1051 ----
|
||
|
if ( buf[0] != 0 && buf[0] == buf[1] )
|
||
|
{
|
||
|
buf[2] = (uint32_t)time(NULL);
|
||
|
! RTmask |= (1LL << baseid);
|
||
|
memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1]));
|
||
|
if ( refid != 0 )
|
||
|
memcpy(refsp->RTbufs[0],buf,sizeof(refsp->RTbufs[0]));
|
||
|
***************
|
||
|
*** 865,869 ****
|
||
|
--- 1061,1066 ----
|
||
|
komodo_paxtotal();
|
||
|
refsp->RTmask = RTmask;
|
||
|
KOMODO_PASSPORT_INITDONE = 1;
|
||
|
+ //printf("done PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid);
|
||
|
}
|
||
|
|
||
|
diff -crB ./src/komodo_globals.h ../../komodo-jl777/src/komodo_globals.h
|
||
|
*** ./src/komodo_globals.h 2017-01-03 10:40:50.231330177 +0000
|
||
|
--- ../../komodo-jl777/src/komodo_globals.h 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 36,42 ****
|
||
|
|
||
|
int COINBASE_MATURITY = 100;
|
||
|
|
||
|
! int32_t IS_KOMODO_NOTARY,KOMODO_REWIND,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,KOMODO_PASSPORT_INITDONE;
|
||
|
std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES;
|
||
|
uint8_t NOTARY_PUBKEY33[33];
|
||
|
|
||
|
--- 36,42 ----
|
||
|
|
||
|
int COINBASE_MATURITY = 100;
|
||
|
|
||
|
! int32_t IS_KOMODO_NOTARY,KOMODO_REWIND,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,KOMODO_PASSPORT_INITDONE,KOMODO_PAX;
|
||
|
std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES;
|
||
|
uint8_t NOTARY_PUBKEY33[33];
|
||
|
|
||
|
diff -crB ./src/komodo.h ../../komodo-jl777/src/komodo.h
|
||
|
*** ./src/komodo.h 2017-01-03 10:40:50.231330177 +0000
|
||
|
--- ../../komodo-jl777/src/komodo.h 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 23,29 ****
|
||
|
// a. automate notarization fee payouts
|
||
|
// b. automated distribution of test REVS snapshot
|
||
|
|
||
|
! //#define KOMODO_ASSETCHAINS_WAITNOTARIZE
|
||
|
#define KOMODO_PAXMAX (10000 * COIN)
|
||
|
|
||
|
#include <stdint.h>
|
||
|
--- 23,29 ----
|
||
|
// a. automate notarization fee payouts
|
||
|
// b. automated distribution of test REVS snapshot
|
||
|
|
||
|
! #define KOMODO_ASSETCHAINS_WAITNOTARIZE
|
||
|
#define KOMODO_PAXMAX (10000 * COIN)
|
||
|
|
||
|
#include <stdint.h>
|
||
|
***************
|
||
|
*** 194,200 ****
|
||
|
--- 194,203 ----
|
||
|
static FILE *fp; static int32_t errs;
|
||
|
struct komodo_state *sp; char fname[512],symbol[16],dest[16]; int32_t ht,func; uint8_t num,pubkeys[64][33];
|
||
|
if ( (sp= komodo_stateptr(symbol,dest)) == 0 )
|
||
|
+ {
|
||
|
+ KOMODO_INITDONE = (uint32_t)time(NULL);
|
||
|
return;
|
||
|
+ }
|
||
|
if ( fp == 0 )
|
||
|
{
|
||
|
komodo_statefname(fname,ASSETCHAINS_SYMBOL,(char *)"komodostate");
|
||
|
***************
|
||
|
*** 281,287 ****
|
||
|
errs++;
|
||
|
//komodo_eventadd_utxo(sp,symbol,height,notaryid,txhash,voutmask,numvouts);
|
||
|
}
|
||
|
- //#ifdef KOMODO_PAX
|
||
|
else if ( pvals != 0 && numpvals > 0 )
|
||
|
{
|
||
|
int32_t i,nonz = 0;
|
||
|
--- 284,289 ----
|
||
|
***************
|
||
|
*** 301,307 ****
|
||
|
}
|
||
|
//printf("save pvals height.%d numpvals.%d\n",height,numpvals);
|
||
|
}
|
||
|
- //#endif
|
||
|
else if ( height != 0 )
|
||
|
{
|
||
|
//printf("ht.%d func N ht.%d errs.%d\n",height,NOTARIZED_HEIGHT,errs);
|
||
|
--- 303,308 ----
|
||
|
diff -crB ./src/komodo_interest.h ../../komodo-jl777/src/komodo_interest.h
|
||
|
*** ./src/komodo_interest.h 2017-01-03 10:40:50.231330177 +0000
|
||
|
--- ../../komodo-jl777/src/komodo_interest.h 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 21,29 ****
|
||
|
uint64_t total; int32_t ind,incr = 100000;
|
||
|
if ( height >= maxheight )
|
||
|
{
|
||
|
! interests = (uint64_t *)realloc(interests,(maxheight + incr) * sizeof(*interests) * 2);
|
||
|
! memset(&interests[maxheight << 1],0,incr * sizeof(*interests) * 2);
|
||
|
! maxheight += incr;
|
||
|
}
|
||
|
ind = (height << 1);
|
||
|
if ( paidinterest < 0 ) // request
|
||
|
--- 21,37 ----
|
||
|
uint64_t total; int32_t ind,incr = 100000;
|
||
|
if ( height >= maxheight )
|
||
|
{
|
||
|
! if ( interests == 0 )
|
||
|
! {
|
||
|
! maxheight = height + incr;
|
||
|
! interests = (uint64_t *)calloc(maxheight,sizeof(*interests) * 2);
|
||
|
! }
|
||
|
! else
|
||
|
! {
|
||
|
! interests = (uint64_t *)realloc(interests,(maxheight + incr) * sizeof(*interests) * 2);
|
||
|
! memset(&interests[maxheight << 1],0,incr * sizeof(*interests) * 2);
|
||
|
! maxheight += incr;
|
||
|
! }
|
||
|
}
|
||
|
ind = (height << 1);
|
||
|
if ( paidinterest < 0 ) // request
|
||
|
diff -crB ./src/komodo_pax.h ../../komodo-jl777/src/komodo_pax.h
|
||
|
*** ./src/komodo_pax.h 2017-01-03 10:40:50.231330177 +0000
|
||
|
--- ../../komodo-jl777/src/komodo_pax.h 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 429,434 ****
|
||
|
--- 429,435 ----
|
||
|
height -= 10;
|
||
|
if ( (baseid= komodo_baseid(base)) >= 0 && (relid= komodo_baseid(rel)) >= 0 )
|
||
|
{
|
||
|
+ portable_mutex_lock(&komodo_mutex);
|
||
|
for (i=NUM_PRICES-1; i>=0; i--)
|
||
|
{
|
||
|
ptr = &PVALS[36 * i];
|
||
|
***************
|
||
|
*** 439,450 ****
|
||
|
*kmdbtcp = ptr[MAX_CURRENCIES + 1] / 539;
|
||
|
*btcusdp = ptr[MAX_CURRENCIES + 2] / 539;
|
||
|
}
|
||
|
if ( kmdbtc != 0 && btcusd != 0 )
|
||
|
return(komodo_paxcalc(&ptr[1],baseid,relid,basevolume,kmdbtc,btcusd));
|
||
|
else return(0);
|
||
|
}
|
||
|
}
|
||
|
! } else printf("paxprice invalid base.%s %d, rel.%s %d\n",base,baseid,rel,relid);
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
--- 440,453 ----
|
||
|
*kmdbtcp = ptr[MAX_CURRENCIES + 1] / 539;
|
||
|
*btcusdp = ptr[MAX_CURRENCIES + 2] / 539;
|
||
|
}
|
||
|
+ portable_mutex_unlock(&komodo_mutex);
|
||
|
if ( kmdbtc != 0 && btcusd != 0 )
|
||
|
return(komodo_paxcalc(&ptr[1],baseid,relid,basevolume,kmdbtc,btcusd));
|
||
|
else return(0);
|
||
|
}
|
||
|
}
|
||
|
! portable_mutex_unlock(&komodo_mutex);
|
||
|
! } //else printf("paxprice invalid base.%s %d, rel.%s %d\n",base,baseid,rel,relid);
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 473,479 ****
|
||
|
}
|
||
|
kmdbtc = komodo_paxcorrelation(kmdbtcs,numvotes,*seedp) * 539;
|
||
|
btcusd = komodo_paxcorrelation(btcusds,numvotes,*seedp) * 539;
|
||
|
- //printf("kmdbtc %llu btcusd %llu\n",(long long)kmdbtc,(long long)btcusd);
|
||
|
for (i=nonz=0; i<numvotes; i++)
|
||
|
{
|
||
|
if ( (votes[numvotes-1-i]= _komodo_paxprice(0,0,height-i,base,rel,100000,kmdbtc,btcusd)) == 0 )
|
||
|
--- 476,481 ----
|
||
|
***************
|
||
|
*** 481,487 ****
|
||
|
--- 483,493 ----
|
||
|
else nonz++;
|
||
|
}
|
||
|
if ( nonz <= (numvotes >> 1) )
|
||
|
+ {
|
||
|
+ //printf("kmdbtc %llu btcusd %llu\n",(long long)kmdbtc,(long long)btcusd);
|
||
|
+ //printf("komodo_paxprice nonz.%d of numvotes.%d\n",nonz,numvotes);
|
||
|
return(0);
|
||
|
+ }
|
||
|
return(komodo_paxcorrelation(votes,numvotes,*seedp) * basevolume / 100000);
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 527,533 ****
|
||
|
if ( fiatoshis < 0 )
|
||
|
shortflag = 1, fiatoshis = -fiatoshis;
|
||
|
komodoshis = komodo_paxprice(seedp,height,base,(char *)"KMD",(uint64_t)fiatoshis);
|
||
|
! //printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f seed.%llx\n",height,base,(double)fiatoshis/COIN,(double)komodoshis/COIN,(long long)*seedp);
|
||
|
if ( bitcoin_addr2rmd160(&addrtype,rmd160,coinaddr) == 20 )
|
||
|
{
|
||
|
PAX_pubkey(1,pubkey33,&addrtype,rmd160,base,&shortflag,tokomodo != 0 ? &komodoshis : &fiatoshis);
|
||
|
--- 533,540 ----
|
||
|
if ( fiatoshis < 0 )
|
||
|
shortflag = 1, fiatoshis = -fiatoshis;
|
||
|
komodoshis = komodo_paxprice(seedp,height,base,(char *)"KMD",(uint64_t)fiatoshis);
|
||
|
! if ( 0 && strcmp(base,"RUB") == 0 )
|
||
|
! printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f seed.%llx\n",height,base,(double)fiatoshis/COIN,(double)komodoshis/COIN,(long long)*seedp);
|
||
|
if ( bitcoin_addr2rmd160(&addrtype,rmd160,coinaddr) == 20 )
|
||
|
{
|
||
|
PAX_pubkey(1,pubkey33,&addrtype,rmd160,base,&shortflag,tokomodo != 0 ? &komodoshis : &fiatoshis);
|
||
|
diff -crB ./src/komodo_structs.h ../../komodo-jl777/src/komodo_structs.h
|
||
|
*** ./src/komodo_structs.h 2017-01-03 10:40:50.231330177 +0000
|
||
|
--- ../../komodo-jl777/src/komodo_structs.h 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 57,63 ****
|
||
|
UT_hash_handle hh;
|
||
|
uint256 txid;
|
||
|
uint64_t komodoshis,fiatoshis,validated;
|
||
|
! int32_t marked,height,otherheight,approved,didstats;
|
||
|
uint16_t vout;
|
||
|
char symbol[16],source[16],coinaddr[64]; uint8_t rmd160[20],type,buf[35];
|
||
|
};
|
||
|
--- 57,63 ----
|
||
|
UT_hash_handle hh;
|
||
|
uint256 txid;
|
||
|
uint64_t komodoshis,fiatoshis,validated;
|
||
|
! int32_t marked,height,otherheight,approved,didstats,ready;
|
||
|
uint16_t vout;
|
||
|
char symbol[16],source[16],coinaddr[64]; uint8_t rmd160[20],type,buf[35];
|
||
|
};
|
||
|
diff -crB ./src/komodo_utils.h ../../komodo-jl777/src/komodo_utils.h
|
||
|
*** ./src/komodo_utils.h 2017-01-03 10:40:50.235330381 +0000
|
||
|
--- ../../komodo-jl777/src/komodo_utils.h 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 1448,1454 ****
|
||
|
--- 1448,1457 ----
|
||
|
IS_KOMODO_NOTARY = GetBoolArg("-notary", false);
|
||
|
NOTARY_PUBKEY = GetArg("-pubkey", "");
|
||
|
if ( strlen(NOTARY_PUBKEY.c_str()) == 66 )
|
||
|
+ {
|
||
|
USE_EXTERNAL_PUBKEY = 1;
|
||
|
+ KOMODO_PAX = 1;
|
||
|
+ } else KOMODO_PAX = GetArg("-pax",0);
|
||
|
name = GetArg("-ac_name","");
|
||
|
if ( (KOMODO_REWIND= GetArg("-rewind",0)) != 0 )
|
||
|
;
|
||
|
diff -crB ./src/main.cpp ../../komodo-jl777/src/main.cpp
|
||
|
*** ./src/main.cpp 2017-01-03 10:40:50.255331392 +0000
|
||
|
--- ../../komodo-jl777/src/main.cpp 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 26,31 ****
|
||
|
--- 26,32 ----
|
||
|
#include "util.h"
|
||
|
#include "utilmoneystr.h"
|
||
|
#include "validationinterface.h"
|
||
|
+ #include "wallet/asyncrpcoperation_sendmany.h"
|
||
|
|
||
|
#include <sstream>
|
||
|
|
||
|
***************
|
||
|
*** 70,76 ****
|
||
|
bool fAlerts = DEFAULT_ALERTS;
|
||
|
|
||
|
/** Fees smaller than this (in satoshi) are considered zero fee (for relaying and mining) */
|
||
|
! CFeeRate minRelayTxFee = CFeeRate(5000);
|
||
|
|
||
|
CTxMemPool mempool(::minRelayTxFee);
|
||
|
|
||
|
--- 71,77 ----
|
||
|
bool fAlerts = DEFAULT_ALERTS;
|
||
|
|
||
|
/** Fees smaller than this (in satoshi) are considered zero fee (for relaying and mining) */
|
||
|
! CFeeRate minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE);
|
||
|
|
||
|
CTxMemPool mempool(::minRelayTxFee);
|
||
|
|
||
|
***************
|
||
|
*** 550,556 ****
|
||
|
|
||
|
// Komodo globals
|
||
|
|
||
|
- #define KOMODO_PAX
|
||
|
#define KOMODO_ZCASH
|
||
|
#include "komodo.h"
|
||
|
|
||
|
--- 551,556 ----
|
||
|
***************
|
||
|
*** 871,878 ****
|
||
|
return false;
|
||
|
} else {
|
||
|
// Ensure that zk-SNARKs verify
|
||
|
BOOST_FOREACH(const JSDescription &joinsplit, tx.vjoinsplit) {
|
||
|
! if (!joinsplit.Verify(*pzcashParams, tx.joinSplitPubKey)) {
|
||
|
return state.DoS(100, error("CheckTransaction(): joinsplit does not verify"),
|
||
|
REJECT_INVALID, "bad-txns-joinsplit-verification-failed");
|
||
|
}
|
||
|
--- 871,879 ----
|
||
|
return false;
|
||
|
} else {
|
||
|
// Ensure that zk-SNARKs verify
|
||
|
+ auto verifier = libzcash::ProofVerifier::Strict();
|
||
|
BOOST_FOREACH(const JSDescription &joinsplit, tx.vjoinsplit) {
|
||
|
! if (!joinsplit.Verify(*pzcashParams, verifier, tx.joinSplitPubKey)) {
|
||
|
return state.DoS(100, error("CheckTransaction(): joinsplit does not verify"),
|
||
|
REJECT_INVALID, "bad-txns-joinsplit-verification-failed");
|
||
|
}
|
||
|
***************
|
||
|
*** 1211,1222 ****
|
||
|
CTxMemPoolEntry entry(tx, nFees, GetTime(), dPriority, chainActive.Height(), mempool.HasNoInputsOf(tx));
|
||
|
unsigned int nSize = entry.GetTxSize();
|
||
|
|
||
|
! // Don't accept it if it can't get into a block
|
||
|
! CAmount txMinFee = GetMinRelayFee(tx, nSize, true);
|
||
|
! if (fLimitFree && nFees < txMinFee)
|
||
|
! return state.DoS(0, error("AcceptToMemoryPool: not enough fees %s, %d < %d",
|
||
|
! hash.ToString(), nFees, txMinFee),
|
||
|
! REJECT_INSUFFICIENTFEE, "insufficient fee");
|
||
|
|
||
|
// Require that free transactions have sufficient priority to be mined in the next block.
|
||
|
if (GetBoolArg("-relaypriority", false) && nFees < ::minRelayTxFee.GetFee(nSize) && !AllowFree(view.GetPriority(tx, chainActive.Height() + 1))) {
|
||
|
--- 1212,1228 ----
|
||
|
CTxMemPoolEntry entry(tx, nFees, GetTime(), dPriority, chainActive.Height(), mempool.HasNoInputsOf(tx));
|
||
|
unsigned int nSize = entry.GetTxSize();
|
||
|
|
||
|
! // Accept a tx if it contains joinsplits and has at least the default fee specified by z_sendmany.
|
||
|
! if (tx.vjoinsplit.size() > 0 && nFees >= ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE) {
|
||
|
! // In future we will we have more accurate and dynamic computation of fees for tx with joinsplits.
|
||
|
! } else {
|
||
|
! // Don't accept it if it can't get into a block
|
||
|
! CAmount txMinFee = GetMinRelayFee(tx, nSize, true);
|
||
|
! if (fLimitFree && nFees < txMinFee)
|
||
|
! return state.DoS(0, error("AcceptToMemoryPool: not enough fees %s, %d < %d",
|
||
|
! hash.ToString(), nFees, txMinFee),
|
||
|
! REJECT_INSUFFICIENTFEE, "insufficient fee");
|
||
|
! }
|
||
|
|
||
|
// Require that free transactions have sufficient priority to be mined in the next block.
|
||
|
if (GetBoolArg("-relaypriority", false) && nFees < ::minRelayTxFee.GetFee(nSize) && !AllowFree(view.GetPriority(tx, chainActive.Height() + 1))) {
|
||
|
***************
|
||
|
*** 1566,1572 ****
|
||
|
}
|
||
|
|
||
|
// We define a condition where we should warn the user about as a fork of at least 7 blocks
|
||
|
! // with a tip within 72 blocks (+/- 12 hours if no one mines it) of ours
|
||
|
// We use 7 blocks rather arbitrarily as it represents just under 10% of sustained network
|
||
|
// hash rate operating on the fork.
|
||
|
// or a chain that is entirely longer than ours and invalid (note that this should be detected by both)
|
||
|
--- 1572,1578 ----
|
||
|
}
|
||
|
|
||
|
// We define a condition where we should warn the user about as a fork of at least 7 blocks
|
||
|
! // with a tip within 72 blocks (+/- 3 hours if no one mines it) of ours
|
||
|
// We use 7 blocks rather arbitrarily as it represents just under 10% of sustained network
|
||
|
// hash rate operating on the fork.
|
||
|
// or a chain that is entirely longer than ours and invalid (note that this should be detected by both)
|
||
|
***************
|
||
|
*** 3213,3219 ****
|
||
|
|
||
|
// Enforce block.nVersion=2 rule that the coinbase starts with serialized block height
|
||
|
// if 750 of the last 1,000 blocks are version 2 or greater (51/100 if testnet):
|
||
|
! if (block.nVersion >= 2)
|
||
|
{
|
||
|
CScript expect = CScript() << nHeight;
|
||
|
if (block.vtx[0].vin[0].scriptSig.size() < expect.size() ||
|
||
|
--- 3219,3228 ----
|
||
|
|
||
|
// Enforce block.nVersion=2 rule that the coinbase starts with serialized block height
|
||
|
// if 750 of the last 1,000 blocks are version 2 or greater (51/100 if testnet):
|
||
|
! // Since MIN_BLOCK_VERSION = 4 all blocks with nHeight > 0 should satisfy this.
|
||
|
! // This rule is not applied to the genesis block, which didn't include the height
|
||
|
! // in the coinbase.
|
||
|
! if (nHeight > 0)
|
||
|
{
|
||
|
CScript expect = CScript() << nHeight;
|
||
|
if (block.vtx[0].vin[0].scriptSig.size() < expect.size() ||
|
||
|
diff -crB ./src/main.h ../../komodo-jl777/src/main.h
|
||
|
*** ./src/main.h 2017-01-03 10:40:50.255331392 +0000
|
||
|
--- ../../komodo-jl777/src/main.h 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 48,57 ****
|
||
|
struct CNodeStateStats;
|
||
|
|
||
|
/** Default for -blockmaxsize and -blockminsize, which control the range of sizes the mining code will create **/
|
||
|
! static const unsigned int DEFAULT_BLOCK_MAX_SIZE = 750000;
|
||
|
static const unsigned int DEFAULT_BLOCK_MIN_SIZE = 0;
|
||
|
/** Default for -blockprioritysize, maximum space for zero/low-fee transactions **/
|
||
|
! static const unsigned int DEFAULT_BLOCK_PRIORITY_SIZE = 50000;
|
||
|
/** Default for accepting alerts from the P2P network. */
|
||
|
static const bool DEFAULT_ALERTS = true;
|
||
|
/** Minimum alert priority for enabling safe mode. */
|
||
|
--- 48,57 ----
|
||
|
struct CNodeStateStats;
|
||
|
|
||
|
/** Default for -blockmaxsize and -blockminsize, which control the range of sizes the mining code will create **/
|
||
|
! static const unsigned int DEFAULT_BLOCK_MAX_SIZE = MAX_BLOCK_SIZE;
|
||
|
static const unsigned int DEFAULT_BLOCK_MIN_SIZE = 0;
|
||
|
/** Default for -blockprioritysize, maximum space for zero/low-fee transactions **/
|
||
|
! static const unsigned int DEFAULT_BLOCK_PRIORITY_SIZE = DEFAULT_BLOCK_MAX_SIZE / 2;
|
||
|
/** Default for accepting alerts from the P2P network. */
|
||
|
static const bool DEFAULT_ALERTS = true;
|
||
|
/** Minimum alert priority for enabling safe mode. */
|
||
|
***************
|
||
|
*** 60,65 ****
|
||
|
--- 60,67 ----
|
||
|
static const unsigned int MAX_P2SH_SIGOPS = 15;
|
||
|
/** The maximum number of sigops we're willing to relay/mine in a single tx */
|
||
|
static const unsigned int MAX_STANDARD_TX_SIGOPS = MAX_BLOCK_SIGOPS/5;
|
||
|
+ /** Default for -minrelaytxfee, minimum relay fee for transactions */
|
||
|
+ static const unsigned int DEFAULT_MIN_RELAY_TX_FEE = 1000;
|
||
|
/** Default for -maxorphantx, maximum number of orphan transactions kept in memory */
|
||
|
static const unsigned int DEFAULT_MAX_ORPHAN_TRANSACTIONS = 100;
|
||
|
/** The maximum size of a blk?????.dat file (since 0.8) */
|
||
|
***************
|
||
|
*** 91,96 ****
|
||
|
--- 93,102 ----
|
||
|
/** Maximum length of reject messages. */
|
||
|
static const unsigned int MAX_REJECT_MESSAGE_LENGTH = 111;
|
||
|
|
||
|
+ // Sanity check the magic numbers when we change them
|
||
|
+ BOOST_STATIC_ASSERT(DEFAULT_BLOCK_MAX_SIZE <= MAX_BLOCK_SIZE);
|
||
|
+ BOOST_STATIC_ASSERT(DEFAULT_BLOCK_PRIORITY_SIZE <= DEFAULT_BLOCK_MAX_SIZE);
|
||
|
+
|
||
|
#define equihash_parameters_acceptable(N, K) \
|
||
|
((CBlockHeader::HEADER_SIZE + equihash_solution_size(N, K))*MAX_HEADERS_RESULTS < \
|
||
|
MAX_PROTOCOL_MESSAGE_LENGTH-1000)
|
||
|
diff -crB ./src/Makefile.am ../../komodo-jl777/src/Makefile.am
|
||
|
*** ./src/Makefile.am 2017-01-03 10:40:50.211329166 +0000
|
||
|
--- ../../komodo-jl777/src/Makefile.am 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 232,237 ****
|
||
|
--- 232,239 ----
|
||
|
# when wallet enabled
|
||
|
libbitcoin_wallet_a_CPPFLAGS = $(BITCOIN_INCLUDES)
|
||
|
libbitcoin_wallet_a_SOURCES = \
|
||
|
+ utiltest.cpp \
|
||
|
+ utiltest.h \
|
||
|
zcbenchmarks.cpp \
|
||
|
zcbenchmarks.h \
|
||
|
wallet/asyncrpcoperation_sendmany.cpp \
|
||
|
***************
|
||
|
*** 516,525 ****
|
||
|
@test -f $(PROTOC)
|
||
|
$(AM_V_GEN) $(PROTOC) --cpp_out=$(@D) --proto_path=$(abspath $(<D) $<)
|
||
|
|
||
|
! if ENABLE_TESTS
|
||
|
! include Makefile.test.include
|
||
|
! include Makefile.gtest.include
|
||
|
! endif
|
||
|
|
||
|
if ENABLE_QT
|
||
|
include Makefile.qt.include
|
||
|
--- 518,527 ----
|
||
|
@test -f $(PROTOC)
|
||
|
$(AM_V_GEN) $(PROTOC) --cpp_out=$(@D) --proto_path=$(abspath $(<D) $<)
|
||
|
|
||
|
! #if ENABLE_TESTS
|
||
|
! #include Makefile.test.include
|
||
|
! #include Makefile.gtest.include
|
||
|
! #endif
|
||
|
|
||
|
if ENABLE_QT
|
||
|
include Makefile.qt.include
|
||
|
diff -crB ./src/Makefile.gtest.include ../../komodo-jl777/src/Makefile.gtest.include
|
||
|
*** ./src/Makefile.gtest.include 2017-01-03 10:40:50.211329166 +0000
|
||
|
--- ../../komodo-jl777/src/Makefile.gtest.include 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 5,11 ****
|
||
|
komodo_gtest_SOURCES = \
|
||
|
gtest/main.cpp \
|
||
|
gtest/utils.cpp \
|
||
|
- gtest/test_checkblock.cpp \
|
||
|
gtest/test_checktransaction.cpp \
|
||
|
gtest/json_test_vectors.cpp \
|
||
|
gtest/json_test_vectors.h \
|
||
|
--- 5,10 ----
|
||
|
***************
|
||
|
*** 18,23 ****
|
||
|
--- 17,23 ----
|
||
|
gtest/test_keystore.cpp \
|
||
|
gtest/test_noteencryption.cpp \
|
||
|
gtest/test_merkletree.cpp \
|
||
|
+ gtest/test_metrics.cpp \
|
||
|
gtest/test_pow.cpp \
|
||
|
gtest/test_random.cpp \
|
||
|
gtest/test_rpc.cpp \
|
||
|
***************
|
||
|
*** 26,32 ****
|
||
|
--- 26,36 ----
|
||
|
gtest/test_txid.cpp \
|
||
|
gtest/test_libzcash_utils.cpp \
|
||
|
gtest/test_proofs.cpp \
|
||
|
+ gtest/test_checkblock.cpp
|
||
|
+ if ENABLE_WALLET
|
||
|
+ zcash_gtest_SOURCES += \
|
||
|
wallet/gtest/test_wallet.cpp
|
||
|
+ endif
|
||
|
|
||
|
komodo_gtest_CPPFLAGS = -DMULTICORE -fopenmp -DBINARY_OUTPUT -DCURVE_ALT_BN128 -DSTATIC
|
||
|
|
||
|
diff -crB ./src/Makefile.test.include ../../komodo-jl777/src/Makefile.test.include
|
||
|
*** ./src/Makefile.test.include 2017-01-03 10:40:50.211329166 +0000
|
||
|
--- ../../komodo-jl777/src/Makefile.test.include 2017-01-03 09:49:08.856506348 +0000
|
||
|
***************
|
||
|
*** 31,36 ****
|
||
|
--- 31,37 ----
|
||
|
test/data/merkle_serialization.json \
|
||
|
test/data/merkle_witness_serialization.json \
|
||
|
test/data/merkle_path.json \
|
||
|
+ test/data/merkle_commitments.json \
|
||
|
test/data/g1_compressed.json \
|
||
|
test/data/g2_compressed.json
|
||
|
|
||
|
diff -crB ./src/metrics.cpp ../../komodo-jl777/src/metrics.cpp
|
||
|
*** ./src/metrics.cpp 2017-01-03 10:40:50.255331392 +0000
|
||
|
--- ../../komodo-jl777/src/metrics.cpp 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 5,13 ****
|
||
|
--- 5,15 ----
|
||
|
#include "metrics.h"
|
||
|
|
||
|
#include "chainparams.h"
|
||
|
+ #include "main.h"
|
||
|
#include "ui_interface.h"
|
||
|
#include "util.h"
|
||
|
#include "utiltime.h"
|
||
|
+ #include "utilmoneystr.h"
|
||
|
|
||
|
#include <boost/thread.hpp>
|
||
|
#include <boost/thread/synchronized_value.hpp>
|
||
|
***************
|
||
|
*** 15,29 ****
|
||
|
--- 17,65 ----
|
||
|
#include <sys/ioctl.h>
|
||
|
#include <unistd.h>
|
||
|
|
||
|
+ CCriticalSection cs_metrics;
|
||
|
+
|
||
|
+ boost::synchronized_value<int64_t> nNodeStartTime;
|
||
|
AtomicCounter transactionsValidated;
|
||
|
AtomicCounter ehSolverRuns;
|
||
|
AtomicCounter solutionTargetChecks;
|
||
|
AtomicCounter minedBlocks;
|
||
|
|
||
|
+ boost::synchronized_value<std::list<uint256>> trackedBlocks;
|
||
|
+
|
||
|
boost::synchronized_value<std::list<std::string>> messageBox;
|
||
|
boost::synchronized_value<std::string> initMessage;
|
||
|
bool loaded = false;
|
||
|
|
||
|
+ extern int64_t GetNetworkHashPS(int lookup, int height);
|
||
|
+
|
||
|
+ void TrackMinedBlock(uint256 hash)
|
||
|
+ {
|
||
|
+ LOCK(cs_metrics);
|
||
|
+ minedBlocks.increment();
|
||
|
+ trackedBlocks->push_back(hash);
|
||
|
+ }
|
||
|
+
|
||
|
+ void MarkStartTime()
|
||
|
+ {
|
||
|
+ *nNodeStartTime = GetTime();
|
||
|
+ }
|
||
|
+
|
||
|
+ int64_t GetUptime()
|
||
|
+ {
|
||
|
+ return GetTime() - *nNodeStartTime;
|
||
|
+ }
|
||
|
+
|
||
|
+ double GetLocalSolPS_INTERNAL(int64_t uptime)
|
||
|
+ {
|
||
|
+ return uptime > 0 ? (double)solutionTargetChecks.get() / uptime : 0;
|
||
|
+ }
|
||
|
+
|
||
|
+ double GetLocalSolPS()
|
||
|
+ {
|
||
|
+ return GetLocalSolPS_INTERNAL(GetUptime());
|
||
|
+ }
|
||
|
+
|
||
|
static bool metrics_ThreadSafeMessageBox(const std::string& message,
|
||
|
const std::string& caption,
|
||
|
unsigned int style)
|
||
|
***************
|
||
|
*** 64,71 ****
|
||
|
uiInterface.InitMessage.connect(metrics_InitMessage);
|
||
|
}
|
||
|
|
||
|
! void printMiningStatus(bool mining)
|
||
|
{
|
||
|
if (mining) {
|
||
|
int nThreads = GetArg("-genproclimit", 1);
|
||
|
if (nThreads < 0) {
|
||
|
--- 100,122 ----
|
||
|
uiInterface.InitMessage.connect(metrics_InitMessage);
|
||
|
}
|
||
|
|
||
|
! int printNetworkStats()
|
||
|
! {
|
||
|
! LOCK2(cs_main, cs_vNodes);
|
||
|
!
|
||
|
! std::cout << " " << _("Block height") << " | " << chainActive.Height() << std::endl;
|
||
|
! std::cout << " " << _("Network solution rate") << " | " << GetNetworkHashPS(120, -1) << " Sol/s" << std::endl;
|
||
|
! std::cout << " " << _("Connections") << " | " << vNodes.size() << std::endl;
|
||
|
! std::cout << std::endl;
|
||
|
!
|
||
|
! return 4;
|
||
|
! }
|
||
|
!
|
||
|
! int printMiningStatus(bool mining)
|
||
|
{
|
||
|
+ // Number of lines that are always displayed
|
||
|
+ int lines = 1;
|
||
|
+
|
||
|
if (mining) {
|
||
|
int nThreads = GetArg("-genproclimit", 1);
|
||
|
if (nThreads < 0) {
|
||
|
***************
|
||
|
*** 75,95 ****
|
||
|
else
|
||
|
nThreads = boost::thread::hardware_concurrency();
|
||
|
}
|
||
|
! std::cout << strprintf(_("You are running %d mining threads."), nThreads) << std::endl;
|
||
|
} else {
|
||
|
std::cout << _("You are currently not mining.") << std::endl;
|
||
|
std::cout << _("To enable mining, add 'gen=1' to your zcash.conf and restart.") << std::endl;
|
||
|
}
|
||
|
std::cout << std::endl;
|
||
|
}
|
||
|
|
||
|
! int printMetrics(size_t cols, int64_t nStart, bool mining)
|
||
|
{
|
||
|
// Number of lines that are always displayed
|
||
|
int lines = 3;
|
||
|
|
||
|
// Calculate uptime
|
||
|
! int64_t uptime = GetTime() - nStart;
|
||
|
int days = uptime / (24 * 60 * 60);
|
||
|
int hours = (uptime - (days * 24 * 60 * 60)) / (60 * 60);
|
||
|
int minutes = (uptime - (((days * 24) + hours) * 60 * 60)) / 60;
|
||
|
--- 126,151 ----
|
||
|
else
|
||
|
nThreads = boost::thread::hardware_concurrency();
|
||
|
}
|
||
|
! std::cout << strprintf(_("You are mining with the %s solver on %d threads."),
|
||
|
! GetArg("-equihashsolver", "default"), nThreads) << std::endl;
|
||
|
! lines++;
|
||
|
} else {
|
||
|
std::cout << _("You are currently not mining.") << std::endl;
|
||
|
std::cout << _("To enable mining, add 'gen=1' to your zcash.conf and restart.") << std::endl;
|
||
|
+ lines += 2;
|
||
|
}
|
||
|
std::cout << std::endl;
|
||
|
+
|
||
|
+ return lines;
|
||
|
}
|
||
|
|
||
|
! int printMetrics(size_t cols, bool mining)
|
||
|
{
|
||
|
// Number of lines that are always displayed
|
||
|
int lines = 3;
|
||
|
|
||
|
// Calculate uptime
|
||
|
! int64_t uptime = GetUptime();
|
||
|
int days = uptime / (24 * 60 * 60);
|
||
|
int hours = (uptime - (days * 24 * 60 * 60)) / (60 * 60);
|
||
|
int minutes = (uptime - (((days * 24) + hours) * 60 * 60)) / 60;
|
||
|
***************
|
||
|
*** 110,128 ****
|
||
|
std::cout << strDuration << std::endl;
|
||
|
lines += (strDuration.size() / cols);
|
||
|
|
||
|
! std::cout << "- " << strprintf(_("You have validated %d transactions!"), transactionsValidated.get()) << std::endl;
|
||
|
|
||
|
! if (mining) {
|
||
|
! double solps = uptime > 0 ? (double)solutionTargetChecks.get() / uptime : 0;
|
||
|
std::string strSolps = strprintf("%.4f Sol/s", solps);
|
||
|
std::cout << "- " << strprintf(_("You have contributed %s on average to the network solution rate."), strSolps) << std::endl;
|
||
|
std::cout << "- " << strprintf(_("You have completed %d Equihash solver runs."), ehSolverRuns.get()) << std::endl;
|
||
|
lines += 2;
|
||
|
|
||
|
! int mined = minedBlocks.get();
|
||
|
if (mined > 0) {
|
||
|
std::cout << "- " << strprintf(_("You have mined %d blocks!"), mined) << std::endl;
|
||
|
! lines++;
|
||
|
}
|
||
|
}
|
||
|
std::cout << std::endl;
|
||
|
--- 166,233 ----
|
||
|
std::cout << strDuration << std::endl;
|
||
|
lines += (strDuration.size() / cols);
|
||
|
|
||
|
! int validatedCount = transactionsValidated.get();
|
||
|
! if (validatedCount > 1) {
|
||
|
! std::cout << "- " << strprintf(_("You have validated %d transactions!"), validatedCount) << std::endl;
|
||
|
! } else if (validatedCount == 1) {
|
||
|
! std::cout << "- " << _("You have validated a transaction!") << std::endl;
|
||
|
! } else {
|
||
|
! std::cout << "- " << _("You have validated no transactions.") << std::endl;
|
||
|
! }
|
||
|
|
||
|
! if (mining && loaded) {
|
||
|
! double solps = GetLocalSolPS_INTERNAL(uptime);
|
||
|
std::string strSolps = strprintf("%.4f Sol/s", solps);
|
||
|
std::cout << "- " << strprintf(_("You have contributed %s on average to the network solution rate."), strSolps) << std::endl;
|
||
|
std::cout << "- " << strprintf(_("You have completed %d Equihash solver runs."), ehSolverRuns.get()) << std::endl;
|
||
|
lines += 2;
|
||
|
|
||
|
! int mined = 0;
|
||
|
! int orphaned = 0;
|
||
|
! CAmount immature {0};
|
||
|
! CAmount mature {0};
|
||
|
! {
|
||
|
! LOCK2(cs_main, cs_metrics);
|
||
|
! boost::strict_lock_ptr<std::list<uint256>> u = trackedBlocks.synchronize();
|
||
|
! auto consensusParams = Params().GetConsensus();
|
||
|
! auto tipHeight = chainActive.Height();
|
||
|
!
|
||
|
! // Update orphans and calculate subsidies
|
||
|
! std::list<uint256>::iterator it = u->begin();
|
||
|
! while (it != u->end()) {
|
||
|
! auto hash = *it;
|
||
|
! if (mapBlockIndex.count(hash) > 0 &&
|
||
|
! chainActive.Contains(mapBlockIndex[hash])) {
|
||
|
! int height = mapBlockIndex[hash]->nHeight;
|
||
|
! CAmount subsidy = GetBlockSubsidy(height, consensusParams);
|
||
|
! if ((height > 0) && (height <= consensusParams.GetLastFoundersRewardBlockHeight())) {
|
||
|
! subsidy -= subsidy/5;
|
||
|
! }
|
||
|
! if (std::max(0, COINBASE_MATURITY - (tipHeight - height)) > 0) {
|
||
|
! immature += subsidy;
|
||
|
! } else {
|
||
|
! mature += subsidy;
|
||
|
! }
|
||
|
! it++;
|
||
|
! } else {
|
||
|
! it = u->erase(it);
|
||
|
! }
|
||
|
! }
|
||
|
!
|
||
|
! mined = minedBlocks.get();
|
||
|
! orphaned = mined - u->size();
|
||
|
! }
|
||
|
!
|
||
|
if (mined > 0) {
|
||
|
+ std::string units = Params().CurrencyUnits();
|
||
|
std::cout << "- " << strprintf(_("You have mined %d blocks!"), mined) << std::endl;
|
||
|
! std::cout << " "
|
||
|
! << strprintf(_("Orphaned: %d blocks, Immature: %u %s, Mature: %u %s"),
|
||
|
! orphaned,
|
||
|
! FormatMoney(immature), units,
|
||
|
! FormatMoney(mature), units)
|
||
|
! << std::endl;
|
||
|
! lines += 2;
|
||
|
}
|
||
|
}
|
||
|
std::cout << std::endl;
|
||
|
***************
|
||
|
*** 171,194 ****
|
||
|
// Make this thread recognisable as the metrics screen thread
|
||
|
RenameThread("zcash-metrics-screen");
|
||
|
|
||
|
! // Clear screen
|
||
|
! std::cout << "\e[2J";
|
||
|
!
|
||
|
! // Print art
|
||
|
! std::cout << METRICS_ART << std::endl;
|
||
|
! std::cout << std::endl;
|
||
|
!
|
||
|
! // Thank you text
|
||
|
! std::cout << _("Thank you for running a Zcash node!") << std::endl;
|
||
|
! std::cout << _("You're helping to strengthen the network and contributing to a social good :)") << std::endl;
|
||
|
! std::cout << std::endl;
|
||
|
!
|
||
|
! // Miner status
|
||
|
! bool mining = GetBoolArg("-gen", false);
|
||
|
! printMiningStatus(mining);
|
||
|
!
|
||
|
! // Count uptime
|
||
|
! int64_t nStart = GetTime();
|
||
|
|
||
|
while (true) {
|
||
|
// Number of lines that are always displayed
|
||
|
--- 276,299 ----
|
||
|
// Make this thread recognisable as the metrics screen thread
|
||
|
RenameThread("zcash-metrics-screen");
|
||
|
|
||
|
! // Determine whether we should render a persistent UI or rolling metrics
|
||
|
! bool isTTY = isatty(STDOUT_FILENO);
|
||
|
! bool isScreen = GetBoolArg("-metricsui", isTTY);
|
||
|
! int64_t nRefresh = GetArg("-metricsrefreshtime", isTTY ? 1 : 600);
|
||
|
!
|
||
|
! if (isScreen) {
|
||
|
! // Clear screen
|
||
|
! std::cout << "\e[2J";
|
||
|
!
|
||
|
! // Print art
|
||
|
! std::cout << METRICS_ART << std::endl;
|
||
|
! std::cout << std::endl;
|
||
|
!
|
||
|
! // Thank you text
|
||
|
! std::cout << _("Thank you for running a Zcash node!") << std::endl;
|
||
|
! std::cout << _("You're helping to strengthen the network and contributing to a social good :)") << std::endl;
|
||
|
! std::cout << std::endl;
|
||
|
! }
|
||
|
|
||
|
while (true) {
|
||
|
// Number of lines that are always displayed
|
||
|
***************
|
||
|
*** 196,202 ****
|
||
|
int cols = 80;
|
||
|
|
||
|
// Get current window size
|
||
|
! if (isatty(STDOUT_FILENO)) {
|
||
|
struct winsize w;
|
||
|
w.ws_col = 0;
|
||
|
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1 && w.ws_col != 0) {
|
||
|
--- 301,307 ----
|
||
|
int cols = 80;
|
||
|
|
||
|
// Get current window size
|
||
|
! if (isTTY) {
|
||
|
struct winsize w;
|
||
|
w.ws_col = 0;
|
||
|
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1 && w.ws_col != 0) {
|
||
|
***************
|
||
|
*** 204,223 ****
|
||
|
}
|
||
|
}
|
||
|
|
||
|
! // Erase below current position
|
||
|
! std::cout << "\e[J";
|
||
|
|
||
|
! lines += printMetrics(cols, nStart, mining);
|
||
|
lines += printMessageBox(cols);
|
||
|
lines += printInitMessage();
|
||
|
|
||
|
! // Explain how to exit
|
||
|
! std::cout << "[" << _("Press Ctrl+C to exit") << "] [" << _("Set 'showmetrics=0' to hide") << "]" << std::endl;;
|
||
|
|
||
|
! boost::this_thread::interruption_point();
|
||
|
! MilliSleep(1000);
|
||
|
|
||
|
! // Return to the top of the updating section
|
||
|
! std::cout << "\e[" << lines << "A";
|
||
|
}
|
||
|
}
|
||
|
--- 309,347 ----
|
||
|
}
|
||
|
}
|
||
|
|
||
|
! if (isScreen) {
|
||
|
! // Erase below current position
|
||
|
! std::cout << "\e[J";
|
||
|
! }
|
||
|
!
|
||
|
! // Miner status
|
||
|
! bool mining = GetBoolArg("-gen", false);
|
||
|
|
||
|
! if (loaded) {
|
||
|
! lines += printNetworkStats();
|
||
|
! }
|
||
|
! lines += printMiningStatus(mining);
|
||
|
! lines += printMetrics(cols, mining);
|
||
|
lines += printMessageBox(cols);
|
||
|
lines += printInitMessage();
|
||
|
|
||
|
! if (isScreen) {
|
||
|
! // Explain how to exit
|
||
|
! std::cout << "[" << _("Press Ctrl+C to exit") << "] [" << _("Set 'showmetrics=0' to hide") << "]" << std::endl;
|
||
|
! } else {
|
||
|
! // Print delineator
|
||
|
! std::cout << "----------------------------------------" << std::endl;
|
||
|
! }
|
||
|
|
||
|
! int64_t nWaitEnd = GetTime() + nRefresh;
|
||
|
! while (GetTime() < nWaitEnd) {
|
||
|
! boost::this_thread::interruption_point();
|
||
|
! MilliSleep(200);
|
||
|
! }
|
||
|
|
||
|
! if (isScreen) {
|
||
|
! // Return to the top of the updating section
|
||
|
! std::cout << "\e[" << lines << "A";
|
||
|
! }
|
||
|
}
|
||
|
}
|
||
|
diff -crB ./src/metrics.h ../../komodo-jl777/src/metrics.h
|
||
|
*** ./src/metrics.h 2017-01-03 10:40:50.255331392 +0000
|
||
|
--- ../../komodo-jl777/src/metrics.h 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 2,12 ****
|
||
|
// Distributed under the MIT software license, see the accompanying
|
||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||
|
|
||
|
#include <atomic>
|
||
|
#include <string>
|
||
|
|
||
|
struct AtomicCounter {
|
||
|
! std::atomic<int> value;
|
||
|
|
||
|
AtomicCounter() : value {0} { }
|
||
|
|
||
|
--- 2,14 ----
|
||
|
// Distributed under the MIT software license, see the accompanying
|
||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||
|
|
||
|
+ #include "uint256.h"
|
||
|
+
|
||
|
#include <atomic>
|
||
|
#include <string>
|
||
|
|
||
|
struct AtomicCounter {
|
||
|
! std::atomic<uint64_t> value;
|
||
|
|
||
|
AtomicCounter() : value {0} { }
|
||
|
|
||
|
***************
|
||
|
*** 26,32 ****
|
||
|
extern AtomicCounter transactionsValidated;
|
||
|
extern AtomicCounter ehSolverRuns;
|
||
|
extern AtomicCounter solutionTargetChecks;
|
||
|
! extern AtomicCounter minedBlocks;
|
||
|
|
||
|
void ConnectMetricsScreen();
|
||
|
void ThreadShowMetricsScreen();
|
||
|
--- 28,38 ----
|
||
|
extern AtomicCounter transactionsValidated;
|
||
|
extern AtomicCounter ehSolverRuns;
|
||
|
extern AtomicCounter solutionTargetChecks;
|
||
|
!
|
||
|
! void TrackMinedBlock(uint256 hash);
|
||
|
!
|
||
|
! void MarkStartTime();
|
||
|
! double GetLocalSolPS();
|
||
|
|
||
|
void ConnectMetricsScreen();
|
||
|
void ThreadShowMetricsScreen();
|
||
|
diff -crB ./src/miner.cpp ../../komodo-jl777/src/miner.cpp
|
||
|
*** ./src/miner.cpp 2017-01-03 10:40:50.255331392 +0000
|
||
|
--- ../../komodo-jl777/src/miner.cpp 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 99,105 ****
|
||
|
}
|
||
|
|
||
|
#define ASSETCHAINS_MINHEIGHT 100
|
||
|
! #define ROUNDROBIN_DELAY 58
|
||
|
extern int32_t ASSETCHAINS_SEED,IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAIN_INIT,KOMODO_INITDONE,KOMODO_ON_DEMAND,KOMODO_INITDONE;
|
||
|
extern char ASSETCHAINS_SYMBOL[16];
|
||
|
extern std::string NOTARY_PUBKEY;
|
||
|
--- 99,106 ----
|
||
|
}
|
||
|
|
||
|
#define ASSETCHAINS_MINHEIGHT 100
|
||
|
! #define KOMODO_ELECTION_GAP 2000
|
||
|
! #define ROUNDROBIN_DELAY 55
|
||
|
extern int32_t ASSETCHAINS_SEED,IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAIN_INIT,KOMODO_INITDONE,KOMODO_ON_DEMAND,KOMODO_INITDONE;
|
||
|
extern char ASSETCHAINS_SYMBOL[16];
|
||
|
extern std::string NOTARY_PUBKEY;
|
||
|
***************
|
||
|
*** 109,114 ****
|
||
|
--- 110,116 ----
|
||
|
int32_t komodo_is_special(int32_t height,uint8_t pubkey33[33]);
|
||
|
int32_t komodo_pax_opreturn(uint8_t *opret,int32_t maxsize);
|
||
|
uint64_t komodo_paxtotal();
|
||
|
+ int32_t komodo_baseid(char *origbase);
|
||
|
int32_t komodo_is_issuer();
|
||
|
int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *symbol,int32_t tokomodo);
|
||
|
int32_t komodo_isrealtime(int32_t *kmdheightp);
|
||
|
***************
|
||
|
*** 121,137 ****
|
||
|
if(!pblocktemplate.get())
|
||
|
return NULL;
|
||
|
CBlock *pblock = &pblocktemplate->block; // pointer for convenience
|
||
|
! if ( ASSETCHAINS_SYMBOL[0] != 0 && chainActive.Tip()->nHeight > ASSETCHAINS_MINHEIGHT )
|
||
|
{
|
||
|
isrealtime = komodo_isrealtime(&kmdheight);
|
||
|
! while ( KOMODO_ON_DEMAND == 0 )
|
||
|
{
|
||
|
deposits = komodo_paxtotal();
|
||
|
! if ( KOMODO_INITDONE == 0 || (isrealtime= komodo_isrealtime(&kmdheight)) == 0 )
|
||
|
{
|
||
|
//fprintf(stderr,"INITDONE.%d RT.%d deposits %.8f ht.%d\n",KOMODO_INITDONE,isrealtime,(double)deposits/COIN,kmdheight);
|
||
|
}
|
||
|
! else if ( deposits != 0 )
|
||
|
{
|
||
|
fprintf(stderr,"start CreateNewBlock %s initdone.%d deposit %.8f mempool.%d RT.%u KOMODO_ON_DEMAND.%d\n",ASSETCHAINS_SYMBOL,KOMODO_INITDONE,(double)komodo_paxtotal()/COIN,(int32_t)mempool.GetTotalTxSize(),isrealtime,KOMODO_ON_DEMAND);
|
||
|
break;
|
||
|
--- 123,140 ----
|
||
|
if(!pblocktemplate.get())
|
||
|
return NULL;
|
||
|
CBlock *pblock = &pblocktemplate->block; // pointer for convenience
|
||
|
! if ( ASSETCHAINS_SYMBOL[0] != 0 && chainActive.Tip()->nHeight >= ASSETCHAINS_MINHEIGHT )
|
||
|
{
|
||
|
isrealtime = komodo_isrealtime(&kmdheight);
|
||
|
! deposits = komodo_paxtotal();
|
||
|
! while ( KOMODO_ON_DEMAND == 0 && deposits == 0 && (int32_t)mempool.GetTotalTxSize() == 0 )
|
||
|
{
|
||
|
deposits = komodo_paxtotal();
|
||
|
! if ( KOMODO_INITDONE == 0 || (komodo_baseid(ASSETCHAINS_SYMBOL) >= 0 && (isrealtime= komodo_isrealtime(&kmdheight)) == 0) )
|
||
|
{
|
||
|
//fprintf(stderr,"INITDONE.%d RT.%d deposits %.8f ht.%d\n",KOMODO_INITDONE,isrealtime,(double)deposits/COIN,kmdheight);
|
||
|
}
|
||
|
! else if ( deposits != 0 || (int32_t)mempool.GetTotalTxSize() > 0 )
|
||
|
{
|
||
|
fprintf(stderr,"start CreateNewBlock %s initdone.%d deposit %.8f mempool.%d RT.%u KOMODO_ON_DEMAND.%d\n",ASSETCHAINS_SYMBOL,KOMODO_INITDONE,(double)komodo_paxtotal()/COIN,(int32_t)mempool.GetTotalTxSize(),isrealtime,KOMODO_ON_DEMAND);
|
||
|
break;
|
||
|
***************
|
||
|
*** 242,247 ****
|
||
|
--- 245,252 ----
|
||
|
|
||
|
dPriority += (double)nValueIn * nConf;
|
||
|
}
|
||
|
+ nTotalIn += tx.GetJoinSplitValueIn();
|
||
|
+
|
||
|
if (fMissingInputs) continue;
|
||
|
|
||
|
// Priority is sum(valuein * age) / modified_txsize
|
||
|
***************
|
||
|
*** 419,425 ****
|
||
|
if ( !TestBlockValidity(state, *pblock, pindexPrev, false, false))
|
||
|
{
|
||
|
fprintf(stderr,"testblockvalidity failed\n");
|
||
|
! //throw std::runtime_error("CreateNewBlock(): TestBlockValidity failed");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
--- 424,430 ----
|
||
|
if ( !TestBlockValidity(state, *pblock, pindexPrev, false, false))
|
||
|
{
|
||
|
fprintf(stderr,"testblockvalidity failed\n");
|
||
|
! throw std::runtime_error("CreateNewBlock(): TestBlockValidity failed");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 473,479 ****
|
||
|
script[34] = OP_CHECKSIG;
|
||
|
//scriptPubKey = CScript() << ToByteVector(pubkey) << OP_CHECKSIG;
|
||
|
}
|
||
|
! if ( 0 && ASSETCHAINS_SYMBOL[0] == 0 )
|
||
|
{
|
||
|
for (i=0; i<65; i++)
|
||
|
fprintf(stderr,"%d ",komodo_minerid(chainActive.Tip()->nHeight-i));
|
||
|
--- 478,484 ----
|
||
|
script[34] = OP_CHECKSIG;
|
||
|
//scriptPubKey = CScript() << ToByteVector(pubkey) << OP_CHECKSIG;
|
||
|
}
|
||
|
! if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 )
|
||
|
{
|
||
|
for (i=0; i<65; i++)
|
||
|
fprintf(stderr,"%d ",komodo_minerid(chainActive.Tip()->nHeight-i));
|
||
|
***************
|
||
|
*** 509,515 ****
|
||
|
if (!ProcessNewBlock(chainActive.Tip()->nHeight+1,state, NULL, pblock, true, NULL))
|
||
|
return error("KomodoMiner: ProcessNewBlock, block not accepted");
|
||
|
|
||
|
! minedBlocks.increment();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
--- 514,520 ----
|
||
|
if (!ProcessNewBlock(chainActive.Tip()->nHeight+1,state, NULL, pblock, true, NULL))
|
||
|
return error("KomodoMiner: ProcessNewBlock, block not accepted");
|
||
|
|
||
|
! TrackMinedBlock(pblock->GetHash());
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
***************
|
||
|
*** 614,627 ****
|
||
|
arith_uint256 hashTarget = arith_uint256().SetCompact(pblock->nBits);
|
||
|
if ( ASSETCHAINS_SYMBOL[0] == 0 && komodo_is_special(pindexPrev->nHeight+1,NOTARY_PUBKEY33) > 0 )
|
||
|
{
|
||
|
! hashTarget = arith_uint256().SetCompact(KOMODO_MINDIFF_NBITS);
|
||
|
! fprintf(stderr,"I am the chosen one for %s ht.%d\n",ASSETCHAINS_SYMBOL,pindexPrev->nHeight+1);
|
||
|
} else Mining_start = 0;
|
||
|
while (true)
|
||
|
{
|
||
|
! if ( ASSETCHAINS_SYMBOL[0] != 0 && pblock->vtx[0].vout.size() == 1 && Mining_height > ASSETCHAINS_MINHEIGHT )
|
||
|
{
|
||
|
! //fprintf(stderr,"skip generating %s on-demand block, no tx avail\n",ASSETCHAINS_SYMBOL);
|
||
|
sleep(10);
|
||
|
break;
|
||
|
}
|
||
|
--- 619,635 ----
|
||
|
arith_uint256 hashTarget = arith_uint256().SetCompact(pblock->nBits);
|
||
|
if ( ASSETCHAINS_SYMBOL[0] == 0 && komodo_is_special(pindexPrev->nHeight+1,NOTARY_PUBKEY33) > 0 )
|
||
|
{
|
||
|
! if ( (Mining_height % KOMODO_ELECTION_GAP) > 64 || (Mining_height % KOMODO_ELECTION_GAP) == 0 )
|
||
|
! {
|
||
|
! hashTarget = arith_uint256().SetCompact(KOMODO_MINDIFF_NBITS);
|
||
|
! fprintf(stderr,"I am the chosen one for %s ht.%d\n",ASSETCHAINS_SYMBOL,pindexPrev->nHeight+1);
|
||
|
! } else Mining_start = 0;
|
||
|
} else Mining_start = 0;
|
||
|
while (true)
|
||
|
{
|
||
|
! if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 && pblock->vtx[0].vout.size() == 1 && Mining_height > ASSETCHAINS_MINHEIGHT )
|
||
|
{
|
||
|
! fprintf(stderr,"skip generating %s on-demand block, no tx avail\n",ASSETCHAINS_SYMBOL);
|
||
|
sleep(10);
|
||
|
break;
|
||
|
}
|
||
|
***************
|
||
|
*** 784,794 ****
|
||
|
--- 792,804 ----
|
||
|
}
|
||
|
catch (const boost::thread_interrupted&)
|
||
|
{
|
||
|
+ c.disconnect();
|
||
|
LogPrintf("KomodoMiner terminated\n");
|
||
|
throw;
|
||
|
}
|
||
|
catch (const std::runtime_error &e)
|
||
|
{
|
||
|
+ c.disconnect();
|
||
|
LogPrintf("KomodoMiner runtime error: %s\n", e.what());
|
||
|
return;
|
||
|
}
|
||
|
diff -crB ./src/pow.cpp ../../komodo-jl777/src/pow.cpp
|
||
|
*** ./src/pow.cpp 2017-01-03 10:40:50.259331594 +0000
|
||
|
--- ../../komodo-jl777/src/pow.cpp 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 113,119 ****
|
||
|
bool CheckProofOfWork(int32_t height,uint8_t *pubkey33,uint256 hash, unsigned int nBits, const Consensus::Params& params)
|
||
|
{
|
||
|
extern int32_t KOMODO_REWIND;
|
||
|
! bool fNegative,fOverflow; int32_t i,nonz=0,special,special2,notaryid=-1,flag = 0;
|
||
|
arith_uint256 bnTarget;
|
||
|
|
||
|
bnTarget.SetCompact(nBits, &fNegative, &fOverflow);
|
||
|
--- 113,119 ----
|
||
|
bool CheckProofOfWork(int32_t height,uint8_t *pubkey33,uint256 hash, unsigned int nBits, const Consensus::Params& params)
|
||
|
{
|
||
|
extern int32_t KOMODO_REWIND;
|
||
|
! bool fNegative,fOverflow; int32_t i,nonz=0,special=0,special2=0,notaryid=-1,flag = 0;
|
||
|
arith_uint256 bnTarget;
|
||
|
|
||
|
bnTarget.SetCompact(nBits, &fNegative, &fOverflow);
|
||
|
***************
|
||
|
*** 130,144 ****
|
||
|
if ( nonz == 0 )
|
||
|
return(true); // will come back via different path with pubkey set
|
||
|
special2 = komodo_is_special(height,pubkey33);
|
||
|
! if ( notaryid >= 0 && ((height >= 64000 && height <= 90065) || (height % KOMODO_ELECTION_GAP) > 64) )
|
||
|
{
|
||
|
- //if ( special2 == -2 )
|
||
|
- // printf("height.%d special2.%d special.%d\n",height,special2,special);
|
||
|
if ( (height >= 64000 && height <= 90065) || (height % KOMODO_ELECTION_GAP) == 0 || (height < 80000 && (special != 0 || special2 > 0)) || (height >= 80000 && special2 > 0) )
|
||
|
{
|
||
|
bnTarget.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow);
|
||
|
flag = 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (fNegative || bnTarget == 0 || fOverflow || bnTarget > UintToArith256(params.powLimit))
|
||
|
--- 130,153 ----
|
||
|
if ( nonz == 0 )
|
||
|
return(true); // will come back via different path with pubkey set
|
||
|
special2 = komodo_is_special(height,pubkey33);
|
||
|
! /*if ( notaryid >= 0 && ((height >= 64000 && height <= 90065) || (height % KOMODO_ELECTION_GAP) > 64) )
|
||
|
{
|
||
|
if ( (height >= 64000 && height <= 90065) || (height % KOMODO_ELECTION_GAP) == 0 || (height < 80000 && (special != 0 || special2 > 0)) || (height >= 80000 && special2 > 0) )
|
||
|
{
|
||
|
bnTarget.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow);
|
||
|
flag = 1;
|
||
|
}
|
||
|
+ }*/
|
||
|
+ if ( notaryid >= 0 )
|
||
|
+ {
|
||
|
+ if ( height > 10000 && height < 80000 && (special != 0 || special2 > 0) )
|
||
|
+ flag = 1;
|
||
|
+ else if ( height >= 80000 && height < 108000 && special2 > 0 )
|
||
|
+ flag = 1;
|
||
|
+ else if ( height >= 108000 && special2 > 0 )
|
||
|
+ flag = ((height % KOMODO_ELECTION_GAP) > 64 || (height % KOMODO_ELECTION_GAP) == 0);
|
||
|
+ if ( flag != 0 )
|
||
|
+ bnTarget.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow);
|
||
|
}
|
||
|
}
|
||
|
if (fNegative || bnTarget == 0 || fOverflow || bnTarget > UintToArith256(params.powLimit))
|
||
|
***************
|
||
|
*** 146,160 ****
|
||
|
// Check proof of work matches claimed amount
|
||
|
if ( UintToArith256(hash) > bnTarget )
|
||
|
{
|
||
|
! int32_t i;
|
||
|
! for (i=31; i>=0; i--)
|
||
|
! printf("%02x",((uint8_t *)&hash)[i]);
|
||
|
! printf(" hash vs ");
|
||
|
! for (i=31; i>=0; i--)
|
||
|
! printf("%02x",((uint8_t *)&bnTarget)[i]);
|
||
|
! printf(" ht.%d REWIND.%d special.%d notaryid.%d ht.%d mod.%d error\n",height,KOMODO_REWIND,special,notaryid,height,(height % 35));
|
||
|
! if ( height <= KOMODO_REWIND )
|
||
|
! return error("CheckProofOfWork(): hash doesn't match nBits");
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
--- 155,171 ----
|
||
|
// Check proof of work matches claimed amount
|
||
|
if ( UintToArith256(hash) > bnTarget )
|
||
|
{
|
||
|
! {
|
||
|
! int32_t i;
|
||
|
! for (i=31; i>=0; i--)
|
||
|
! printf("%02x",((uint8_t *)&hash)[i]);
|
||
|
! printf(" hash vs ");
|
||
|
! for (i=31; i>=0; i--)
|
||
|
! printf("%02x",((uint8_t *)&bnTarget)[i]);
|
||
|
! printf(" ht.%d REWIND.%d special.%d notaryid.%d ht.%d mod.%d error\n",height,KOMODO_REWIND,special,notaryid,height,(height % 35));
|
||
|
! if ( height < 90000 || (height > 110000 && KOMODO_REWIND == 0) )
|
||
|
! return error("CheckProofOfWork(): hash doesn't match nBits");
|
||
|
! }
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
diff -crB ./src/primitives/block.h ../../komodo-jl777/src/primitives/block.h
|
||
|
*** ./src/primitives/block.h 2017-01-03 10:40:50.259331594 +0000
|
||
|
--- ../../komodo-jl777/src/primitives/block.h 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 200,205 ****
|
||
|
--- 200,209 ----
|
||
|
{
|
||
|
return vHave.empty();
|
||
|
}
|
||
|
+
|
||
|
+ friend bool operator==(const CBlockLocator& a, const CBlockLocator& b) {
|
||
|
+ return (a.vHave == b.vHave);
|
||
|
+ }
|
||
|
};
|
||
|
|
||
|
#endif // BITCOIN_PRIMITIVES_BLOCK_H
|
||
|
diff -crB ./src/primitives/transaction.cpp ../../komodo-jl777/src/primitives/transaction.cpp
|
||
|
*** ./src/primitives/transaction.cpp 2017-01-03 10:40:50.259331594 +0000
|
||
|
--- ../../komodo-jl777/src/primitives/transaction.cpp 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 62,67 ****
|
||
|
--- 62,70 ----
|
||
|
// Randomize the order of the inputs and outputs
|
||
|
inputMap = {0, 1};
|
||
|
outputMap = {0, 1};
|
||
|
+
|
||
|
+ assert(gen);
|
||
|
+
|
||
|
MappedShuffle(inputs.begin(), inputMap.begin(), ZC_NUM_JS_INPUTS, gen);
|
||
|
MappedShuffle(outputs.begin(), outputMap.begin(), ZC_NUM_JS_OUTPUTS, gen);
|
||
|
|
||
|
***************
|
||
|
*** 72,81 ****
|
||
|
--- 75,86 ----
|
||
|
|
||
|
bool JSDescription::Verify(
|
||
|
ZCJoinSplit& params,
|
||
|
+ libzcash::ProofVerifier& verifier,
|
||
|
const uint256& pubKeyHash
|
||
|
) const {
|
||
|
return params.verify(
|
||
|
proof,
|
||
|
+ verifier,
|
||
|
pubKeyHash,
|
||
|
randomSeed,
|
||
|
macs,
|
||
|
diff -crB ./src/primitives/transaction.h ../../komodo-jl777/src/primitives/transaction.h
|
||
|
*** ./src/primitives/transaction.h 2017-01-03 10:40:50.259331594 +0000
|
||
|
--- ../../komodo-jl777/src/primitives/transaction.h 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 101,107 ****
|
||
|
);
|
||
|
|
||
|
// Verifies that the JoinSplit proof is correct.
|
||
|
! bool Verify(ZCJoinSplit& params, const uint256& pubKeyHash) const;
|
||
|
|
||
|
// Returns the calculated h_sig
|
||
|
uint256 h_sig(ZCJoinSplit& params, const uint256& pubKeyHash) const;
|
||
|
--- 101,111 ----
|
||
|
);
|
||
|
|
||
|
// Verifies that the JoinSplit proof is correct.
|
||
|
! bool Verify(
|
||
|
! ZCJoinSplit& params,
|
||
|
! libzcash::ProofVerifier& verifier,
|
||
|
! const uint256& pubKeyHash
|
||
|
! ) const;
|
||
|
|
||
|
// Returns the calculated h_sig
|
||
|
uint256 h_sig(ZCJoinSplit& params, const uint256& pubKeyHash) const;
|
||
|
diff -crB ./src/random.cpp ../../komodo-jl777/src/random.cpp
|
||
|
*** ./src/random.cpp 2017-01-03 10:40:50.339335643 +0000
|
||
|
--- ../../komodo-jl777/src/random.cpp 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 137,139 ****
|
||
|
--- 137,144 ----
|
||
|
insecure_rand_Rw = tmp;
|
||
|
}
|
||
|
}
|
||
|
+
|
||
|
+ int GenIdentity(int n)
|
||
|
+ {
|
||
|
+ return n-1;
|
||
|
+ }
|
||
|
diff -crB ./src/random.h ../../komodo-jl777/src/random.h
|
||
|
*** ./src/random.h 2017-01-03 10:40:50.339335643 +0000
|
||
|
--- ../../komodo-jl777/src/random.h 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 26,31 ****
|
||
|
--- 26,36 ----
|
||
|
uint256 GetRandHash();
|
||
|
|
||
|
/**
|
||
|
+ * Identity function for MappedShuffle, so that elements retain their original order.
|
||
|
+ */
|
||
|
+ int GenIdentity(int n);
|
||
|
+
|
||
|
+ /**
|
||
|
* Rearranges the elements in the range [first,first+len) randomly, assuming
|
||
|
* that gen is a uniform random number generator. Follows the same algorithm as
|
||
|
* std::shuffle in C++11 (a Durstenfeld shuffle).
|
||
|
diff -crB ./src/rpcclient.cpp ../../komodo-jl777/src/rpcclient.cpp
|
||
|
*** ./src/rpcclient.cpp 2017-01-03 10:40:50.343335845 +0000
|
||
|
--- ../../komodo-jl777/src/rpcclient.cpp 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 103,108 ****
|
||
|
--- 103,109 ----
|
||
|
{ "z_gettotalbalance", 0},
|
||
|
{ "z_sendmany", 1},
|
||
|
{ "z_sendmany", 2},
|
||
|
+ { "z_sendmany", 3},
|
||
|
{ "z_getoperationstatus", 0},
|
||
|
{ "z_getoperationresult", 0},
|
||
|
{ "z_importkey", 1 },
|
||
|
diff -crB ./src/rpcmining.cpp ../../komodo-jl777/src/rpcmining.cpp
|
||
|
*** ./src/rpcmining.cpp 2017-01-03 10:40:50.343335845 +0000
|
||
|
--- ../../komodo-jl777/src/rpcmining.cpp 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 37,43 ****
|
||
|
* or over the difficulty averaging window if 'lookup' is nonpositive.
|
||
|
* If 'height' is nonnegative, compute the estimate at the time when a given block was found.
|
||
|
*/
|
||
|
! Value GetNetworkHashPS(int lookup, int height) {
|
||
|
CBlockIndex *pb = chainActive.Tip();
|
||
|
|
||
|
if (height >= 0 && height < chainActive.Height())
|
||
|
--- 37,43 ----
|
||
|
* or over the difficulty averaging window if 'lookup' is nonpositive.
|
||
|
* If 'height' is nonnegative, compute the estimate at the time when a given block was found.
|
||
|
*/
|
||
|
! int64_t GetNetworkHashPS(int lookup, int height) {
|
||
|
CBlockIndex *pb = chainActive.Tip();
|
||
|
|
||
|
if (height >= 0 && height < chainActive.Height())
|
||
|
***************
|
||
|
*** 74,92 ****
|
||
|
return (int64_t)(workDiff.getdouble() / timeDiff);
|
||
|
}
|
||
|
|
||
|
Value getnetworkhashps(const Array& params, bool fHelp)
|
||
|
{
|
||
|
if (fHelp || params.size() > 2)
|
||
|
throw runtime_error(
|
||
|
"getnetworkhashps ( blocks height )\n"
|
||
|
! "\nReturns the estimated network hashes per second based on the last n blocks.\n"
|
||
|
"Pass in [blocks] to override # of blocks, -1 specifies over difficulty averaging window.\n"
|
||
|
"Pass in [height] to estimate the network speed at the time when a certain block was found.\n"
|
||
|
"\nArguments:\n"
|
||
|
"1. blocks (numeric, optional, default=120) The number of blocks, or -1 for blocks over difficulty averaging window.\n"
|
||
|
"2. height (numeric, optional, default=-1) To estimate at the time of the given height.\n"
|
||
|
"\nResult:\n"
|
||
|
! "x (numeric) Hashes per second estimated\n"
|
||
|
"\nExamples:\n"
|
||
|
+ HelpExampleCli("getnetworkhashps", "")
|
||
|
+ HelpExampleRpc("getnetworkhashps", "")
|
||
|
--- 74,133 ----
|
||
|
return (int64_t)(workDiff.getdouble() / timeDiff);
|
||
|
}
|
||
|
|
||
|
+ Value getlocalsolps(const Array& params, bool fHelp)
|
||
|
+ {
|
||
|
+ if (fHelp)
|
||
|
+ throw runtime_error(
|
||
|
+ "getlocalsolps\n"
|
||
|
+ "\nReturns the average local solutions per second since this node was started.\n"
|
||
|
+ "This is the same information shown on the metrics screen (if enabled).\n"
|
||
|
+ "\nResult:\n"
|
||
|
+ "xxx.xxxxx (numeric) Solutions per second average\n"
|
||
|
+ "\nExamples:\n"
|
||
|
+ + HelpExampleCli("getlocalsolps", "")
|
||
|
+ + HelpExampleRpc("getlocalsolps", "")
|
||
|
+ );
|
||
|
+
|
||
|
+ LOCK(cs_main);
|
||
|
+ return GetLocalSolPS();
|
||
|
+ }
|
||
|
+
|
||
|
+ Value getnetworksolps(const Array& params, bool fHelp)
|
||
|
+ {
|
||
|
+ if (fHelp || params.size() > 2)
|
||
|
+ throw runtime_error(
|
||
|
+ "getnetworksolps ( blocks height )\n"
|
||
|
+ "\nReturns the estimated network solutions per second based on the last n blocks.\n"
|
||
|
+ "Pass in [blocks] to override # of blocks, -1 specifies over difficulty averaging window.\n"
|
||
|
+ "Pass in [height] to estimate the network speed at the time when a certain block was found.\n"
|
||
|
+ "\nArguments:\n"
|
||
|
+ "1. blocks (numeric, optional, default=120) The number of blocks, or -1 for blocks over difficulty averaging window.\n"
|
||
|
+ "2. height (numeric, optional, default=-1) To estimate at the time of the given height.\n"
|
||
|
+ "\nResult:\n"
|
||
|
+ "x (numeric) Solutions per second estimated\n"
|
||
|
+ "\nExamples:\n"
|
||
|
+ + HelpExampleCli("getnetworksolps", "")
|
||
|
+ + HelpExampleRpc("getnetworksolps", "")
|
||
|
+ );
|
||
|
+
|
||
|
+ LOCK(cs_main);
|
||
|
+ return GetNetworkHashPS(params.size() > 0 ? params[0].get_int() : 120, params.size() > 1 ? params[1].get_int() : -1);
|
||
|
+ }
|
||
|
+
|
||
|
Value getnetworkhashps(const Array& params, bool fHelp)
|
||
|
{
|
||
|
if (fHelp || params.size() > 2)
|
||
|
throw runtime_error(
|
||
|
"getnetworkhashps ( blocks height )\n"
|
||
|
! "\nDEPRECATED - left for backwards-compatibility. Use getnetworksolps instead.\n"
|
||
|
! "\nReturns the estimated network solutions per second based on the last n blocks.\n"
|
||
|
"Pass in [blocks] to override # of blocks, -1 specifies over difficulty averaging window.\n"
|
||
|
"Pass in [height] to estimate the network speed at the time when a certain block was found.\n"
|
||
|
"\nArguments:\n"
|
||
|
"1. blocks (numeric, optional, default=120) The number of blocks, or -1 for blocks over difficulty averaging window.\n"
|
||
|
"2. height (numeric, optional, default=-1) To estimate at the time of the given height.\n"
|
||
|
"\nResult:\n"
|
||
|
! "x (numeric) Solutions per second estimated\n"
|
||
|
"\nExamples:\n"
|
||
|
+ HelpExampleCli("getnetworkhashps", "")
|
||
|
+ HelpExampleRpc("getnetworkhashps", "")
|
||
|
***************
|
||
|
*** 209,215 ****
|
||
|
CValidationState state;
|
||
|
if (!ProcessNewBlock(chainActive.Tip()->nHeight+1,state, NULL, pblock, true, NULL))
|
||
|
throw JSONRPCError(RPC_INTERNAL_ERROR, "ProcessNewBlock, block not accepted");
|
||
|
- minedBlocks.increment();
|
||
|
++nHeight;
|
||
|
blockHashes.push_back(pblock->GetHash().GetHex());
|
||
|
}
|
||
|
--- 250,255 ----
|
||
|
***************
|
||
|
*** 280,285 ****
|
||
|
--- 320,327 ----
|
||
|
" \"errors\": \"...\" (string) Current errors\n"
|
||
|
" \"generate\": true|false (boolean) If the generation is on or off (see getgenerate or setgenerate calls)\n"
|
||
|
" \"genproclimit\": n (numeric) The processor limit for generation. -1 if no generation. (see getgenerate or setgenerate calls)\n"
|
||
|
+ " \"localsolps\": xxx.xxxxx (numeric) The average local solution rate in Sol/s since this node was started\n"
|
||
|
+ " \"networksolps\": x (numeric) The estimated network solution rate in Sol/s\n"
|
||
|
" \"pooledtx\": n (numeric) The size of the mem pool\n"
|
||
|
" \"testnet\": true|false (boolean) If using testnet or not\n"
|
||
|
" \"chain\": \"xxxx\", (string) current network name as defined in BIP70 (main, test, regtest)\n"
|
||
|
***************
|
||
|
*** 299,305 ****
|
||
|
obj.push_back(Pair("difficulty", (double)GetNetworkDifficulty()));
|
||
|
obj.push_back(Pair("errors", GetWarnings("statusbar")));
|
||
|
obj.push_back(Pair("genproclimit", (int)GetArg("-genproclimit", -1)));
|
||
|
! obj.push_back(Pair("networkhashps", getnetworkhashps(params, false)));
|
||
|
obj.push_back(Pair("pooledtx", (uint64_t)mempool.size()));
|
||
|
obj.push_back(Pair("testnet", Params().TestnetToBeDeprecatedFieldRPC()));
|
||
|
obj.push_back(Pair("chain", Params().NetworkIDString()));
|
||
|
--- 341,349 ----
|
||
|
obj.push_back(Pair("difficulty", (double)GetNetworkDifficulty()));
|
||
|
obj.push_back(Pair("errors", GetWarnings("statusbar")));
|
||
|
obj.push_back(Pair("genproclimit", (int)GetArg("-genproclimit", -1)));
|
||
|
! obj.push_back(Pair("localsolps" , getlocalsolps(params, false)));
|
||
|
! obj.push_back(Pair("networksolps", getnetworksolps(params, false)));
|
||
|
! obj.push_back(Pair("networkhashps", getnetworksolps(params, false)));
|
||
|
obj.push_back(Pair("pooledtx", (uint64_t)mempool.size()));
|
||
|
obj.push_back(Pair("testnet", Params().TestnetToBeDeprecatedFieldRPC()));
|
||
|
obj.push_back(Pair("chain", Params().NetworkIDString()));
|
||
|
***************
|
||
|
*** 483,492 ****
|
||
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid mode");
|
||
|
|
||
|
if (vNodes.empty())
|
||
|
! throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "Bitcoin is not connected!");
|
||
|
|
||
|
if (IsInitialBlockDownload())
|
||
|
! throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "Bitcoin is downloading blocks...");
|
||
|
|
||
|
static unsigned int nTransactionsUpdatedLast;
|
||
|
|
||
|
--- 527,536 ----
|
||
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid mode");
|
||
|
|
||
|
if (vNodes.empty())
|
||
|
! throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "Zcash is not connected!");
|
||
|
|
||
|
if (IsInitialBlockDownload())
|
||
|
! throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "Zcash is downloading blocks...");
|
||
|
|
||
|
static unsigned int nTransactionsUpdatedLast;
|
||
|
|
||
|
diff -crB ./src/rpcmisc.cpp ../../komodo-jl777/src/rpcmisc.cpp
|
||
|
*** ./src/rpcmisc.cpp 2017-01-03 10:40:50.343335845 +0000
|
||
|
--- ../../komodo-jl777/src/rpcmisc.cpp 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 23,28 ****
|
||
|
--- 23,30 ----
|
||
|
#include "json/json_spirit_utils.h"
|
||
|
#include "json/json_spirit_value.h"
|
||
|
|
||
|
+ #include "zcash/Address.hpp"
|
||
|
+
|
||
|
using namespace json_spirit;
|
||
|
using namespace std;
|
||
|
|
||
|
***************
|
||
|
*** 236,241 ****
|
||
|
--- 238,306 ----
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
+
|
||
|
+ Value z_validateaddress(const Array& params, bool fHelp)
|
||
|
+ {
|
||
|
+ if (fHelp || params.size() != 1)
|
||
|
+ throw runtime_error(
|
||
|
+ "z_validateaddress \"zaddr\"\n"
|
||
|
+ "\nReturn information about the given z address.\n"
|
||
|
+ "\nArguments:\n"
|
||
|
+ "1. \"zaddr\" (string, required) The z address to validate\n"
|
||
|
+ "\nResult:\n"
|
||
|
+ "{\n"
|
||
|
+ " \"isvalid\" : true|false, (boolean) If the address is valid or not. If not, this is the only property returned.\n"
|
||
|
+ " \"address\" : \"zaddr\", (string) The z address validated\n"
|
||
|
+ " \"ismine\" : true|false, (boolean) If the address is yours or not\n"
|
||
|
+ " \"payingkey\" : \"hex\", (string) The hex value of the paying key, a_pk\n"
|
||
|
+ " \"transmissionkey\" : \"hex\", (string) The hex value of the transmission key, pk_enc\n"
|
||
|
+
|
||
|
+ "}\n"
|
||
|
+ "\nExamples:\n"
|
||
|
+ + HelpExampleCli("validateaddress", "\"zcWsmqT4X2V4jgxbgiCzyrAfRT1vi1F4sn7M5Pkh66izzw8Uk7LBGAH3DtcSMJeUb2pi3W4SQF8LMKkU2cUuVP68yAGcomL\"")
|
||
|
+ );
|
||
|
+
|
||
|
+
|
||
|
+ #ifdef ENABLE_WALLET
|
||
|
+ LOCK2(cs_main, pwalletMain->cs_wallet);
|
||
|
+ #else
|
||
|
+ LOCK(cs_main);
|
||
|
+ #endif
|
||
|
+
|
||
|
+ bool isValid = false;
|
||
|
+ bool isMine = false;
|
||
|
+ std::string payingKey, transmissionKey;
|
||
|
+
|
||
|
+ string strAddress = params[0].get_str();
|
||
|
+ try {
|
||
|
+ CZCPaymentAddress address(strAddress);
|
||
|
+ libzcash::PaymentAddress addr = address.Get();
|
||
|
+
|
||
|
+ #ifdef ENABLE_WALLET
|
||
|
+ isMine = pwalletMain->HaveSpendingKey(addr);
|
||
|
+ #endif
|
||
|
+ payingKey = addr.a_pk.GetHex();
|
||
|
+ transmissionKey = addr.pk_enc.GetHex();
|
||
|
+ isValid = true;
|
||
|
+ } catch (std::runtime_error e) {
|
||
|
+ // address is invalid, nop here as isValid is false.
|
||
|
+ }
|
||
|
+
|
||
|
+ Object ret;
|
||
|
+ ret.push_back(Pair("isvalid", isValid));
|
||
|
+ if (isValid)
|
||
|
+ {
|
||
|
+ ret.push_back(Pair("address", strAddress));
|
||
|
+ ret.push_back(Pair("payingkey", payingKey));
|
||
|
+ ret.push_back(Pair("transmissionkey", transmissionKey));
|
||
|
+ #ifdef ENABLE_WALLET
|
||
|
+ ret.push_back(Pair("ismine", isMine));
|
||
|
+ #endif
|
||
|
+ }
|
||
|
+ return ret;
|
||
|
+ }
|
||
|
+
|
||
|
+
|
||
|
/**
|
||
|
* Used by addmultisigaddress / createmultisig:
|
||
|
*/
|
||
|
diff -crB ./src/rpcprotocol.cpp ../../komodo-jl777/src/rpcprotocol.cpp
|
||
|
*** ./src/rpcprotocol.cpp 2017-01-03 10:40:50.343335845 +0000
|
||
|
--- ../../komodo-jl777/src/rpcprotocol.cpp 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 33,39 ****
|
||
|
|
||
|
/**
|
||
|
* HTTP protocol
|
||
|
! *
|
||
|
* This ain't Apache. We're just using HTTP header for the length field
|
||
|
* and to be compatible with other JSON-RPC implementations.
|
||
|
*/
|
||
|
--- 33,39 ----
|
||
|
|
||
|
/**
|
||
|
* HTTP protocol
|
||
|
! *
|
||
|
* This ain't Apache. We're just using HTTP header for the length field
|
||
|
* and to be compatible with other JSON-RPC implementations.
|
||
|
*/
|
||
|
***************
|
||
|
*** 42,48 ****
|
||
|
{
|
||
|
ostringstream s;
|
||
|
s << "POST / HTTP/1.1\r\n"
|
||
|
! << "User-Agent: bitcoin-json-rpc/" << FormatFullVersion() << "\r\n"
|
||
|
<< "Host: 127.0.0.1\r\n"
|
||
|
<< "Content-Type: application/json\r\n"
|
||
|
<< "Content-Length: " << strMsg.size() << "\r\n"
|
||
|
--- 42,48 ----
|
||
|
{
|
||
|
ostringstream s;
|
||
|
s << "POST / HTTP/1.1\r\n"
|
||
|
! << "User-Agent: zcash-json-rpc/" << FormatFullVersion() << "\r\n"
|
||
|
<< "Host: 127.0.0.1\r\n"
|
||
|
<< "Content-Type: application/json\r\n"
|
||
|
<< "Content-Length: " << strMsg.size() << "\r\n"
|
||
|
***************
|
||
|
*** 77,83 ****
|
||
|
if (nStatus == HTTP_UNAUTHORIZED)
|
||
|
return strprintf("HTTP/1.0 401 Authorization Required\r\n"
|
||
|
"Date: %s\r\n"
|
||
|
! "Server: bitcoin-json-rpc/%s\r\n"
|
||
|
"WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n"
|
||
|
"Content-Type: text/html\r\n"
|
||
|
"Content-Length: 296\r\n"
|
||
|
--- 77,83 ----
|
||
|
if (nStatus == HTTP_UNAUTHORIZED)
|
||
|
return strprintf("HTTP/1.0 401 Authorization Required\r\n"
|
||
|
"Date: %s\r\n"
|
||
|
! "Server: zcash-json-rpc/%s\r\n"
|
||
|
"WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n"
|
||
|
"Content-Type: text/html\r\n"
|
||
|
"Content-Length: 296\r\n"
|
||
|
***************
|
||
|
*** 104,110 ****
|
||
|
"Connection: %s\r\n"
|
||
|
"Content-Length: %u\r\n"
|
||
|
"Content-Type: %s\r\n"
|
||
|
! "Server: bitcoin-json-rpc/%s\r\n"
|
||
|
"\r\n",
|
||
|
nStatus,
|
||
|
httpStatusDescription(nStatus),
|
||
|
--- 104,110 ----
|
||
|
"Connection: %s\r\n"
|
||
|
"Content-Length: %u\r\n"
|
||
|
"Content-Type: %s\r\n"
|
||
|
! "Server: zcash-json-rpc/%s\r\n"
|
||
|
"\r\n",
|
||
|
nStatus,
|
||
|
httpStatusDescription(nStatus),
|
||
|
***************
|
||
|
*** 248,254 ****
|
||
|
* JSON-RPC protocol. Bitcoin speaks version 1.0 for maximum compatibility,
|
||
|
* but uses JSON-RPC 1.1/2.0 standards for parts of the 1.0 standard that were
|
||
|
* unspecified (HTTP errors and contents of 'error').
|
||
|
! *
|
||
|
* 1.0 spec: http://json-rpc.org/wiki/specification
|
||
|
* 1.2 spec: http://jsonrpc.org/historical/json-rpc-over-http.html
|
||
|
* http://www.codeproject.com/KB/recipes/JSON_Spirit.aspx
|
||
|
--- 248,254 ----
|
||
|
* JSON-RPC protocol. Bitcoin speaks version 1.0 for maximum compatibility,
|
||
|
* but uses JSON-RPC 1.1/2.0 standards for parts of the 1.0 standard that were
|
||
|
* unspecified (HTTP errors and contents of 'error').
|
||
|
! *
|
||
|
* 1.0 spec: http://json-rpc.org/wiki/specification
|
||
|
* 1.2 spec: http://jsonrpc.org/historical/json-rpc-over-http.html
|
||
|
* http://www.codeproject.com/KB/recipes/JSON_Spirit.aspx
|
||
|
diff -crB ./src/rpcserver.cpp ../../komodo-jl777/src/rpcserver.cpp
|
||
|
*** ./src/rpcserver.cpp 2017-01-03 10:40:50.343335845 +0000
|
||
|
--- ../../komodo-jl777/src/rpcserver.cpp 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 309,314 ****
|
||
|
--- 309,316 ----
|
||
|
/* Mining */
|
||
|
{ "mining", "getblocktemplate", &getblocktemplate, true },
|
||
|
{ "mining", "getmininginfo", &getmininginfo, true },
|
||
|
+ { "mining", "getlocalsolps", &getlocalsolps, true },
|
||
|
+ { "mining", "getnetworksolps", &getnetworksolps, true },
|
||
|
{ "mining", "getnetworkhashps", &getnetworkhashps, true },
|
||
|
{ "mining", "prioritisetransaction", &prioritisetransaction, true },
|
||
|
{ "mining", "submitblock", &submitblock, true },
|
||
|
***************
|
||
|
*** 335,340 ****
|
||
|
--- 337,343 ----
|
||
|
{ "util", "verifymessage", &verifymessage, true },
|
||
|
{ "util", "estimatefee", &estimatefee, true },
|
||
|
{ "util", "estimatepriority", &estimatepriority, true },
|
||
|
+ { "util", "z_validateaddress", &z_validateaddress, true }, /* uses wallet if enabled */
|
||
|
|
||
|
/* Not shown in help */
|
||
|
{ "hidden", "invalidateblock", &invalidateblock, true },
|
||
|
***************
|
||
|
*** 1034,1042 ****
|
||
|
--- 1037,1051 ----
|
||
|
// Read HTTP message headers and body
|
||
|
ReadHTTPMessage(conn->stream(), mapHeaders, strRequest, nProto, MAX_SIZE);
|
||
|
|
||
|
+ // TODO #1856: Re-enable support for persistent connections.
|
||
|
+ // We have disabled support for HTTP Keep-Alive until resolution of #1680, upstream rpc deadlock.
|
||
|
+ // Close connection immediately.
|
||
|
+ fRun = false;
|
||
|
+ /*
|
||
|
// HTTP Keep-Alive is false; close connection immediately
|
||
|
if ((mapHeaders["connection"] == "close") || (!GetBoolArg("-rpckeepalive", true)))
|
||
|
fRun = false;
|
||
|
+ */
|
||
|
|
||
|
// Process via JSON-RPC API
|
||
|
if (strURI == "/") {
|
||
|
diff -crB ./src/rpcserver.h ../../komodo-jl777/src/rpcserver.h
|
||
|
*** ./src/rpcserver.h 2017-01-03 10:40:50.343335845 +0000
|
||
|
--- ../../komodo-jl777/src/rpcserver.h 2017-01-03 09:49:08.864506767 +0000
|
||
|
***************
|
||
|
*** 169,174 ****
|
||
|
--- 169,176 ----
|
||
|
extern json_spirit::Value getgenerate(const json_spirit::Array& params, bool fHelp); // in rpcmining.cpp
|
||
|
extern json_spirit::Value setgenerate(const json_spirit::Array& params, bool fHelp);
|
||
|
extern json_spirit::Value generate(const json_spirit::Array& params, bool fHelp);
|
||
|
+ extern json_spirit::Value getlocalsolps(const json_spirit::Array& params, bool fHelp);
|
||
|
+ extern json_spirit::Value getnetworksolps(const json_spirit::Array& params, bool fHelp);
|
||
|
extern json_spirit::Value getnetworkhashps(const json_spirit::Array& params, bool fHelp);
|
||
|
extern json_spirit::Value getmininginfo(const json_spirit::Array& params, bool fHelp);
|
||
|
extern json_spirit::Value prioritisetransaction(const json_spirit::Array& params, bool fHelp);
|
||
|
***************
|
||
|
*** 270,275 ****
|
||
|
--- 272,278 ----
|
||
|
extern json_spirit::Value z_getoperationstatus(const json_spirit::Array& params, bool fHelp); // in rpcwallet.cpp
|
||
|
extern json_spirit::Value z_getoperationresult(const json_spirit::Array& params, bool fHelp); // in rpcwallet.cpp
|
||
|
extern json_spirit::Value z_listoperationids(const json_spirit::Array& params, bool fHelp); // in rpcwallet.cpp
|
||
|
+ extern json_spirit::Value z_validateaddress(const json_spirit::Array& params, bool fHelp); // in rpcmisc.cpp
|
||
|
|
||
|
|
||
|
// in rest.cpp
|
||
|
diff -crB ./src/test/coins_tests.cpp ../../komodo-jl777/src/test/coins_tests.cpp
|
||
|
*** ./src/test/coins_tests.cpp 2017-01-03 10:40:50.375337465 +0000
|
||
|
--- ../../komodo-jl777/src/test/coins_tests.cpp 2017-01-03 09:49:08.868506976 +0000
|
||
|
***************
|
||
|
*** 166,171 ****
|
||
|
--- 166,414 ----
|
||
|
|
||
|
BOOST_FIXTURE_TEST_SUITE(coins_tests, BasicTestingSetup)
|
||
|
|
||
|
+ BOOST_AUTO_TEST_CASE(nullifier_regression_test)
|
||
|
+ {
|
||
|
+ // Correct behavior:
|
||
|
+ {
|
||
|
+ CCoinsViewTest base;
|
||
|
+ CCoinsViewCacheTest cache1(&base);
|
||
|
+
|
||
|
+ // Insert a nullifier into the base.
|
||
|
+ uint256 nf = GetRandHash();
|
||
|
+ cache1.SetNullifier(nf, true);
|
||
|
+ cache1.Flush(); // Flush to base.
|
||
|
+
|
||
|
+ // Remove the nullifier from cache
|
||
|
+ cache1.SetNullifier(nf, false);
|
||
|
+
|
||
|
+ // The nullifier now should be `false`.
|
||
|
+ BOOST_CHECK(!cache1.GetNullifier(nf));
|
||
|
+ }
|
||
|
+
|
||
|
+ // Also correct behavior:
|
||
|
+ {
|
||
|
+ CCoinsViewTest base;
|
||
|
+ CCoinsViewCacheTest cache1(&base);
|
||
|
+
|
||
|
+ // Insert a nullifier into the base.
|
||
|
+ uint256 nf = GetRandHash();
|
||
|
+ cache1.SetNullifier(nf, true);
|
||
|
+ cache1.Flush(); // Flush to base.
|
||
|
+
|
||
|
+ // Remove the nullifier from cache
|
||
|
+ cache1.SetNullifier(nf, false);
|
||
|
+ cache1.Flush(); // Flush to base.
|
||
|
+
|
||
|
+ // The nullifier now should be `false`.
|
||
|
+ BOOST_CHECK(!cache1.GetNullifier(nf));
|
||
|
+ }
|
||
|
+
|
||
|
+ // Works because we bring it from the parent cache:
|
||
|
+ {
|
||
|
+ CCoinsViewTest base;
|
||
|
+ CCoinsViewCacheTest cache1(&base);
|
||
|
+
|
||
|
+ // Insert a nullifier into the base.
|
||
|
+ uint256 nf = GetRandHash();
|
||
|
+ cache1.SetNullifier(nf, true);
|
||
|
+ cache1.Flush(); // Empties cache.
|
||
|
+
|
||
|
+ // Create cache on top.
|
||
|
+ {
|
||
|
+ // Remove the nullifier.
|
||
|
+ CCoinsViewCacheTest cache2(&cache1);
|
||
|
+ BOOST_CHECK(cache2.GetNullifier(nf));
|
||
|
+ cache2.SetNullifier(nf, false);
|
||
|
+ cache2.Flush(); // Empties cache, flushes to cache1.
|
||
|
+ }
|
||
|
+
|
||
|
+ // The nullifier now should be `false`.
|
||
|
+ BOOST_CHECK(!cache1.GetNullifier(nf));
|
||
|
+ }
|
||
|
+
|
||
|
+ // Was broken:
|
||
|
+ {
|
||
|
+ CCoinsViewTest base;
|
||
|
+ CCoinsViewCacheTest cache1(&base);
|
||
|
+
|
||
|
+ // Insert a nullifier into the base.
|
||
|
+ uint256 nf = GetRandHash();
|
||
|
+ cache1.SetNullifier(nf, true);
|
||
|
+ cache1.Flush(); // Empties cache.
|
||
|
+
|
||
|
+ // Create cache on top.
|
||
|
+ {
|
||
|
+ // Remove the nullifier.
|
||
|
+ CCoinsViewCacheTest cache2(&cache1);
|
||
|
+ cache2.SetNullifier(nf, false);
|
||
|
+ cache2.Flush(); // Empties cache, flushes to cache1.
|
||
|
+ }
|
||
|
+
|
||
|
+ // The nullifier now should be `false`.
|
||
|
+ BOOST_CHECK(!cache1.GetNullifier(nf));
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ BOOST_AUTO_TEST_CASE(anchor_pop_regression_test)
|
||
|
+ {
|
||
|
+ // Correct behavior:
|
||
|
+ {
|
||
|
+ CCoinsViewTest base;
|
||
|
+ CCoinsViewCacheTest cache1(&base);
|
||
|
+
|
||
|
+ // Create dummy anchor/commitment
|
||
|
+ ZCIncrementalMerkleTree tree;
|
||
|
+ uint256 cm = GetRandHash();
|
||
|
+ tree.append(cm);
|
||
|
+
|
||
|
+ // Add the anchor
|
||
|
+ cache1.PushAnchor(tree);
|
||
|
+ cache1.Flush();
|
||
|
+
|
||
|
+ // Remove the anchor
|
||
|
+ cache1.PopAnchor(ZCIncrementalMerkleTree::empty_root());
|
||
|
+ cache1.Flush();
|
||
|
+
|
||
|
+ // Add the anchor back
|
||
|
+ cache1.PushAnchor(tree);
|
||
|
+ cache1.Flush();
|
||
|
+
|
||
|
+ // The base contains the anchor, of course!
|
||
|
+ {
|
||
|
+ ZCIncrementalMerkleTree checktree;
|
||
|
+ BOOST_CHECK(cache1.GetAnchorAt(tree.root(), checktree));
|
||
|
+ BOOST_CHECK(checktree.root() == tree.root());
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ // Previously incorrect behavior
|
||
|
+ {
|
||
|
+ CCoinsViewTest base;
|
||
|
+ CCoinsViewCacheTest cache1(&base);
|
||
|
+
|
||
|
+ // Create dummy anchor/commitment
|
||
|
+ ZCIncrementalMerkleTree tree;
|
||
|
+ uint256 cm = GetRandHash();
|
||
|
+ tree.append(cm);
|
||
|
+
|
||
|
+ // Add the anchor and flush to disk
|
||
|
+ cache1.PushAnchor(tree);
|
||
|
+ cache1.Flush();
|
||
|
+
|
||
|
+ // Remove the anchor, but don't flush yet!
|
||
|
+ cache1.PopAnchor(ZCIncrementalMerkleTree::empty_root());
|
||
|
+
|
||
|
+ {
|
||
|
+ CCoinsViewCacheTest cache2(&cache1); // Build cache on top
|
||
|
+ cache2.PushAnchor(tree); // Put the same anchor back!
|
||
|
+ cache2.Flush(); // Flush to cache1
|
||
|
+ }
|
||
|
+
|
||
|
+ // cache2's flush kinda worked, i.e. cache1 thinks the
|
||
|
+ // tree is there, but it didn't bring down the correct
|
||
|
+ // treestate...
|
||
|
+ {
|
||
|
+ ZCIncrementalMerkleTree checktree;
|
||
|
+ BOOST_CHECK(cache1.GetAnchorAt(tree.root(), checktree));
|
||
|
+ BOOST_CHECK(checktree.root() == tree.root()); // Oh, shucks.
|
||
|
+ }
|
||
|
+
|
||
|
+ // Flushing cache won't help either, just makes the inconsistency
|
||
|
+ // permanent.
|
||
|
+ cache1.Flush();
|
||
|
+ {
|
||
|
+ ZCIncrementalMerkleTree checktree;
|
||
|
+ BOOST_CHECK(cache1.GetAnchorAt(tree.root(), checktree));
|
||
|
+ BOOST_CHECK(checktree.root() == tree.root()); // Oh, shucks.
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ BOOST_AUTO_TEST_CASE(anchor_regression_test)
|
||
|
+ {
|
||
|
+ // Correct behavior:
|
||
|
+ {
|
||
|
+ CCoinsViewTest base;
|
||
|
+ CCoinsViewCacheTest cache1(&base);
|
||
|
+
|
||
|
+ // Insert anchor into base.
|
||
|
+ ZCIncrementalMerkleTree tree;
|
||
|
+ uint256 cm = GetRandHash();
|
||
|
+ tree.append(cm);
|
||
|
+ cache1.PushAnchor(tree);
|
||
|
+ cache1.Flush();
|
||
|
+
|
||
|
+ cache1.PopAnchor(ZCIncrementalMerkleTree::empty_root());
|
||
|
+ BOOST_CHECK(cache1.GetBestAnchor() == ZCIncrementalMerkleTree::empty_root());
|
||
|
+ BOOST_CHECK(!cache1.GetAnchorAt(tree.root(), tree));
|
||
|
+ }
|
||
|
+
|
||
|
+ // Also correct behavior:
|
||
|
+ {
|
||
|
+ CCoinsViewTest base;
|
||
|
+ CCoinsViewCacheTest cache1(&base);
|
||
|
+
|
||
|
+ // Insert anchor into base.
|
||
|
+ ZCIncrementalMerkleTree tree;
|
||
|
+ uint256 cm = GetRandHash();
|
||
|
+ tree.append(cm);
|
||
|
+ cache1.PushAnchor(tree);
|
||
|
+ cache1.Flush();
|
||
|
+
|
||
|
+ cache1.PopAnchor(ZCIncrementalMerkleTree::empty_root());
|
||
|
+ cache1.Flush();
|
||
|
+ BOOST_CHECK(cache1.GetBestAnchor() == ZCIncrementalMerkleTree::empty_root());
|
||
|
+ BOOST_CHECK(!cache1.GetAnchorAt(tree.root(), tree));
|
||
|
+ }
|
||
|
+
|
||
|
+ // Works because we bring the anchor in from parent cache.
|
||
|
+ {
|
||
|
+ CCoinsViewTest base;
|
||
|
+ CCoinsViewCacheTest cache1(&base);
|
||
|
+
|
||
|
+ // Insert anchor into base.
|
||
|
+ ZCIncrementalMerkleTree tree;
|
||
|
+ uint256 cm = GetRandHash();
|
||
|
+ tree.append(cm);
|
||
|
+ cache1.PushAnchor(tree);
|
||
|
+ cache1.Flush();
|
||
|
+
|
||
|
+ {
|
||
|
+ // Pop anchor.
|
||
|
+ CCoinsViewCacheTest cache2(&cache1);
|
||
|
+ BOOST_CHECK(cache2.GetAnchorAt(tree.root(), tree));
|
||
|
+ cache2.PopAnchor(ZCIncrementalMerkleTree::empty_root());
|
||
|
+ cache2.Flush();
|
||
|
+ }
|
||
|
+
|
||
|
+ BOOST_CHECK(cache1.GetBestAnchor() == ZCIncrementalMerkleTree::empty_root());
|
||
|
+ BOOST_CHECK(!cache1.GetAnchorAt(tree.root(), tree));
|
||
|
+ }
|
||
|
+
|
||
|
+ // Was broken:
|
||
|
+ {
|
||
|
+ CCoinsViewTest base;
|
||
|
+ CCoinsViewCacheTest cache1(&base);
|
||
|
+
|
||
|
+ // Insert anchor into base.
|
||
|
+ ZCIncrementalMerkleTree tree;
|
||
|
+ uint256 cm = GetRandHash();
|
||
|
+ tree.append(cm);
|
||
|
+ cache1.PushAnchor(tree);
|
||
|
+ cache1.Flush();
|
||
|
+
|
||
|
+ {
|
||
|
+ // Pop anchor.
|
||
|
+ CCoinsViewCacheTest cache2(&cache1);
|
||
|
+ cache2.PopAnchor(ZCIncrementalMerkleTree::empty_root());
|
||
|
+ cache2.Flush();
|
||
|
+ }
|
||
|
+
|
||
|
+ BOOST_CHECK(cache1.GetBestAnchor() == ZCIncrementalMerkleTree::empty_root());
|
||
|
+ BOOST_CHECK(!cache1.GetAnchorAt(tree.root(), tree));
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
BOOST_AUTO_TEST_CASE(nullifiers_test)
|
||
|
{
|
||
|
CCoinsViewTest base;
|
||
|
Only in ../../komodo-jl777/src/test/data: merkle_commitments.json
|
||
|
diff -crB ./src/test/data/merkle_path.json ../../komodo-jl777/src/test/data/merkle_path.json
|
||
|
*** ./src/test/data/merkle_path.json 2017-01-03 10:40:50.395338477 +0000
|
||
|
--- ../../komodo-jl777/src/test/data/merkle_path.json 2017-01-03 09:49:08.872507185 +0000
|
||
|
***************
|
||
|
*** 1,123 ****
|
||
|
[
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
|
||
|
! "04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
|
||
|
! "04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
|
||
|
! "04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
|
||
|
! "04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
|
||
|
! "04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
|
||
|
! "04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
|
||
|
! "04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
|
||
|
! "04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
|
||
|
! "04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
|
||
|
! "04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
|
||
|
! "04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
|
||
|
! "04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
|
||
|
! "04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
|
||
|
! "04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
|
||
|
! "04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
|
||
|
! "04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000100",
|
||
|
! "04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
|
||
|
! "04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
|
||
|
! "04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
|
||
|
! "04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000100",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000101",
|
||
|
! "04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
|
||
|
! "04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
|
||
|
! "04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
|
||
|
! "04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000100",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000101",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010000",
|
||
|
! "04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
|
||
|
! "04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
|
||
|
! "04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
|
||
|
! "04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000100",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000101",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010000",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010001",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000100",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000101",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010000",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010001",
|
||
|
! "04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010100"
|
||
|
!
|
||
|
]
|
||
|
--- 1,122 ----
|
||
|
[
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000100010000010101010000010001000001000001000100000001010101010001000001000100000001000001000100010100010101000100000001000000010001000100000001000001010000010001000001010101010101010100000100000101010000000101000100010100000100000101010001000100010101000000010001000001010000010001000101010101000001010101000001010101000001000100000101000101010000000000010001010000010101010000010000000100010000010101000000000001000001000001010001010101010001010001000101010001000000000101000000000100010100000000010000000000fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000100010000010101010000010001000001000001000100000001010101010001000001000100000001000001000100010100010101000100000001000000010001000100000001000001010000010001000001010101010101010100000100000101010000000101000100010100000100000101010001000100010101000000010001000001010000010001000101010101000001010101000001010101000001000100000101000101010000000000010001010000010101010000010000000100010000010101000000000001000001000001010001010101010001010001000101010001000000000101000000000100010100000000010000000000fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010000000000010100000001000100000100010100010000010001010000000101010101010101010100000000000000010101010100010001000101000001000001010001000101010100000000010000010001010001010101010100010001000100010001010001000100010101000000000000010001000100000100000000000001000100000101000100000101010101010000010100000001010100000001000000010100010100010000010100010100000001010001000100010000000101010000010101010000010101000100010000010001010101000001010101000100000001010000010101000001010101000100000001000100010000fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010000000000010100000001000100000100010100010000010001010000000101010101010101010100000000000000010101010100010001000101000001000001010001000101010100000000010000010001010001010101010100010001000100010001010001000100010101000000000000010001000100000100000000000001000100000101000100000101010101010000010100000001010100000001000000010100010100010000010100010100000001010001000100010000000101010000010101010000010101000100010000010001010101000001010101000100000001010000010101000001010101000100000001000100010000fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010000000000010100000001000100000100010100010000010001010000000101010101010101010100000000000000010101010100010001000101000001000001010001000101010100000000010000010001010001010101010100010001000100010001010001000100010101000000000000010001000100000100000000000001000100000101000100000101010101010000010100000001010100000001000000010100010100010000010100010100000001010001000100010000000101010000010101010000010101000100010000010001010101000001010101000100000001010000010101000001010101000100000001000100010000fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010000000000010100000001000100000100010100010000010001010000000101010101010101010100000000000000010101010100010001000101000001000001010001000101010100000000010000010001010001010101010100010001000100010001010001000100010101000000000000010001000100000100000000000001000100000101000100000101010101010000010100000001010100000001000000010100010100010000010100010100000001010001000100010000000101010000010101010000010101000100010000010001010101000001010101000100000001010000010101000001010101000100000001000100010000fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101000001000100010101010100000001000101000001000001010100000001010100010001000001000101000001010100010001010000010000010100010101010001000000000001010101000101010001010000010001010101010101000001000001010101000101010100010001000000010001010100010000010001010101010001000000000000000101000101000101000101010001010000010101000101010100010100000001010001000000000101010000010000010101000000010100010101000101000001000001000001000000000100000000000001000001000100000100000000010100000100010000010101010000010001010101fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101000001000100010101010100000001000101000001000001010100000001010100010001000001000101000001010100010001010000010000010100010101010001000000000001010101000101010001010000010001010101010101000001000001010101000101010100010001000000010001010100010000010001010101010001000000000000000101000101000101000101010001010000010101000101010100010100000001010001000000000101010000010000010101000000010100010101000101000001000001000001000000000100000000000001000001000100000100000000010100000100010000010101010000010001010101fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101000001000100010101010100000001000101000001000001010100000001010100010001000001000101000001010100010001010000010000010100010101010001000000000001010101000101010001010000010001010101010101000001000001010101000101010100010001000000010001010100010000010001010101010001000000000000000101000101000101000101010001010000010101000101010100010100000001010001000000000101010000010000010101000000010100010101000101000001000001000001000000000100000000000001000001000100000100000000010100000100010000010101010000010001010101fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101000001000100010101010100000001000101000001000001010100000001010100010001000001000101000001010100010001010000010000010100010101010001000000000001010101000101010001010000010001010101010101000001000001010101000101010100010001000000010001010100010000010001010101010001000000000000000101000101000101000101010001010000010101000101010100010100000001010001000000000101010000010000010101000000010100010101000101000001000001000001000000000100000000000001000001000100000100000000010100000100010000010101010000010001010101fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000100010100010000010001000001010100000000010100010000000001000000010100010101010101000000010001010000000100000001000001010101000101000101000001010000010101000000010001000100000101000100000100010100010101010101010001010000010001010100010100000101000001010001000101000000000100010000000000000000000001010000000000010000000001010000000000010000000001010101010100010101010001000101010000010000000000010000010100000100010100010001010100000101000001000001000101000101010001000000000100010000000100000000010001010100fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000100010100010000010001000001010100000000010100010000000001000000010100010101010101000000010001010000000100000001000001010101000101000101000001010000010101000000010001000100000101000100000100010100010101010101010001010000010001010100010100000101000001010001000101000000000100010000000000000000000001010000000000010000000001010000000000010000000001010101010100010101010001000101010000010000000000010000010100000100010100010001010100000101000001000001000101000101010001000000000100010000000100000000010001010100fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000100010100010000010001000001010100000000010100010000000001000000010100010101010101000000010001010000000100000001000001010101000101000101000001010000010101000000010001000100000101000100000100010100010101010101010001010000010001010100010100000101000001010001000101000000000100010000000000000000000001010000000000010000000001010000000000010000000001010101010100010101010001000101010000010000000000010000010100000100010100010001010100000101000001000001000101000101010001000000000100010000000100000000010001010100fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000100010100010000010001000001010100000000010100010000000001000000010100010101010101000000010001010000000100000001000001010101000101000101000001010000010101000000010001000100000101000100000100010100010101010101010001010000010001010100010100000101000001010001000101000000000100010000000000000000000001010000000000010000000001010000000000010000000001010101010100010101010001000101010000010000000000010000010100000100010100010001010100000101000001000001000101000101010001000000000100010000000100000000010001010100fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101010001010001000101000100000101000000010101000100010101010001000101000000000000010100000000010001010100000000010001010101010100010101010101010101010001000001000000010100000101010100010001010000010000010001010001010101000101000101010000010000010100000100000001010101000100010000000101010000000100000000000000000101010101010100000100010100000101000001000101000101000101010000010100010101010000010101010101010000010100000101000001010001000101010101000101010001010101000101010001000000010100000100010001010000010001fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101010001010001000101000100000101000000010101000100010101010001000101000000000000010100000000010001010100000000010001010101010100010101010101010101010001000001000000010100000101010100010001010000010000010001010001010101000101000101010000010000010100000100000001010101000100010000000101010000000100000000000000000101010101010100000100010100000101000001000101000101000101010000010100010101010000010101010101010000010100000101000001010001000101010101000101010001010101000101010001000000010100000100010001010000010001fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
|
||
|
! "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
|
||
|
! "04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
|
||
|
! "04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
|
||
|
! "04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
|
||
|
! "04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
|
||
|
! "04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
|
||
|
! "04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
|
||
|
! "04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
|
||
|
! "04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
|
||
|
! "04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
|
||
|
! "04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
|
||
|
! "04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
|
||
|
! "04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100010101000100000100000000010100010100010000010001010101010100010100010100000000010100000001010101010101000001000001010001010101010000010000000001010101010001000101000000000001010000000001010000010001000100010101000101000100000100010101010000000100000100000100010100000100000001000001000001000101000100000101000101000101000101010000000000000100000100000100000101010000010000000001000001000001000001010101000000010100000101000101010001000101010100000100000001000100010100000101000001010000000100000101010000000001fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100010101000100000100000000010100010100010000010001010101010100010100010100000000010100000001010101010101000001000001010001010101010000010000000001010101010001000101000000000001010000000001010000010001000100010101000101000100000100010101010000000100000100000100010100000100000001000001000001000101000100000101000101000101000101010000000000000100000100000100000101010000010000000001000001000001000001010101000000010100000101000101010001000101010100000100000001000100010100000101000001010000000100000101010000000001fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
|
||
|
! "04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
|
||
|
! "04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
|
||
|
! "04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
|
||
|
! "04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001000000000001000001010100010000010001010000000101010001000100010100010101000001010000000101010100000100000100010001000100010001000100010001000100010101010100000100000101000000010101000000000101010100000000000000000101010000010101010001000100010000000101000001000001010100010001010101000001000000000001000000000001000101000000010101000001000001010001010001010100000000010100000101000100010000000100000100000100010000010001000000000101000100000101000101000100010000010100010001010001010101000100010101000100000001010401000100",
|
||
|
! "04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
|
||
|
! "04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
|
||
|
! "04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
|
||
|
! "04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000100010000000001000101000100010001010100010001000101010000010100010101010101010001000101010100000100000000010101010000010101010100010000000000010100000100010101010000010100010100000101010001000000000001010000010000000001010100000000000000010100000000010100000100000000010001010000010101010101010001000100010001010100000101010000000101000101010100000101010100010101000100000001000000010100000101000001000100010000000001010101000001010100010001000000010100000001000001010001000100010000010101010101000101000000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000100010000000001000101000100010001010100010001000101010000010100010101010101010001000101010100000100000000010101010000010101010100010000000000010100000100010101010000010100010100000101010001000000000001010000010000000001010100000000000000010100000000010100000100000000010001010000010101010101010001000100010001010100000101010000000101000101010100000101010100010101000100000001000000010100000101000001000100010000000001010101000001010100010001000000010100000001000001010001000100010000010101010101000101000000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000100010000000001000101000100010001010100010001000101010000010100010101010101010001000101010100000100000000010101010000010101010100010000000000010100000100010101010000010100010100000101010001000000000001010000010000000001010100000000000000010100000000010100000100000000010001010000010101010101010001000100010001010100000101010000000101000101010100000101010100010101000100000001000000010100000101000001000100010000000001010101000001010100010001000000010100000001000001010001000100010000010101010101000101000000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001000000000001000001010100010000010001010000000101010001000100010100010101000001010000000101010100000100000100010001000100010001000100010001000100010101010100000100000101000000010101000000000101010100000000000000000101010000010101010001000100010000000101000001000001010100010001010101000001000000000001000000000001000101000000010101000001000001010001010001010100000000010100000101000100010000000100000100000100010000010001000000000101000100000101000101000100010000010100010001010001010101000100010101000100000001010401000100",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000100010000000001000101000100010001010100010001000101010000010100010101010101010001000101010100000100000000010101010000010101010100010000000000010100000100010101010000010100010100000101010001000000000001010000010000000001010100000000000000010100000000010100000100000000010001010000010101010101010001000100010001010100000101010000000101000101010100000101010100010101000100000001000000010100000101000001000100010000000001010101000001010100010001000000010100000001000001010001000100010000010101010101000101000000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001010000000100010101000001000001000100010000010000010101000101000000010100010000010001000000000100000101010000000101010101010101000000000101000101000000010001010001010000010100000000000001010100010001000100000001000100000100000000010100000101010001010101010100000001010000010101010000010101010000000101010001000101000100010101000001000100000101010000010100000101010100000101000000000001000001010001010101010101000001010100000001010100000100010101010001010000010001010000000000010001000101010100000001000001010001010401000101",
|
||
|
! "04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
|
||
|
! "04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
|
||
|
! "04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
|
||
|
! "04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101000100000101010000000101000101000101010001010000000001010101010001010101000001010000000101010000000000000001010100000001010101000000010101010101010001010000000001010100010000010101010001000000010100010000010000000101000101010000000101000100000000000000010000010100010000010101010001000101010100010101010100000101000000000000010001010001010100010101010101010000010101010001010101010000000000010001010100000100010101000101010100010001000000010001000001010000010001010001000000000101000100010100010100010100010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101000100000101010000000101000101000101010001010000000001010101010001010101000001010000000101010000000000000001010100000001010101000000010101010101010001010000000001010100010000010101010001000000010100010000010000000101000101010000000101000100000000000000010000010100010000010101010001000101010100010101010100000101000000000000010001010001010100010101010101010000010101010001010101010000000000010001010100000100010101000101010100010001000000010001000001010000010001010001000000000101000100010100010100010100010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101000100000101010000000101000101000101010001010000000001010101010001010101000001010000000101010000000000000001010100000001010101000000010101010101010001010000000001010100010000010101010001000000010100010000010000000101000101010000000101000100000000000000010000010100010000010101010001000101010100010101010100000101000000000000010001010001010100010101010101010000010101010001010101010000000000010001010100000100010101000101010100010001000000010001000001010000010001010001000000000101000100010100010100010100010000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001000000000001000001010100010000010001010000000101010001000100010100010101000001010000000101010100000100000100010001000100010001000100010001000100010101010100000100000101000000010101000000000101010100000000000000000101010000010101010001000100010000000101000001000001010100010001010101000001000000000001000000000001000101000000010101000001000001010001010001010100000000010100000101000100010000000100000100000100010000010001000000000101000100000101000101000100010000010100010001010001010101000100010101000100000001010401000100",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101000100000101010000000101000101000101010001010000000001010101010001010101000001010000000101010000000000000001010100000001010101000000010101010101010001010000000001010100010000010101010001000000010100010000010000000101000101010000000101000100000000000000010000010100010000010101010001000101010100010101010100000101000000000000010001010001010100010101010101010000010101010001010101010000000000010001010100000100010101000101010100010001000000010001000001010000010001010001000000000101000100010100010100010100010000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001010000000100010101000001000001000100010000010000010101000101000000010100010000010001000000000100000101010000000101010101010101000000000101000101000000010001010001010000010100000000000001010100010001000100000001000100000100000000010100000101010001010101010100000001010000010101010000010101010000000101010001000101000100010101000001000100000101010000010100000101010100000101000000000001000001010001010101010101000001010100000001010100000100010101010001010000010001010000000000010001000101010100000001000001010001010401000101",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000000010100000001000000000000000100000100010100000101010101010101010000010000000000010000000100000101000000010101000000000000000100010001000000000100000100000101010000000101000000010100010001000001010000010001000101010001010100010000010100000101010100000101000001000000000101010100010101010100010000000001000100000000010000000001010100010000010101000001000001000000000100010101000000000100000100000001010101000100010100000001010001000101000000010100010000010000010001000100010101010100000001010001010100010000010401010000",
|
||
|
! "04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
|
||
|
! "04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
|
||
|
! "04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
|
||
|
! "04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100010101000101000100000001000100000100010100000100010000000001000100010000000000010100000101000100010001000101010100010101000000010000000001010100010001010000010001000101000001010101010001000000000000000000000000000100000101010100000100000101000000000001000001010100000001000001000000000101010100010100010000010100010001010100000000000000010101000101000001000101000001000101000000000001000100010101000001010101010100000101010000010101010000010000000101010001010100010101000001010001010001000100000001000100010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100010101000101000100000001000100000100010100000100010000000001000100010000000000010100000101000100010001000101010100010101000000010000000001010100010001010000010001000101000001010101010001000000000000000000000000000100000101010100000100000101000000000001000001010100000001000001000000000101010100010100010000010100010001010100000000000000010101000101000001000101000001000101000000000001000100010101000001010101010100000101010000010101010000010000000101010001010100010101000001010001010001000100000001000100010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100010101000101000100000001000100000100010100000100010000000001000100010000000000010100000101000100010001000101010100010101000000010000000001010100010001010000010001000101000001010101010001000000000000000000000000000100000101010100000100000101000000000001000001010100000001000001000000000101010100010100010000010100010001010100000000000000010101000101000001000101000001000101000000000001000100010101000001010101010100000101010000010101010000010000000101010001010100010101000001010001010001000100000001000100010000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001000000000001000001010100010000010001010000000101010001000100010100010101000001010000000101010100000100000100010001000100010001000100010001000100010101010100000100000101000000010101000000000101010100000000000000000101010000010101010001000100010000000101000001000001010100010001010101000001000000000001000000000001000101000000010101000001000001010001010001010100000000010100000101000100010000000100000100000100010000010001000000000101000100000101000101000100010000010100010001010001010101000100010101000100000001010401000100",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100010101000101000100000001000100000100010100000100010000000001000100010000000000010100000101000100010001000101010100010101000000010000000001010100010001010000010001000101000001010101010001000000000000000000000000000100000101010100000100000101000000000001000001010100000001000001000000000101010100010100010000010100010001010100000000000000010101000101000001000101000001000101000000000001000100010101000001010101010100000101010000010101010000010000000101010001010100010101000001010001010001000100000001000100010000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001010000000100010101000001000001000100010000010000010101000101000000010100010000010001000000000100000101010000000101010101010101000000000101000101000000010001010001010000010100000000000001010100010001000100000001000100000100000000010100000101010001010101010100000001010000010101010000010101010000000101010001000101000100010101000001000100000101010000010100000101010100000101000000000001000001010001010101010101000001010100000001010100000100010101010001010000010001010000000000010001000101010100000001000001010001010401000101",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000100000001010000000000000001010000000001010101000100000001010100000100010000000000000001010100010100010001000100010000000101000001010001000001010000010001000100010000000101010100010101000101000001000000010001010101010100000001000101000000010100000100000000000000000000000100010101010001010100010000010000000000010100000000000001010000000100000101000001000101010100000101000000000000000000000101000101000100010001000000000100000001000000000000000001000100000001010001000100000101010100000101010101000100000100010100fd0001000000010100000001000000000000000100000100010100000101010101010101010000010000000000010000000100000101000000010101000000000000000100010001000000000100000100000101010000000101000000010100010001000001010000010001000101010001010100010000010100000101010100000101000001000000000101010100010101010100010000000001000100000000010000000001010100010000010101000001000001000000000100010101000000000100000100000001010101000100010100000001010001000101000000010100010000010000010001000100010101010100000001010001010100010000010401010000",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000100000001010000000000000001010000000001010101000100000001010100000100010000000000000001010100010100010001000100010000000101000001010001000001010000010001000100010000000101010100010101000101000001000000010001010101010100000001000101000000010100000100000000000000000000000100010101010001010100010000010000000000010100000000000001010000000100000101000001000101010100000101000000000000000000000101000101000100010001000000000100000001000000000000000001000100000001010001000100000101010100000101010101000100000100010100fd0001010001010101010000000101010101010001010001010000000000010100000000000001010101010000000100010100000001000100000000000100000100000000000101000001000000010101010001010000010101010000000101010101000101010100000001010000010001000101010000000101010101010101010101000101000000000101000101010001010101010101000101000100000101000001010100000001010001010100010101000001000001010000010000010101000101010101000001010100000101000101010001000101010100000100000100000100000000000000000101000100000000000100000100000001000001000401010001",
|
||
|
! "04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
|
||
|
! "04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
|
||
|
! "04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
|
||
|
! "04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
|
||
|
! "04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
|
||
|
! "04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
|
||
|
! "04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
|
||
|
! "04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000101000000000001000100000100000000000001000101010001010001010100010101010100010100000100010001000101000101010100010100000000000000010101010001010000000001000001000100000101010000000001000000010100000101010101000000000100010101010101010000010000000000010101010100010101010000000001000000010001010101000100010100010000000100010001000001000000000101010100010101010000010101010000010001010101000101010101000100010101010001010101000100010001000001000000010000000000000101010101010100010100000100000001000000000001fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000101000000000001000100000100000000000001000101010001010001010100010101010100010100000100010001000101000101010100010100000000000000010101010001010000000001000001000100000101010000000001000000010100000101010101000000000100010101010101010000010000000000010101010100010101010000000001000000010001010101000100010100010000000100010001000001000000000101010100010101010000010101010000010001010101000101010101000100010101010001010101000100010001000001000000010000000000000101010101010100010100000100000001000000000001fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000101000000000001000100000100000000000001000101010001010001010100010101010100010100000100010001000101000101010100010100000000000000010101010001010000000001000001000100000101010000000001000000010100000101010101000000000100010101010101010000010000000000010101010100010101010000000001000000010001010101000100010100010000000100010001000001000000000101010100010101010000010101010000010001010101000101010101000100010101010001010101000100010001000001000000010000000000000101010101010100010100000100000001000000000001fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001000000000001000001010100010000010001010000000101010001000100010100010101000001010000000101010100000100000100010001000100010001000100010001000100010101010100000100000101000000010101000000000101010100000000000000000101010000010101010001000100010000000101000001000001010100010001010101000001000000000001000000000001000101000000010101000001000001010001010001010100000000010100000101000100010000000100000100000100010000010001000000000101000100000101000101000100010000010100010001010001010101000100010101000100000001010401000100",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000101000000000001000100000100000000000001000101010001010001010100010101010100010100000100010001000101000101010100010100000000000000010101010001010000000001000001000100000101010000000001000000010100000101010101000000000100010101010101010000010000000000010101010100010101010000000001000000010001010101000100010100010000000100010001000001000000000101010100010101010000010101010000010001010101000101010101000100010101010001010101000100010001000001000000010000000000000101010101010100010100000100000001000000000001fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001010000000100010101000001000001000100010000010000010101000101000000010100010000010001000000000100000101010000000101010101010101000000000101000101000000010001010001010000010100000000000001010100010001000100000001000100000100000000010100000101010001010101010100000001010000010101010000010101010000000101010001000101000100010101000001000100000101010000010100000101010100000101000000000001000001010001010101010101000001010100000001010100000100010101010001010000010001010000000000010001000101010100000001000001010001010401000101",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000100000100010101010001010101000100010000010001010001010100010100000101000000010101000001000001000100010100010000010001000000010001000001010000010101000100010000010100000101000001010100010100010100010100000101010100000000010100010101010001010000000000000000010001010001000101010100000101010101010001010100000100010000010001010100000100000100000101000100010000010100000001000100010000000101000000000001010001010101010101010001000101010100010000000001010101000101000001000001010101000000010001000000000101010001010101fd0001000000010100000001000000000000000100000100010100000101010101010101010000010000000000010000000100000101000000010101000000000000000100010001000000000100000100000101010000000101000000010100010001000001010000010001000101010001010100010000010100000101010100000101000001000000000101010100010101010100010000000001000100000000010000000001010100010000010101000001000001000000000100010101000000000100000100000001010101000100010100000001010001000101000000010100010000010000010001000100010101010100000001010001010100010000010401010000",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000100000100010101010001010101000100010000010001010001010100010100000101000000010101000001000001000100010100010000010001000000010001000001010000010101000100010000010100000101000001010100010100010100010100000101010100000000010100010101010001010000000000000000010001010001000101010100000101010101010001010100000100010000010001010100000100000100000101000100010000010100000001000100010000000101000000000001010001010101010101010001000101010100010000000001010101000101000001000001010101000000010001000000000101010001010101fd0001010001010101010000000101010101010001010001010000000000010100000000000001010101010000000100010100000001000100000000000100000100000000000101000001000000010101010001010000010101010000000101010101000101010100000001010000010001000101010000000101010101010101010101000101000000000101000101010001010101010101000101000100000101000001010100000001010001010100010101000001000001010000010000010101000101010101000001010100000101000101010001000101010100000100000100000100000000000000000101000100000000000100000100000001000001000401010001",
|
||
|
! "04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000101010100010000010001010101010101000000010001010001000100010100010000000100010000000001010000010100010001010000010100000101000001010000010101000001000001000000000100010000010101010100010000010001000100000001010101010000010101010100010100010001000100010000010001000001000100010100010100000101000000000000000100000000010000000001000000010000000100000101000101000101000001000001010000010000000101010100010000010101010101000100000101010100000000010001000100010100010100000001000001000000010100000000000100010000010101fd0001010000000001000001010000010000000000010100010000010101000001010101010000010001010000010101000000010100010001010001010101000000000100000001010001010000000000010001010101000100010101000001010101000100000100000000000101010000010100010101000000010000010000010000000000000000010100000000010001000000010001010100010000010001010000000100000001010100000001010101000100010101010001010100010101000000010101010101010001000001010100000001010001010100010000000000000100010001010000010000000000000101000100010000000100000000000401010100"
|
||
|
]
|
||
|
diff -crB ./src/test/data/merkle_roots.json ../../komodo-jl777/src/test/data/merkle_roots.json
|
||
|
*** ./src/test/data/merkle_roots.json 2017-01-03 10:40:50.395338477 +0000
|
||
|
--- ../../komodo-jl777/src/test/data/merkle_roots.json 2017-01-03 09:49:08.872507185 +0000
|
||
|
***************
|
||
|
*** 1,18 ****
|
||
|
[
|
||
|
! "26ee6e3f8c28892382264d72789c9c65a8577549fe35d3d6df86e0f07cc80057",
|
||
|
! "0e54a14ab674813f2a558b18df630ae095f2cb775d0bc37677073acb1f8f3443",
|
||
|
! "d06e16c2e6ee0b28d8f07c76a17976fea549ce2dd1debae260dc3215d265fddb",
|
||
|
! "52dc4b76365472537ff15cb18a71be54c91d207f5d62fb89bd74af9010ac0e01",
|
||
|
! "8dd27a2340e34015cd9b00a2ddc011dcdab03d38a49497490d631f71ce9c495e",
|
||
|
! "0cb8ae3ff2483ea7124237b62d0ac4388477b41e83d3811c6e0dd6fec0b365e6",
|
||
|
! "a67c1f145456880502a3d020d538fecf0515bd285edd6e3fcae26eb53c1f56d3",
|
||
|
! "7fb0adeb50e1084359414071486d89ead9c9a3700c64c9892f510f87af6ec27f",
|
||
|
! "45cd6f71215eabb2c25206471e9293bed2bc924ce5bbc16a8f728ec1e310886f",
|
||
|
! "01d1f338c2abee217962120611dafe0a0e9de76c18de77cbb1e3a6d3261e887c",
|
||
|
! "2700b09aa19ce460d509fc3bccfbc80f8381d156a4a52a7f3d4e8b852b5c10ea",
|
||
|
! "ac96cc858674f67d6c6119f933080cd69c10950409722468d2ac7b81e2cc2bba",
|
||
|
! "f4930affd93232b6051fe3a5f744a357201bff4363312d1115762a595261f030",
|
||
|
! "50b48f5226a69a62206f365ac5347c723b43faf9691c04b872225d5c08876eed",
|
||
|
! "a867397884b157b1db4dd03dc2fd6c40c4650e70b61441d4325e0b18d5280fb6",
|
||
|
! "52c8456d3538eed3b73778c596c1993ac6d6c337ae5e338391ce6cae58296dec"
|
||
|
]
|
||
|
--- 1,18 ----
|
||
|
[
|
||
|
! "95bf71d8e803b8601c14b5949d0f92690181154ef9d82eb3e24852266823317a",
|
||
|
! "73f18d3f9cd11010aa01d4f444039e566f14ef282109df9649b2eb75e7a53ed1",
|
||
|
! "dcde8a273c9672bee1a894d7f7f4abb81078f52b498e095f2a87d0aec5addf25",
|
||
|
! "4677d481ec6d1e97969afbc530958d1cbb4f1c047af6fdad4687cd10830e02bd",
|
||
|
! "74cd9d82de30c4222a06d420b75522ae1273729c1d8419446adf1184df61dc69",
|
||
|
! "2ff57f5468c6afdad30ec0fb6c2cb67289f12584e2c20c4e0065f66748697d77",
|
||
|
! "27e4ce010670801911c5765a003b15f75cde31d7378bd36540f593c8a44b3011",
|
||
|
! "62231ef2ec8c4da461072871ab7bc9de10253fcb40e164ddbad05b47e0b7fb69",
|
||
|
! "733a4ce688fdf07efb9e9f5a4b2dafff87cfe198fbe1dff71e028ef4cdee1f1b",
|
||
|
! "df39ed31924facdd69a93db07311d45fceac7a4987c091648044f37e6ecbb0d2",
|
||
|
! "87795c069bdb55281c666b9cb872d13174334ce135c12823541e9536489a9107",
|
||
|
! "438c80f532903b283230446514e400c329b29483db4fe9e279fdfc79e8f4347d",
|
||
|
! "08afb2813eda17e94aba1ab28ec191d4af99283cd4f1c5a04c0c2bc221bc3119",
|
||
|
! "a8b3ab3284f3288f7caa21bd2b69789a159ab4188b0908825b34723305c1228c",
|
||
|
! "db9b289e620de7dca2ae8fdac96808752e32e7a2c6d97ce0755dcebaa03123ab",
|
||
|
! "0bf622cb9f901b7532433ea2e7c1b7632f5935899b62dcf897a71551997dc8cc"
|
||
|
]
|
||
|
diff -crB ./src/test/data/merkle_serialization.json ../../komodo-jl777/src/test/data/merkle_serialization.json
|
||
|
*** ./src/test/data/merkle_serialization.json 2017-01-03 10:40:50.399338679 +0000
|
||
|
--- ../../komodo-jl777/src/test/data/merkle_serialization.json 2017-01-03 09:49:08.872507185 +0000
|
||
|
***************
|
||
|
*** 1,18 ****
|
||
|
[
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443"
|
||
|
! ]
|
||
|
\ No newline at end of file
|
||
|
--- 1,18 ----
|
||
|
[
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0000",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c94300",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f38618",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f38618",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
|
||
|
! "018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
|
||
|
! "018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
|
||
|
! "01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
|
||
|
! "01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
|
||
|
! "01c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000301e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
|
||
|
! "01c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e0184c834e7cb38d6f08d82f5cf4839b8920185174b11c7af771fd38dd02b206a200301e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806"
|
||
|
! ]
|
||
|
diff -crB ./src/test/data/merkle_witness_serialization.json ../../komodo-jl777/src/test/data/merkle_witness_serialization.json
|
||
|
*** ./src/test/data/merkle_witness_serialization.json 2017-01-03 10:40:50.399338679 +0000
|
||
|
--- ../../komodo-jl777/src/test/data/merkle_witness_serialization.json 2017-01-03 09:49:08.872507185 +0000
|
||
|
***************
|
||
|
*** 1,138 ****
|
||
|
[
|
||
|
! "0000000155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0000000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0000000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0000000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0000000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0000000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0000000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
|
||
|
! "0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
|
||
|
! "0000000555b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300038695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d02dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e35564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944301dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
|
||
|
! "0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300"
|
||
|
! ]
|
||
|
\ No newline at end of file
|
||
|
--- 1,138 ----
|
||
|
[
|
||
|
! "0000000162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00",
|
||
|
! "0000000262fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c94300",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c94300",
|
||
|
! "0000000262fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430101836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0000",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430101836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0000",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c94300000101836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0000",
|
||
|
! "0000000362fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae00",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000268eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae00",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430001a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae00",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae400",
|
||
|
! "0000000362fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430000",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000268eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430000",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430001a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430000",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae40101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430000",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f38618000101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430000",
|
||
|
! "0000000362fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000268eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430001a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae40101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f38618000101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
|
||
|
! "0000000362fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae01018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000101aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af2",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000268eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae01018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000101aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af2",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430001a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae01018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000101aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af2",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000101aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af2",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180001018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000101aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af2",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc01018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10000",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0001018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10000",
|
||
|
! "0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd00",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd00",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd00",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd00",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd00",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047400",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047400",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d00",
|
||
|
! "0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f00010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
|
||
|
! "0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f00010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
|
||
|
! "0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047401018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047401018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0001018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81701018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0000",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060001018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0000",
|
||
|
! "0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047401018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047401018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0001018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80602d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e755000",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e755000",
|
||
|
! "018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba300",
|
||
|
! "0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f000101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80602d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a09120000",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a09120000",
|
||
|
! "018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a09120000",
|
||
|
! "018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806000101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a09120000",
|
||
|
! "0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f000101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80602d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e900",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e900",
|
||
|
! "018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e900",
|
||
|
! "018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806000101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e900",
|
||
|
! "01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e900",
|
||
|
! "0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f000101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80602d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000101e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a7",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000101e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a7",
|
||
|
! "018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000101e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a7",
|
||
|
! "018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806000101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000101e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a7",
|
||
|
! "01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e90101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e0000",
|
||
|
! "01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806000101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e0000",
|
||
|
! "0000000562fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000468eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
|
||
|
! "0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430003a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180392498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
|
||
|
! "01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861802112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0368c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
|
||
|
! "01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f02050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0250c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
|
||
|
! "018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80603d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e7550305205dbbecab7b01ec2538467c2fe41f7845eb45487bcf2f7d7bd52207f644100",
|
||
|
! "0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80602a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e7550305205dbbecab7b01ec2538467c2fe41f7845eb45487bcf2f7d7bd52207f644100",
|
||
|
! "018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060204e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba3305205dbbecab7b01ec2538467c2fe41f7845eb45487bcf2f7d7bd52207f644100",
|
||
|
! "018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601305205dbbecab7b01ec2538467c2fe41f7845eb45487bcf2f7d7bd52207f644100",
|
||
|
! "01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806021880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e92f7a96ecc725694533a999db6786f6016bcfdca5c9353151837faf43d93c50ef00",
|
||
|
! "01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806012f7a96ecc725694533a999db6786f6016bcfdca5c9353151837faf43d93c50ef00",
|
||
|
! "01c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000301e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060184c834e7cb38d6f08d82f5cf4839b8920185174b11c7af771fd38dd02b206a2000"
|
||
|
! ]
|
||
|
diff -crB ./src/test/rpc_wallet_tests.cpp ../../komodo-jl777/src/test/rpc_wallet_tests.cpp
|
||
|
*** ./src/test/rpc_wallet_tests.cpp 2017-01-03 10:40:50.419339691 +0000
|
||
|
--- ../../komodo-jl777/src/test/rpc_wallet_tests.cpp 2017-01-03 09:49:08.872507185 +0000
|
||
|
***************
|
||
|
*** 295,307 ****
|
||
|
BOOST_CHECK_THROW(CallRPC("z_listreceivedbyaddress tnRZ8bPq2pff3xBWhTJhNkVUkm2uhzksDeW5PvEa7aFKGT9Qi3YgTALZfjaY4jU3HLVKBtHdSXxoPoLA3naMPcHBcY88FcF 1"), runtime_error);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* This test covers RPC command z_exportwallet
|
||
|
*/
|
||
|
BOOST_AUTO_TEST_CASE(rpc_wallet_z_exportwallet)
|
||
|
{
|
||
|
LOCK2(cs_main, pwalletMain->cs_wallet);
|
||
|
!
|
||
|
// wallet should be empty
|
||
|
std::set<libzcash::PaymentAddress> addrs;
|
||
|
pwalletMain->GetPaymentAddresses(addrs);
|
||
|
--- 295,353 ----
|
||
|
BOOST_CHECK_THROW(CallRPC("z_listreceivedbyaddress tnRZ8bPq2pff3xBWhTJhNkVUkm2uhzksDeW5PvEa7aFKGT9Qi3YgTALZfjaY4jU3HLVKBtHdSXxoPoLA3naMPcHBcY88FcF 1"), runtime_error);
|
||
|
}
|
||
|
|
||
|
+ /**
|
||
|
+ * This test covers RPC command z_validateaddress
|
||
|
+ */
|
||
|
+ BOOST_AUTO_TEST_CASE(rpc_wallet_z_validateaddress)
|
||
|
+ {
|
||
|
+ SelectParams(CBaseChainParams::MAIN);
|
||
|
+
|
||
|
+ LOCK2(cs_main, pwalletMain->cs_wallet);
|
||
|
+
|
||
|
+ Value retValue;
|
||
|
+
|
||
|
+ // Check number of args
|
||
|
+ BOOST_CHECK_THROW(CallRPC("z_validateaddress"), runtime_error);
|
||
|
+ BOOST_CHECK_THROW(CallRPC("z_validateaddress toomany args"), runtime_error);
|
||
|
+
|
||
|
+ // Wallet should be empty
|
||
|
+ std::set<libzcash::PaymentAddress> addrs;
|
||
|
+ pwalletMain->GetPaymentAddresses(addrs);
|
||
|
+ BOOST_CHECK(addrs.size()==0);
|
||
|
+
|
||
|
+ // This address is not valid, it belongs to another network
|
||
|
+ BOOST_CHECK_NO_THROW(retValue = CallRPC("z_validateaddress ztaaga95QAPyp1kSQ1hD2kguCpzyMHjxWZqaYDEkzbvo7uYQYAw2S8X4Kx98AvhhofMtQL8PAXKHuZsmhRcanavKRKmdCzk"));
|
||
|
+ Object resultObj = retValue.get_obj();
|
||
|
+ bool b = find_value(resultObj, "isvalid").get_bool();
|
||
|
+ BOOST_CHECK_EQUAL(b, false);
|
||
|
+
|
||
|
+ // This address is valid, but the spending key is not in this wallet
|
||
|
+ BOOST_CHECK_NO_THROW(retValue = CallRPC("z_validateaddress zcfA19SDAKRYHLoRDoShcoz4nPohqWxuHcqg8WAxsiB2jFrrs6k7oSvst3UZvMYqpMNSRBkxBsnyjjngX5L55FxMzLKach8"));
|
||
|
+ resultObj = retValue.get_obj();
|
||
|
+ b = find_value(resultObj, "isvalid").get_bool();
|
||
|
+ BOOST_CHECK_EQUAL(b, true);
|
||
|
+ b = find_value(resultObj, "ismine").get_bool();
|
||
|
+ BOOST_CHECK_EQUAL(b, false);
|
||
|
+
|
||
|
+ // Let's import a spending key to the wallet and validate its payment address
|
||
|
+ BOOST_CHECK_NO_THROW(CallRPC("z_importkey SKxoWv77WGwFnUJitQKNEcD636bL4X5Gd6wWmgaA4Q9x8jZBPJXT"));
|
||
|
+ BOOST_CHECK_NO_THROW(retValue = CallRPC("z_validateaddress zcWsmqT4X2V4jgxbgiCzyrAfRT1vi1F4sn7M5Pkh66izzw8Uk7LBGAH3DtcSMJeUb2pi3W4SQF8LMKkU2cUuVP68yAGcomL"));
|
||
|
+ resultObj = retValue.get_obj();
|
||
|
+ b = find_value(resultObj, "isvalid").get_bool();
|
||
|
+ BOOST_CHECK_EQUAL(b, true);
|
||
|
+ b = find_value(resultObj, "ismine").get_bool();
|
||
|
+ BOOST_CHECK_EQUAL(b, true);
|
||
|
+ BOOST_CHECK_EQUAL(find_value(resultObj, "payingkey").get_str(), "f5bb3c888ccc9831e3f6ba06e7528e26a312eec3acc1823be8918b6a3a5e20ad");
|
||
|
+ BOOST_CHECK_EQUAL(find_value(resultObj, "transmissionkey").get_str(), "7a58c7132446564e6b810cf895c20537b3528357dc00150a8e201f491efa9c1a");
|
||
|
+ }
|
||
|
+
|
||
|
/*
|
||
|
* This test covers RPC command z_exportwallet
|
||
|
*/
|
||
|
BOOST_AUTO_TEST_CASE(rpc_wallet_z_exportwallet)
|
||
|
{
|
||
|
LOCK2(cs_main, pwalletMain->cs_wallet);
|
||
|
!
|
||
|
// wallet should be empty
|
||
|
std::set<libzcash::PaymentAddress> addrs;
|
||
|
pwalletMain->GetPaymentAddresses(addrs);
|
||
|
***************
|
||
|
*** 774,780 ****
|
||
|
|
||
|
BOOST_CHECK_THROW(CallRPC("z_sendmany"), runtime_error);
|
||
|
BOOST_CHECK_THROW(CallRPC("z_sendmany toofewargs"), runtime_error);
|
||
|
! BOOST_CHECK_THROW(CallRPC("z_sendmany too many args here"), runtime_error);
|
||
|
|
||
|
// bad from address
|
||
|
BOOST_CHECK_THROW(CallRPC("z_sendmany "
|
||
|
--- 820,826 ----
|
||
|
|
||
|
BOOST_CHECK_THROW(CallRPC("z_sendmany"), runtime_error);
|
||
|
BOOST_CHECK_THROW(CallRPC("z_sendmany toofewargs"), runtime_error);
|
||
|
! BOOST_CHECK_THROW(CallRPC("z_sendmany just too many args here"), runtime_error);
|
||
|
|
||
|
// bad from address
|
||
|
BOOST_CHECK_THROW(CallRPC("z_sendmany "
|
||
|
***************
|
||
|
*** 795,800 ****
|
||
|
--- 841,867 ----
|
||
|
" {\"address\":\"tmQP9L3s31cLsghVYf2Jb5MhKj1jRBPoeQn\", \"amount\":12.0} ]"
|
||
|
), runtime_error);
|
||
|
|
||
|
+ // invalid fee amount, cannot be negative
|
||
|
+ BOOST_CHECK_THROW(CallRPC("z_sendmany "
|
||
|
+ "tmRr6yJonqGK23UVhrKuyvTpF8qxQQjKigJ "
|
||
|
+ "[{\"address\":\"tmQP9L3s31cLsghVYf2Jb5MhKj1jRBPoeQn\", \"amount\":50.0}] "
|
||
|
+ "1 -0.0001"
|
||
|
+ ), runtime_error);
|
||
|
+
|
||
|
+ // invalid fee amount, bigger than MAX_MONEY
|
||
|
+ BOOST_CHECK_THROW(CallRPC("z_sendmany "
|
||
|
+ "tmRr6yJonqGK23UVhrKuyvTpF8qxQQjKigJ "
|
||
|
+ "[{\"address\":\"tmQP9L3s31cLsghVYf2Jb5MhKj1jRBPoeQn\", \"amount\":50.0}] "
|
||
|
+ "1 21000001"
|
||
|
+ ), runtime_error);
|
||
|
+
|
||
|
+ // fee amount is bigger than sum of outputs
|
||
|
+ BOOST_CHECK_THROW(CallRPC("z_sendmany "
|
||
|
+ "tmRr6yJonqGK23UVhrKuyvTpF8qxQQjKigJ "
|
||
|
+ "[{\"address\":\"tmQP9L3s31cLsghVYf2Jb5MhKj1jRBPoeQn\", \"amount\":50.0}] "
|
||
|
+ "1 50.00000001"
|
||
|
+ ), runtime_error);
|
||
|
+
|
||
|
// memo bigger than allowed length of ZC_MEMO_SIZE
|
||
|
std::vector<char> v (2 * (ZC_MEMO_SIZE+1)); // x2 for hexadecimal string format
|
||
|
std::fill(v.begin(),v.end(), 'A');
|
||
|
diff -crB ./src/test/transaction_tests.cpp ../../komodo-jl777/src/test/transaction_tests.cpp
|
||
|
*** ./src/test/transaction_tests.cpp 2017-01-03 10:40:50.423339894 +0000
|
||
|
--- ../../komodo-jl777/src/test/transaction_tests.cpp 2017-01-03 09:49:08.872507185 +0000
|
||
|
***************
|
||
|
*** 341,349 ****
|
||
|
libzcash::JSOutput(addr, 50)
|
||
|
};
|
||
|
|
||
|
{
|
||
|
JSDescription jsdesc(*p, pubKeyHash, rt, inputs, outputs, 0, 0);
|
||
|
! BOOST_CHECK(jsdesc.Verify(*p, pubKeyHash));
|
||
|
|
||
|
CDataStream ss(SER_DISK, CLIENT_VERSION);
|
||
|
ss << jsdesc;
|
||
|
--- 341,351 ----
|
||
|
libzcash::JSOutput(addr, 50)
|
||
|
};
|
||
|
|
||
|
+ auto verifier = libzcash::ProofVerifier::Strict();
|
||
|
+
|
||
|
{
|
||
|
JSDescription jsdesc(*p, pubKeyHash, rt, inputs, outputs, 0, 0);
|
||
|
! BOOST_CHECK(jsdesc.Verify(*p, verifier, pubKeyHash));
|
||
|
|
||
|
CDataStream ss(SER_DISK, CLIENT_VERSION);
|
||
|
ss << jsdesc;
|
||
|
***************
|
||
|
*** 352,358 ****
|
||
|
ss >> jsdesc_deserialized;
|
||
|
|
||
|
BOOST_CHECK(jsdesc_deserialized == jsdesc);
|
||
|
! BOOST_CHECK(jsdesc_deserialized.Verify(*p, pubKeyHash));
|
||
|
}
|
||
|
|
||
|
{
|
||
|
--- 354,360 ----
|
||
|
ss >> jsdesc_deserialized;
|
||
|
|
||
|
BOOST_CHECK(jsdesc_deserialized == jsdesc);
|
||
|
! BOOST_CHECK(jsdesc_deserialized.Verify(*p, verifier, pubKeyHash));
|
||
|
}
|
||
|
|
||
|
{
|
||
|
***************
|
||
|
*** 365,371 ****
|
||
|
// Ensure that it won't verify if the root is changed.
|
||
|
auto test = JSDescription(*p, pubKeyHash, rt, inputs, outputs, 0, 0);
|
||
|
test.anchor = GetRandHash();
|
||
|
! BOOST_CHECK(!test.Verify(*p, pubKeyHash));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
--- 367,373 ----
|
||
|
// Ensure that it won't verify if the root is changed.
|
||
|
auto test = JSDescription(*p, pubKeyHash, rt, inputs, outputs, 0, 0);
|
||
|
test.anchor = GetRandHash();
|
||
|
! BOOST_CHECK(!test.Verify(*p, verifier, pubKeyHash));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
diff -crB ./src/util.cpp ../../komodo-jl777/src/util.cpp
|
||
|
*** ./src/util.cpp 2017-01-03 10:40:50.427340097 +0000
|
||
|
--- ../../komodo-jl777/src/util.cpp 2017-01-03 09:49:08.872507185 +0000
|
||
|
***************
|
||
|
*** 217,222 ****
|
||
|
--- 217,223 ----
|
||
|
|
||
|
// if not debugging everything and not debugging specific category, LogPrint does nothing.
|
||
|
if (setCategories.count(string("")) == 0 &&
|
||
|
+ setCategories.count(string("1")) == 0 &&
|
||
|
setCategories.count(string(category)) == 0)
|
||
|
return false;
|
||
|
}
|
||
|
***************
|
||
|
*** 526,532 ****
|
||
|
path /= BaseParams().DataDir();
|
||
|
|
||
|
fs::create_directories(path);
|
||
|
!
|
||
|
return path;
|
||
|
}
|
||
|
|
||
|
--- 527,534 ----
|
||
|
path /= BaseParams().DataDir();
|
||
|
|
||
|
fs::create_directories(path);
|
||
|
! //std::string assetpath = path + "/assets";
|
||
|
! //boost::filesystem::create_directory(assetpath);
|
||
|
return path;
|
||
|
}
|
||
|
|
||
|
Only in ../../komodo-jl777/src: utiltest.cpp
|
||
|
Only in ../../komodo-jl777/src: utiltest.h
|
||
|
diff -crB ./src/wallet/asyncrpcoperation_sendmany.cpp ../../komodo-jl777/src/wallet/asyncrpcoperation_sendmany.cpp
|
||
|
*** ./src/wallet/asyncrpcoperation_sendmany.cpp 2017-01-03 10:40:50.427340097 +0000
|
||
|
--- ../../komodo-jl777/src/wallet/asyncrpcoperation_sendmany.cpp 2017-01-03 09:49:08.872507185 +0000
|
||
|
***************
|
||
|
*** 52,60 ****
|
||
|
std::string fromAddress,
|
||
|
std::vector<SendManyRecipient> tOutputs,
|
||
|
std::vector<SendManyRecipient> zOutputs,
|
||
|
! int minDepth) :
|
||
|
! fromaddress_(fromAddress), t_outputs_(tOutputs), z_outputs_(zOutputs), mindepth_(minDepth)
|
||
|
{
|
||
|
if (minDepth < 0) {
|
||
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Minconf cannot be negative");
|
||
|
}
|
||
|
--- 52,63 ----
|
||
|
std::string fromAddress,
|
||
|
std::vector<SendManyRecipient> tOutputs,
|
||
|
std::vector<SendManyRecipient> zOutputs,
|
||
|
! int minDepth,
|
||
|
! CAmount fee) :
|
||
|
! fromaddress_(fromAddress), t_outputs_(tOutputs), z_outputs_(zOutputs), mindepth_(minDepth), fee_(fee)
|
||
|
{
|
||
|
+ assert(fee_ > 0);
|
||
|
+
|
||
|
if (minDepth < 0) {
|
||
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Minconf cannot be negative");
|
||
|
}
|
||
|
***************
|
||
|
*** 149,156 ****
|
||
|
bool isSingleZaddrOutput = (t_outputs_.size()==0 && z_outputs_.size()==1);
|
||
|
bool isMultipleZaddrOutput = (t_outputs_.size()==0 && z_outputs_.size()>=1);
|
||
|
bool isPureTaddrOnlyTx = (isfromtaddr_ && z_outputs_.size() == 0);
|
||
|
! CAmount minersFee = ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE;
|
||
|
!
|
||
|
// When spending coinbase utxos, you can only specify a single zaddr as the change must go somewhere
|
||
|
// and if there are multiple zaddrs, we don't know where to send it.
|
||
|
if (isfromtaddr_) {
|
||
|
--- 152,159 ----
|
||
|
bool isSingleZaddrOutput = (t_outputs_.size()==0 && z_outputs_.size()==1);
|
||
|
bool isMultipleZaddrOutput = (t_outputs_.size()==0 && z_outputs_.size()>=1);
|
||
|
bool isPureTaddrOnlyTx = (isfromtaddr_ && z_outputs_.size() == 0);
|
||
|
! CAmount minersFee = fee_;
|
||
|
!
|
||
|
// When spending coinbase utxos, you can only specify a single zaddr as the change must go somewhere
|
||
|
// and if there are multiple zaddrs, we don't know where to send it.
|
||
|
if (isfromtaddr_) {
|
||
|
***************
|
||
|
*** 202,218 ****
|
||
|
assert(!isfromzaddr_ || t_inputs_total == 0);
|
||
|
|
||
|
if (isfromtaddr_ && (t_inputs_total < targetAmount)) {
|
||
|
! throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, strprintf("Insufficient transparent funds, have %ld, need %ld", t_inputs_total, targetAmount));
|
||
|
}
|
||
|
|
||
|
if (isfromzaddr_ && (z_inputs_total < targetAmount)) {
|
||
|
! throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, strprintf("Insufficient protected funds, have %ld, need %ld", z_inputs_total, targetAmount));
|
||
|
}
|
||
|
|
||
|
// If from address is a taddr, select UTXOs to spend
|
||
|
CAmount selectedUTXOAmount = 0;
|
||
|
bool selectedUTXOCoinbase = false;
|
||
|
if (isfromtaddr_) {
|
||
|
std::vector<SendManyInputUTXO> selectedTInputs;
|
||
|
for (SendManyInputUTXO & t : t_inputs_) {
|
||
|
bool b = std::get<3>(t);
|
||
|
--- 205,233 ----
|
||
|
assert(!isfromzaddr_ || t_inputs_total == 0);
|
||
|
|
||
|
if (isfromtaddr_ && (t_inputs_total < targetAmount)) {
|
||
|
! throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS,
|
||
|
! strprintf("Insufficient transparent funds, have %s, need %s",
|
||
|
! FormatMoney(t_inputs_total), FormatMoney(targetAmount)));
|
||
|
}
|
||
|
|
||
|
if (isfromzaddr_ && (z_inputs_total < targetAmount)) {
|
||
|
! throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS,
|
||
|
! strprintf("Insufficient protected funds, have %s, need %s",
|
||
|
! FormatMoney(z_inputs_total), FormatMoney(targetAmount)));
|
||
|
}
|
||
|
|
||
|
// If from address is a taddr, select UTXOs to spend
|
||
|
CAmount selectedUTXOAmount = 0;
|
||
|
bool selectedUTXOCoinbase = false;
|
||
|
if (isfromtaddr_) {
|
||
|
+ // Get dust threshold
|
||
|
+ CKey secret;
|
||
|
+ secret.MakeNewKey(true);
|
||
|
+ CScript scriptPubKey = GetScriptForDestination(secret.GetPubKey().GetID());
|
||
|
+ CTxOut out(CAmount(1), scriptPubKey);
|
||
|
+ CAmount dustThreshold = out.GetDustThreshold(minRelayTxFee);
|
||
|
+ CAmount dustChange = -1;
|
||
|
+
|
||
|
std::vector<SendManyInputUTXO> selectedTInputs;
|
||
|
for (SendManyInputUTXO & t : t_inputs_) {
|
||
|
bool b = std::get<3>(t);
|
||
|
***************
|
||
|
*** 222,230 ****
|
||
|
selectedUTXOAmount += std::get<2>(t);
|
||
|
selectedTInputs.push_back(t);
|
||
|
if (selectedUTXOAmount >= targetAmount) {
|
||
|
! break;
|
||
|
}
|
||
|
}
|
||
|
t_inputs_ = selectedTInputs;
|
||
|
t_inputs_total = selectedUTXOAmount;
|
||
|
|
||
|
--- 237,257 ----
|
||
|
selectedUTXOAmount += std::get<2>(t);
|
||
|
selectedTInputs.push_back(t);
|
||
|
if (selectedUTXOAmount >= targetAmount) {
|
||
|
! // Select another utxo if there is change less than the dust threshold.
|
||
|
! dustChange = selectedUTXOAmount - targetAmount;
|
||
|
! if (dustChange == 0 || dustChange >= dustThreshold) {
|
||
|
! break;
|
||
|
! }
|
||
|
}
|
||
|
}
|
||
|
+
|
||
|
+ // If there is transparent change, is it valid or is it dust?
|
||
|
+ if (dustChange < dustThreshold && dustChange != 0) {
|
||
|
+ throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS,
|
||
|
+ strprintf("Insufficient transparent funds, have %s, need %s more to avoid creating invalid change output %s (dust threshold is %s)",
|
||
|
+ FormatMoney(t_inputs_total), FormatMoney(dustThreshold - dustChange), FormatMoney(dustChange), FormatMoney(dustThreshold)));
|
||
|
+ }
|
||
|
+
|
||
|
t_inputs_ = selectedTInputs;
|
||
|
t_inputs_total = selectedUTXOAmount;
|
||
|
|
||
|
***************
|
||
|
*** 298,304 ****
|
||
|
zOutputsDeque.push_back(o);
|
||
|
}
|
||
|
|
||
|
!
|
||
|
/**
|
||
|
* SCENARIO #2
|
||
|
*
|
||
|
--- 325,346 ----
|
||
|
zOutputsDeque.push_back(o);
|
||
|
}
|
||
|
|
||
|
! // When spending notes, take a snapshot of note witnesses and anchors as the treestate will
|
||
|
! // change upon arrival of new blocks which contain joinsplit transactions. This is likely
|
||
|
! // to happen as creating a chained joinsplit transaction can take longer than the block interval.
|
||
|
! if (z_inputs_.size() > 0) {
|
||
|
! LOCK2(cs_main, pwalletMain->cs_wallet);
|
||
|
! for (auto t : z_inputs_) {
|
||
|
! JSOutPoint jso = std::get<0>(t);
|
||
|
! std::vector<JSOutPoint> vOutPoints = { jso };
|
||
|
! uint256 inputAnchor;
|
||
|
! std::vector<boost::optional<ZCIncrementalWitness>> vInputWitnesses;
|
||
|
! pwalletMain->GetNoteWitnesses(vOutPoints, vInputWitnesses, inputAnchor);
|
||
|
! jsopWitnessAnchorMap[ jso.ToString() ] = WitnessAnchorData{ vInputWitnesses[0], inputAnchor };
|
||
|
! }
|
||
|
! }
|
||
|
!
|
||
|
!
|
||
|
/**
|
||
|
* SCENARIO #2
|
||
|
*
|
||
|
***************
|
||
|
*** 321,327 ****
|
||
|
if (selectedUTXOCoinbase) {
|
||
|
assert(isSingleZaddrOutput);
|
||
|
throw JSONRPCError(RPC_WALLET_ERROR, strprintf(
|
||
|
! "Change %ld not allowed. When protecting coinbase funds, the wallet does not allow any change as there is currently no way to specify a change address in z_sendmany.", change));
|
||
|
} else {
|
||
|
add_taddr_change_output_to_tx(change);
|
||
|
LogPrint("zrpc", "%s: transparent change in transaction output (amount=%s)\n",
|
||
|
--- 363,371 ----
|
||
|
if (selectedUTXOCoinbase) {
|
||
|
assert(isSingleZaddrOutput);
|
||
|
throw JSONRPCError(RPC_WALLET_ERROR, strprintf(
|
||
|
! "Change %s not allowed. When protecting coinbase funds, the wallet does not "
|
||
|
! "allow any change as there is currently no way to specify a change address "
|
||
|
! "in z_sendmany.", FormatMoney(change)));
|
||
|
} else {
|
||
|
add_taddr_change_output_to_tx(change);
|
||
|
LogPrint("zrpc", "%s: transparent change in transaction output (amount=%s)\n",
|
||
|
***************
|
||
|
*** 496,510 ****
|
||
|
throw JSONRPCError(RPC_WALLET_ERROR, "Could not find previous JoinSplit anchor");
|
||
|
}
|
||
|
|
||
|
for (const uint256& commitment : prevJoinSplit.commitments) {
|
||
|
tree.append(commitment);
|
||
|
! previousCommitments.push_back(commitment);
|
||
|
}
|
||
|
! ZCIncrementalWitness changeWitness = tree.witness();
|
||
|
! jsAnchor = changeWitness.root();
|
||
|
! uint256 changeCommitment = prevJoinSplit.commitments[changeOutputIndex];
|
||
|
! intermediates.insert(std::make_pair(tree.root(), tree));
|
||
|
! witnesses.push_back(changeWitness);
|
||
|
|
||
|
// Decrypt the change note's ciphertext to retrieve some data we need
|
||
|
ZCNoteDecryption decryptor(spendingkey_.viewing_key());
|
||
|
--- 540,562 ----
|
||
|
throw JSONRPCError(RPC_WALLET_ERROR, "Could not find previous JoinSplit anchor");
|
||
|
}
|
||
|
|
||
|
+ assert(changeOutputIndex != -1);
|
||
|
+ boost::optional<ZCIncrementalWitness> changeWitness;
|
||
|
+ int n = 0;
|
||
|
for (const uint256& commitment : prevJoinSplit.commitments) {
|
||
|
tree.append(commitment);
|
||
|
! previousCommitments.push_back(commitment);
|
||
|
! if (!changeWitness && changeOutputIndex == n++) {
|
||
|
! changeWitness = tree.witness();
|
||
|
! } else if (changeWitness) {
|
||
|
! changeWitness.get().append(commitment);
|
||
|
! }
|
||
|
}
|
||
|
! if (changeWitness) {
|
||
|
! witnesses.push_back(changeWitness);
|
||
|
! }
|
||
|
! jsAnchor = tree.root();
|
||
|
! intermediates.insert(std::make_pair(tree.root(), tree)); // chained js are interstitial (found in between block boundaries)
|
||
|
|
||
|
// Decrypt the change note's ciphertext to retrieve some data we need
|
||
|
ZCNoteDecryption decryptor(spendingkey_.viewing_key());
|
||
|
***************
|
||
|
*** 538,543 ****
|
||
|
--- 590,596 ----
|
||
|
//
|
||
|
std::vector<Note> vInputNotes;
|
||
|
std::vector<JSOutPoint> vOutPoints;
|
||
|
+ std::vector<boost::optional<ZCIncrementalWitness>> vInputWitnesses;
|
||
|
uint256 inputAnchor;
|
||
|
int numInputsNeeded = (jsChange>0) ? 1 : 0;
|
||
|
while (numInputsNeeded++ < ZC_NUM_JS_INPUTS && zInputsDeque.size() > 0) {
|
||
|
***************
|
||
|
*** 547,552 ****
|
||
|
--- 600,613 ----
|
||
|
CAmount noteFunds = std::get<2>(t);
|
||
|
zInputsDeque.pop_front();
|
||
|
|
||
|
+ WitnessAnchorData wad = jsopWitnessAnchorMap[ jso.ToString() ];
|
||
|
+ vInputWitnesses.push_back(wad.witness);
|
||
|
+ if (inputAnchor.IsNull()) {
|
||
|
+ inputAnchor = wad.anchor;
|
||
|
+ } else if (inputAnchor != wad.anchor) {
|
||
|
+ throw JSONRPCError(RPC_WALLET_ERROR, "Selected input notes do not share the same anchor");
|
||
|
+ }
|
||
|
+
|
||
|
vOutPoints.push_back(jso);
|
||
|
vInputNotes.push_back(note);
|
||
|
|
||
|
***************
|
||
|
*** 563,574 ****
|
||
|
|
||
|
// Add history of previous commitments to witness
|
||
|
if (vInputNotes.size() > 0) {
|
||
|
! std::vector<boost::optional<ZCIncrementalWitness>> vInputWitnesses;
|
||
|
! {
|
||
|
! LOCK(cs_main);
|
||
|
! pwalletMain->GetNoteWitnesses(vOutPoints, vInputWitnesses, inputAnchor);
|
||
|
! }
|
||
|
!
|
||
|
if (vInputWitnesses.size()==0) {
|
||
|
throw JSONRPCError(RPC_WALLET_ERROR, "Could not find witness for note commitment");
|
||
|
}
|
||
|
--- 624,630 ----
|
||
|
|
||
|
// Add history of previous commitments to witness
|
||
|
if (vInputNotes.size() > 0) {
|
||
|
!
|
||
|
if (vInputWitnesses.size()==0) {
|
||
|
throw JSONRPCError(RPC_WALLET_ERROR, "Could not find witness for note commitment");
|
||
|
}
|
||
|
***************
|
||
|
*** 760,765 ****
|
||
|
--- 816,826 ----
|
||
|
t_inputs_.push_back(utxo);
|
||
|
}
|
||
|
|
||
|
+ // sort in ascending order, so smaller utxos appear first
|
||
|
+ std::sort(t_inputs_.begin(), t_inputs_.end(), [](SendManyInputUTXO i, SendManyInputUTXO j) -> bool {
|
||
|
+ return ( std::get<2>(i) < std::get<2>(j));
|
||
|
+ });
|
||
|
+
|
||
|
return t_inputs_.size() > 0;
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 894,901 ****
|
||
|
info.vpub_new,
|
||
|
!this->testmode);
|
||
|
|
||
|
! if (!(jsdesc.Verify(*pzcashParams, joinSplitPubKey_))) {
|
||
|
! throw std::runtime_error("error verifying joinsplit");
|
||
|
}
|
||
|
|
||
|
mtx.vjoinsplit.push_back(jsdesc);
|
||
|
--- 955,965 ----
|
||
|
info.vpub_new,
|
||
|
!this->testmode);
|
||
|
|
||
|
! {
|
||
|
! auto verifier = libzcash::ProofVerifier::Strict();
|
||
|
! if (!(jsdesc.Verify(*pzcashParams, verifier, joinSplitPubKey_))) {
|
||
|
! throw std::runtime_error("error verifying joinsplit");
|
||
|
! }
|
||
|
}
|
||
|
|
||
|
mtx.vjoinsplit.push_back(jsdesc);
|
||
|
diff -crB ./src/wallet/asyncrpcoperation_sendmany.h ../../komodo-jl777/src/wallet/asyncrpcoperation_sendmany.h
|
||
|
*** ./src/wallet/asyncrpcoperation_sendmany.h 2017-01-03 10:40:50.427340097 +0000
|
||
|
--- ../../komodo-jl777/src/wallet/asyncrpcoperation_sendmany.h 2017-01-03 09:49:08.872507185 +0000
|
||
|
***************
|
||
|
*** 14,22 ****
|
||
|
#include "json/json_spirit_value.h"
|
||
|
#include "wallet.h"
|
||
|
|
||
|
#include <tuple>
|
||
|
|
||
|
! // TODO: Compute fee based on a heuristic, e.g. (num tx output * dust threshold) + joinsplit bytes * ?
|
||
|
#define ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE 10000
|
||
|
|
||
|
using namespace libzcash;
|
||
|
--- 14,23 ----
|
||
|
#include "json/json_spirit_value.h"
|
||
|
#include "wallet.h"
|
||
|
|
||
|
+ #include <unordered_map>
|
||
|
#include <tuple>
|
||
|
|
||
|
! // Default transaction fee if caller does not specify one.
|
||
|
#define ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE 10000
|
||
|
|
||
|
using namespace libzcash;
|
||
|
***************
|
||
|
*** 41,49 ****
|
||
|
CAmount vpub_new = 0;
|
||
|
};
|
||
|
|
||
|
class AsyncRPCOperation_sendmany : public AsyncRPCOperation {
|
||
|
public:
|
||
|
! AsyncRPCOperation_sendmany(std::string fromAddress, std::vector<SendManyRecipient> tOutputs, std::vector<SendManyRecipient> zOutputs, int minDepth);
|
||
|
virtual ~AsyncRPCOperation_sendmany();
|
||
|
|
||
|
// We don't want to be copied or moved around
|
||
|
--- 42,56 ----
|
||
|
CAmount vpub_new = 0;
|
||
|
};
|
||
|
|
||
|
+ // A struct to help us track the witness and anchor for a given JSOutPoint
|
||
|
+ struct WitnessAnchorData {
|
||
|
+ boost::optional<ZCIncrementalWitness> witness;
|
||
|
+ uint256 anchor;
|
||
|
+ };
|
||
|
+
|
||
|
class AsyncRPCOperation_sendmany : public AsyncRPCOperation {
|
||
|
public:
|
||
|
! AsyncRPCOperation_sendmany(std::string fromAddress, std::vector<SendManyRecipient> tOutputs, std::vector<SendManyRecipient> zOutputs, int minDepth, CAmount fee = ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE);
|
||
|
virtual ~AsyncRPCOperation_sendmany();
|
||
|
|
||
|
// We don't want to be copied or moved around
|
||
|
***************
|
||
|
*** 59,64 ****
|
||
|
--- 66,72 ----
|
||
|
private:
|
||
|
friend class TEST_FRIEND_AsyncRPCOperation_sendmany; // class for unit testing
|
||
|
|
||
|
+ CAmount fee_;
|
||
|
int mindepth_;
|
||
|
std::string fromaddress_;
|
||
|
bool isfromtaddr_;
|
||
|
***************
|
||
|
*** 70,76 ****
|
||
|
uint256 joinSplitPubKey_;
|
||
|
unsigned char joinSplitPrivKey_[crypto_sign_SECRETKEYBYTES];
|
||
|
|
||
|
!
|
||
|
std::vector<SendManyRecipient> t_outputs_;
|
||
|
std::vector<SendManyRecipient> z_outputs_;
|
||
|
std::vector<SendManyInputUTXO> t_inputs_;
|
||
|
--- 78,86 ----
|
||
|
uint256 joinSplitPubKey_;
|
||
|
unsigned char joinSplitPrivKey_[crypto_sign_SECRETKEYBYTES];
|
||
|
|
||
|
! // The key is the result string from calling JSOutPoint::ToString()
|
||
|
! std::unordered_map<std::string, WitnessAnchorData> jsopWitnessAnchorMap;
|
||
|
!
|
||
|
std::vector<SendManyRecipient> t_outputs_;
|
||
|
std::vector<SendManyRecipient> z_outputs_;
|
||
|
std::vector<SendManyInputUTXO> t_inputs_;
|
||
|
diff -crB ./src/wallet/gtest/test_wallet.cpp ../../komodo-jl777/src/wallet/gtest/test_wallet.cpp
|
||
|
*** ./src/wallet/gtest/test_wallet.cpp 2017-01-03 10:40:50.431340299 +0000
|
||
|
--- ../../komodo-jl777/src/wallet/gtest/test_wallet.cpp 2017-01-03 09:49:08.872507185 +0000
|
||
|
***************
|
||
|
*** 5,11 ****
|
||
|
--- 5,13 ----
|
||
|
#include "base58.h"
|
||
|
#include "chainparams.h"
|
||
|
#include "main.h"
|
||
|
+ #include "primitives/block.h"
|
||
|
#include "random.h"
|
||
|
+ #include "utiltest.h"
|
||
|
#include "wallet/wallet.h"
|
||
|
#include "zcash/JoinSplit.hpp"
|
||
|
#include "zcash/Note.hpp"
|
||
|
***************
|
||
|
*** 29,37 ****
|
||
|
|
||
|
MOCK_METHOD2(WriteTx, bool(uint256 hash, const CWalletTx& wtx));
|
||
|
MOCK_METHOD1(WriteWitnessCacheSize, bool(int64_t nWitnessCacheSize));
|
||
|
};
|
||
|
|
||
|
! template void CWallet::WriteWitnessCache<MockWalletDB>(MockWalletDB& walletdb);
|
||
|
|
||
|
class TestWallet : public CWallet {
|
||
|
public:
|
||
|
--- 31,41 ----
|
||
|
|
||
|
MOCK_METHOD2(WriteTx, bool(uint256 hash, const CWalletTx& wtx));
|
||
|
MOCK_METHOD1(WriteWitnessCacheSize, bool(int64_t nWitnessCacheSize));
|
||
|
+ MOCK_METHOD1(WriteBestBlock, bool(const CBlockLocator& loc));
|
||
|
};
|
||
|
|
||
|
! template void CWallet::SetBestChainINTERNAL<MockWalletDB>(
|
||
|
! MockWalletDB& walletdb, const CBlockLocator& loc);
|
||
|
|
||
|
class TestWallet : public CWallet {
|
||
|
public:
|
||
|
***************
|
||
|
*** 50,60 ****
|
||
|
ZCIncrementalMerkleTree tree) {
|
||
|
CWallet::IncrementNoteWitnesses(pindex, pblock, tree);
|
||
|
}
|
||
|
! void DecrementNoteWitnesses() {
|
||
|
! CWallet::DecrementNoteWitnesses();
|
||
|
}
|
||
|
! void WriteWitnessCache(MockWalletDB& walletdb) {
|
||
|
! CWallet::WriteWitnessCache(walletdb);
|
||
|
}
|
||
|
bool UpdatedNoteData(const CWalletTx& wtxIn, CWalletTx& wtx) {
|
||
|
return CWallet::UpdatedNoteData(wtxIn, wtx);
|
||
|
--- 54,64 ----
|
||
|
ZCIncrementalMerkleTree tree) {
|
||
|
CWallet::IncrementNoteWitnesses(pindex, pblock, tree);
|
||
|
}
|
||
|
! void DecrementNoteWitnesses(const CBlockIndex* pindex) {
|
||
|
! CWallet::DecrementNoteWitnesses(pindex);
|
||
|
}
|
||
|
! void SetBestChain(MockWalletDB& walletdb, const CBlockLocator& loc) {
|
||
|
! CWallet::SetBestChainINTERNAL(walletdb, loc);
|
||
|
}
|
||
|
bool UpdatedNoteData(const CWalletTx& wtxIn, CWalletTx& wtx) {
|
||
|
return CWallet::UpdatedNoteData(wtxIn, wtx);
|
||
|
***************
|
||
|
*** 65,183 ****
|
||
|
};
|
||
|
|
||
|
CWalletTx GetValidReceive(const libzcash::SpendingKey& sk, CAmount value, bool randomInputs) {
|
||
|
! CMutableTransaction mtx;
|
||
|
! mtx.nVersion = 2; // Enable JoinSplits
|
||
|
! mtx.vin.resize(2);
|
||
|
! if (randomInputs) {
|
||
|
! mtx.vin[0].prevout.hash = GetRandHash();
|
||
|
! mtx.vin[1].prevout.hash = GetRandHash();
|
||
|
! } else {
|
||
|
! mtx.vin[0].prevout.hash = uint256S("0000000000000000000000000000000000000000000000000000000000000001");
|
||
|
! mtx.vin[1].prevout.hash = uint256S("0000000000000000000000000000000000000000000000000000000000000002");
|
||
|
! }
|
||
|
! mtx.vin[0].prevout.n = 0;
|
||
|
! mtx.vin[1].prevout.n = 0;
|
||
|
!
|
||
|
! // Generate an ephemeral keypair.
|
||
|
! uint256 joinSplitPubKey;
|
||
|
! unsigned char joinSplitPrivKey[crypto_sign_SECRETKEYBYTES];
|
||
|
! crypto_sign_keypair(joinSplitPubKey.begin(), joinSplitPrivKey);
|
||
|
! mtx.joinSplitPubKey = joinSplitPubKey;
|
||
|
!
|
||
|
! boost::array<libzcash::JSInput, 2> inputs = {
|
||
|
! libzcash::JSInput(), // dummy input
|
||
|
! libzcash::JSInput() // dummy input
|
||
|
! };
|
||
|
!
|
||
|
! boost::array<libzcash::JSOutput, 2> outputs = {
|
||
|
! libzcash::JSOutput(sk.address(), value),
|
||
|
! libzcash::JSOutput(sk.address(), value)
|
||
|
! };
|
||
|
!
|
||
|
! boost::array<libzcash::Note, 2> output_notes;
|
||
|
!
|
||
|
! // Prepare JoinSplits
|
||
|
! uint256 rt;
|
||
|
! JSDescription jsdesc {*params, mtx.joinSplitPubKey, rt,
|
||
|
! inputs, outputs, value, 0, false};
|
||
|
! mtx.vjoinsplit.push_back(jsdesc);
|
||
|
!
|
||
|
! // Empty output script.
|
||
|
! CScript scriptCode;
|
||
|
! CTransaction signTx(mtx);
|
||
|
! uint256 dataToBeSigned = SignatureHash(scriptCode, signTx, NOT_AN_INPUT, SIGHASH_ALL);
|
||
|
!
|
||
|
! // Add the signature
|
||
|
! assert(crypto_sign_detached(&mtx.joinSplitSig[0], NULL,
|
||
|
! dataToBeSigned.begin(), 32,
|
||
|
! joinSplitPrivKey
|
||
|
! ) == 0);
|
||
|
!
|
||
|
! CTransaction tx {mtx};
|
||
|
! CWalletTx wtx {NULL, tx};
|
||
|
! return wtx;
|
||
|
}
|
||
|
|
||
|
libzcash::Note GetNote(const libzcash::SpendingKey& sk,
|
||
|
const CTransaction& tx, size_t js, size_t n) {
|
||
|
! ZCNoteDecryption decryptor {sk.viewing_key()};
|
||
|
! auto hSig = tx.vjoinsplit[js].h_sig(*params, tx.joinSplitPubKey);
|
||
|
! auto note_pt = libzcash::NotePlaintext::decrypt(
|
||
|
! decryptor,
|
||
|
! tx.vjoinsplit[js].ciphertexts[n],
|
||
|
! tx.vjoinsplit[js].ephemeralKey,
|
||
|
! hSig,
|
||
|
! (unsigned char) n);
|
||
|
! return note_pt.note(sk.address());
|
||
|
}
|
||
|
|
||
|
CWalletTx GetValidSpend(const libzcash::SpendingKey& sk,
|
||
|
const libzcash::Note& note, CAmount value) {
|
||
|
! CMutableTransaction mtx;
|
||
|
! mtx.vout.resize(2);
|
||
|
! mtx.vout[0].nValue = value;
|
||
|
! mtx.vout[1].nValue = 0;
|
||
|
!
|
||
|
! // Generate an ephemeral keypair.
|
||
|
! uint256 joinSplitPubKey;
|
||
|
! unsigned char joinSplitPrivKey[crypto_sign_SECRETKEYBYTES];
|
||
|
! crypto_sign_keypair(joinSplitPubKey.begin(), joinSplitPrivKey);
|
||
|
! mtx.joinSplitPubKey = joinSplitPubKey;
|
||
|
!
|
||
|
! // Fake tree for the unused witness
|
||
|
! ZCIncrementalMerkleTree tree;
|
||
|
!
|
||
|
! boost::array<libzcash::JSInput, 2> inputs = {
|
||
|
! libzcash::JSInput(tree.witness(), note, sk),
|
||
|
! libzcash::JSInput() // dummy input
|
||
|
! };
|
||
|
!
|
||
|
! boost::array<libzcash::JSOutput, 2> outputs = {
|
||
|
! libzcash::JSOutput(), // dummy output
|
||
|
! libzcash::JSOutput() // dummy output
|
||
|
! };
|
||
|
!
|
||
|
! boost::array<libzcash::Note, 2> output_notes;
|
||
|
!
|
||
|
! // Prepare JoinSplits
|
||
|
! uint256 rt;
|
||
|
! JSDescription jsdesc {*params, mtx.joinSplitPubKey, rt,
|
||
|
! inputs, outputs, 0, value, false};
|
||
|
! mtx.vjoinsplit.push_back(jsdesc);
|
||
|
!
|
||
|
! // Empty output script.
|
||
|
! CScript scriptCode;
|
||
|
! CTransaction signTx(mtx);
|
||
|
! uint256 dataToBeSigned = SignatureHash(scriptCode, signTx, NOT_AN_INPUT, SIGHASH_ALL);
|
||
|
!
|
||
|
! // Add the signature
|
||
|
! assert(crypto_sign_detached(&mtx.joinSplitSig[0], NULL,
|
||
|
! dataToBeSigned.begin(), 32,
|
||
|
! joinSplitPrivKey
|
||
|
! ) == 0);
|
||
|
! CTransaction tx {mtx};
|
||
|
! CWalletTx wtx {NULL, tx};
|
||
|
! return wtx;
|
||
|
}
|
||
|
|
||
|
TEST(wallet_tests, setup_datadir_location_run_as_first_test) {
|
||
|
--- 69,85 ----
|
||
|
};
|
||
|
|
||
|
CWalletTx GetValidReceive(const libzcash::SpendingKey& sk, CAmount value, bool randomInputs) {
|
||
|
! return GetValidReceive(*params, sk, value, randomInputs);
|
||
|
}
|
||
|
|
||
|
libzcash::Note GetNote(const libzcash::SpendingKey& sk,
|
||
|
const CTransaction& tx, size_t js, size_t n) {
|
||
|
! return GetNote(*params, sk, tx, js, n);
|
||
|
}
|
||
|
|
||
|
CWalletTx GetValidSpend(const libzcash::SpendingKey& sk,
|
||
|
const libzcash::Note& note, CAmount value) {
|
||
|
! return GetValidSpend(*params, sk, note, value);
|
||
|
}
|
||
|
|
||
|
TEST(wallet_tests, setup_datadir_location_run_as_first_test) {
|
||
|
***************
|
||
|
*** 656,662 ****
|
||
|
EXPECT_TRUE((bool) witnesses[1]);
|
||
|
|
||
|
// Until #1302 is implemented, this should triggger an assertion
|
||
|
! EXPECT_DEATH(wallet.DecrementNoteWitnesses(),
|
||
|
"Assertion `nWitnessCacheSize > 0' failed.");
|
||
|
}
|
||
|
|
||
|
--- 558,564 ----
|
||
|
EXPECT_TRUE((bool) witnesses[1]);
|
||
|
|
||
|
// Until #1302 is implemented, this should triggger an assertion
|
||
|
! EXPECT_DEATH(wallet.DecrementNoteWitnesses(&index),
|
||
|
"Assertion `nWitnessCacheSize > 0' failed.");
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 729,735 ****
|
||
|
|
||
|
// Decrementing should give us the previous anchor
|
||
|
uint256 anchor3;
|
||
|
! wallet.DecrementNoteWitnesses();
|
||
|
witnesses.clear();
|
||
|
wallet.GetNoteWitnesses(notes, witnesses, anchor3);
|
||
|
EXPECT_FALSE((bool) witnesses[0]);
|
||
|
--- 631,637 ----
|
||
|
|
||
|
// Decrementing should give us the previous anchor
|
||
|
uint256 anchor3;
|
||
|
! wallet.DecrementNoteWitnesses(&index2);
|
||
|
witnesses.clear();
|
||
|
wallet.GetNoteWitnesses(notes, witnesses, anchor3);
|
||
|
EXPECT_FALSE((bool) witnesses[0]);
|
||
|
***************
|
||
|
*** 754,759 ****
|
||
|
--- 656,871 ----
|
||
|
}
|
||
|
}
|
||
|
|
||
|
+ TEST(wallet_tests, CachedWitnessesDecrementFirst) {
|
||
|
+ TestWallet wallet;
|
||
|
+ uint256 anchor2;
|
||
|
+ CBlock block2;
|
||
|
+ CBlockIndex index2(block2);
|
||
|
+ ZCIncrementalMerkleTree tree;
|
||
|
+
|
||
|
+ auto sk = libzcash::SpendingKey::random();
|
||
|
+ wallet.AddSpendingKey(sk);
|
||
|
+
|
||
|
+ {
|
||
|
+ // First transaction (case tested in _empty_chain)
|
||
|
+ auto wtx = GetValidReceive(sk, 10, true);
|
||
|
+ auto note = GetNote(sk, wtx, 0, 1);
|
||
|
+ auto nullifier = note.nullifier(sk);
|
||
|
+
|
||
|
+ mapNoteData_t noteData;
|
||
|
+ JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
|
||
|
+ CNoteData nd {sk.address(), nullifier};
|
||
|
+ noteData[jsoutpt] = nd;
|
||
|
+ wtx.SetNoteData(noteData);
|
||
|
+ wallet.AddToWallet(wtx, true, NULL);
|
||
|
+
|
||
|
+ // First block (case tested in _empty_chain)
|
||
|
+ CBlock block1;
|
||
|
+ block1.vtx.push_back(wtx);
|
||
|
+ CBlockIndex index1(block1);
|
||
|
+ index1.nHeight = 1;
|
||
|
+ wallet.IncrementNoteWitnesses(&index1, &block1, tree);
|
||
|
+ }
|
||
|
+
|
||
|
+ {
|
||
|
+ // Second transaction (case tested in _chain_tip)
|
||
|
+ auto wtx = GetValidReceive(sk, 50, true);
|
||
|
+ auto note = GetNote(sk, wtx, 0, 1);
|
||
|
+ auto nullifier = note.nullifier(sk);
|
||
|
+
|
||
|
+ mapNoteData_t noteData;
|
||
|
+ JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
|
||
|
+ CNoteData nd {sk.address(), nullifier};
|
||
|
+ noteData[jsoutpt] = nd;
|
||
|
+ wtx.SetNoteData(noteData);
|
||
|
+ wallet.AddToWallet(wtx, true, NULL);
|
||
|
+
|
||
|
+ std::vector<JSOutPoint> notes {jsoutpt};
|
||
|
+ std::vector<boost::optional<ZCIncrementalWitness>> witnesses;
|
||
|
+
|
||
|
+ // Second block (case tested in _chain_tip)
|
||
|
+ block2.vtx.push_back(wtx);
|
||
|
+ index2.nHeight = 2;
|
||
|
+ wallet.IncrementNoteWitnesses(&index2, &block2, tree);
|
||
|
+ // Called to fetch anchor
|
||
|
+ wallet.GetNoteWitnesses(notes, witnesses, anchor2);
|
||
|
+ }
|
||
|
+
|
||
|
+ {
|
||
|
+ // Third transaction - never mined
|
||
|
+ auto wtx = GetValidReceive(sk, 20, true);
|
||
|
+ auto note = GetNote(sk, wtx, 0, 1);
|
||
|
+ auto nullifier = note.nullifier(sk);
|
||
|
+
|
||
|
+ mapNoteData_t noteData;
|
||
|
+ JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
|
||
|
+ CNoteData nd {sk.address(), nullifier};
|
||
|
+ noteData[jsoutpt] = nd;
|
||
|
+ wtx.SetNoteData(noteData);
|
||
|
+ wallet.AddToWallet(wtx, true, NULL);
|
||
|
+
|
||
|
+ std::vector<JSOutPoint> notes {jsoutpt};
|
||
|
+ std::vector<boost::optional<ZCIncrementalWitness>> witnesses;
|
||
|
+ uint256 anchor3;
|
||
|
+
|
||
|
+ wallet.GetNoteWitnesses(notes, witnesses, anchor3);
|
||
|
+ EXPECT_FALSE((bool) witnesses[0]);
|
||
|
+
|
||
|
+ // Decrementing (before the transaction has ever seen an increment)
|
||
|
+ // should give us the previous anchor
|
||
|
+ uint256 anchor4;
|
||
|
+ wallet.DecrementNoteWitnesses(&index2);
|
||
|
+ witnesses.clear();
|
||
|
+ wallet.GetNoteWitnesses(notes, witnesses, anchor4);
|
||
|
+ EXPECT_FALSE((bool) witnesses[0]);
|
||
|
+ // Should not equal second anchor because none of these notes had witnesses
|
||
|
+ EXPECT_NE(anchor2, anchor4);
|
||
|
+
|
||
|
+ // Re-incrementing with the same block should give the same result
|
||
|
+ uint256 anchor5;
|
||
|
+ wallet.IncrementNoteWitnesses(&index2, &block2, tree);
|
||
|
+ witnesses.clear();
|
||
|
+ wallet.GetNoteWitnesses(notes, witnesses, anchor5);
|
||
|
+ EXPECT_FALSE((bool) witnesses[0]);
|
||
|
+ EXPECT_EQ(anchor3, anchor5);
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ TEST(wallet_tests, CachedWitnessesCleanIndex) {
|
||
|
+ TestWallet wallet;
|
||
|
+ CBlock block1;
|
||
|
+ CBlock block2;
|
||
|
+ CBlock block3;
|
||
|
+ CBlockIndex index1(block1);
|
||
|
+ CBlockIndex index2(block2);
|
||
|
+ CBlockIndex index3(block3);
|
||
|
+ ZCIncrementalMerkleTree tree;
|
||
|
+
|
||
|
+ auto sk = libzcash::SpendingKey::random();
|
||
|
+ wallet.AddSpendingKey(sk);
|
||
|
+
|
||
|
+ {
|
||
|
+ // First transaction (case tested in _empty_chain)
|
||
|
+ auto wtx = GetValidReceive(sk, 10, true);
|
||
|
+ auto note = GetNote(sk, wtx, 0, 1);
|
||
|
+ auto nullifier = note.nullifier(sk);
|
||
|
+
|
||
|
+ mapNoteData_t noteData;
|
||
|
+ JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
|
||
|
+ CNoteData nd {sk.address(), nullifier};
|
||
|
+ noteData[jsoutpt] = nd;
|
||
|
+ wtx.SetNoteData(noteData);
|
||
|
+ wallet.AddToWallet(wtx, true, NULL);
|
||
|
+
|
||
|
+ // First block (case tested in _empty_chain)
|
||
|
+ block1.vtx.push_back(wtx);
|
||
|
+ index1.nHeight = 1;
|
||
|
+ wallet.IncrementNoteWitnesses(&index1, &block1, tree);
|
||
|
+ }
|
||
|
+
|
||
|
+ {
|
||
|
+ // Second transaction (case tested in _chain_tip)
|
||
|
+ auto wtx = GetValidReceive(sk, 50, true);
|
||
|
+ auto note = GetNote(sk, wtx, 0, 1);
|
||
|
+ auto nullifier = note.nullifier(sk);
|
||
|
+
|
||
|
+ mapNoteData_t noteData;
|
||
|
+ JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
|
||
|
+ CNoteData nd {sk.address(), nullifier};
|
||
|
+ noteData[jsoutpt] = nd;
|
||
|
+ wtx.SetNoteData(noteData);
|
||
|
+ wallet.AddToWallet(wtx, true, NULL);
|
||
|
+
|
||
|
+ // Second block (case tested in _chain_tip)
|
||
|
+ block2.vtx.push_back(wtx);
|
||
|
+ index2.nHeight = 2;
|
||
|
+ wallet.IncrementNoteWitnesses(&index2, &block2, tree);
|
||
|
+ }
|
||
|
+
|
||
|
+ {
|
||
|
+ // Third transaction
|
||
|
+ auto wtx = GetValidReceive(sk, 20, true);
|
||
|
+ auto note = GetNote(sk, wtx, 0, 1);
|
||
|
+ auto nullifier = note.nullifier(sk);
|
||
|
+
|
||
|
+ mapNoteData_t noteData;
|
||
|
+ JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
|
||
|
+ CNoteData nd {sk.address(), nullifier};
|
||
|
+ noteData[jsoutpt] = nd;
|
||
|
+ wtx.SetNoteData(noteData);
|
||
|
+ wallet.AddToWallet(wtx, true, NULL);
|
||
|
+
|
||
|
+ std::vector<JSOutPoint> notes {jsoutpt};
|
||
|
+ std::vector<boost::optional<ZCIncrementalWitness>> witnesses;
|
||
|
+ uint256 anchor3;
|
||
|
+
|
||
|
+ // Third block
|
||
|
+ block3.vtx.push_back(wtx);
|
||
|
+ index3.nHeight = 3;
|
||
|
+ wallet.IncrementNoteWitnesses(&index3, &block3, tree);
|
||
|
+ wallet.GetNoteWitnesses(notes, witnesses, anchor3);
|
||
|
+
|
||
|
+ // Now pretend we are reindexing: the chain is cleared, and each block is
|
||
|
+ // used to increment witnesses again.
|
||
|
+ wallet.IncrementNoteWitnesses(&index1, &block1, tree);
|
||
|
+ uint256 anchor3a;
|
||
|
+ witnesses.clear();
|
||
|
+ wallet.GetNoteWitnesses(notes, witnesses, anchor3a);
|
||
|
+ EXPECT_TRUE((bool) witnesses[0]);
|
||
|
+ // Should equal third anchor because witness cache unaffected
|
||
|
+ EXPECT_EQ(anchor3, anchor3a);
|
||
|
+
|
||
|
+ wallet.IncrementNoteWitnesses(&index2, &block2, tree);
|
||
|
+ uint256 anchor3b;
|
||
|
+ witnesses.clear();
|
||
|
+ wallet.GetNoteWitnesses(notes, witnesses, anchor3b);
|
||
|
+ EXPECT_TRUE((bool) witnesses[0]);
|
||
|
+ EXPECT_EQ(anchor3, anchor3b);
|
||
|
+
|
||
|
+ // Pretend a reorg happened that was recorded in the block files
|
||
|
+ wallet.DecrementNoteWitnesses(&index2);
|
||
|
+ uint256 anchor3c;
|
||
|
+ witnesses.clear();
|
||
|
+ wallet.GetNoteWitnesses(notes, witnesses, anchor3c);
|
||
|
+ EXPECT_TRUE((bool) witnesses[0]);
|
||
|
+ EXPECT_EQ(anchor3, anchor3c);
|
||
|
+
|
||
|
+ wallet.IncrementNoteWitnesses(&index2, &block2, tree);
|
||
|
+ uint256 anchor3d;
|
||
|
+ witnesses.clear();
|
||
|
+ wallet.GetNoteWitnesses(notes, witnesses, anchor3d);
|
||
|
+ EXPECT_TRUE((bool) witnesses[0]);
|
||
|
+ EXPECT_EQ(anchor3, anchor3d);
|
||
|
+
|
||
|
+ wallet.IncrementNoteWitnesses(&index3, &block3, tree);
|
||
|
+ uint256 anchor3e;
|
||
|
+ witnesses.clear();
|
||
|
+ wallet.GetNoteWitnesses(notes, witnesses, anchor3e);
|
||
|
+ EXPECT_TRUE((bool) witnesses[0]);
|
||
|
+ EXPECT_EQ(anchor3, anchor3e);
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
TEST(wallet_tests, ClearNoteWitnessCache) {
|
||
|
TestWallet wallet;
|
||
|
|
||
|
***************
|
||
|
*** 761,766 ****
|
||
|
--- 873,879 ----
|
||
|
wallet.AddSpendingKey(sk);
|
||
|
|
||
|
auto wtx = GetValidReceive(sk, 10, true);
|
||
|
+ auto hash = wtx.GetHash();
|
||
|
auto note = GetNote(sk, wtx, 0, 0);
|
||
|
auto nullifier = note.nullifier(sk);
|
||
|
|
||
|
***************
|
||
|
*** 774,779 ****
|
||
|
--- 887,894 ----
|
||
|
// Pretend we mined the tx by adding a fake witness
|
||
|
ZCIncrementalMerkleTree tree;
|
||
|
wtx.mapNoteData[jsoutpt].witnesses.push_front(tree.witness());
|
||
|
+ wtx.mapNoteData[jsoutpt].witnessHeight = 1;
|
||
|
+ wallet.nWitnessCacheSize = 1;
|
||
|
|
||
|
wallet.AddToWallet(wtx, true, NULL);
|
||
|
|
||
|
***************
|
||
|
*** 785,790 ****
|
||
|
--- 900,907 ----
|
||
|
wallet.GetNoteWitnesses(notes, witnesses, anchor2);
|
||
|
EXPECT_TRUE((bool) witnesses[0]);
|
||
|
EXPECT_FALSE((bool) witnesses[1]);
|
||
|
+ EXPECT_EQ(1, wallet.mapWallet[hash].mapNoteData[jsoutpt].witnessHeight);
|
||
|
+ EXPECT_EQ(1, wallet.nWitnessCacheSize);
|
||
|
|
||
|
// After clearing, we should not have a witness for either note
|
||
|
wallet.ClearNoteWitnessCache();
|
||
|
***************
|
||
|
*** 792,802 ****
|
||
|
--- 909,922 ----
|
||
|
wallet.GetNoteWitnesses(notes, witnesses, anchor2);
|
||
|
EXPECT_FALSE((bool) witnesses[0]);
|
||
|
EXPECT_FALSE((bool) witnesses[1]);
|
||
|
+ EXPECT_EQ(-1, wallet.mapWallet[hash].mapNoteData[jsoutpt].witnessHeight);
|
||
|
+ EXPECT_EQ(0, wallet.nWitnessCacheSize);
|
||
|
}
|
||
|
|
||
|
TEST(wallet_tests, WriteWitnessCache) {
|
||
|
TestWallet wallet;
|
||
|
MockWalletDB walletdb;
|
||
|
+ CBlockLocator loc;
|
||
|
|
||
|
auto sk = libzcash::SpendingKey::random();
|
||
|
wallet.AddSpendingKey(sk);
|
||
|
***************
|
||
|
*** 807,813 ****
|
||
|
// TxnBegin fails
|
||
|
EXPECT_CALL(walletdb, TxnBegin())
|
||
|
.WillOnce(Return(false));
|
||
|
! wallet.WriteWitnessCache(walletdb);
|
||
|
EXPECT_CALL(walletdb, TxnBegin())
|
||
|
.WillRepeatedly(Return(true));
|
||
|
|
||
|
--- 927,933 ----
|
||
|
// TxnBegin fails
|
||
|
EXPECT_CALL(walletdb, TxnBegin())
|
||
|
.WillOnce(Return(false));
|
||
|
! wallet.SetBestChain(walletdb, loc);
|
||
|
EXPECT_CALL(walletdb, TxnBegin())
|
||
|
.WillRepeatedly(Return(true));
|
||
|
|
||
|
***************
|
||
|
*** 816,829 ****
|
||
|
.WillOnce(Return(false));
|
||
|
EXPECT_CALL(walletdb, TxnAbort())
|
||
|
.Times(1);
|
||
|
! wallet.WriteWitnessCache(walletdb);
|
||
|
|
||
|
// WriteTx throws
|
||
|
EXPECT_CALL(walletdb, WriteTx(wtx.GetHash(), wtx))
|
||
|
.WillOnce(ThrowLogicError());
|
||
|
EXPECT_CALL(walletdb, TxnAbort())
|
||
|
.Times(1);
|
||
|
! wallet.WriteWitnessCache(walletdb);
|
||
|
EXPECT_CALL(walletdb, WriteTx(wtx.GetHash(), wtx))
|
||
|
.WillRepeatedly(Return(true));
|
||
|
|
||
|
--- 936,949 ----
|
||
|
.WillOnce(Return(false));
|
||
|
EXPECT_CALL(walletdb, TxnAbort())
|
||
|
.Times(1);
|
||
|
! wallet.SetBestChain(walletdb, loc);
|
||
|
|
||
|
// WriteTx throws
|
||
|
EXPECT_CALL(walletdb, WriteTx(wtx.GetHash(), wtx))
|
||
|
.WillOnce(ThrowLogicError());
|
||
|
EXPECT_CALL(walletdb, TxnAbort())
|
||
|
.Times(1);
|
||
|
! wallet.SetBestChain(walletdb, loc);
|
||
|
EXPECT_CALL(walletdb, WriteTx(wtx.GetHash(), wtx))
|
||
|
.WillRepeatedly(Return(true));
|
||
|
|
||
|
***************
|
||
|
*** 832,857 ****
|
||
|
.WillOnce(Return(false));
|
||
|
EXPECT_CALL(walletdb, TxnAbort())
|
||
|
.Times(1);
|
||
|
! wallet.WriteWitnessCache(walletdb);
|
||
|
|
||
|
// WriteWitnessCacheSize throws
|
||
|
EXPECT_CALL(walletdb, WriteWitnessCacheSize(0))
|
||
|
.WillOnce(ThrowLogicError());
|
||
|
EXPECT_CALL(walletdb, TxnAbort())
|
||
|
.Times(1);
|
||
|
! wallet.WriteWitnessCache(walletdb);
|
||
|
EXPECT_CALL(walletdb, WriteWitnessCacheSize(0))
|
||
|
.WillRepeatedly(Return(true));
|
||
|
|
||
|
// TxCommit fails
|
||
|
EXPECT_CALL(walletdb, TxnCommit())
|
||
|
.WillOnce(Return(false));
|
||
|
! wallet.WriteWitnessCache(walletdb);
|
||
|
EXPECT_CALL(walletdb, TxnCommit())
|
||
|
.WillRepeatedly(Return(true));
|
||
|
|
||
|
// Everything succeeds
|
||
|
! wallet.WriteWitnessCache(walletdb);
|
||
|
}
|
||
|
|
||
|
TEST(wallet_tests, UpdateNullifierNoteMap) {
|
||
|
--- 952,993 ----
|
||
|
.WillOnce(Return(false));
|
||
|
EXPECT_CALL(walletdb, TxnAbort())
|
||
|
.Times(1);
|
||
|
! wallet.SetBestChain(walletdb, loc);
|
||
|
|
||
|
// WriteWitnessCacheSize throws
|
||
|
EXPECT_CALL(walletdb, WriteWitnessCacheSize(0))
|
||
|
.WillOnce(ThrowLogicError());
|
||
|
EXPECT_CALL(walletdb, TxnAbort())
|
||
|
.Times(1);
|
||
|
! wallet.SetBestChain(walletdb, loc);
|
||
|
EXPECT_CALL(walletdb, WriteWitnessCacheSize(0))
|
||
|
.WillRepeatedly(Return(true));
|
||
|
|
||
|
+ // WriteBestBlock fails
|
||
|
+ EXPECT_CALL(walletdb, WriteBestBlock(loc))
|
||
|
+ .WillOnce(Return(false));
|
||
|
+ EXPECT_CALL(walletdb, TxnAbort())
|
||
|
+ .Times(1);
|
||
|
+ wallet.SetBestChain(walletdb, loc);
|
||
|
+
|
||
|
+ // WriteBestBlock throws
|
||
|
+ EXPECT_CALL(walletdb, WriteBestBlock(loc))
|
||
|
+ .WillOnce(ThrowLogicError());
|
||
|
+ EXPECT_CALL(walletdb, TxnAbort())
|
||
|
+ .Times(1);
|
||
|
+ wallet.SetBestChain(walletdb, loc);
|
||
|
+ EXPECT_CALL(walletdb, WriteBestBlock(loc))
|
||
|
+ .WillRepeatedly(Return(true));
|
||
|
+
|
||
|
// TxCommit fails
|
||
|
EXPECT_CALL(walletdb, TxnCommit())
|
||
|
.WillOnce(Return(false));
|
||
|
! wallet.SetBestChain(walletdb, loc);
|
||
|
EXPECT_CALL(walletdb, TxnCommit())
|
||
|
.WillRepeatedly(Return(true));
|
||
|
|
||
|
// Everything succeeds
|
||
|
! wallet.SetBestChain(walletdb, loc);
|
||
|
}
|
||
|
|
||
|
TEST(wallet_tests, UpdateNullifierNoteMap) {
|
||
|
***************
|
||
|
*** 913,918 ****
|
||
|
--- 1049,1055 ----
|
||
|
// Pretend we mined the tx by adding a fake witness
|
||
|
ZCIncrementalMerkleTree tree;
|
||
|
wtx.mapNoteData[jsoutpt].witnesses.push_front(tree.witness());
|
||
|
+ wtx.mapNoteData[jsoutpt].witnessHeight = 100;
|
||
|
|
||
|
// Now pretend we added the key for the second note, and
|
||
|
// the tx was "added" to the wallet again to update it.
|
||
|
***************
|
||
|
*** 925,935 ****
|
||
|
--- 1062,1074 ----
|
||
|
// The txs should initially be different
|
||
|
EXPECT_NE(wtx.mapNoteData, wtx2.mapNoteData);
|
||
|
EXPECT_EQ(1, wtx.mapNoteData[jsoutpt].witnesses.size());
|
||
|
+ EXPECT_EQ(100, wtx.mapNoteData[jsoutpt].witnessHeight);
|
||
|
|
||
|
// After updating, they should be the same
|
||
|
EXPECT_TRUE(wallet.UpdatedNoteData(wtx2, wtx));
|
||
|
EXPECT_EQ(wtx.mapNoteData, wtx2.mapNoteData);
|
||
|
EXPECT_EQ(1, wtx.mapNoteData[jsoutpt].witnesses.size());
|
||
|
+ EXPECT_EQ(100, wtx.mapNoteData[jsoutpt].witnessHeight);
|
||
|
// TODO: The new note should get witnessed (but maybe not here) (#1350)
|
||
|
}
|
||
|
|
||
|
diff -crB ./src/wallet/rpcwallet.cpp ../../komodo-jl777/src/wallet/rpcwallet.cpp
|
||
|
*** ./src/wallet/rpcwallet.cpp 2017-01-03 10:40:50.431340299 +0000
|
||
|
--- ../../komodo-jl777/src/wallet/rpcwallet.cpp 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 2622,2627 ****
|
||
|
--- 2622,2633 ----
|
||
|
sample_times.push_back(benchmark_verify_equihash());
|
||
|
} else if (benchmarktype == "validatelargetx") {
|
||
|
sample_times.push_back(benchmark_large_tx());
|
||
|
+ } else if (benchmarktype == "trydecryptnotes") {
|
||
|
+ int nAddrs = params[2].get_int();
|
||
|
+ sample_times.push_back(benchmark_try_decrypt_notes(nAddrs));
|
||
|
+ } else if (benchmarktype == "incnotewitnesses") {
|
||
|
+ int nTxs = params[2].get_int();
|
||
|
+ sample_times.push_back(benchmark_increment_note_witnesses(nTxs));
|
||
|
} else {
|
||
|
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid benchmarktype");
|
||
|
}
|
||
|
***************
|
||
|
*** 2849,2855 ****
|
||
|
vpub_old,
|
||
|
vpub_new);
|
||
|
|
||
|
! assert(jsdesc.Verify(*pzcashParams, joinSplitPubKey));
|
||
|
|
||
|
mtx.vjoinsplit.push_back(jsdesc);
|
||
|
|
||
|
--- 2855,2864 ----
|
||
|
vpub_old,
|
||
|
vpub_new);
|
||
|
|
||
|
! {
|
||
|
! auto verifier = libzcash::ProofVerifier::Strict();
|
||
|
! assert(jsdesc.Verify(*pzcashParams, verifier, joinSplitPubKey));
|
||
|
! }
|
||
|
|
||
|
mtx.vjoinsplit.push_back(jsdesc);
|
||
|
|
||
|
***************
|
||
|
*** 3310,3326 ****
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
Value z_sendmany(const Array& params, bool fHelp)
|
||
|
{
|
||
|
if (!EnsureWalletIsAvailable(fHelp))
|
||
|
return Value::null;
|
||
|
|
||
|
! if (fHelp || params.size() < 2 || params.size() > 3)
|
||
|
throw runtime_error(
|
||
|
! "z_sendmany \"fromaddress\" [{\"address\":... ,\"amount\":...},...] ( minconf )\n"
|
||
|
"\nSend multiple times. Amounts are double-precision floating point numbers."
|
||
|
"\nChange from a taddr flows to a new taddr address, while change from zaddr returns to itself."
|
||
|
! "\nWhen sending coinbase UTXOs to a zaddr, change is not alllowed. The entire value of the UTXO(s) must be consumed."
|
||
|
+ HelpRequiringPassphrase() + "\n"
|
||
|
"\nArguments:\n"
|
||
|
"1. \"fromaddress\" (string, required) The taddr or zaddr to send the funds from.\n"
|
||
|
--- 3319,3347 ----
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
+
|
||
|
+ // Here we define the maximum number of zaddr outputs that can be included in a transaction.
|
||
|
+ // If input notes are small, we might actually require more than one joinsplit per zaddr output.
|
||
|
+ // For now though, we assume we use one joinsplit per zaddr output (and the second output note is change).
|
||
|
+ // We reduce the result by 1 to ensure there is room for non-joinsplit CTransaction data.
|
||
|
+ #define Z_SENDMANY_MAX_ZADDR_OUTPUTS ((MAX_TX_SIZE / JSDescription().GetSerializeSize(SER_NETWORK, PROTOCOL_VERSION)) - 1)
|
||
|
+
|
||
|
+ // transaction.h comment: spending taddr output requires CTxIn >= 148 bytes and typical taddr txout is 34 bytes
|
||
|
+ #define CTXIN_SPEND_DUST_SIZE 148
|
||
|
+ #define CTXOUT_REGULAR_SIZE 34
|
||
|
+
|
||
|
Value z_sendmany(const Array& params, bool fHelp)
|
||
|
{
|
||
|
if (!EnsureWalletIsAvailable(fHelp))
|
||
|
return Value::null;
|
||
|
|
||
|
! if (fHelp || params.size() < 2 || params.size() > 4)
|
||
|
throw runtime_error(
|
||
|
! "z_sendmany \"fromaddress\" [{\"address\":... ,\"amount\":...},...] ( minconf ) ( fee )\n"
|
||
|
"\nSend multiple times. Amounts are double-precision floating point numbers."
|
||
|
"\nChange from a taddr flows to a new taddr address, while change from zaddr returns to itself."
|
||
|
! "\nWhen sending coinbase UTXOs to a zaddr, change is not allowed. The entire value of the UTXO(s) must be consumed."
|
||
|
! + strprintf("\nCurrently, the maximum number of zaddr outputs is %d due to transaction size limits.\n", Z_SENDMANY_MAX_ZADDR_OUTPUTS)
|
||
|
+ HelpRequiringPassphrase() + "\n"
|
||
|
"\nArguments:\n"
|
||
|
"1. \"fromaddress\" (string, required) The taddr or zaddr to send the funds from.\n"
|
||
|
***************
|
||
|
*** 3331,3336 ****
|
||
|
--- 3352,3359 ----
|
||
|
" \"memo\":memo (string, optional) If the address is a zaddr, raw data represented in hexadecimal string format\n"
|
||
|
" }, ... ]\n"
|
||
|
"3. minconf (numeric, optional, default=1) Only use funds confirmed at least this many times.\n"
|
||
|
+ "4. fee (numeric, optional, default="
|
||
|
+ + strprintf("%s", FormatMoney(ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE)) + ") The fee amount to attach to this transaction.\n"
|
||
|
"\nResult:\n"
|
||
|
"\"operationid\" (string) An operationid to pass to z_getoperationstatus to get the result of the operation.\n"
|
||
|
);
|
||
|
***************
|
||
|
*** 3371,3376 ****
|
||
|
--- 3394,3400 ----
|
||
|
// Recipients
|
||
|
std::vector<SendManyRecipient> taddrRecipients;
|
||
|
std::vector<SendManyRecipient> zaddrRecipients;
|
||
|
+ CAmount nTotalOut = 0;
|
||
|
|
||
|
BOOST_FOREACH(Value& output, outputs)
|
||
|
{
|
||
|
***************
|
||
|
*** 3426,3431 ****
|
||
|
--- 3450,3481 ----
|
||
|
} else {
|
||
|
taddrRecipients.push_back( SendManyRecipient(address, nAmount, memo) );
|
||
|
}
|
||
|
+
|
||
|
+ nTotalOut += nAmount;
|
||
|
+ }
|
||
|
+
|
||
|
+ // Check the number of zaddr outputs does not exceed the limit.
|
||
|
+ if (zaddrRecipients.size() > Z_SENDMANY_MAX_ZADDR_OUTPUTS) {
|
||
|
+ throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, too many zaddr outputs");
|
||
|
+ }
|
||
|
+
|
||
|
+ // As a sanity check, estimate and verify that the size of the transaction will be valid.
|
||
|
+ // Depending on the input notes, the actual tx size may turn out to be larger and perhaps invalid.
|
||
|
+ size_t txsize = 0;
|
||
|
+ CMutableTransaction mtx;
|
||
|
+ mtx.nVersion = 2;
|
||
|
+ for (int i = 0; i < zaddrRecipients.size(); i++) {
|
||
|
+ mtx.vjoinsplit.push_back(JSDescription());
|
||
|
+ }
|
||
|
+ CTransaction tx(mtx);
|
||
|
+ txsize += tx.GetSerializeSize(SER_NETWORK, tx.nVersion);
|
||
|
+ if (fromTaddr) {
|
||
|
+ txsize += CTXIN_SPEND_DUST_SIZE;
|
||
|
+ txsize += CTXOUT_REGULAR_SIZE; // There will probably be taddr change
|
||
|
+ }
|
||
|
+ txsize += CTXOUT_REGULAR_SIZE * taddrRecipients.size();
|
||
|
+ if (txsize > MAX_TX_SIZE) {
|
||
|
+ throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Too many outputs, size of raw transaction would be larger than limit of %d bytes", MAX_TX_SIZE ));
|
||
|
}
|
||
|
|
||
|
// Minimum confirmations
|
||
|
***************
|
||
|
*** 3437,3445 ****
|
||
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Minimum number of confirmations cannot be less than 0");
|
||
|
}
|
||
|
|
||
|
// Create operation and add to global queue
|
||
|
std::shared_ptr<AsyncRPCQueue> q = getAsyncRPCQueue();
|
||
|
! std::shared_ptr<AsyncRPCOperation> operation( new AsyncRPCOperation_sendmany(fromaddress, taddrRecipients, zaddrRecipients, nMinDepth) );
|
||
|
q->addOperation(operation);
|
||
|
AsyncRPCOperationId operationId = operation->getId();
|
||
|
return operationId;
|
||
|
--- 3487,3505 ----
|
||
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Minimum number of confirmations cannot be less than 0");
|
||
|
}
|
||
|
|
||
|
+ // Fee in Zatoshis, not currency format)
|
||
|
+ CAmount nFee = ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE;
|
||
|
+ if (params.size() > 3) {
|
||
|
+ nFee = AmountFromValue( params[3] );
|
||
|
+ // Check that the user specified fee is sane.
|
||
|
+ if (nFee > nTotalOut) {
|
||
|
+ throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Fee %s is greater than the sum of outputs %s", FormatMoney(nFee), FormatMoney(nTotalOut)));
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
// Create operation and add to global queue
|
||
|
std::shared_ptr<AsyncRPCQueue> q = getAsyncRPCQueue();
|
||
|
! std::shared_ptr<AsyncRPCOperation> operation( new AsyncRPCOperation_sendmany(fromaddress, taddrRecipients, zaddrRecipients, nMinDepth, nFee) );
|
||
|
q->addOperation(operation);
|
||
|
AsyncRPCOperationId operationId = operation->getId();
|
||
|
return operationId;
|
||
|
diff -crB ./src/wallet/wallet.cpp ../../komodo-jl777/src/wallet/wallet.cpp
|
||
|
*** ./src/wallet/wallet.cpp 2017-01-03 10:40:50.431340299 +0000
|
||
|
--- ../../komodo-jl777/src/wallet/wallet.cpp 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 373,386 ****
|
||
|
if (added) {
|
||
|
IncrementNoteWitnesses(pindex, pblock, tree);
|
||
|
} else {
|
||
|
! DecrementNoteWitnesses();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CWallet::SetBestChain(const CBlockLocator& loc)
|
||
|
{
|
||
|
CWalletDB walletdb(strWalletFile);
|
||
|
! walletdb.WriteBestBlock(loc);
|
||
|
}
|
||
|
|
||
|
bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn, bool fExplicit)
|
||
|
--- 373,386 ----
|
||
|
if (added) {
|
||
|
IncrementNoteWitnesses(pindex, pblock, tree);
|
||
|
} else {
|
||
|
! DecrementNoteWitnesses(pindex);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CWallet::SetBestChain(const CBlockLocator& loc)
|
||
|
{
|
||
|
CWalletDB walletdb(strWalletFile);
|
||
|
! SetBestChainINTERNAL(walletdb, loc);
|
||
|
}
|
||
|
|
||
|
bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn, bool fExplicit)
|
||
|
***************
|
||
|
*** 630,637 ****
|
||
|
--- 630,639 ----
|
||
|
for (std::pair<const uint256, CWalletTx>& wtxItem : mapWallet) {
|
||
|
for (mapNoteData_t::value_type& item : wtxItem.second.mapNoteData) {
|
||
|
item.second.witnesses.clear();
|
||
|
+ item.second.witnessHeight = -1;
|
||
|
}
|
||
|
}
|
||
|
+ nWitnessCacheSize = 0;
|
||
|
}
|
||
|
|
||
|
void CWallet::IncrementNoteWitnesses(const CBlockIndex* pindex,
|
||
|
***************
|
||
|
*** 648,654 ****
|
||
|
// Only increment witnesses that are behind the current height
|
||
|
if (nd->witnessHeight < pindex->nHeight) {
|
||
|
// Witnesses being incremented should always be either -1
|
||
|
! // (never incremented) or one below pindex
|
||
|
assert((nd->witnessHeight == -1) ||
|
||
|
(nd->witnessHeight == pindex->nHeight - 1));
|
||
|
// Copy the witness for the previous block if we have one
|
||
|
--- 650,656 ----
|
||
|
// Only increment witnesses that are behind the current height
|
||
|
if (nd->witnessHeight < pindex->nHeight) {
|
||
|
// Witnesses being incremented should always be either -1
|
||
|
! // (never incremented or decremented) or one below pindex
|
||
|
assert((nd->witnessHeight == -1) ||
|
||
|
(nd->witnessHeight == pindex->nHeight - 1));
|
||
|
// Copy the witness for the previous block if we have one
|
||
|
***************
|
||
|
*** 739,752 ****
|
||
|
}
|
||
|
}
|
||
|
|
||
|
! if (fFileBacked) {
|
||
|
! CWalletDB walletdb(strWalletFile);
|
||
|
! WriteWitnessCache(walletdb);
|
||
|
! }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
! void CWallet::DecrementNoteWitnesses()
|
||
|
{
|
||
|
extern int32_t KOMODO_REWIND;
|
||
|
{
|
||
|
--- 741,753 ----
|
||
|
}
|
||
|
}
|
||
|
|
||
|
! // For performance reasons, we write out the witness cache in
|
||
|
! // CWallet::SetBestChain() (which also ensures that overall consistency
|
||
|
! // of the wallet.dat is maintained).
|
||
|
}
|
||
|
}
|
||
|
|
||
|
! void CWallet::DecrementNoteWitnesses(const CBlockIndex* pindex)
|
||
|
{
|
||
|
extern int32_t KOMODO_REWIND;
|
||
|
{
|
||
|
***************
|
||
|
*** 756,765 ****
|
||
|
CNoteData* nd = &(item.second);
|
||
|
// Check the validity of the cache
|
||
|
assert(nWitnessCacheSize >= nd->witnesses.size());
|
||
|
! if (nd->witnesses.size() > 0) {
|
||
|
! nd->witnesses.pop_front();
|
||
|
}
|
||
|
- nd->witnessHeight -= 1;
|
||
|
}
|
||
|
}
|
||
|
nWitnessCacheSize -= 1;
|
||
|
--- 757,775 ----
|
||
|
CNoteData* nd = &(item.second);
|
||
|
// Check the validity of the cache
|
||
|
assert(nWitnessCacheSize >= nd->witnesses.size());
|
||
|
! // Only increment witnesses that are not above the current height
|
||
|
! if (nd->witnessHeight <= pindex->nHeight) {
|
||
|
! // Witnesses being decremented should always be either -1
|
||
|
! // (never incremented or decremented) or equal to pindex
|
||
|
! assert((nd->witnessHeight == -1) ||
|
||
|
! (nd->witnessHeight == pindex->nHeight));
|
||
|
! if (nd->witnesses.size() > 0) {
|
||
|
! nd->witnesses.pop_front();
|
||
|
! }
|
||
|
! // pindex is the block being removed, so the new witness cache
|
||
|
! // height is one below it.
|
||
|
! nd->witnessHeight = pindex->nHeight - 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
nWitnessCacheSize -= 1;
|
||
|
***************
|
||
|
*** 770,776 ****
|
||
|
assert(nWitnessCacheSize >= nd->witnesses.size());
|
||
|
}
|
||
|
}
|
||
|
- // TODO: If nWitnessCache is zero, we need to regenerate the caches (#1302)
|
||
|
if ( nWitnessCacheSize <= 0 )
|
||
|
{
|
||
|
extern char ASSETCHAINS_SYMBOL[16];
|
||
|
--- 780,785 ----
|
||
|
***************
|
||
|
*** 778,787 ****
|
||
|
}
|
||
|
if ( KOMODO_REWIND == 0 )
|
||
|
assert(nWitnessCacheSize > 0);
|
||
|
! if (fFileBacked) {
|
||
|
! CWalletDB walletdb(strWalletFile);
|
||
|
! WriteWitnessCache(walletdb);
|
||
|
! }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
--- 787,799 ----
|
||
|
}
|
||
|
if ( KOMODO_REWIND == 0 )
|
||
|
assert(nWitnessCacheSize > 0);
|
||
|
! //if (fFileBacked) {
|
||
|
! // CWalletDB walletdb(strWalletFile);
|
||
|
! // WriteWitnessCache(walletdb);
|
||
|
! //}
|
||
|
! // For performance reasons, we write out the witness cache in
|
||
|
! // CWallet::SetBestChain() (which also ensures that overall consistency
|
||
|
! // of the wallet.dat is maintained).
|
||
|
}
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 1109,1114 ****
|
||
|
--- 1121,1127 ----
|
||
|
tmp.at(nd.first).witnesses.assign(
|
||
|
nd.second.witnesses.cbegin(), nd.second.witnesses.cend());
|
||
|
}
|
||
|
+ tmp.at(nd.first).witnessHeight = nd.second.witnessHeight;
|
||
|
}
|
||
|
// Now copy over the updated note data
|
||
|
wtx.mapNoteData = tmp;
|
||
|
diff -crB ./src/wallet/wallet.h ../../komodo-jl777/src/wallet/wallet.h
|
||
|
*** ./src/wallet/wallet.h 2017-01-03 10:40:50.431340299 +0000
|
||
|
--- ../../komodo-jl777/src/wallet/wallet.h 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 225,231 ****
|
||
|
*/
|
||
|
std::list<ZCIncrementalWitness> witnesses;
|
||
|
|
||
|
! /** Block height corresponding to the most current witness. */
|
||
|
int witnessHeight;
|
||
|
|
||
|
CNoteData() : address(), nullifier(), witnessHeight {-1} { }
|
||
|
--- 225,239 ----
|
||
|
*/
|
||
|
std::list<ZCIncrementalWitness> witnesses;
|
||
|
|
||
|
! /**
|
||
|
! * Block height corresponding to the most current witness.
|
||
|
! *
|
||
|
! * When we first create a CNoteData in CWallet::FindMyNotes, this is set to
|
||
|
! * -1 as a placeholder. The next time CWallet::ChainTip is called, we can
|
||
|
! * determine what height the witness cache for this note is valid for (even
|
||
|
! * if no witnesses were cached), and so can set the correct value in
|
||
|
! * CWallet::IncrementNoteWitnesses and CWallet::DecrementNoteWitnesses.
|
||
|
! */
|
||
|
int witnessHeight;
|
||
|
|
||
|
CNoteData() : address(), nullifier(), witnessHeight {-1} { }
|
||
|
***************
|
||
|
*** 620,660 ****
|
||
|
void ClearNoteWitnessCache();
|
||
|
|
||
|
protected:
|
||
|
void IncrementNoteWitnesses(const CBlockIndex* pindex,
|
||
|
const CBlock* pblock,
|
||
|
ZCIncrementalMerkleTree& tree);
|
||
|
! void DecrementNoteWitnesses();
|
||
|
|
||
|
template <typename WalletDB>
|
||
|
! void WriteWitnessCache(WalletDB& walletdb) {
|
||
|
if (!walletdb.TxnBegin()) {
|
||
|
// This needs to be done atomically, so don't do it at all
|
||
|
! LogPrintf("WriteWitnessCache(): Couldn't start atomic write\n");
|
||
|
return;
|
||
|
}
|
||
|
try {
|
||
|
for (std::pair<const uint256, CWalletTx>& wtxItem : mapWallet) {
|
||
|
if (!walletdb.WriteTx(wtxItem.first, wtxItem.second)) {
|
||
|
! LogPrintf("WriteWitnessCache(): Failed to write CWalletTx, aborting atomic write\n");
|
||
|
walletdb.TxnAbort();
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
if (!walletdb.WriteWitnessCacheSize(nWitnessCacheSize)) {
|
||
|
! LogPrintf("WriteWitnessCache(): Failed to write nWitnessCacheSize, aborting atomic write\n");
|
||
|
walletdb.TxnAbort();
|
||
|
return;
|
||
|
}
|
||
|
} catch (const std::exception &exc) {
|
||
|
// Unexpected failure
|
||
|
! LogPrintf("WriteWitnessCache(): Unexpected error during atomic write:\n");
|
||
|
LogPrintf("%s\n", exc.what());
|
||
|
walletdb.TxnAbort();
|
||
|
return;
|
||
|
}
|
||
|
if (!walletdb.TxnCommit()) {
|
||
|
// Couldn't commit all to db, but in-memory state is fine
|
||
|
! LogPrintf("WriteWitnessCache(): Couldn't commit atomic write\n");
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
--- 628,679 ----
|
||
|
void ClearNoteWitnessCache();
|
||
|
|
||
|
protected:
|
||
|
+ /**
|
||
|
+ * pindex is the new tip being connected.
|
||
|
+ */
|
||
|
void IncrementNoteWitnesses(const CBlockIndex* pindex,
|
||
|
const CBlock* pblock,
|
||
|
ZCIncrementalMerkleTree& tree);
|
||
|
! /**
|
||
|
! * pindex is the old tip being disconnected.
|
||
|
! */
|
||
|
! void DecrementNoteWitnesses(const CBlockIndex* pindex);
|
||
|
|
||
|
template <typename WalletDB>
|
||
|
! void SetBestChainINTERNAL(WalletDB& walletdb, const CBlockLocator& loc) {
|
||
|
if (!walletdb.TxnBegin()) {
|
||
|
// This needs to be done atomically, so don't do it at all
|
||
|
! LogPrintf("SetBestChain(): Couldn't start atomic write\n");
|
||
|
return;
|
||
|
}
|
||
|
try {
|
||
|
for (std::pair<const uint256, CWalletTx>& wtxItem : mapWallet) {
|
||
|
if (!walletdb.WriteTx(wtxItem.first, wtxItem.second)) {
|
||
|
! LogPrintf("SetBestChain(): Failed to write CWalletTx, aborting atomic write\n");
|
||
|
walletdb.TxnAbort();
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
if (!walletdb.WriteWitnessCacheSize(nWitnessCacheSize)) {
|
||
|
! LogPrintf("SetBestChain(): Failed to write nWitnessCacheSize, aborting atomic write\n");
|
||
|
! walletdb.TxnAbort();
|
||
|
! return;
|
||
|
! }
|
||
|
! if (!walletdb.WriteBestBlock(loc)) {
|
||
|
! LogPrintf("SetBestChain(): Failed to write best block, aborting atomic write\n");
|
||
|
walletdb.TxnAbort();
|
||
|
return;
|
||
|
}
|
||
|
} catch (const std::exception &exc) {
|
||
|
// Unexpected failure
|
||
|
! LogPrintf("SetBestChain(): Unexpected error during atomic write:\n");
|
||
|
LogPrintf("%s\n", exc.what());
|
||
|
walletdb.TxnAbort();
|
||
|
return;
|
||
|
}
|
||
|
if (!walletdb.TxnCommit()) {
|
||
|
// Couldn't commit all to db, but in-memory state is fine
|
||
|
! LogPrintf("SetBestChain(): Couldn't commit atomic write\n");
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
***************
|
||
|
*** 944,949 ****
|
||
|
--- 963,969 ----
|
||
|
CAmount GetCredit(const CTransaction& tx, const isminefilter& filter) const;
|
||
|
CAmount GetChange(const CTransaction& tx) const;
|
||
|
void ChainTip(const CBlockIndex *pindex, const CBlock *pblock, ZCIncrementalMerkleTree tree, bool added);
|
||
|
+ /** Saves witness caches and best block locator to disk. */
|
||
|
void SetBestChain(const CBlockLocator& loc);
|
||
|
|
||
|
DBErrors LoadWallet(bool& fFirstRunRet);
|
||
|
diff -crB ./src/zcash/GenerateParams.cpp ../../komodo-jl777/src/zcash/GenerateParams.cpp
|
||
|
*** ./src/zcash/GenerateParams.cpp 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/src/zcash/GenerateParams.cpp 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 9,26 ****
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
! if(argc != 3) {
|
||
|
! std::cerr << "Usage: " << argv[0] << " provingKeyFileName verificationKeyFileName" << std::endl;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
std::string pkFile = argv[1];
|
||
|
std::string vkFile = argv[2];
|
||
|
|
||
|
auto p = ZCJoinSplit::Generate();
|
||
|
|
||
|
p->saveProvingKey(pkFile);
|
||
|
p->saveVerifyingKey(vkFile);
|
||
|
|
||
|
delete p;
|
||
|
|
||
|
--- 9,28 ----
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
! if(argc != 4) {
|
||
|
! std::cerr << "Usage: " << argv[0] << " provingKeyFileName verificationKeyFileName r1csFileName" << std::endl;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
std::string pkFile = argv[1];
|
||
|
std::string vkFile = argv[2];
|
||
|
+ std::string r1csFile = argv[3];
|
||
|
|
||
|
auto p = ZCJoinSplit::Generate();
|
||
|
|
||
|
p->saveProvingKey(pkFile);
|
||
|
p->saveVerifyingKey(vkFile);
|
||
|
+ p->saveR1CS(r1csFile);
|
||
|
|
||
|
delete p;
|
||
|
|
||
|
diff -crB ./src/zcash/IncrementalMerkleTree.cpp ../../komodo-jl777/src/zcash/IncrementalMerkleTree.cpp
|
||
|
*** ./src/zcash/IncrementalMerkleTree.cpp 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/src/zcash/IncrementalMerkleTree.cpp 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 71,76 ****
|
||
|
--- 71,87 ----
|
||
|
}
|
||
|
|
||
|
template<size_t Depth, typename Hash>
|
||
|
+ Hash IncrementalMerkleTree<Depth, Hash>::last() const {
|
||
|
+ if (right) {
|
||
|
+ return *right;
|
||
|
+ } else if (left) {
|
||
|
+ return *left;
|
||
|
+ } else {
|
||
|
+ throw std::runtime_error("tree has no cursor");
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ template<size_t Depth, typename Hash>
|
||
|
void IncrementalMerkleTree<Depth, Hash>::append(Hash obj) {
|
||
|
if (is_complete(Depth)) {
|
||
|
throw std::runtime_error("tree is full");
|
||
|
diff -crB ./src/zcash/IncrementalMerkleTree.hpp ../../komodo-jl777/src/zcash/IncrementalMerkleTree.hpp
|
||
|
*** ./src/zcash/IncrementalMerkleTree.hpp 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/src/zcash/IncrementalMerkleTree.hpp 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 79,84 ****
|
||
|
--- 79,85 ----
|
||
|
Hash root() const {
|
||
|
return root(Depth, std::deque<Hash>());
|
||
|
}
|
||
|
+ Hash last() const;
|
||
|
|
||
|
IncrementalWitness<Depth, Hash> witness() const {
|
||
|
return IncrementalWitness<Depth, Hash>(*this);
|
||
|
***************
|
||
|
*** 138,143 ****
|
||
|
--- 139,150 ----
|
||
|
return tree.path(partial_path());
|
||
|
}
|
||
|
|
||
|
+ // Return the element being witnessed (should be a note
|
||
|
+ // commitment!)
|
||
|
+ Hash element() const {
|
||
|
+ return tree.last();
|
||
|
+ }
|
||
|
+
|
||
|
Hash root() const {
|
||
|
return tree.root(Depth, partial_path());
|
||
|
}
|
||
|
diff -crB ./src/zcash/JoinSplit.cpp ../../komodo-jl777/src/zcash/JoinSplit.cpp
|
||
|
*** ./src/zcash/JoinSplit.cpp 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/src/zcash/JoinSplit.cpp 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 16,21 ****
|
||
|
--- 16,22 ----
|
||
|
#include "libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_read_gadget.hpp"
|
||
|
|
||
|
#include "sync.h"
|
||
|
+ #include "amount.h"
|
||
|
|
||
|
using namespace libsnark;
|
||
|
|
||
|
***************
|
||
|
*** 24,30 ****
|
||
|
#include "zcash/circuit/gadget.tcc"
|
||
|
|
||
|
CCriticalSection cs_ParamsIO;
|
||
|
! CCriticalSection cs_InitializeParams;
|
||
|
|
||
|
template<typename T>
|
||
|
void saveToFile(std::string path, T& obj) {
|
||
|
--- 25,31 ----
|
||
|
#include "zcash/circuit/gadget.tcc"
|
||
|
|
||
|
CCriticalSection cs_ParamsIO;
|
||
|
! CCriticalSection cs_LoadKeys;
|
||
|
|
||
|
template<typename T>
|
||
|
void saveToFile(std::string path, T& obj) {
|
||
|
***************
|
||
|
*** 70,91 ****
|
||
|
|
||
|
boost::optional<r1cs_ppzksnark_proving_key<ppzksnark_ppT>> pk;
|
||
|
boost::optional<r1cs_ppzksnark_verification_key<ppzksnark_ppT>> vk;
|
||
|
boost::optional<std::string> pkPath;
|
||
|
|
||
|
JoinSplitCircuit() {}
|
||
|
~JoinSplitCircuit() {}
|
||
|
|
||
|
- static void initialize() {
|
||
|
- LOCK(cs_InitializeParams);
|
||
|
-
|
||
|
- ppzksnark_ppT::init_public_params();
|
||
|
- }
|
||
|
-
|
||
|
void setProvingKeyPath(std::string path) {
|
||
|
pkPath = path;
|
||
|
}
|
||
|
|
||
|
void loadProvingKey() {
|
||
|
if (!pk) {
|
||
|
if (!pkPath) {
|
||
|
throw std::runtime_error("proving key path unknown");
|
||
|
--- 71,89 ----
|
||
|
|
||
|
boost::optional<r1cs_ppzksnark_proving_key<ppzksnark_ppT>> pk;
|
||
|
boost::optional<r1cs_ppzksnark_verification_key<ppzksnark_ppT>> vk;
|
||
|
+ boost::optional<r1cs_ppzksnark_processed_verification_key<ppzksnark_ppT>> vk_precomp;
|
||
|
boost::optional<std::string> pkPath;
|
||
|
|
||
|
JoinSplitCircuit() {}
|
||
|
~JoinSplitCircuit() {}
|
||
|
|
||
|
void setProvingKeyPath(std::string path) {
|
||
|
pkPath = path;
|
||
|
}
|
||
|
|
||
|
void loadProvingKey() {
|
||
|
+ LOCK(cs_LoadKeys);
|
||
|
+
|
||
|
if (!pk) {
|
||
|
if (!pkPath) {
|
||
|
throw std::runtime_error("proving key path unknown");
|
||
|
***************
|
||
|
*** 102,108 ****
|
||
|
--- 100,113 ----
|
||
|
}
|
||
|
}
|
||
|
void loadVerifyingKey(std::string path) {
|
||
|
+ LOCK(cs_LoadKeys);
|
||
|
+
|
||
|
loadFromFile(path, vk);
|
||
|
+
|
||
|
+ processVerifyingKey();
|
||
|
+ }
|
||
|
+ void processVerifyingKey() {
|
||
|
+ vk_precomp = r1cs_ppzksnark_verifier_process_vk(*vk);
|
||
|
}
|
||
|
void saveVerifyingKey(std::string path) {
|
||
|
if (vk) {
|
||
|
***************
|
||
|
*** 111,132 ****
|
||
|
throw std::runtime_error("cannot save verifying key; key doesn't exist");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
! void generate() {
|
||
|
protoboard<FieldT> pb;
|
||
|
|
||
|
joinsplit_gadget<FieldT, NumInputs, NumOutputs> g(pb);
|
||
|
g.generate_r1cs_constraints();
|
||
|
|
||
|
! const r1cs_constraint_system<FieldT> constraint_system = pb.get_constraint_system();
|
||
|
r1cs_ppzksnark_keypair<ppzksnark_ppT> keypair = r1cs_ppzksnark_generator<ppzksnark_ppT>(constraint_system);
|
||
|
|
||
|
pk = keypair.pk;
|
||
|
vk = keypair.vk;
|
||
|
}
|
||
|
|
||
|
bool verify(
|
||
|
const ZCProof& proof,
|
||
|
const uint256& pubKeyHash,
|
||
|
const uint256& randomSeed,
|
||
|
const boost::array<uint256, NumInputs>& macs,
|
||
|
--- 116,150 ----
|
||
|
throw std::runtime_error("cannot save verifying key; key doesn't exist");
|
||
|
}
|
||
|
}
|
||
|
+ void saveR1CS(std::string path) {
|
||
|
+ auto r1cs = generate_r1cs();
|
||
|
|
||
|
! saveToFile(path, r1cs);
|
||
|
! }
|
||
|
!
|
||
|
! r1cs_constraint_system<FieldT> generate_r1cs() {
|
||
|
protoboard<FieldT> pb;
|
||
|
|
||
|
joinsplit_gadget<FieldT, NumInputs, NumOutputs> g(pb);
|
||
|
g.generate_r1cs_constraints();
|
||
|
|
||
|
! return pb.get_constraint_system();
|
||
|
! }
|
||
|
!
|
||
|
! void generate() {
|
||
|
! LOCK(cs_LoadKeys);
|
||
|
!
|
||
|
! const r1cs_constraint_system<FieldT> constraint_system = generate_r1cs();
|
||
|
r1cs_ppzksnark_keypair<ppzksnark_ppT> keypair = r1cs_ppzksnark_generator<ppzksnark_ppT>(constraint_system);
|
||
|
|
||
|
pk = keypair.pk;
|
||
|
vk = keypair.vk;
|
||
|
+ processVerifyingKey();
|
||
|
}
|
||
|
|
||
|
bool verify(
|
||
|
const ZCProof& proof,
|
||
|
+ ProofVerifier& verifier,
|
||
|
const uint256& pubKeyHash,
|
||
|
const uint256& randomSeed,
|
||
|
const boost::array<uint256, NumInputs>& macs,
|
||
|
***************
|
||
|
*** 136,142 ****
|
||
|
uint64_t vpub_new,
|
||
|
const uint256& rt
|
||
|
) {
|
||
|
! if (!vk) {
|
||
|
throw std::runtime_error("JoinSplit verifying key not loaded");
|
||
|
}
|
||
|
|
||
|
--- 154,160 ----
|
||
|
uint64_t vpub_new,
|
||
|
const uint256& rt
|
||
|
) {
|
||
|
! if (!vk || !vk_precomp) {
|
||
|
throw std::runtime_error("JoinSplit verifying key not loaded");
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 155,161 ****
|
||
|
vpub_new
|
||
|
);
|
||
|
|
||
|
! return r1cs_ppzksnark_verifier_strong_IC<ppzksnark_ppT>(*vk, witness, r1cs_proof);
|
||
|
} catch (...) {
|
||
|
return false;
|
||
|
}
|
||
|
--- 173,184 ----
|
||
|
vpub_new
|
||
|
);
|
||
|
|
||
|
! return verifier.check(
|
||
|
! *vk,
|
||
|
! *vk_precomp,
|
||
|
! witness,
|
||
|
! r1cs_proof
|
||
|
! );
|
||
|
} catch (...) {
|
||
|
return false;
|
||
|
}
|
||
|
***************
|
||
|
*** 181,188 ****
|
||
|
throw std::runtime_error("JoinSplit proving key not loaded");
|
||
|
}
|
||
|
|
||
|
! // Compute nullifiers of inputs
|
||
|
for (size_t i = 0; i < NumInputs; i++) {
|
||
|
out_nullifiers[i] = inputs[i].nullifier();
|
||
|
}
|
||
|
|
||
|
--- 204,254 ----
|
||
|
throw std::runtime_error("JoinSplit proving key not loaded");
|
||
|
}
|
||
|
|
||
|
! if (vpub_old > MAX_MONEY) {
|
||
|
! throw std::invalid_argument("nonsensical vpub_old value");
|
||
|
! }
|
||
|
!
|
||
|
! if (vpub_new > MAX_MONEY) {
|
||
|
! throw std::invalid_argument("nonsensical vpub_new value");
|
||
|
! }
|
||
|
!
|
||
|
! uint64_t lhs_value = vpub_old;
|
||
|
! uint64_t rhs_value = vpub_new;
|
||
|
!
|
||
|
for (size_t i = 0; i < NumInputs; i++) {
|
||
|
+ // Sanity checks of input
|
||
|
+ {
|
||
|
+ // If note has nonzero value
|
||
|
+ if (inputs[i].note.value != 0) {
|
||
|
+ // The witness root must equal the input root.
|
||
|
+ if (inputs[i].witness.root() != rt) {
|
||
|
+ throw std::invalid_argument("joinsplit not anchored to the correct root");
|
||
|
+ }
|
||
|
+
|
||
|
+ // The tree must witness the correct element
|
||
|
+ if (inputs[i].note.cm() != inputs[i].witness.element()) {
|
||
|
+ throw std::invalid_argument("witness of wrong element for joinsplit input");
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ // Ensure we have the key to this note.
|
||
|
+ if (inputs[i].note.a_pk != inputs[i].key.address().a_pk) {
|
||
|
+ throw std::invalid_argument("input note not authorized to spend with given key");
|
||
|
+ }
|
||
|
+
|
||
|
+ // Balance must be sensical
|
||
|
+ if (inputs[i].note.value > MAX_MONEY) {
|
||
|
+ throw std::invalid_argument("nonsensical input note value");
|
||
|
+ }
|
||
|
+
|
||
|
+ lhs_value += inputs[i].note.value;
|
||
|
+
|
||
|
+ if (lhs_value > MAX_MONEY) {
|
||
|
+ throw std::invalid_argument("nonsensical left hand size of joinsplit balance");
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ // Compute nullifier of input
|
||
|
out_nullifiers[i] = inputs[i].nullifier();
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 197,208 ****
|
||
|
--- 263,291 ----
|
||
|
|
||
|
// Compute notes for outputs
|
||
|
for (size_t i = 0; i < NumOutputs; i++) {
|
||
|
+ // Sanity checks of output
|
||
|
+ {
|
||
|
+ if (outputs[i].value > MAX_MONEY) {
|
||
|
+ throw std::invalid_argument("nonsensical output value");
|
||
|
+ }
|
||
|
+
|
||
|
+ rhs_value += outputs[i].value;
|
||
|
+
|
||
|
+ if (rhs_value > MAX_MONEY) {
|
||
|
+ throw std::invalid_argument("nonsensical right hand side of joinsplit balance");
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
// Sample r
|
||
|
uint256 r = random_uint256();
|
||
|
|
||
|
out_notes[i] = outputs[i].note(phi, r, i, h_sig);
|
||
|
}
|
||
|
|
||
|
+ if (lhs_value != rhs_value) {
|
||
|
+ throw std::invalid_argument("invalid joinsplit balance");
|
||
|
+ }
|
||
|
+
|
||
|
// Compute the output commitments
|
||
|
for (size_t i = 0; i < NumOutputs; i++) {
|
||
|
out_commitments[i] = out_notes[i].cm();
|
||
|
***************
|
||
|
*** 249,257 ****
|
||
|
);
|
||
|
}
|
||
|
|
||
|
! if (!pb.is_satisfied()) {
|
||
|
! throw std::invalid_argument("Constraint system not satisfied by inputs");
|
||
|
! }
|
||
|
|
||
|
// TODO: These are copies, which is not strictly necessary.
|
||
|
std::vector<FieldT> primary_input = pb.primary_input();
|
||
|
--- 331,339 ----
|
||
|
);
|
||
|
}
|
||
|
|
||
|
! // The constraint system must be satisfied or there is an unimplemented
|
||
|
! // or incorrect sanity check above. Or the constraint system is broken!
|
||
|
! assert(pb.is_satisfied());
|
||
|
|
||
|
// TODO: These are copies, which is not strictly necessary.
|
||
|
std::vector<FieldT> primary_input = pb.primary_input();
|
||
|
***************
|
||
|
*** 275,281 ****
|
||
|
template<size_t NumInputs, size_t NumOutputs>
|
||
|
JoinSplit<NumInputs, NumOutputs>* JoinSplit<NumInputs, NumOutputs>::Generate()
|
||
|
{
|
||
|
! JoinSplitCircuit<NumInputs, NumOutputs>::initialize();
|
||
|
auto js = new JoinSplitCircuit<NumInputs, NumOutputs>();
|
||
|
js->generate();
|
||
|
|
||
|
--- 357,363 ----
|
||
|
template<size_t NumInputs, size_t NumOutputs>
|
||
|
JoinSplit<NumInputs, NumOutputs>* JoinSplit<NumInputs, NumOutputs>::Generate()
|
||
|
{
|
||
|
! initialize_curve_params();
|
||
|
auto js = new JoinSplitCircuit<NumInputs, NumOutputs>();
|
||
|
js->generate();
|
||
|
|
||
|
***************
|
||
|
*** 285,291 ****
|
||
|
template<size_t NumInputs, size_t NumOutputs>
|
||
|
JoinSplit<NumInputs, NumOutputs>* JoinSplit<NumInputs, NumOutputs>::Unopened()
|
||
|
{
|
||
|
! JoinSplitCircuit<NumInputs, NumOutputs>::initialize();
|
||
|
return new JoinSplitCircuit<NumInputs, NumOutputs>();
|
||
|
}
|
||
|
|
||
|
--- 367,373 ----
|
||
|
template<size_t NumInputs, size_t NumOutputs>
|
||
|
JoinSplit<NumInputs, NumOutputs>* JoinSplit<NumInputs, NumOutputs>::Unopened()
|
||
|
{
|
||
|
! initialize_curve_params();
|
||
|
return new JoinSplitCircuit<NumInputs, NumOutputs>();
|
||
|
}
|
||
|
|
||
|
diff -crB ./src/zcash/JoinSplit.hpp ../../komodo-jl777/src/zcash/JoinSplit.hpp
|
||
|
*** ./src/zcash/JoinSplit.hpp 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/src/zcash/JoinSplit.hpp 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 62,67 ****
|
||
|
--- 62,68 ----
|
||
|
virtual void saveProvingKey(std::string path) = 0;
|
||
|
virtual void loadVerifyingKey(std::string path) = 0;
|
||
|
virtual void saveVerifyingKey(std::string path) = 0;
|
||
|
+ virtual void saveR1CS(std::string path) = 0;
|
||
|
|
||
|
virtual ZCProof prove(
|
||
|
const boost::array<JSInput, NumInputs>& inputs,
|
||
|
***************
|
||
|
*** 82,87 ****
|
||
|
--- 83,89 ----
|
||
|
|
||
|
virtual bool verify(
|
||
|
const ZCProof& proof,
|
||
|
+ ProofVerifier& verifier,
|
||
|
const uint256& pubKeyHash,
|
||
|
const uint256& randomSeed,
|
||
|
const boost::array<uint256, NumInputs>& hmacs,
|
||
|
diff -crB ./src/zcash/Proof.cpp ../../komodo-jl777/src/zcash/Proof.cpp
|
||
|
*** ./src/zcash/Proof.cpp 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/src/zcash/Proof.cpp 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 1,6 ****
|
||
|
--- 1,7 ----
|
||
|
#include "Proof.hpp"
|
||
|
|
||
|
#include <boost/static_assert.hpp>
|
||
|
+ #include <mutex>
|
||
|
|
||
|
#include "crypto/common.h"
|
||
|
#include "libsnark/common/default_types/r1cs_ppzksnark_pp.hpp"
|
||
|
***************
|
||
|
*** 211,214 ****
|
||
|
--- 212,247 ----
|
||
|
return p;
|
||
|
}
|
||
|
|
||
|
+ std::once_flag init_public_params_once_flag;
|
||
|
+
|
||
|
+ void initialize_curve_params()
|
||
|
+ {
|
||
|
+ std::call_once (init_public_params_once_flag, curve_pp::init_public_params);
|
||
|
+ }
|
||
|
+
|
||
|
+ ProofVerifier ProofVerifier::Strict() {
|
||
|
+ initialize_curve_params();
|
||
|
+ return ProofVerifier(true);
|
||
|
+ }
|
||
|
+
|
||
|
+ ProofVerifier ProofVerifier::Disabled() {
|
||
|
+ initialize_curve_params();
|
||
|
+ return ProofVerifier(false);
|
||
|
+ }
|
||
|
+
|
||
|
+ template<>
|
||
|
+ bool ProofVerifier::check(
|
||
|
+ const r1cs_ppzksnark_verification_key<curve_pp>& vk,
|
||
|
+ const r1cs_ppzksnark_processed_verification_key<curve_pp>& pvk,
|
||
|
+ const r1cs_primary_input<curve_Fr>& primary_input,
|
||
|
+ const r1cs_ppzksnark_proof<curve_pp>& proof
|
||
|
+ )
|
||
|
+ {
|
||
|
+ if (perform_verification) {
|
||
|
+ return r1cs_ppzksnark_online_verifier_strong_IC<curve_pp>(pvk, primary_input, proof);
|
||
|
+ } else {
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
}
|
||
|
diff -crB ./src/zcash/Proof.hpp ../../komodo-jl777/src/zcash/Proof.hpp
|
||
|
*** ./src/zcash/Proof.hpp 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/src/zcash/Proof.hpp 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 235,240 ****
|
||
|
--- 235,276 ----
|
||
|
}
|
||
|
};
|
||
|
|
||
|
+ void initialize_curve_params();
|
||
|
+
|
||
|
+ class ProofVerifier {
|
||
|
+ private:
|
||
|
+ bool perform_verification;
|
||
|
+
|
||
|
+ ProofVerifier(bool perform_verification) : perform_verification(perform_verification) { }
|
||
|
+
|
||
|
+ public:
|
||
|
+ // ProofVerifier should never be copied
|
||
|
+ ProofVerifier(const ProofVerifier&) = delete;
|
||
|
+ ProofVerifier& operator=(const ProofVerifier&) = delete;
|
||
|
+ ProofVerifier(ProofVerifier&&);
|
||
|
+ ProofVerifier& operator=(ProofVerifier&&);
|
||
|
+
|
||
|
+ // Creates a verification context that strictly verifies
|
||
|
+ // all proofs using libsnark's API.
|
||
|
+ static ProofVerifier Strict();
|
||
|
+
|
||
|
+ // Creates a verification context that performs no
|
||
|
+ // verification, used when avoiding duplicate effort
|
||
|
+ // such as during reindexing.
|
||
|
+ static ProofVerifier Disabled();
|
||
|
+
|
||
|
+ template <typename VerificationKey,
|
||
|
+ typename ProcessedVerificationKey,
|
||
|
+ typename PrimaryInput,
|
||
|
+ typename Proof
|
||
|
+ >
|
||
|
+ bool check(
|
||
|
+ const VerificationKey& vk,
|
||
|
+ const ProcessedVerificationKey& pvk,
|
||
|
+ const PrimaryInput& pi,
|
||
|
+ const Proof& p
|
||
|
+ );
|
||
|
+ };
|
||
|
|
||
|
}
|
||
|
|
||
|
diff -crB ./src/zcbenchmarks.cpp ../../komodo-jl777/src/zcbenchmarks.cpp
|
||
|
*** ./src/zcbenchmarks.cpp 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/src/zcbenchmarks.cpp 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 17,22 ****
|
||
|
--- 17,23 ----
|
||
|
#include "script/sign.h"
|
||
|
#include "sodium.h"
|
||
|
#include "streams.h"
|
||
|
+ #include "utiltest.h"
|
||
|
#include "wallet/wallet.h"
|
||
|
|
||
|
#include "zcbenchmarks.h"
|
||
|
***************
|
||
|
*** 89,95 ****
|
||
|
0);
|
||
|
double ret = timer_stop(tv_start);
|
||
|
|
||
|
! assert(jsdesc.Verify(*pzcashParams, pubKeyHash));
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
--- 90,97 ----
|
||
|
0);
|
||
|
double ret = timer_stop(tv_start);
|
||
|
|
||
|
! auto verifier = libzcash::ProofVerifier::Strict();
|
||
|
! assert(jsdesc.Verify(*pzcashParams, verifier, pubKeyHash));
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 98,104 ****
|
||
|
struct timeval tv_start;
|
||
|
timer_start(tv_start);
|
||
|
uint256 pubKeyHash;
|
||
|
! joinsplit.Verify(*pzcashParams, pubKeyHash);
|
||
|
return timer_stop(tv_start);
|
||
|
}
|
||
|
|
||
|
--- 100,107 ----
|
||
|
struct timeval tv_start;
|
||
|
timer_start(tv_start);
|
||
|
uint256 pubKeyHash;
|
||
|
! auto verifier = libzcash::ProofVerifier::Strict();
|
||
|
! joinsplit.Verify(*pzcashParams, verifier, pubKeyHash);
|
||
|
return timer_stop(tv_start);
|
||
|
}
|
||
|
|
||
|
***************
|
||
|
*** 223,225 ****
|
||
|
--- 226,301 ----
|
||
|
return timer_stop(tv_start);
|
||
|
}
|
||
|
|
||
|
+ double benchmark_try_decrypt_notes(size_t nAddrs)
|
||
|
+ {
|
||
|
+ CWallet wallet;
|
||
|
+ for (int i = 0; i < nAddrs; i++) {
|
||
|
+ auto sk = libzcash::SpendingKey::random();
|
||
|
+ wallet.AddSpendingKey(sk);
|
||
|
+ }
|
||
|
+
|
||
|
+ auto sk = libzcash::SpendingKey::random();
|
||
|
+ auto tx = GetValidReceive(*pzcashParams, sk, 10, true);
|
||
|
+
|
||
|
+ struct timeval tv_start;
|
||
|
+ timer_start(tv_start);
|
||
|
+ auto nd = wallet.FindMyNotes(tx);
|
||
|
+ return timer_stop(tv_start);
|
||
|
+ }
|
||
|
+
|
||
|
+ double benchmark_increment_note_witnesses(size_t nTxs)
|
||
|
+ {
|
||
|
+ CWallet wallet;
|
||
|
+ ZCIncrementalMerkleTree tree;
|
||
|
+
|
||
|
+ auto sk = libzcash::SpendingKey::random();
|
||
|
+ wallet.AddSpendingKey(sk);
|
||
|
+
|
||
|
+ // First block
|
||
|
+ CBlock block1;
|
||
|
+ for (int i = 0; i < nTxs; i++) {
|
||
|
+ auto wtx = GetValidReceive(*pzcashParams, sk, 10, true);
|
||
|
+ auto note = GetNote(*pzcashParams, sk, wtx, 0, 1);
|
||
|
+ auto nullifier = note.nullifier(sk);
|
||
|
+
|
||
|
+ mapNoteData_t noteData;
|
||
|
+ JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
|
||
|
+ CNoteData nd {sk.address(), nullifier};
|
||
|
+ noteData[jsoutpt] = nd;
|
||
|
+
|
||
|
+ wtx.SetNoteData(noteData);
|
||
|
+ wallet.AddToWallet(wtx, true, NULL);
|
||
|
+ block1.vtx.push_back(wtx);
|
||
|
+ }
|
||
|
+ CBlockIndex index1(block1);
|
||
|
+ index1.nHeight = 1;
|
||
|
+
|
||
|
+ // Increment to get transactions witnessed
|
||
|
+ wallet.ChainTip(&index1, &block1, tree, true);
|
||
|
+
|
||
|
+ // Second block
|
||
|
+ CBlock block2;
|
||
|
+ block2.hashPrevBlock = block1.GetHash();
|
||
|
+ {
|
||
|
+ auto wtx = GetValidReceive(*pzcashParams, sk, 10, true);
|
||
|
+ auto note = GetNote(*pzcashParams, sk, wtx, 0, 1);
|
||
|
+ auto nullifier = note.nullifier(sk);
|
||
|
+
|
||
|
+ mapNoteData_t noteData;
|
||
|
+ JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
|
||
|
+ CNoteData nd {sk.address(), nullifier};
|
||
|
+ noteData[jsoutpt] = nd;
|
||
|
+
|
||
|
+ wtx.SetNoteData(noteData);
|
||
|
+ wallet.AddToWallet(wtx, true, NULL);
|
||
|
+ block2.vtx.push_back(wtx);
|
||
|
+ }
|
||
|
+ CBlockIndex index2(block2);
|
||
|
+ index2.nHeight = 2;
|
||
|
+
|
||
|
+ struct timeval tv_start;
|
||
|
+ timer_start(tv_start);
|
||
|
+ wallet.ChainTip(&index2, &block2, tree, true);
|
||
|
+ return timer_stop(tv_start);
|
||
|
+ }
|
||
|
+
|
||
|
diff -crB ./src/zcbenchmarks.h ../../komodo-jl777/src/zcbenchmarks.h
|
||
|
*** ./src/zcbenchmarks.h 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/src/zcbenchmarks.h 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 12,16 ****
|
||
|
--- 12,18 ----
|
||
|
extern double benchmark_verify_joinsplit(const JSDescription &joinsplit);
|
||
|
extern double benchmark_verify_equihash();
|
||
|
extern double benchmark_large_tx();
|
||
|
+ extern double benchmark_try_decrypt_notes(size_t nAddrs);
|
||
|
+ extern double benchmark_increment_note_witnesses(size_t nTxs);
|
||
|
|
||
|
#endif
|
||
|
diff -crB ./zcutil/build-debian-package.sh ../../komodo-jl777/zcutil/build-debian-package.sh
|
||
|
*** ./zcutil/build-debian-package.sh 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/zcutil/build-debian-package.sh 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 23,32 ****
|
||
|
rm -R $BUILD_DIR
|
||
|
fi
|
||
|
|
||
|
DEB_BIN=$BUILD_DIR/usr/bin
|
||
|
DEB_DOC=$BUILD_DIR/usr/share/doc/$PACKAGE_NAME
|
||
|
DEB_MAN=$BUILD_DIR/usr/share/man/man1
|
||
|
! mkdir -p $BUILD_DIR/DEBIAN $DEB_BIN $DEB_DOC $DEB_MAN
|
||
|
chmod 0755 -R $BUILD_DIR/*
|
||
|
|
||
|
# Copy control file
|
||
|
--- 23,33 ----
|
||
|
rm -R $BUILD_DIR
|
||
|
fi
|
||
|
|
||
|
+ DEB_CMP=$BUILD_DIR/etc/bash_completion.d
|
||
|
DEB_BIN=$BUILD_DIR/usr/bin
|
||
|
DEB_DOC=$BUILD_DIR/usr/share/doc/$PACKAGE_NAME
|
||
|
DEB_MAN=$BUILD_DIR/usr/share/man/man1
|
||
|
! mkdir -p $BUILD_DIR/DEBIAN $DEB_CMP $DEB_BIN $DEB_DOC $DEB_MAN
|
||
|
chmod 0755 -R $BUILD_DIR/*
|
||
|
|
||
|
# Copy control file
|
||
|
***************
|
||
|
*** 48,53 ****
|
||
|
--- 49,57 ----
|
||
|
# Copy manpages
|
||
|
cp $SRC_DEB/manpages/zcashd.1 $DEB_MAN
|
||
|
cp $SRC_DEB/manpages/zcash-cli.1 $DEB_MAN
|
||
|
+ # Copy bash completion files
|
||
|
+ cp $SRC_PATH/contrib/bitcoind.bash-completion $DEB_CMP/zcashd
|
||
|
+ cp $SRC_PATH/contrib/bitcoin-cli.bash-completion $DEB_CMP/zcash-cli
|
||
|
# Gzip files
|
||
|
gzip --best -n $DEB_DOC/changelog
|
||
|
gzip --best -n $DEB_DOC/changelog.Debian
|
||
|
diff -crB ./zcutil/build.sh ../../komodo-jl777/zcutil/build.sh
|
||
|
*** ./zcutil/build.sh 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/zcutil/build.sh 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 1,7 ****
|
||
|
! #!/bin/bash
|
||
|
|
||
|
set -eu -o pipefail
|
||
|
|
||
|
if [ "x$*" = 'x--help' ]
|
||
|
then
|
||
|
cat <<EOF
|
||
|
--- 1,30 ----
|
||
|
! #!/usr/bin/env bash
|
||
|
|
||
|
set -eu -o pipefail
|
||
|
|
||
|
+ # Allow user overrides to $MAKE. Typical usage for users who need it:
|
||
|
+ # MAKE=gmake ./zcutil/build.sh -j$(nproc)
|
||
|
+ if [[ -z "${MAKE-}" ]]; then
|
||
|
+ MAKE=make
|
||
|
+ fi
|
||
|
+
|
||
|
+ # Allow overrides to $BUILD and $HOST for porters. Most users will not need it.
|
||
|
+ # BUILD=i686-pc-linux-gnu ./zcutil/build.sh
|
||
|
+ if [[ -z "${BUILD-}" ]]; then
|
||
|
+ BUILD=x86_64-unknown-linux-gnu
|
||
|
+ fi
|
||
|
+ if [[ -z "${HOST-}" ]]; then
|
||
|
+ HOST=x86_64-unknown-linux-gnu
|
||
|
+ fi
|
||
|
+
|
||
|
+ # Allow override to $CC and $CXX for porters. Most users will not need it.
|
||
|
+ if [[ -z "${CC-}" ]]; then
|
||
|
+ CC=gcc
|
||
|
+ fi
|
||
|
+ if [[ -z "${CXX-}" ]]; then
|
||
|
+ CXX=g++
|
||
|
+ fi
|
||
|
+
|
||
|
if [ "x$*" = 'x--help' ]
|
||
|
then
|
||
|
cat <<EOF
|
||
|
***************
|
||
|
*** 10,20 ****
|
||
|
$0 --help
|
||
|
Show this help message and exit.
|
||
|
|
||
|
! $0 [ --enable-lcov ] [ MAKEARGS... ]
|
||
|
Build Zcash and most of its transitive dependencies from
|
||
|
! source. MAKEARGS are applied to both dependencies and Zcash itself. If
|
||
|
! --enable-lcov is passed, Zcash is configured to add coverage
|
||
|
instrumentation, thus enabling "make cov" to work.
|
||
|
EOF
|
||
|
exit 0
|
||
|
fi
|
||
|
--- 33,45 ----
|
||
|
$0 --help
|
||
|
Show this help message and exit.
|
||
|
|
||
|
! $0 [ --enable-lcov || --disable-tests ] [ MAKEARGS... ]
|
||
|
Build Zcash and most of its transitive dependencies from
|
||
|
! source. MAKEARGS are applied to both dependencies and Zcash itself.
|
||
|
!
|
||
|
! If --enable-lcov is passed, Zcash is configured to add coverage
|
||
|
instrumentation, thus enabling "make cov" to work.
|
||
|
+ If --disable-tests is passed instead, the Zcash tests are not built.
|
||
|
EOF
|
||
|
exit 0
|
||
|
fi
|
||
|
***************
|
||
|
*** 25,41 ****
|
||
|
# If --enable-lcov is the first argument, enable lcov coverage support:
|
||
|
LCOV_ARG=''
|
||
|
HARDENING_ARG='--enable-hardening'
|
||
|
if [ "x${1:-}" = 'x--enable-lcov' ]
|
||
|
then
|
||
|
LCOV_ARG='--enable-lcov'
|
||
|
HARDENING_ARG='--disable-hardening'
|
||
|
shift
|
||
|
fi
|
||
|
|
||
|
! # BUG: parameterize the platform/host directory:
|
||
|
! PREFIX="$(pwd)/depends/x86_64-unknown-linux-gnu/"
|
||
|
|
||
|
! HOST=x86_64-unknown-linux-gnu BUILD=x86_64-unknown-linux-gnu make "$@" -C ./depends/ V=1 NO_QT=1
|
||
|
./autogen.sh
|
||
|
! ./configure --prefix="${PREFIX}" --host=x86_64-unknown-linux-gnu --build=x86_64-unknown-linux-gnu --with-gui=no "$HARDENING_ARG" "$LCOV_ARG" CXXFLAGS='-fwrapv -fno-strict-aliasing -Werror -g'
|
||
|
! make "$@" V=1
|
||
|
--- 50,70 ----
|
||
|
# If --enable-lcov is the first argument, enable lcov coverage support:
|
||
|
LCOV_ARG=''
|
||
|
HARDENING_ARG='--enable-hardening'
|
||
|
+ TEST_ARG=''
|
||
|
if [ "x${1:-}" = 'x--enable-lcov' ]
|
||
|
then
|
||
|
LCOV_ARG='--enable-lcov'
|
||
|
HARDENING_ARG='--disable-hardening'
|
||
|
shift
|
||
|
+ elif [ "x${1:-}" = 'x--disable-tests' ]
|
||
|
+ then
|
||
|
+ TEST_ARG='--enable-tests=no'
|
||
|
+ shift
|
||
|
fi
|
||
|
|
||
|
! PREFIX="$(pwd)/depends/$BUILD/"
|
||
|
|
||
|
! HOST="$HOST" BUILD="$BUILD" "$MAKE" "$@" -C ./depends/ V=1 NO_QT=1
|
||
|
./autogen.sh
|
||
|
! CC="$CC" CXX="$CXX" ./configure --prefix="${PREFIX}" --host="$HOST" --build="$BUILD" --with-gui=no "$HARDENING_ARG" "$LCOV_ARG" "$TEST_ARG" CXXFLAGS='-fwrapv -fno-strict-aliasing -Werror -g'
|
||
|
! "$MAKE" "$@" V=1
|
||
|
diff -crB ./zcutil/docker-entrypoint.sh ../../komodo-jl777/zcutil/docker-entrypoint.sh
|
||
|
*** ./zcutil/docker-entrypoint.sh 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/zcutil/docker-entrypoint.sh 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 14,25 ****
|
||
|
txindex=1
|
||
|
bind=${listenip:-127.0.0.1}
|
||
|
rpcbind=${listenip:-127.0.0.1}
|
||
|
- addnode=5.9.102.210
|
||
|
- addnode=78.47.196.146
|
||
|
- addnode=178.63.69.164
|
||
|
- addnode=88.198.65.74
|
||
|
- addnode=5.9.122.241
|
||
|
- addnode=144.76.94.38
|
||
|
EOF
|
||
|
|
||
|
cat $HOME/.komodo/komodo.conf
|
||
|
--- 14,19 ----
|
||
|
***************
|
||
|
*** 27,35 ****
|
||
|
|
||
|
echo "...Checking fetch-params"
|
||
|
$HOME/zcutil/fetch-params.sh
|
||
|
-
|
||
|
echo "Initialization completed successfully"
|
||
|
echo
|
||
|
if [ $# -gt 0 ]; then
|
||
|
|
||
|
args=("$@")
|
||
|
--- 21,30 ----
|
||
|
|
||
|
echo "...Checking fetch-params"
|
||
|
$HOME/zcutil/fetch-params.sh
|
||
|
echo "Initialization completed successfully"
|
||
|
echo
|
||
|
+
|
||
|
+ # ToDo: Needs some rework. I was sick
|
||
|
if [ $# -gt 0 ]; then
|
||
|
|
||
|
args=("$@")
|
||
|
diff -crB ./zcutil/docker-komodo-cli.sh ../../komodo-jl777/zcutil/docker-komodo-cli.sh
|
||
|
*** ./zcutil/docker-komodo-cli.sh 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/zcutil/docker-komodo-cli.sh 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 1,11 ****
|
||
|
#!/bin/bash
|
||
|
- if [ -z ${assetchain+x} ]; then
|
||
|
|
||
|
! /komodo/src/komodo-cli $1 $2 $3 $4
|
||
|
|
||
|
! else
|
||
|
!
|
||
|
! /komodo/src/komodo-cli -ac_name=$assetchain $1 $2 $3 $4
|
||
|
!
|
||
|
! fi
|
||
|
|
||
|
--- 1,6 ----
|
||
|
#!/bin/bash
|
||
|
|
||
|
! # ToDo: check for docker arg ac_name
|
||
|
|
||
|
! /komodo/src/komodo-cli $1 $2 $3 $4
|
||
|
|
||
|
diff -crB ./zcutil/fetch-params.sh ../../komodo-jl777/zcutil/fetch-params.sh
|
||
|
*** ./zcutil/fetch-params.sh 2017-01-03 10:40:50.435340501 +0000
|
||
|
--- ../../komodo-jl777/zcutil/fetch-params.sh 2017-01-03 09:49:08.876507395 +0000
|
||
|
***************
|
||
|
*** 67,72 ****
|
||
|
--- 67,76 ----
|
||
|
cat <<EOF
|
||
|
Zcash - fetch-params.sh
|
||
|
|
||
|
+ This script will fetch the Zcash zkSNARK parameters and verify their
|
||
|
+ integrity with sha256sum.
|
||
|
+
|
||
|
+ If they already exist locally, it will exit now and do nothing else.
|
||
|
EOF
|
||
|
|
||
|
# Now create PARAMS_DIR and insert a README if necessary:
|
||
|
***************
|
||
|
*** 84,92 ****
|
||
|
# This may be the first time the user's run this script, so give
|
||
|
# them some info, especially about bandwidth usage:
|
||
|
cat <<EOF
|
||
|
- This script will fetch the Zcash zkSNARK parameters and verify their
|
||
|
- integrity with sha256sum.
|
||
|
-
|
||
|
The parameters are currently just under 911MB in size, so plan accordingly
|
||
|
for your bandwidth constraints. If the files are already present and
|
||
|
have the correct sha256sum, no networking is used.
|
||
|
--- 88,93 ----
|
||
|
***************
|
||
|
*** 104,107 ****
|
||
|
--- 105,109 ----
|
||
|
}
|
||
|
|
||
|
main
|
||
|
+ rm -f /tmp/fetch_params.lock
|
||
|
exit 0
|
||
|
Only in ../../komodo-jl777/zcutil: release-notes.py
|