summaryrefslogtreecommitdiff
path: root/src/auditor
diff options
context:
space:
mode:
Diffstat (limited to 'src/auditor')
-rw-r--r--src/auditor/.gitignore7
-rw-r--r--src/auditor/Makefile.am73
-rw-r--r--src/auditor/auditor-basedb.age1
-rw-r--r--src/auditor/auditor-basedb.conf187
-rw-r--r--src/auditor/auditor-basedb.feesbin800 -> 0 bytes
-rw-r--r--src/auditor/auditor-basedb.mpub1
-rw-r--r--src/auditor/auditor-basedb.sql16131
-rw-r--r--src/auditor/auditor.conf6
-rw-r--r--src/auditor/batch.conf14
-rwxr-xr-xsrc/auditor/batch.sh22
-rw-r--r--src/auditor/generate-auditor-basedb-template.conf1
-rw-r--r--src/auditor/generate-auditor-basedb.conf202
-rwxr-xr-xsrc/auditor/generate-auditor-basedb.sh308
-rw-r--r--src/auditor/generate-kyc-basedb.conf4
-rwxr-xr-xsrc/auditor/generate-revoke-basedb.sh376
-rw-r--r--src/auditor/generate_auditordb_home/.local/share/taler/exchange-offline/master.priv1
-rw-r--r--src/auditor/report-lib.c73
-rw-r--r--src/auditor/report-lib.h53
-rw-r--r--src/auditor/revoke-basedb.age1
-rw-r--r--src/auditor/revoke-basedb.conf14
-rw-r--r--src/auditor/revoke-basedb.feesbin800 -> 0 bytes
-rw-r--r--src/auditor/revoke-basedb.mpub1
-rw-r--r--src/auditor/revoke-basedb.sql16143
-rwxr-xr-xsrc/auditor/setup.sh93
-rw-r--r--src/auditor/taler-auditor-dbinit.c4
-rw-r--r--src/auditor/taler-auditor-exchange.c224
-rw-r--r--src/auditor/taler-auditor-httpd.c76
-rw-r--r--src/auditor/taler-auditor-httpd.h6
-rw-r--r--src/auditor/taler-auditor-httpd_deposit-confirmation-get.c166
-rw-r--r--src/auditor/taler-auditor-httpd_deposit-confirmation-get.h70
-rw-r--r--src/auditor/taler-auditor-httpd_deposit-confirmation.c148
-rw-r--r--src/auditor/taler-auditor-httpd_deposit-confirmation.h1
-rw-r--r--src/auditor/taler-auditor-httpd_exchanges.c116
-rw-r--r--src/auditor/taler-auditor-httpd_exchanges.h46
-rw-r--r--src/auditor/taler-auditor-sync.c31
-rw-r--r--src/auditor/taler-auditor.in20
-rw-r--r--src/auditor/taler-helper-auditor-aggregation.c368
-rw-r--r--src/auditor/taler-helper-auditor-coins.c1153
-rw-r--r--src/auditor/taler-helper-auditor-deposits.c239
-rw-r--r--src/auditor/taler-helper-auditor-purses.c1451
-rw-r--r--src/auditor/taler-helper-auditor-render.py12
-rw-r--r--src/auditor/taler-helper-auditor-reserves.c1193
-rw-r--r--src/auditor/taler-helper-auditor-wire.c1320
-rwxr-xr-xsrc/auditor/test-auditor.sh2627
-rwxr-xr-xsrc/auditor/test-kyc.sh751
-rwxr-xr-xsrc/auditor/test-revocation.sh888
-rwxr-xr-xsrc/auditor/test-sync.sh184
47 files changed, 8453 insertions, 36353 deletions
diff --git a/src/auditor/.gitignore b/src/auditor/.gitignore
index 6d25d8bae..11c875dc6 100644
--- a/src/auditor/.gitignore
+++ b/src/auditor/.gitignore
@@ -19,3 +19,10 @@ generate-auditor-basedb-revocation.conf
revocation-tmp-*
auditor-basedb.wdb
taler-auditor-sync
+auditor-basedb.sqlite3
+taler-auditor-test.sqlite3
+libeufin-nexus.pid
+libeufin-sandbox.pid
+taler-helper-auditor-purses
+generate-kyc-basedb.conf.edited
+generate-auditor-basedb.conf.edited
diff --git a/src/auditor/Makefile.am b/src/auditor/Makefile.am
index 6d49da6db..381c0b115 100644
--- a/src/auditor/Makefile.am
+++ b/src/auditor/Makefile.am
@@ -16,12 +16,12 @@ clean-local:
bin_PROGRAMS = \
taler-auditor-dbinit \
- taler-auditor-exchange \
taler-auditor-httpd \
taler-auditor-sync \
taler-helper-auditor-aggregation \
taler-helper-auditor-coins \
taler-helper-auditor-deposits \
+ taler-helper-auditor-purses \
taler-helper-auditor-reserves \
taler-helper-auditor-wire
@@ -65,9 +65,9 @@ taler_auditor_dbinit_CPPFLAGS = \
-I$(top_srcdir)/src/pq/ \
$(POSTGRESQL_CPPFLAGS)
-taler_helper_auditor_reserves_SOURCES = \
- taler-helper-auditor-reserves.c
-taler_helper_auditor_reserves_LDADD = \
+taler_helper_auditor_coins_SOURCES = \
+ taler-helper-auditor-coins.c
+taler_helper_auditor_coins_LDADD = \
$(LIBGCRYPT_LIBS) \
$(top_builddir)/src/util/libtalerutil.la \
$(top_builddir)/src/json/libtalerjson.la \
@@ -80,9 +80,9 @@ taler_helper_auditor_reserves_LDADD = \
-lgnunetutil \
$(XLIB)
-taler_helper_auditor_coins_SOURCES = \
- taler-helper-auditor-coins.c
-taler_helper_auditor_coins_LDADD = \
+taler_helper_auditor_aggregation_SOURCES = \
+ taler-helper-auditor-aggregation.c
+taler_helper_auditor_aggregation_LDADD = \
$(LIBGCRYPT_LIBS) \
$(top_builddir)/src/util/libtalerutil.la \
$(top_builddir)/src/json/libtalerjson.la \
@@ -95,9 +95,9 @@ taler_helper_auditor_coins_LDADD = \
-lgnunetutil \
$(XLIB)
-taler_helper_auditor_aggregation_SOURCES = \
- taler-helper-auditor-aggregation.c
-taler_helper_auditor_aggregation_LDADD = \
+taler_helper_auditor_deposits_SOURCES = \
+ taler-helper-auditor-deposits.c
+taler_helper_auditor_deposits_LDADD = \
$(LIBGCRYPT_LIBS) \
$(top_builddir)/src/util/libtalerutil.la \
$(top_builddir)/src/json/libtalerjson.la \
@@ -110,9 +110,24 @@ taler_helper_auditor_aggregation_LDADD = \
-lgnunetutil \
$(XLIB)
-taler_helper_auditor_deposits_SOURCES = \
- taler-helper-auditor-deposits.c
-taler_helper_auditor_deposits_LDADD = \
+taler_helper_auditor_purses_SOURCES = \
+ taler-helper-auditor-purses.c
+taler_helper_auditor_purses_LDADD = \
+ $(LIBGCRYPT_LIBS) \
+ $(top_builddir)/src/util/libtalerutil.la \
+ $(top_builddir)/src/json/libtalerjson.la \
+ $(top_builddir)/src/bank-lib/libtalerbank.la \
+ $(top_builddir)/src/exchangedb/libtalerexchangedb.la \
+ $(top_builddir)/src/auditordb/libtalerauditordb.la \
+ libauditorreport.la \
+ -ljansson \
+ -lgnunetjson \
+ -lgnunetutil \
+ $(XLIB)
+
+taler_helper_auditor_reserves_SOURCES = \
+ taler-helper-auditor-reserves.c
+taler_helper_auditor_reserves_LDADD = \
$(LIBGCRYPT_LIBS) \
$(top_builddir)/src/util/libtalerutil.la \
$(top_builddir)/src/json/libtalerjson.la \
@@ -125,6 +140,8 @@ taler_helper_auditor_deposits_LDADD = \
-lgnunetutil \
$(XLIB)
+
+
taler_helper_auditor_wire_SOURCES = \
taler-helper-auditor-wire.c
taler_helper_auditor_wire_LDADD = \
@@ -145,7 +162,7 @@ taler_helper_auditor_wire_LDADD = \
taler_auditor_httpd_SOURCES = \
taler-auditor-httpd.c taler-auditor-httpd.h \
taler-auditor-httpd_deposit-confirmation.c taler-auditor-httpd_deposit-confirmation.h \
- taler-auditor-httpd_exchanges.c taler-auditor-httpd_exchanges.h \
+ taler-auditor-httpd_deposit-confirmation-get.c taler-auditor-httpd_deposit-confirmation-get.h \
taler-auditor-httpd_mhd.c taler-auditor-httpd_mhd.h
taler_auditor_httpd_LDADD = \
$(LIBGCRYPT_LIBS) \
@@ -161,15 +178,6 @@ taler_auditor_httpd_LDADD = \
-lz \
$(XLIB)
-taler_auditor_exchange_SOURCES = \
- taler-auditor-exchange.c
-taler_auditor_exchange_LDADD = \
- $(LIBGCRYPT_LIBS) \
- $(top_builddir)/src/util/libtalerutil.la \
- $(top_builddir)/src/auditordb/libtalerauditordb.la \
- -lgnunetutil \
- $(XLIB)
-
taler_auditor_sync_SOURCES = \
taler-auditor-sync.c
taler_auditor_sync_LDADD = \
@@ -189,29 +197,22 @@ taler_auditor_sync_CPPFLAGS = \
check_SCRIPTS = \
test-auditor.sh \
+ test-kyc.sh \
test-revocation.sh \
test-sync.sh
.NOTPARALLEL:
-# revocation test disabled for now: need working wallet first!
-TESTS = $(check_SCRIPTS)
+# TESTS = $(check_SCRIPTS)
EXTRA_DIST = \
taler-auditor.in \
taler-helper-auditor-render.py \
auditor.conf \
+ setup.sh \
test-sync-in.conf \
test-sync-out.conf \
generate-auditor-basedb.sh \
- generate-revoke-basedb.sh \
generate-auditor-basedb.conf \
- generate-auditor-basedb-template.conf \
- $(check_SCRIPTS) \
- auditor-basedb.age \
- auditor-basedb.conf \
- auditor-basedb.sql \
- auditor-basedb.mpub \
- revoke-basedb.age \
- revoke-basedb.conf \
- revoke-basedb.sql \
- revoke-basedb.mpub
+ generate-kyc-basedb.conf \
+ generate-revoke-basedb.sh \
+ $(check_SCRIPTS)
diff --git a/src/auditor/auditor-basedb.age b/src/auditor/auditor-basedb.age
deleted file mode 100644
index 18fdb08e5..000000000
--- a/src/auditor/auditor-basedb.age
+++ /dev/null
@@ -1 +0,0 @@
-1651516353
diff --git a/src/auditor/auditor-basedb.conf b/src/auditor/auditor-basedb.conf
deleted file mode 100644
index a67f2bf1a..000000000
--- a/src/auditor/auditor-basedb.conf
+++ /dev/null
@@ -1,187 +0,0 @@
-[arm]
-CONFIG = /research/taler/exchange/src/auditor/auditor-basedb.conf
-
-[benchmark]
-MERCHANT_DETAILS = merchant_details.json
-BANK_DETAILS = bank_details.json
-
-[coin_kudos_10]
-rsa_keysize = 1024
-CIPHER = RSA
-fee_refund = TESTKUDOS:0.01
-fee_refresh = TESTKUDOS:0.03
-fee_deposit = TESTKUDOS:0.01
-fee_withdraw = TESTKUDOS:0.01
-duration_legal = 3 years
-duration_spend = 2 years
-duration_withdraw = 7 days
-value = TESTKUDOS:10
-
-[coin_kudos_8]
-rsa_keysize = 1024
-CIPHER = RSA
-fee_refund = TESTKUDOS:0.04
-fee_refresh = TESTKUDOS:0.03
-fee_deposit = TESTKUDOS:0.02
-fee_withdraw = TESTKUDOS:0.05
-duration_legal = 3 years
-duration_spend = 2 years
-duration_withdraw = 7 days
-value = TESTKUDOS:8
-
-[coin_kudos_5]
-rsa_keysize = 1024
-CIPHER = RSA
-fee_refund = TESTKUDOS:0.01
-fee_refresh = TESTKUDOS:0.03
-fee_deposit = TESTKUDOS:0.01
-fee_withdraw = TESTKUDOS:0.01
-duration_legal = 3 years
-duration_spend = 2 years
-duration_withdraw = 7 days
-value = TESTKUDOS:5
-
-[coin_kudos_4]
-rsa_keysize = 1024
-CIPHER = RSA
-fee_refund = TESTKUDOS:0.02
-fee_refresh = TESTKUDOS:0.04
-fee_deposit = TESTKUDOS:0.03
-fee_withdraw = TESTKUDOS:0.03
-duration_legal = 3 years
-duration_spend = 2 years
-duration_withdraw = 7 days
-value = TESTKUDOS:4
-
-[coin_kudos_2]
-rsa_keysize = 1024
-CIPHER = RSA
-fee_refund = TESTKUDOS:0.02
-fee_refresh = TESTKUDOS:0.04
-fee_deposit = TESTKUDOS:0.03
-fee_withdraw = TESTKUDOS:0.03
-duration_legal = 3 years
-duration_spend = 2 years
-duration_withdraw = 7 days
-value = TESTKUDOS:2
-
-[coin_kudos_1]
-rsa_keysize = 1024
-CIPHER = RSA
-fee_refund = TESTKUDOS:0.01
-fee_refresh = TESTKUDOS:0.03
-fee_deposit = TESTKUDOS:0.02
-fee_withdraw = TESTKUDOS:0.02
-duration_legal = 3 years
-duration_spend = 2 years
-duration_withdraw = 7 days
-value = TESTKUDOS:1
-
-[coin_kudos_ct_10]
-rsa_keysize = 1024
-CIPHER = RSA
-fee_refund = TESTKUDOS:0.01
-fee_refresh = TESTKUDOS:0.03
-fee_deposit = TESTKUDOS:0.01
-fee_withdraw = TESTKUDOS:0.01
-duration_legal = 3 years
-duration_spend = 2 years
-duration_withdraw = 7 days
-value = TESTKUDOS:0.10
-
-[coin_kudos_ct_1]
-rsa_keysize = 1024
-CIPHER = RSA
-fee_refund = TESTKUDOS:0.01
-fee_refresh = TESTKUDOS:0.01
-fee_deposit = TESTKUDOS:0.01
-fee_withdraw = TESTKUDOS:0.01
-duration_legal = 3 years
-duration_spend = 2 years
-duration_withdraw = 7 days
-value = TESTKUDOS:0.01
-
-[payments-generator]
-exchange = http://localhost:8081/
-exchange-admin = http://localhost:18080/
-exchange_admin = http://localhost:18080/
-merchant = http://localhost:9966/
-bank = http://localhost:8082/
-instance = default
-currency = TESTKUDOS
-
-[merchant-exchange-default]
-CURRENCY = TESTKUDOS
-EXCHANGE_BASE_URL = http://localhost:8081/
-MASTER_KEY = W2824S2YNKFZDR0P57Q005J23XGFWSE2GB24A1YS0157NE3F24NG
-
-[merchant-account-merchant]
-ACTIVE_default = YES
-HONOR_default = YES
-PAYTO_URI = payto://x-taler-bank/localhost/42
-
-[exchange-accountcredentials-1]
-PASSWORD = x
-USERNAME = Exchange
-WIRE_GATEWAY_AUTH_METHOD = basic
-WIRE_GATEWAY_URL = http://localhost:8082/taler-wire-gateway/Exchange/
-
-[exchange-account-1]
-enable_credit = yes
-enable_debit = yes
-PAYTO_URI = payto://x-taler-bank/localhost/Exchange
-
-[instance-default]
-NAME = Merchant Inc.
-KEYFILE = ${TALER_DATA_HOME}/merchant/default.priv
-
-[taler]
-CURRENCY_ROUND_UNIT = TESTKUDOS:0.01
-CURRENCY = TESTKUDOS
-
-[merchantdb-postgres]
-CONFIG = postgres:///auditor-basedb
-
-[merchant]
-DEFAULT_MAX_WIRE_FEE = TESTKUDOS:0.10
-KEYFILE = ${TALER_DATA_HOME}/merchant/merchant.priv
-DEFAULT_MAX_DEPOSIT_FEE = TESTKUDOS:0.1
-WIREFORMAT = default
-WIRE_TRANSFER_DELAY = 1 minute
-FORCE_AUDIT = YES
-UNIXPATH = ${TALER_RUNTIME_DIR}/merchant.http
-
-[exchangedb-postgres]
-CONFIG = postgres:///auditor-basedb
-
-[exchange]
-LOOKAHEAD_SIGN = 32 weeks 1 day
-SIGNKEY_DURATION = 4 weeks
-MASTER_PUBLIC_KEY = W2824S2YNKFZDR0P57Q005J23XGFWSE2GB24A1YS0157NE3F24NG
-SIGNKEY_LEGAL_DURATION = 4 weeks
-UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
-
-[bank]
-SERVE = http
-ALLOW_REGISTRATIONS = YES
-SUGGESTED_EXCHANGE_PAYTO = payto://x-taler-bank/localhost/2
-SUGGESTED_EXCHANGE = http://localhost:8081/
-HTTP_PORT = 8082
-MAX_DEBT_BANK = TESTKUDOS:100000.0
-MAX_DEBT = TESTKUDOS:50.0
-DATABASE = postgres:///auditor-basedb
-
-[auditordb-postgres]
-CONFIG = postgres:///auditor-basedb
-
-[auditor]
-PUBLIC_KEY = MSF4QDJMZTT9CC5EMHS480F652QAS40SEXEPAW0GGB9G9RB9B5T0
-TINY_AMOUNT = TESTKUDOS:0.01
-BASE_URL = http://localhost:8083/
-
-[PATHS]
-TALER_CACHE_HOME = $TALER_HOME/.cache/taler/
-TALER_CONFIG_HOME = $TALER_HOME/.config/taler/
-TALER_DATA_HOME = $TALER_HOME/.local/share/taler/
-TALER_HOME = ${PWD}/generate_auditordb_home/
-
diff --git a/src/auditor/auditor-basedb.fees b/src/auditor/auditor-basedb.fees
deleted file mode 100644
index ef2a6d121..000000000
--- a/src/auditor/auditor-basedb.fees
+++ /dev/null
Binary files differ
diff --git a/src/auditor/auditor-basedb.mpub b/src/auditor/auditor-basedb.mpub
deleted file mode 100644
index efa2b454b..000000000
--- a/src/auditor/auditor-basedb.mpub
+++ /dev/null
@@ -1 +0,0 @@
-NYBEPNN9Z5C6ZKM4BTD7TWRD9EBE6TE2YE12STA6GJHBP4HVQCYG
diff --git a/src/auditor/auditor-basedb.sql b/src/auditor/auditor-basedb.sql
deleted file mode 100644
index e2b83be64..000000000
--- a/src/auditor/auditor-basedb.sql
+++ /dev/null
@@ -1,16131 +0,0 @@
---
--- PostgreSQL database dump
---
-
--- Dumped from database version 13.5 (Debian 13.5-0+deb11u1)
--- Dumped by pg_dump version 13.5 (Debian 13.5-0+deb11u1)
-
-SET statement_timeout = 0;
-SET lock_timeout = 0;
-SET idle_in_transaction_session_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = on;
-SELECT pg_catalog.set_config('search_path', '', false);
-SET check_function_bodies = false;
-SET xmloption = content;
-SET client_min_messages = warning;
-SET row_security = off;
-
---
--- Name: _v; Type: SCHEMA; Schema: -; Owner: -
---
-
-CREATE SCHEMA _v;
-
-
---
--- Name: SCHEMA _v; Type: COMMENT; Schema: -; Owner: -
---
-
-COMMENT ON SCHEMA _v IS 'Schema for versioning data and functionality.';
-
-
---
--- Name: assert_patch_is_applied(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_patch_is_applied(in_patch_name text) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- t_text TEXT;
-BEGIN
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_patch_name;
- IF NOT FOUND THEN
- RAISE EXCEPTION 'Patch % is not applied!', in_patch_name;
- END IF;
- RETURN format('Patch %s is applied.', in_patch_name);
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_patch_is_applied(in_patch_name text); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_patch_is_applied(in_patch_name text) IS 'Function that can be used to make sure that patch has been applied.';
-
-
---
--- Name: assert_user_is_not_superuser(); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_not_superuser() RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_super bool;
-BEGIN
- SELECT usesuper INTO v_super FROM pg_user WHERE usename = current_user;
- IF v_super THEN
- RAISE EXCEPTION 'Current user is superuser - cannot continue.';
- END IF;
- RETURN 'assert_user_is_not_superuser: OK';
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_not_superuser(); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_not_superuser() IS 'Function that can be used to make sure that patch is being applied using normal (not superuser) account.';
-
-
---
--- Name: assert_user_is_one_of(text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_one_of(VARIADIC p_acceptable_users text[]) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
-BEGIN
- IF current_user = any( p_acceptable_users ) THEN
- RETURN 'assert_user_is_one_of: OK';
- END IF;
- RAISE EXCEPTION 'User is not one of: % - cannot continue.', p_acceptable_users;
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_one_of(VARIADIC p_acceptable_users text[]); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_one_of(VARIADIC p_acceptable_users text[]) IS 'Function that can be used to make sure that patch is being applied by one of defined users.';
-
-
---
--- Name: assert_user_is_superuser(); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_superuser() RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_super bool;
-BEGIN
- SELECT usesuper INTO v_super FROM pg_user WHERE usename = current_user;
- IF v_super THEN
- RETURN 'assert_user_is_superuser: OK';
- END IF;
- RAISE EXCEPTION 'Current user is not superuser - cannot continue.';
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_superuser(); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_superuser() IS 'Function that can be used to make sure that patch is being applied using superuser account.';
-
-
---
--- Name: register_patch(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(text) RETURNS SETOF integer
- LANGUAGE sql
- AS $_$
- SELECT _v.register_patch( $1, NULL, NULL );
-$_$;
-
-
---
--- Name: FUNCTION register_patch(text); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(text) IS 'Wrapper to allow registration of patches without requirements and conflicts.';
-
-
---
--- Name: register_patch(text, text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(text, text[]) RETURNS SETOF integer
- LANGUAGE sql
- AS $_$
- SELECT _v.register_patch( $1, $2, NULL );
-$_$;
-
-
---
--- Name: FUNCTION register_patch(text, text[]); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(text, text[]) IS 'Wrapper to allow registration of patches without conflicts.';
-
-
---
--- Name: register_patch(text, text[], text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer) RETURNS SETOF integer
- LANGUAGE plpgsql
- AS $$
-DECLARE
- t_text TEXT;
- t_text_a TEXT[];
- i INT4;
-BEGIN
- -- Thanks to this we know only one patch will be applied at a time
- LOCK TABLE _v.patches IN EXCLUSIVE MODE;
-
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_patch_name;
- IF FOUND THEN
- RAISE EXCEPTION 'Patch % is already applied!', in_patch_name;
- END IF;
-
- t_text_a := ARRAY( SELECT patch_name FROM _v.patches WHERE patch_name = any( in_conflicts ) );
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Versioning patches conflict. Conflicting patche(s) installed: %.', array_to_string( t_text_a, ', ' );
- END IF;
-
- IF array_upper( in_requirements, 1 ) IS NOT NULL THEN
- t_text_a := '{}';
- FOR i IN array_lower( in_requirements, 1 ) .. array_upper( in_requirements, 1 ) LOOP
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_requirements[i];
- IF NOT FOUND THEN
- t_text_a := t_text_a || in_requirements[i];
- END IF;
- END LOOP;
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Missing prerequisite(s): %.', array_to_string( t_text_a, ', ' );
- END IF;
- END IF;
-
- INSERT INTO _v.patches (patch_name, applied_tsz, applied_by, requires, conflicts ) VALUES ( in_patch_name, now(), current_user, coalesce( in_requirements, '{}' ), coalesce( in_conflicts, '{}' ) );
- RETURN;
-END;
-$$;
-
-
---
--- Name: FUNCTION register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer) IS 'Function to register patches in database. Raises exception if there are conflicts, prerequisites are not installed or the migration has already been installed.';
-
-
---
--- Name: unregister_patch(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.unregister_patch(in_patch_name text, OUT versioning integer) RETURNS SETOF integer
- LANGUAGE plpgsql
- AS $$
-DECLARE
- i INT4;
- t_text_a TEXT[];
-BEGIN
- -- Thanks to this we know only one patch will be applied at a time
- LOCK TABLE _v.patches IN EXCLUSIVE MODE;
-
- t_text_a := ARRAY( SELECT patch_name FROM _v.patches WHERE in_patch_name = ANY( requires ) );
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Cannot uninstall %, as it is required by: %.', in_patch_name, array_to_string( t_text_a, ', ' );
- END IF;
-
- DELETE FROM _v.patches WHERE patch_name = in_patch_name;
- GET DIAGNOSTICS i = ROW_COUNT;
- IF i < 1 THEN
- RAISE EXCEPTION 'Patch % is not installed, so it can''t be uninstalled!', in_patch_name;
- END IF;
-
- RETURN;
-END;
-$$;
-
-
---
--- Name: FUNCTION unregister_patch(in_patch_name text, OUT versioning integer); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.unregister_patch(in_patch_name text, OUT versioning integer) IS 'Function to unregister patches in database. Dies if the patch is not registered, or if unregistering it would break dependencies.';
-
-
---
--- Name: add_constraints_to_account_merges_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_account_merges_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE account_merges_' || partition_suffix || ' '
- 'ADD CONSTRAINT account_merges_' || partition_suffix || '_account_merge_request_serial_id_key '
- 'UNIQUE (account_merge_request_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_aggregation_tracking_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_aggregation_tracking_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE aggregation_tracking_' || partition_suffix || ' '
- 'ADD CONSTRAINT aggregation_tracking_' || partition_suffix || '_aggregation_serial_id_key '
- 'UNIQUE (aggregation_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_contracts_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_contracts_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE contracts_' || partition_suffix || ' '
- 'ADD CONSTRAINT contracts_' || partition_suffix || '_contract_serial_id_key '
- 'UNIQUE (contract_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_cs_nonce_locks_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_cs_nonce_locks_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE cs_nonce_locks_' || partition_suffix || ' '
- 'ADD CONSTRAINT cs_nonce_locks_' || partition_suffix || '_cs_nonce_lock_serial_id_key '
- 'UNIQUE (cs_nonce_lock_serial_id)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_deposits_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_deposits_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE deposits_' || partition_suffix || ' '
- 'ADD CONSTRAINT deposits_' || partition_suffix || '_deposit_serial_id_pkey '
- 'PRIMARY KEY (deposit_serial_id) '
- ',ADD CONSTRAINT deposits_' || partition_suffix || '_coin_pub_merchant_pub_h_contract_terms_key '
- 'UNIQUE (coin_pub, merchant_pub, h_contract_terms)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_known_coins_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_known_coins_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE known_coins_' || partition_suffix || ' '
- 'ADD CONSTRAINT known_coins_' || partition_suffix || '_known_coin_id_key '
- 'UNIQUE (known_coin_id)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_purse_deposits_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_purse_deposits_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE purse_deposits_' || partition_suffix || ' '
- 'ADD CONSTRAINT purse_deposits_' || partition_suffix || '_purse_deposit_serial_id_key '
- 'UNIQUE (purse_deposit_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_purse_merges_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_purse_merges_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE purse_merges_' || partition_suffix || ' '
- 'ADD CONSTRAINT purse_merges_' || partition_suffix || '_purse_merge_request_serial_id_key '
- 'UNIQUE (purse_merge_request_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_purse_requests_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_purse_requests_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE purse_requests_' || partition_suffix || ' '
- 'ADD CONSTRAINT purse_requests_' || partition_suffix || '_purse_requests_serial_id_key '
- 'UNIQUE (purse_requests_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_recoup_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_recoup_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE recoup_' || partition_suffix || ' '
- 'ADD CONSTRAINT recoup_' || partition_suffix || '_recoup_uuid_key '
- 'UNIQUE (recoup_uuid) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_recoup_refresh_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_recoup_refresh_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE recoup_refresh_' || partition_suffix || ' '
- 'ADD CONSTRAINT recoup_refresh_' || partition_suffix || '_recoup_refresh_uuid_key '
- 'UNIQUE (recoup_refresh_uuid) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_refresh_commitments_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_refresh_commitments_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE refresh_commitments_' || partition_suffix || ' '
- 'ADD CONSTRAINT refresh_commitments_' || partition_suffix || '_melt_serial_id_key '
- 'UNIQUE (melt_serial_id)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_refresh_revealed_coins_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_refresh_revealed_coins_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE refresh_revealed_coins_' || partition_suffix || ' '
- 'ADD CONSTRAINT refresh_revealed_coins_' || partition_suffix || '_rrc_serial_key '
- 'UNIQUE (rrc_serial) '
- ',ADD CONSTRAINT refresh_revealed_coins_' || partition_suffix || '_coin_ev_key '
- 'UNIQUE (coin_ev) '
- ',ADD CONSTRAINT refresh_revealed_coins_' || partition_suffix || '_h_coin_ev_key '
- 'UNIQUE (h_coin_ev) '
- ',ADD PRIMARY KEY (melt_serial_id, freshcoin_index) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_refresh_transfer_keys_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_refresh_transfer_keys_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE refresh_transfer_keys_' || partition_suffix || ' '
- 'ADD CONSTRAINT refresh_transfer_keys_' || partition_suffix || '_rtc_serial_key '
- 'UNIQUE (rtc_serial)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_refunds_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_refunds_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE refunds_' || partition_suffix || ' '
- 'ADD CONSTRAINT refunds_' || partition_suffix || '_refund_serial_id_key '
- 'UNIQUE (refund_serial_id) '
- ',ADD PRIMARY KEY (deposit_serial_id, rtransaction_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_reserves_close_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_reserves_close_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE reserves_close_' || partition_suffix || ' '
- 'ADD CONSTRAINT reserves_close_' || partition_suffix || '_close_uuid_pkey '
- 'PRIMARY KEY (close_uuid)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_reserves_in_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_reserves_in_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE reserves_in_' || partition_suffix || ' '
- 'ADD CONSTRAINT reserves_in_' || partition_suffix || '_reserve_in_serial_id_key '
- 'UNIQUE (reserve_in_serial_id)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_reserves_out_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_reserves_out_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE reserves_out_' || partition_suffix || ' '
- 'ADD CONSTRAINT reserves_out_' || partition_suffix || '_reserve_out_serial_id_key '
- 'UNIQUE (reserve_out_serial_id)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wad_in_entries_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wad_in_entries_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE wad_in_entries_' || partition_suffix || ' '
- 'ADD CONSTRAINT wad_in_entries_' || partition_suffix || '_wad_in_entry_serial_id_key '
- 'UNIQUE (wad_in_entry_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wad_out_entries_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wad_out_entries_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE wad_out_entries_' || partition_suffix || ' '
- 'ADD CONSTRAINT wad_out_entries_' || partition_suffix || '_wad_out_entry_serial_id_key '
- 'UNIQUE (wad_out_entry_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wads_in_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wads_in_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE wads_in_' || partition_suffix || ' '
- 'ADD CONSTRAINT wads_in_' || partition_suffix || '_wad_in_serial_id_key '
- 'UNIQUE (wad_in_serial_id) '
- ',ADD CONSTRAINT wads_in_' || partition_suffix || '_wad_is_origin_exchange_url_key '
- 'UNIQUE (wad_id, origin_exchange_url) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wads_out_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wads_out_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE wads_out_' || partition_suffix || ' '
- 'ADD CONSTRAINT wads_out_' || partition_suffix || '_wad_out_serial_id_key '
- 'UNIQUE (wad_out_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wire_out_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wire_out_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE wire_out_' || partition_suffix || ' '
- 'ADD CONSTRAINT wire_out_' || partition_suffix || '_wireout_uuid_pkey '
- 'PRIMARY KEY (wireout_uuid)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wire_targets_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wire_targets_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- EXECUTE FORMAT (
- 'ALTER TABLE wire_targets_' || partition_suffix || ' '
- 'ADD CONSTRAINT wire_targets_' || partition_suffix || '_wire_target_serial_id_key '
- 'UNIQUE (wire_target_serial_id)'
- );
-END
-$$;
-
-
---
--- Name: create_foreign_hash_partition(character varying, integer, character varying, integer, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_foreign_hash_partition(source_table_name character varying, modulus integer, shard_suffix character varying, current_shard_num integer, local_user character varying DEFAULT 'taler-exchange-httpd'::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- RAISE NOTICE 'Creating %_% on %', source_table_name, shard_suffix, shard_suffix;
-
- EXECUTE FORMAT(
- 'CREATE FOREIGN TABLE IF NOT EXISTS %I '
- 'PARTITION OF %I '
- 'FOR VALUES WITH (MODULUS %s, REMAINDER %s) '
- 'SERVER %I'
- ,source_table_name || '_' || shard_suffix
- ,source_table_name
- ,modulus
- ,current_shard_num-1
- ,shard_suffix
- );
-
- EXECUTE FORMAT(
- 'ALTER FOREIGN TABLE %I OWNER TO %I'
- ,source_table_name || '_' || shard_suffix
- ,local_user
- );
-
-END
-$$;
-
-
---
--- Name: create_foreign_range_partition(character varying, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_foreign_range_partition(source_table_name character varying, partition_num integer) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- RAISE NOTICE 'TODO';
-END
-$$;
-
-
---
--- Name: create_foreign_servers(integer, character varying, character varying, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_foreign_servers(amount integer, domain character varying, remote_user character varying DEFAULT 'taler'::character varying, remote_user_password character varying DEFAULT 'taler'::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- PERFORM prepare_sharding();
-
- FOR i IN 1..amount LOOP
- PERFORM create_shard_server(
- i::varchar
- ,amount
- ,i
- ,'shard-' || i::varchar || '.' || domain
- ,remote_user
- ,remote_user_password
- ,'taler-exchange'
- ,'5432'
- ,'taler-exchange-httpd'
- );
- END LOOP;
-
- PERFORM drop_default_partitions();
-
-END
-$$;
-
-
---
--- Name: create_hash_partition(character varying, integer, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_hash_partition(source_table_name character varying, modulus integer, partition_num integer) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- RAISE NOTICE 'Creating partition %_%', source_table_name, partition_num;
-
- EXECUTE FORMAT(
- 'CREATE TABLE IF NOT EXISTS %I '
- 'PARTITION OF %I '
- 'FOR VALUES WITH (MODULUS %s, REMAINDER %s)'
- ,source_table_name || '_' || partition_num
- ,source_table_name
- ,modulus
- ,partition_num-1
- );
-
-END
-$$;
-
-
---
--- Name: create_partitioned_table(character varying, character varying, character varying, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_partitioned_table(table_definition character varying, table_name character varying, main_table_partition_str character varying, shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- IF shard_suffix IS NOT NULL THEN
- table_name=table_name || '_' || shard_suffix;
- main_table_partition_str = '';
- END IF;
-
- EXECUTE FORMAT(
- table_definition,
- table_name,
- main_table_partition_str
- );
-
-END
-$$;
-
-
---
--- Name: create_partitions(integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_partitions(num_partitions integer) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- modulus INTEGER;
-BEGIN
-
- modulus := num_partitions;
-
- PERFORM detach_default_partitions();
-
- LOOP
-
- PERFORM create_hash_partition(
- 'wire_targets'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_wire_targets_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'reserves'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'reserves_in'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_reserves_in_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'reserves_close'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_reserves_close_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'reserves_out'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_reserves_out_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'reserves_out_by_reserve'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'known_coins'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_known_coins_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'refresh_commitments'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_refresh_commitments_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'refresh_revealed_coins'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_refresh_revealed_coins_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'refresh_transfer_keys'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_refresh_transfer_keys_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'deposits'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_deposits_partition(num_partitions::varchar);
-
--- TODO: dynamically (!) creating/deleting deposits partitions:
--- create new partitions 'as needed', drop old ones once the aggregator has made
--- them empty; as 'new' deposits will always have deadlines in the future, this
--- would basically guarantee no conflict between aggregator and exchange service!
--- SEE also: https://www.cybertec-postgresql.com/en/automatic-partition-creation-in-postgresql/
--- (article is slightly wrong, as this works:)
---CREATE TABLE tab (
--- id bigint GENERATED ALWAYS AS IDENTITY,
--- ts timestamp NOT NULL,
--- data text
--- PARTITION BY LIST ((ts::date));
--- CREATE TABLE tab_def PARTITION OF tab DEFAULT;
--- BEGIN
--- CREATE TABLE tab_part2 (LIKE tab);
--- insert into tab_part2 (id,ts, data) values (5,'2022-03-21', 'foo');
--- alter table tab attach partition tab_part2 for values in ('2022-03-21');
--- commit;
--- Naturally, to ensure this is actually 100% conflict-free, we'd
--- need to create tables at the granularity of the wire/refund deadlines;
--- that is right now configurable via AGGREGATOR_SHIFT option.
-
--- FIXME: range partitioning
--- PERFORM create_range_partition(
--- 'deposits_by_ready'
--- ,modulus
--- ,num_partitions
--- );
---
--- PERFORM create_range_partition(
--- 'deposits_for_matching'
--- ,modulus
--- ,num_partitions
--- );
-
- PERFORM create_hash_partition(
- 'refunds'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_refunds_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'wire_out'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_wire_out_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'aggregation_transient'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'aggregation_tracking'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_aggregation_tracking_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'recoup'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_recoup_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'recoup_by_reserve'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'recoup_refresh'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_recoup_refresh_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'prewire'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'cs_nonce_locks'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_cs_nonce_locks_partition(num_partitions::varchar);
-
- ---------------- P2P ----------------------
-
- PERFORM create_hash_partition(
- 'purse_requests'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_purse_requests_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'purse_merges'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_purse_merges_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'account_merges'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_account_merges_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'contracts'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_contracts_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'history_requests'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'close_requests'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'purse_deposits'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_purse_deposits_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'wad_out_entries'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_wad_out_entries_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'wads_in'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_wads_in_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'wad_in_entries'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_wad_in_entries_partition(num_partitions::varchar);
-
- num_partitions=num_partitions-1;
- EXIT WHEN num_partitions=0;
-
- END LOOP;
-
- PERFORM drop_default_partitions();
-
-END
-$$;
-
-
---
--- Name: create_range_partition(character varying, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_range_partition(source_table_name character varying, partition_num integer) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- RAISE NOTICE 'TODO';
-END
-$$;
-
-
---
--- Name: create_shard_server(character varying, integer, integer, character varying, character varying, character varying, character varying, integer, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_shard_server(shard_suffix character varying, total_num_shards integer, current_shard_num integer, remote_host character varying, remote_user character varying, remote_user_password character varying, remote_db_name character varying DEFAULT 'taler-exchange'::character varying, remote_port integer DEFAULT 5432, local_user character varying DEFAULT 'taler-exchange-httpd'::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- RAISE NOTICE 'Creating server %', remote_host;
-
- EXECUTE FORMAT(
- 'CREATE SERVER IF NOT EXISTS %I '
- 'FOREIGN DATA WRAPPER postgres_fdw '
- 'OPTIONS (dbname %L, host %L, port %L)'
- ,shard_suffix
- ,remote_db_name
- ,remote_host
- ,remote_port
- );
-
- EXECUTE FORMAT(
- 'CREATE USER MAPPING IF NOT EXISTS '
- 'FOR %I SERVER %I '
- 'OPTIONS (user %L, password %L)'
- ,local_user
- ,shard_suffix
- ,remote_user
- ,remote_user_password
- );
-
- EXECUTE FORMAT(
- 'GRANT ALL PRIVILEGES '
- 'ON FOREIGN SERVER %I '
- 'TO %I;'
- ,shard_suffix
- ,local_user
- );
-
- PERFORM create_foreign_hash_partition(
- 'wire_targets'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'reserves'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'reserves_in'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'reserves_out'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'reserves_out_by_reserve'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'reserves_close'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'known_coins'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'refresh_commitments'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'refresh_revealed_coins'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'refresh_transfer_keys'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'deposits'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
--- PERFORM create_foreign_range_partition(
--- 'deposits_by_ready'
--- ,total_num_shards
--- ,shard_suffix
--- ,current_shard_num
--- ,local_user
--- );
--- PERFORM create_foreign_range_partition(
--- 'deposits_for_matching'
--- ,total_num_shards
--- ,shard_suffix
--- ,current_shard_num
--- ,local_user
--- );
- PERFORM create_foreign_hash_partition(
- 'refunds'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'wire_out'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'aggregation_transient'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'aggregation_tracking'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'recoup'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'recoup_by_reserve'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'recoup_refresh'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'prewire'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'cs_nonce_locks'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
-
- ------------------- P2P --------------------
-
- PERFORM create_foreign_hash_partition(
- 'purse_requests'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'purse_merges'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'account_merges'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'contracts'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'history_requests'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'close_requests'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'purse_deposits'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'wad_out_entries'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'wads_in'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'wad_in_entries'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
-
-END
-$$;
-
-
---
--- Name: FUNCTION create_shard_server(shard_suffix character varying, total_num_shards integer, current_shard_num integer, remote_host character varying, remote_user character varying, remote_user_password character varying, remote_db_name character varying, remote_port integer, local_user character varying); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.create_shard_server(shard_suffix character varying, total_num_shards integer, current_shard_num integer, remote_host character varying, remote_user character varying, remote_user_password character varying, remote_db_name character varying, remote_port integer, local_user character varying) IS 'Create a shard server on the master
- node with all foreign tables and user mappings';
-
-
---
--- Name: create_table_account_merges(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_account_merges(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'account_merges';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(account_merge_request_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE
- ',reserve_pub BYTEA NOT NULL CHECK (LENGTH(reserve_pub)=32)' -- REFERENCES reserves (reserve_pub) ON DELETE CASCADE
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)' -- REFERENCES purse_requests (purse_pub)
- ',PRIMARY KEY (purse_pub)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by reserve_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_pub '
- 'ON ' || table_name || ' '
- '(reserve_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_aggregation_tracking(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_aggregation_tracking(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'aggregation_tracking';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(aggregation_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',deposit_serial_id INT8 PRIMARY KEY' -- REFERENCES deposits (deposit_serial_id) ON DELETE CASCADE' -- FIXME chnage to coint_pub + deposit_serial_id for more efficient depost -- or something else ???
- ',wtid_raw BYTEA NOT NULL' -- CONSTRAINT wire_out_ref REFERENCES wire_out(wtid_raw) ON DELETE CASCADE DEFERRABLE'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (deposit_serial_id)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_wtid_raw_index '
- 'ON ' || table_name || ' '
- '(wtid_raw);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_wtid_raw_index '
- 'IS ' || quote_literal('for lookup_transactions') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_aggregation_transient(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_aggregation_transient(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'aggregation_transient';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',wire_target_h_payto BYTEA CHECK (LENGTH(wire_target_h_payto)=32)'
- ',exchange_account_section TEXT NOT NULL'
- ',wtid_raw BYTEA NOT NULL CHECK (LENGTH(wtid_raw)=32)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (wire_target_h_payto)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_close_requests(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_close_requests(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'close_requests';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(reserve_pub BYTEA NOT NULL CHECK (LENGTH(reserve_pub)=32)' -- REFERENCES reserves(reserve_pub) ON DELETE CASCADE
- ',close_timestamp INT8 NOT NULL'
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',close_val INT8 NOT NULL'
- ',close_frac INT4 NOT NULL'
- ',PRIMARY KEY (reserve_pub,close_timestamp)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_pub)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_contracts(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_contracts(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'contracts';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(contract_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)'
- ',pub_ckey BYTEA NOT NULL CHECK (LENGTH(pub_ckey)=32)'
- ',contract_sig BYTEA NOT NULL CHECK (LENGTH(contract_sig)=64)'
- ',e_contract BYTEA NOT NULL'
- ',purse_expiration INT8 NOT NULL'
- ',PRIMARY KEY (purse_pub)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_cs_nonce_locks(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_cs_nonce_locks(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(cs_nonce_lock_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',nonce BYTEA PRIMARY KEY CHECK (LENGTH(nonce)=32)'
- ',op_hash BYTEA NOT NULL CHECK (LENGTH(op_hash)=64)'
- ',max_denomination_serial INT8 NOT NULL'
- ') %s ;'
- ,'cs_nonce_locks'
- ,'PARTITION BY HASH (nonce)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_deposits(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_deposits(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'deposits';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(deposit_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- PRIMARY KEY'
- ',shard INT8 NOT NULL'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub) ON DELETE CASCADE
- ',known_coin_id INT8 NOT NULL' -- REFERENCES known_coins (known_coin_id) ON DELETE CASCADE' --- FIXME: column needed???
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',wallet_timestamp INT8 NOT NULL'
- ',exchange_timestamp INT8 NOT NULL'
- ',refund_deadline INT8 NOT NULL'
- ',wire_deadline INT8 NOT NULL'
- ',merchant_pub BYTEA NOT NULL CHECK (LENGTH(merchant_pub)=32)'
- ',h_contract_terms BYTEA NOT NULL CHECK (LENGTH(h_contract_terms)=64)'
- ',coin_sig BYTEA NOT NULL CHECK (LENGTH(coin_sig)=64)'
- ',wire_salt BYTEA NOT NULL CHECK (LENGTH(wire_salt)=16)'
- ',wire_target_h_payto BYTEA CHECK (LENGTH(wire_target_h_payto)=32)'
- ',done BOOLEAN NOT NULL DEFAULT FALSE'
- ',extension_blocked BOOLEAN NOT NULL DEFAULT FALSE'
- ',extension_details_serial_id INT8' -- REFERENCES extension_details (extension_details_serial_id) ON DELETE CASCADE'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (coin_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_coin_pub_index '
- 'ON ' || table_name || ' '
- '(coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_deposits_by_ready(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_deposits_by_ready(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'deposits_by_ready';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(wire_deadline INT8 NOT NULL'
- ',shard INT8 NOT NULL'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)'
- ',deposit_serial_id INT8'
- ') %s ;'
- ,table_name
- ,'PARTITION BY RANGE (wire_deadline)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_main_index '
- 'ON ' || table_name || ' '
- '(wire_deadline ASC, shard ASC, coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_deposits_for_matching(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_deposits_for_matching(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'deposits_for_matching';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(refund_deadline INT8 NOT NULL'
- ',merchant_pub BYTEA NOT NULL CHECK (LENGTH(merchant_pub)=32)'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub) ON DELETE CASCADE
- ',deposit_serial_id INT8'
- ') %s ;'
- ,table_name
- ,'PARTITION BY RANGE (refund_deadline)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_main_index '
- 'ON ' || table_name || ' '
- '(refund_deadline ASC, merchant_pub, coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_history_requests(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_history_requests(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'history_requests';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(reserve_pub BYTEA NOT NULL CHECK (LENGTH(reserve_pub)=32)' -- REFERENCES reserves(reserve_pub) ON DELETE CASCADE
- ',request_timestamp INT8 NOT NULL'
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',history_fee_val INT8 NOT NULL'
- ',history_fee_frac INT4 NOT NULL'
- ',PRIMARY KEY (reserve_pub,request_timestamp)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_pub)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_known_coins(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_known_coins(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR default 'known_coins';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(known_coin_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',denominations_serial INT8 NOT NULL' -- REFERENCES denominations (denominations_serial) ON DELETE CASCADE'
- ',coin_pub BYTEA NOT NULL PRIMARY KEY CHECK (LENGTH(coin_pub)=32)'
- ',age_commitment_hash BYTEA CHECK (LENGTH(age_commitment_hash)=32)'
- ',denom_sig BYTEA NOT NULL'
- ',remaining_val INT8 NOT NULL'
- ',remaining_frac INT4 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (coin_pub)' -- FIXME: or include denominations_serial? or multi-level partitioning?;
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
-END
-$$;
-
-
---
--- Name: create_table_prewire(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_prewire(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'prewire';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(prewire_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY'
- ',wire_method TEXT NOT NULL'
- ',finished BOOLEAN NOT NULL DEFAULT false'
- ',failed BOOLEAN NOT NULL DEFAULT false'
- ',buf BYTEA NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (prewire_uuid)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_finished_index '
- 'ON ' || table_name || ' '
- '(finished);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_finished_index '
- 'IS ' || quote_literal('for gc_prewire') || ';'
- );
- -- FIXME: find a way to combine these two indices?
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_failed_finished_index '
- 'ON ' || table_name || ' '
- '(failed,finished);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_failed_finished_index '
- 'IS ' || quote_literal('for wire_prepare_data_get') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_purse_deposits(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_purse_deposits(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'purse_deposits';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(purse_deposit_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE
- ',partner_serial_id INT8' -- REFERENCES partners(partner_serial_id) ON DELETE CASCADE'
- ',purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)'
- ',coin_pub BYTEA NOT NULL' -- REFERENCES known_coins (coin_pub) ON DELETE CASCADE'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',coin_sig BYTEA NOT NULL CHECK(LENGTH(coin_sig)=64)'
- ',PRIMARY KEY (purse_pub,coin_pub)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by coin_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_coin_pub '
- 'ON ' || table_name || ' '
- '(coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_purse_merges(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_purse_merges(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'purse_merges';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(purse_merge_request_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY '-- UNIQUE
- ',partner_serial_id INT8' -- REFERENCES partners(partner_serial_id) ON DELETE CASCADE
- ',reserve_pub BYTEA NOT NULL CHECK(length(reserve_pub)=32)'--REFERENCES reserves (reserve_pub) ON DELETE CASCADE
- ',purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)' --REFERENCES purse_requests (purse_pub) ON DELETE CASCADE
- ',merge_sig BYTEA NOT NULL CHECK (LENGTH(merge_sig)=64)'
- ',merge_timestamp INT8 NOT NULL'
- ',PRIMARY KEY (purse_pub)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by reserve_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_reserve_pub '
- 'ON ' || table_name || ' '
- '(reserve_pub);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_reserve_pub '
- 'IS ' || quote_literal('needed in reserve history computation') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_purse_requests(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_purse_requests(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'purse_requests';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(purse_requests_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)'
- ',merge_pub BYTEA NOT NULL CHECK (LENGTH(merge_pub)=32)'
- ',purse_expiration INT8 NOT NULL'
- ',h_contract_terms BYTEA NOT NULL CHECK (LENGTH(h_contract_terms)=64)'
- ',age_limit INT4 NOT NULL'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',balance_val INT8 NOT NULL DEFAULT (0)'
- ',balance_frac INT4 NOT NULL DEFAULT (0)'
- ',purse_sig BYTEA NOT NULL CHECK(LENGTH(purse_sig)=64)'
- ',PRIMARY KEY (purse_pub)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by marge_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_merge_pub '
- 'ON ' || table_name || ' '
- '(merge_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_recoup(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_recoup(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'recoup';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(recoup_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub)
- ',coin_sig BYTEA NOT NULL CHECK(LENGTH(coin_sig)=64)'
- ',coin_blind BYTEA NOT NULL CHECK(LENGTH(coin_blind)=32)'
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',recoup_timestamp INT8 NOT NULL'
- ',reserve_out_serial_id INT8 NOT NULL' -- REFERENCES reserves_out (reserve_out_serial_id) ON DELETE CASCADE'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (coin_pub);'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_coin_pub_index '
- 'ON ' || table_name || ' '
- '(coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_recoup_by_reserve(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_recoup_by_reserve(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'recoup_by_reserve';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(reserve_out_serial_id INT8 NOT NULL' -- REFERENCES reserves (reserve_out_serial_id) ON DELETE CASCADE
- ',coin_pub BYTEA CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub)
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_out_serial_id)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_main_index '
- 'ON ' || table_name || ' '
- '(reserve_out_serial_id);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_recoup_refresh(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_recoup_refresh(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'recoup_refresh';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(recoup_refresh_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub)
- ',known_coin_id BIGINT NOT NULL' -- REFERENCES known_coins (known_coin_id) ON DELETE CASCADE
- ',coin_sig BYTEA NOT NULL CHECK(LENGTH(coin_sig)=64)'
- ',coin_blind BYTEA NOT NULL CHECK(LENGTH(coin_blind)=32)'
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',recoup_timestamp INT8 NOT NULL'
- ',rrc_serial INT8 NOT NULL' -- REFERENCES refresh_revealed_coins (rrc_serial) ON DELETE CASCADE -- UNIQUE'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (coin_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: any query using this index will be slow. Materialize index or change query?
- -- Also: which query uses this index?
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_rrc_serial_index '
- 'ON ' || table_name || ' '
- '(rrc_serial);'
- );
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_coin_pub_index '
- 'ON ' || table_name || ' '
- '(coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_refresh_commitments(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_refresh_commitments(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'refresh_commitments';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(melt_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',rc BYTEA PRIMARY KEY CHECK (LENGTH(rc)=64)'
- ',old_coin_pub BYTEA NOT NULL' -- REFERENCES known_coins (coin_pub) ON DELETE CASCADE'
- ',old_coin_sig BYTEA NOT NULL CHECK(LENGTH(old_coin_sig)=64)'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',noreveal_index INT4 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (rc)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- Note: index spans partitions, may need to be materialized.
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_old_coin_pub_index '
- 'ON ' || table_name || ' '
- '(old_coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_refresh_revealed_coins(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_refresh_revealed_coins(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'refresh_revealed_coins';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(rrc_serial BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',melt_serial_id INT8 NOT NULL' -- REFERENCES refresh_commitments (melt_serial_id) ON DELETE CASCADE'
- ',freshcoin_index INT4 NOT NULL'
- ',link_sig BYTEA NOT NULL CHECK(LENGTH(link_sig)=64)'
- ',denominations_serial INT8 NOT NULL' -- REFERENCES denominations (denominations_serial) ON DELETE CASCADE'
- ',coin_ev BYTEA NOT NULL' -- UNIQUE'
- ',h_coin_ev BYTEA NOT NULL CHECK(LENGTH(h_coin_ev)=64)' -- UNIQUE'
- ',ev_sig BYTEA NOT NULL'
- ',ewv BYTEA NOT NULL'
- -- ,PRIMARY KEY (melt_serial_id, freshcoin_index) -- done per shard
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (melt_serial_id)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_coins_by_melt_serial_id_index '
- 'ON ' || table_name || ' '
- '(melt_serial_id);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_refresh_transfer_keys(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_refresh_transfer_keys(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'refresh_transfer_keys';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(rtc_serial BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',melt_serial_id INT8 PRIMARY KEY' -- REFERENCES refresh_commitments (melt_serial_id) ON DELETE CASCADE'
- ',transfer_pub BYTEA NOT NULL CHECK(LENGTH(transfer_pub)=32)'
- ',transfer_privs BYTEA NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (melt_serial_id)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_refunds(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_refunds(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'refunds';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(refund_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub) ON DELETE CASCADE
- ',deposit_serial_id INT8 NOT NULL' -- REFERENCES deposits (deposit_serial_id) ON DELETE CASCADE'
- ',merchant_sig BYTEA NOT NULL CHECK(LENGTH(merchant_sig)=64)'
- ',rtransaction_id INT8 NOT NULL'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- -- ,PRIMARY KEY (deposit_serial_id, rtransaction_id) -- done per shard!
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (coin_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_coin_pub_index '
- 'ON ' || table_name || ' '
- '(coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_reserves(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_reserves(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'reserves';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(reserve_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY'
- ',reserve_pub BYTEA PRIMARY KEY CHECK(LENGTH(reserve_pub)=32)'
- ',current_balance_val INT8 NOT NULL'
- ',current_balance_frac INT4 NOT NULL'
- ',purses_active INT8 NOT NULL DEFAULT(0)'
- ',purses_allowed INT8 NOT NULL DEFAULT(0)'
- ',kyc_required BOOLEAN NOT NULL DEFAULT(FALSE)'
- ',kyc_passed BOOLEAN NOT NULL DEFAULT(FALSE)'
- ',expiration_date INT8 NOT NULL'
- ',gc_date INT8 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_expiration_index '
- 'ON ' || table_name || ' '
- '(expiration_date'
- ',current_balance_val'
- ',current_balance_frac'
- ');'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_expiration_index '
- 'IS ' || quote_literal('used in get_expired_reserves') || ';'
- );
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_uuid_index '
- 'ON ' || table_name || ' '
- '(reserve_uuid);'
- );
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_gc_date_index '
- 'ON ' || table_name || ' '
- '(gc_date);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_gc_date_index '
- 'IS ' || quote_literal('for reserve garbage collection') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_reserves_close(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_reserves_close(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR default 'reserves_close';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(close_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE / PRIMARY KEY'
- ',reserve_pub BYTEA NOT NULL' -- REFERENCES reserves (reserve_pub) ON DELETE CASCADE'
- ',execution_date INT8 NOT NULL'
- ',wtid BYTEA NOT NULL CHECK (LENGTH(wtid)=32)'
- ',wire_target_h_payto BYTEA CHECK (LENGTH(wire_target_h_payto)=32)'
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',closing_fee_val INT8 NOT NULL'
- ',closing_fee_frac INT4 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_close_uuid_index '
- 'ON ' || table_name || ' '
- '(close_uuid);'
- );
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_pub_index '
- 'ON ' || table_name || ' '
- '(reserve_pub);'
- );
-END
-$$;
-
-
---
--- Name: create_table_reserves_in(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_reserves_in(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR default 'reserves_in';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(reserve_in_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',reserve_pub BYTEA PRIMARY KEY' -- REFERENCES reserves (reserve_pub) ON DELETE CASCADE'
- ',wire_reference INT8 NOT NULL'
- ',credit_val INT8 NOT NULL'
- ',credit_frac INT4 NOT NULL'
- ',wire_source_h_payto BYTEA CHECK (LENGTH(wire_source_h_payto)=32)'
- ',exchange_account_section TEXT NOT NULL'
- ',execution_date INT8 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_in_serial_id_index '
- 'ON ' || table_name || ' '
- '(reserve_in_serial_id);'
- );
- -- FIXME: where do we need this index? Can we do better?
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_exch_accnt_section_execution_date_idx '
- 'ON ' || table_name || ' '
- '(exchange_account_section '
- ',execution_date'
- ');'
- );
- -- FIXME: where do we need this index? Can we do better?
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_exch_accnt_reserve_in_serial_id_idx '
- 'ON ' || table_name || ' '
- '(exchange_account_section,'
- 'reserve_in_serial_id DESC'
- ');'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_reserves_out(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_reserves_out(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR default 'reserves_out';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(reserve_out_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',h_blind_ev BYTEA CHECK (LENGTH(h_blind_ev)=64) UNIQUE'
- ',denominations_serial INT8 NOT NULL' -- REFERENCES denominations (denominations_serial)'
- ',denom_sig BYTEA NOT NULL'
- ',reserve_uuid INT8 NOT NULL' -- REFERENCES reserves (reserve_uuid) ON DELETE CASCADE'
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',execution_date INT8 NOT NULL'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ') %s ;'
- ,'reserves_out'
- ,'PARTITION BY HASH (h_blind_ev)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_out_serial_id_index '
- 'ON ' || table_name || ' '
- '(reserve_out_serial_id);'
- );
- -- FIXME: change query to use reserves_out_by_reserve instead and materialize execution_date there as well???
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_uuid_and_execution_date_index '
- 'ON ' || table_name || ' '
- '(reserve_uuid, execution_date);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_reserve_uuid_and_execution_date_index '
- 'IS ' || quote_literal('for get_reserves_out and exchange_do_withdraw_limit_check') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_reserves_out_by_reserve(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_reserves_out_by_reserve(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'reserves_out_by_reserve';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(reserve_uuid INT8 NOT NULL' -- REFERENCES reserves (reserve_uuid) ON DELETE CASCADE
- ',h_blind_ev BYTEA CHECK (LENGTH(h_blind_ev)=64)'
- ') %s '
- ,table_name
- ,'PARTITION BY HASH (reserve_uuid)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_main_index '
- 'ON ' || table_name || ' '
- '(reserve_uuid);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_wad_in_entries(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wad_in_entries(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'wad_in_entries';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(wad_in_entry_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',wad_in_serial_id INT8' -- REFERENCES wads_in (wad_in_serial_id) ON DELETE CASCADE
- ',reserve_pub BYTEA NOT NULL CHECK(LENGTH(reserve_pub)=32)'
- ',purse_pub BYTEA PRIMARY KEY CHECK(LENGTH(purse_pub)=32)'
- ',h_contract BYTEA NOT NULL CHECK(LENGTH(h_contract)=64)'
- ',purse_expiration INT8 NOT NULL'
- ',merge_timestamp INT8 NOT NULL'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',wad_fee_val INT8 NOT NULL'
- ',wad_fee_frac INT4 NOT NULL'
- ',deposit_fees_val INT8 NOT NULL'
- ',deposit_fees_frac INT4 NOT NULL'
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',purse_sig BYTEA NOT NULL CHECK (LENGTH(purse_sig)=64)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by reserve_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_reserve_pub '
- 'ON ' || table_name || ' '
- '(reserve_pub);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_reserve_pub '
- 'IS ' || quote_literal('needed in reserve history computation') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_wad_out_entries(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wad_out_entries(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'wad_out_entries';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(wad_out_entry_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',wad_out_serial_id INT8' -- REFERENCES wads_out (wad_out_serial_id) ON DELETE CASCADE
- ',reserve_pub BYTEA NOT NULL CHECK(LENGTH(reserve_pub)=32)'
- ',purse_pub BYTEA PRIMARY KEY CHECK(LENGTH(purse_pub)=32)'
- ',h_contract BYTEA NOT NULL CHECK(LENGTH(h_contract)=64)'
- ',purse_expiration INT8 NOT NULL'
- ',merge_timestamp INT8 NOT NULL'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',wad_fee_val INT8 NOT NULL'
- ',wad_fee_frac INT4 NOT NULL'
- ',deposit_fees_val INT8 NOT NULL'
- ',deposit_fees_frac INT4 NOT NULL'
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',purse_sig BYTEA NOT NULL CHECK (LENGTH(purse_sig)=64)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by reserve_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_pub '
- 'ON ' || table_name || ' '
- '(reserve_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_wads_in(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wads_in(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'wads_in';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(wad_in_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',wad_id BYTEA PRIMARY KEY CHECK (LENGTH(wad_id)=24)'
- ',origin_exchange_url TEXT NOT NULL'
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',arrival_time INT8 NOT NULL'
- ',UNIQUE (wad_id, origin_exchange_url)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (wad_id)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_wads_out(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wads_out(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'wads_out';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(wad_out_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',wad_id BYTEA PRIMARY KEY CHECK (LENGTH(wad_id)=24)'
- ',partner_serial_id INT8 NOT NULL' -- REFERENCES partners(partner_serial_id) ON DELETE CASCADE
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',execution_time INT8 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (wad_id)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_wire_out(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wire_out(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'wire_out';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(wireout_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY' -- PRIMARY KEY'
- ',execution_date INT8 NOT NULL'
- ',wtid_raw BYTEA UNIQUE NOT NULL CHECK (LENGTH(wtid_raw)=32)'
- ',wire_target_h_payto BYTEA CHECK (LENGTH(wire_target_h_payto)=32)'
- ',exchange_account_section TEXT NOT NULL'
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (wtid_raw)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_wire_target_h_payto_index '
- 'ON ' || table_name || ' '
- '(wire_target_h_payto);'
- );
-
-
-END
-$$;
-
-
---
--- Name: create_table_wire_targets(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wire_targets(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(wire_target_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',wire_target_h_payto BYTEA PRIMARY KEY CHECK (LENGTH(wire_target_h_payto)=32)'
- ',payto_uri VARCHAR NOT NULL'
- ',kyc_ok BOOLEAN NOT NULL DEFAULT (FALSE)'
- ',external_id VARCHAR'
- ') %s ;'
- ,'wire_targets'
- ,'PARTITION BY HASH (wire_target_h_payto)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: defer_wire_out(); Type: PROCEDURE; Schema: public; Owner: -
---
-
-CREATE PROCEDURE public.defer_wire_out()
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
-IF EXISTS (
- SELECT 1
- FROM information_Schema.constraint_column_usage
- WHERE table_name='wire_out'
- AND constraint_name='wire_out_ref')
-THEN
- SET CONSTRAINTS wire_out_ref DEFERRED;
-END IF;
-
-END $$;
-
-
---
--- Name: deposits_delete_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.deposits_delete_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- was_ready BOOLEAN;
-BEGIN
- was_ready = NOT (OLD.done OR OLD.extension_blocked);
-
- IF (was_ready)
- THEN
- DELETE FROM deposits_by_ready
- WHERE wire_deadline = OLD.wire_deadline
- AND shard = OLD.shard
- AND coin_pub = OLD.coin_pub
- AND deposit_serial_id = OLD.deposit_serial_id;
- DELETE FROM deposits_for_matching
- WHERE refund_deadline = OLD.refund_deadline
- AND merchant_pub = OLD.merchant_pub
- AND coin_pub = OLD.coin_pub
- AND deposit_serial_id = OLD.deposit_serial_id;
- END IF;
- RETURN NEW;
-END $$;
-
-
---
--- Name: FUNCTION deposits_delete_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.deposits_delete_trigger() IS 'Replicate deposit deletions into materialized indices.';
-
-
---
--- Name: deposits_insert_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.deposits_insert_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- is_ready BOOLEAN;
-BEGIN
- is_ready = NOT (NEW.done OR NEW.extension_blocked);
-
- IF (is_ready)
- THEN
- INSERT INTO deposits_by_ready
- (wire_deadline
- ,shard
- ,coin_pub
- ,deposit_serial_id)
- VALUES
- (NEW.wire_deadline
- ,NEW.shard
- ,NEW.coin_pub
- ,NEW.deposit_serial_id);
- INSERT INTO deposits_for_matching
- (refund_deadline
- ,merchant_pub
- ,coin_pub
- ,deposit_serial_id)
- VALUES
- (NEW.refund_deadline
- ,NEW.merchant_pub
- ,NEW.coin_pub
- ,NEW.deposit_serial_id);
- END IF;
- RETURN NEW;
-END $$;
-
-
---
--- Name: FUNCTION deposits_insert_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.deposits_insert_trigger() IS 'Replicate deposit inserts into materialized indices.';
-
-
---
--- Name: deposits_update_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.deposits_update_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- was_ready BOOLEAN;
-DECLARE
- is_ready BOOLEAN;
-BEGIN
- was_ready = NOT (OLD.done OR OLD.extension_blocked);
- is_ready = NOT (NEW.done OR NEW.extension_blocked);
- IF (was_ready AND NOT is_ready)
- THEN
- DELETE FROM deposits_by_ready
- WHERE wire_deadline = OLD.wire_deadline
- AND shard = OLD.shard
- AND coin_pub = OLD.coin_pub
- AND deposit_serial_id = OLD.deposit_serial_id;
- DELETE FROM deposits_for_matching
- WHERE refund_deadline = OLD.refund_deadline
- AND merchant_pub = OLD.merchant_pub
- AND coin_pub = OLD.coin_pub
- AND deposit_serial_id = OLD.deposit_serial_id;
- END IF;
- IF (is_ready AND NOT was_ready)
- THEN
- INSERT INTO deposits_by_ready
- (wire_deadline
- ,shard
- ,coin_pub
- ,deposit_serial_id)
- VALUES
- (NEW.wire_deadline
- ,NEW.shard
- ,NEW.coin_pub
- ,NEW.deposit_serial_id);
- INSERT INTO deposits_for_matching
- (refund_deadline
- ,merchant_pub
- ,coin_pub
- ,deposit_serial_id)
- VALUES
- (NEW.refund_deadline
- ,NEW.merchant_pub
- ,NEW.coin_pub
- ,NEW.deposit_serial_id);
- END IF;
- RETURN NEW;
-END $$;
-
-
---
--- Name: FUNCTION deposits_update_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.deposits_update_trigger() IS 'Replicate deposits changes into materialized indices.';
-
-
---
--- Name: detach_default_partitions(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.detach_default_partitions() RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- RAISE NOTICE 'Detaching all default table partitions';
-
- ALTER TABLE IF EXISTS wire_targets
- DETACH PARTITION wire_targets_default;
-
- ALTER TABLE IF EXISTS reserves
- DETACH PARTITION reserves_default;
-
- ALTER TABLE IF EXISTS reserves_in
- DETACH PARTITION reserves_in_default;
-
- ALTER TABLE IF EXISTS reserves_close
- DETACH PARTITION reserves_close_default;
-
- ALTER TABLE IF EXISTS reserves_out
- DETACH PARTITION reserves_out_default;
-
- ALTER TABLE IF EXISTS reserves_out_by_reserve
- DETACH PARTITION reserves_out_by_reserve_default;
-
- ALTER TABLE IF EXISTS known_coins
- DETACH PARTITION known_coins_default;
-
- ALTER TABLE IF EXISTS refresh_commitments
- DETACH PARTITION refresh_commitments_default;
-
- ALTER TABLE IF EXISTS refresh_revealed_coins
- DETACH PARTITION refresh_revealed_coins_default;
-
- ALTER TABLE IF EXISTS refresh_transfer_keys
- DETACH PARTITION refresh_transfer_keys_default;
-
- ALTER TABLE IF EXISTS deposits
- DETACH PARTITION deposits_default;
-
---- TODO range partitioning
--- ALTER TABLE IF EXISTS deposits_by_ready
--- DETACH PARTITION deposits_by_ready_default;
---
--- ALTER TABLE IF EXISTS deposits_for_matching
--- DETACH PARTITION deposits_default_for_matching_default;
-
- ALTER TABLE IF EXISTS refunds
- DETACH PARTITION refunds_default;
-
- ALTER TABLE IF EXISTS wire_out
- DETACH PARTITION wire_out_default;
-
- ALTER TABLE IF EXISTS aggregation_transient
- DETACH PARTITION aggregation_transient_default;
-
- ALTER TABLE IF EXISTS aggregation_tracking
- DETACH PARTITION aggregation_tracking_default;
-
- ALTER TABLE IF EXISTS recoup
- DETACH PARTITION recoup_default;
-
- ALTER TABLE IF EXISTS recoup_by_reserve
- DETACH PARTITION recoup_by_reserve_default;
-
- ALTER TABLE IF EXISTS recoup_refresh
- DETACH PARTITION recoup_refresh_default;
-
- ALTER TABLE IF EXISTS prewire
- DETACH PARTITION prewire_default;
-
- ALTER TABLE IF EXISTS cs_nonce_locks
- DETACH partition cs_nonce_locks_default;
-
- ALTER TABLE IF EXISTS purse_requests
- DETACH partition purse_requests_default;
-
- ALTER TABLE IF EXISTS purse_merges
- DETACH partition purse_merges_default;
-
- ALTER TABLE IF EXISTS account_merges
- DETACH partition account_merges_default;
-
- ALTER TABLE IF EXISTS contracts
- DETACH partition contracts_default;
-
- ALTER TABLE IF EXISTS history_requests
- DETACH partition history_requests_default;
-
- ALTER TABLE IF EXISTS close_requests
- DETACH partition close_requests_default;
-
- ALTER TABLE IF EXISTS purse_deposits
- DETACH partition purse_deposits_default;
-
- ALTER TABLE IF EXISTS wad_out_entries
- DETACH partition wad_out_entries_default;
-
- ALTER TABLE IF EXISTS wads_in
- DETACH partition wads_in_default;
-
- ALTER TABLE IF EXISTS wad_in_entries
- DETACH partition wad_in_entries_default;
-END
-$$;
-
-
---
--- Name: FUNCTION detach_default_partitions(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.detach_default_partitions() IS 'We need to drop default and create new one before deleting the default partitions
- otherwise constraints get lost too. Might be needed in shardig too';
-
-
---
--- Name: drop_default_partitions(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.drop_default_partitions() RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- RAISE NOTICE 'Dropping default table partitions';
-
- DROP TABLE IF EXISTS wire_targets_default;
- DROP TABLE IF EXISTS reserves_default;
- DROP TABLE IF EXISTS reserves_in_default;
- DROP TABLE IF EXISTS reserves_close_default;
- DROP TABLE IF EXISTS reserves_out_default;
- DROP TABLE IF EXISTS reserves_out_by_reserve_default;
- DROP TABLE IF EXISTS known_coins_default;
- DROP TABLE IF EXISTS refresh_commitments_default;
- DROP TABLE IF EXISTS refresh_revealed_coins_default;
- DROP TABLE IF EXISTS refresh_transfer_keys_default;
- DROP TABLE IF EXISTS deposits_default;
---DROP TABLE IF EXISTS deposits_by_ready_default;
---DROP TABLE IF EXISTS deposits_for_matching_default;
- DROP TABLE IF EXISTS refunds_default;
- DROP TABLE IF EXISTS wire_out_default;
- DROP TABLE IF EXISTS aggregation_transient_default;
- DROP TABLE IF EXISTS aggregation_tracking_default;
- DROP TABLE IF EXISTS recoup_default;
- DROP TABLE IF EXISTS recoup_by_reserve_default;
- DROP TABLE IF EXISTS recoup_refresh_default;
- DROP TABLE IF EXISTS prewire_default;
- DROP TABLE IF EXISTS cs_nonce_locks_default;
-
- DROP TABLE IF EXISTS purse_requests_default;
- DROP TABLE IF EXISTS purse_merges_default;
- DROP TABLE IF EXISTS account_merges_default;
- DROP TABLE IF EXISTS contracts_default;
- DROP TABLE IF EXISTS history_requests_default;
- DROP TABLE IF EXISTS close_requests_default;
- DROP TABLE IF EXISTS purse_deposits_default;
- DROP TABLE IF EXISTS wad_out_entries_default;
- DROP TABLE IF EXISTS wads_in_default;
- DROP TABLE IF EXISTS wad_in_entries_default;
-
-END
-$$;
-
-
---
--- Name: FUNCTION drop_default_partitions(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.drop_default_partitions() IS 'Drop all default partitions once other partitions are attached.
- Might be needed in sharding too.';
-
-
---
--- Name: exchange_do_account_merge(bytea, bytea, bytea); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_account_merge(in_purse_pub bytea, in_reserve_pub bytea, in_reserve_sig bytea, OUT out_balance_ok boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-BEGIN
- -- FIXME: function/API is dead! Do DCE?
-END $$;
-
-
---
--- Name: exchange_do_batch_withdraw(bigint, integer, bytea, bigint, bigint); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_batch_withdraw(amount_val bigint, amount_frac integer, rpub bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- reserve_gc INT8;
-DECLARE
- reserve_val INT8;
-DECLARE
- reserve_frac INT4;
-BEGIN
--- Shards: reserves by reserve_pub (SELECT)
--- reserves_out (INSERT, with CONFLICT detection) by wih
--- reserves by reserve_pub (UPDATE)
--- reserves_in by reserve_pub (SELECT)
--- wire_targets by wire_target_h_payto
-
-SELECT
- current_balance_val
- ,current_balance_frac
- ,gc_date
- ,reserve_uuid
- INTO
- reserve_val
- ,reserve_frac
- ,reserve_gc
- ,ruuid
- FROM reserves
- WHERE reserves.reserve_pub=rpub;
-
-IF NOT FOUND
-THEN
- -- reserve unknown
- reserve_found=FALSE;
- balance_ok=FALSE;
- kycok=FALSE;
- account_uuid=0;
- ruuid=2;
- RETURN;
-END IF;
-
--- Check reserve balance is sufficient.
-IF (reserve_val > amount_val)
-THEN
- IF (reserve_frac >= amount_frac)
- THEN
- reserve_val=reserve_val - amount_val;
- reserve_frac=reserve_frac - amount_frac;
- ELSE
- reserve_val=reserve_val - amount_val - 1;
- reserve_frac=reserve_frac + 100000000 - amount_frac;
- END IF;
-ELSE
- IF (reserve_val = amount_val) AND (reserve_frac >= amount_frac)
- THEN
- reserve_val=0;
- reserve_frac=reserve_frac - amount_frac;
- ELSE
- reserve_found=TRUE;
- balance_ok=FALSE;
- kycok=FALSE; -- we do not really know or care
- account_uuid=0;
- RETURN;
- END IF;
-END IF;
-
--- Calculate new expiration dates.
-min_reserve_gc=GREATEST(min_reserve_gc,reserve_gc);
-
--- Update reserve balance.
-UPDATE reserves SET
- gc_date=min_reserve_gc
- ,current_balance_val=reserve_val
- ,current_balance_frac=reserve_frac
-WHERE
- reserves.reserve_pub=rpub;
-
-reserve_found=TRUE;
-balance_ok=TRUE;
-
-
--- Obtain KYC status based on the last wire transfer into
--- this reserve. FIXME: likely not adequate for reserves that got P2P transfers!
--- SELECT
--- kyc_ok
--- ,wire_target_serial_id
--- INTO
--- kycok
--- ,account_uuid
--- FROM reserves_in
--- JOIN wire_targets ON (wire_source_h_payto = wire_target_h_payto)
--- WHERE reserve_pub=rpub
--- LIMIT 1; -- limit 1 should not be required (without p2p transfers)
-
-WITH reserves_in AS materialized (
- SELECT wire_source_h_payto
- FROM reserves_in WHERE
- reserve_pub=rpub
-)
-SELECT
- kyc_ok
- ,wire_target_serial_id
-INTO
- kycok
- ,account_uuid
-FROM wire_targets
- WHERE wire_target_h_payto = (
- SELECT wire_source_h_payto
- FROM reserves_in
- );
-
-END $$;
-
-
---
--- Name: FUNCTION exchange_do_batch_withdraw(amount_val bigint, amount_frac integer, rpub bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.exchange_do_batch_withdraw(amount_val bigint, amount_frac integer, rpub bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint) IS 'Checks whether the reserve has sufficient balance for a withdraw operation (or the request is repeated and was previously approved) and if so updates the database with the result. Excludes storing the planchets.';
-
-
---
--- Name: exchange_do_batch_withdraw_insert(bytea, bigint, integer, bytea, bigint, bytea, bytea, bytea, bigint); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_batch_withdraw_insert(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, ruuid bigint, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, OUT out_denom_unknown boolean, OUT out_nonce_reuse boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- denom_serial INT8;
-BEGIN
--- Shards: reserves by reserve_pub (SELECT)
--- reserves_out (INSERT, with CONFLICT detection) by wih
--- reserves by reserve_pub (UPDATE)
--- reserves_in by reserve_pub (SELECT)
--- wire_targets by wire_target_h_payto
-
-out_denom_unknown=TRUE;
-out_conflict=TRUE;
-out_nonce_reuse=TRUE;
-
-SELECT denominations_serial
- INTO denom_serial
- FROM denominations
- WHERE denom_pub_hash=h_denom_pub;
-
-IF NOT FOUND
-THEN
- -- denomination unknown, should be impossible!
- out_denom_unknown=TRUE;
- ASSERT false, 'denomination unknown';
- RETURN;
-END IF;
-out_denom_unknown=FALSE;
-
-INSERT INTO reserves_out
- (h_blind_ev
- ,denominations_serial
- ,denom_sig
- ,reserve_uuid
- ,reserve_sig
- ,execution_date
- ,amount_with_fee_val
- ,amount_with_fee_frac)
-VALUES
- (h_coin_envelope
- ,denom_serial
- ,denom_sig
- ,ruuid
- ,reserve_sig
- ,now
- ,amount_val
- ,amount_frac)
-ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- out_conflict=TRUE;
- RETURN;
-END IF;
-out_conflict=FALSE;
-
--- Special actions needed for a CS withdraw?
-out_nonce_reuse=FALSE;
-IF NOT NULL cs_nonce
-THEN
- -- Cache CS signature to prevent replays in the future
- -- (and check if cached signature exists at the same time).
- INSERT INTO cs_nonce_locks
- (nonce
- ,max_denomination_serial
- ,op_hash)
- VALUES
- (cs_nonce
- ,denom_serial
- ,h_coin_envelope)
- ON CONFLICT DO NOTHING;
-
- IF NOT FOUND
- THEN
- -- See if the existing entry is identical.
- SELECT 1
- FROM cs_nonce_locks
- WHERE nonce=cs_nonce
- AND op_hash=h_coin_envelope;
- IF NOT FOUND
- THEN
- out_nonce_reuse=TRUE;
- ASSERT false, 'nonce reuse attempted by client';
- RETURN;
- END IF;
- END IF;
-END IF;
-
-END $$;
-
-
---
--- Name: FUNCTION exchange_do_batch_withdraw_insert(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, ruuid bigint, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, OUT out_denom_unknown boolean, OUT out_nonce_reuse boolean, OUT out_conflict boolean); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.exchange_do_batch_withdraw_insert(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, ruuid bigint, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, OUT out_denom_unknown boolean, OUT out_nonce_reuse boolean, OUT out_conflict boolean) IS 'Stores information about a planchet for a batch withdraw operation. Checks if the planchet already exists, and in that case indicates a conflict';
-
-
---
--- Name: exchange_do_close_request(bytea, bytea); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_close_request(in_reserve_pub bytea, in_reserve_sig bytea, OUT out_final_balance_val bigint, OUT out_final_balance_frac integer, OUT out_balance_ok boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-BEGIN
- -- FIXME
-END $$;
-
-
---
--- Name: exchange_do_deposit(bigint, integer, bytea, bytea, bigint, bigint, bigint, bigint, bytea, character varying, bytea, bigint, bytea, bytea, bigint, boolean, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_deposit(in_amount_with_fee_val bigint, in_amount_with_fee_frac integer, in_h_contract_terms bytea, in_wire_salt bytea, in_wallet_timestamp bigint, in_exchange_timestamp bigint, in_refund_deadline bigint, in_wire_deadline bigint, in_merchant_pub bytea, in_receiver_wire_account character varying, in_h_payto bytea, in_known_coin_id bigint, in_coin_pub bytea, in_coin_sig bytea, in_shard bigint, in_extension_blocked boolean, in_extension_details character varying, OUT out_exchange_timestamp bigint, OUT out_balance_ok boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- wtsi INT8; -- wire target serial id
-DECLARE
- xdi INT8; -- eXstension details serial id
-BEGIN
--- Shards: INSERT extension_details (by extension_details_serial_id)
--- INSERT wire_targets (by h_payto), on CONFLICT DO NOTHING;
--- INSERT deposits (by coin_pub, shard), ON CONFLICT DO NOTHING;
--- UPDATE known_coins (by coin_pub)
-
-IF NOT NULL in_extension_details
-THEN
- INSERT INTO extension_details
- (extension_options)
- VALUES
- (in_extension_details)
- RETURNING extension_details_serial_id INTO xdi;
-ELSE
- xdi=NULL;
-END IF;
-
-
-INSERT INTO wire_targets
- (wire_target_h_payto
- ,payto_uri)
- VALUES
- (in_h_payto
- ,in_receiver_wire_account)
-ON CONFLICT DO NOTHING -- for CONFLICT ON (wire_target_h_payto)
- RETURNING wire_target_serial_id INTO wtsi;
-
-IF NOT FOUND
-THEN
- SELECT wire_target_serial_id
- INTO wtsi
- FROM wire_targets
- WHERE wire_target_h_payto=in_h_payto;
-END IF;
-
-
-INSERT INTO deposits
- (shard
- ,coin_pub
- ,known_coin_id
- ,amount_with_fee_val
- ,amount_with_fee_frac
- ,wallet_timestamp
- ,exchange_timestamp
- ,refund_deadline
- ,wire_deadline
- ,merchant_pub
- ,h_contract_terms
- ,coin_sig
- ,wire_salt
- ,wire_target_h_payto
- ,extension_blocked
- ,extension_details_serial_id
- )
- VALUES
- (in_shard
- ,in_coin_pub
- ,in_known_coin_id
- ,in_amount_with_fee_val
- ,in_amount_with_fee_frac
- ,in_wallet_timestamp
- ,in_exchange_timestamp
- ,in_refund_deadline
- ,in_wire_deadline
- ,in_merchant_pub
- ,in_h_contract_terms
- ,in_coin_sig
- ,in_wire_salt
- ,in_h_payto
- ,in_extension_blocked
- ,xdi)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: see if an identical record exists.
- -- Note that by checking 'coin_sig', we implicitly check
- -- identity over everything that the signature covers.
- -- We do select over merchant_pub and wire_target_h_payto
- -- primarily here to maximally use the existing index.
- SELECT
- exchange_timestamp
- INTO
- out_exchange_timestamp
- FROM deposits
- WHERE shard=in_shard
- AND merchant_pub=in_merchant_pub
- AND wire_target_h_payto=in_h_payto
- AND coin_pub=in_coin_pub
- AND coin_sig=in_coin_sig;
-
- IF NOT FOUND
- THEN
- -- Deposit exists, but with differences. Not allowed.
- out_balance_ok=FALSE;
- out_conflict=TRUE;
- RETURN;
- END IF;
-
- -- Idempotent request known, return success.
- out_balance_ok=TRUE;
- out_conflict=FALSE;
-
- RETURN;
-END IF;
-
-
-out_exchange_timestamp=in_exchange_timestamp;
-
--- Check and update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=remaining_frac-in_amount_with_fee_frac
- + CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 100000000
- ELSE 0
- END,
- remaining_val=remaining_val-in_amount_with_fee_val
- - CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 1
- ELSE 0
- END
- WHERE coin_pub=in_coin_pub
- AND ( (remaining_val > in_amount_with_fee_val) OR
- ( (remaining_frac >= in_amount_with_fee_frac) AND
- (remaining_val >= in_amount_with_fee_val) ) );
-
-IF NOT FOUND
-THEN
- -- Insufficient balance.
- out_balance_ok=FALSE;
- out_conflict=FALSE;
- RETURN;
-END IF;
-
--- Everything fine, return success!
-out_balance_ok=TRUE;
-out_conflict=FALSE;
-
-END $$;
-
-
---
--- Name: exchange_do_gc(bigint, bigint); Type: PROCEDURE; Schema: public; Owner: -
---
-
-CREATE PROCEDURE public.exchange_do_gc(in_ancient_date bigint, in_now bigint)
- LANGUAGE plpgsql
- AS $$
-DECLARE
- reserve_uuid_min INT8; -- minimum reserve UUID still alive
-DECLARE
- melt_min INT8; -- minimum melt still alive
-DECLARE
- coin_min INT8; -- minimum known_coin still alive
-DECLARE
- deposit_min INT8; -- minimum deposit still alive
-DECLARE
- reserve_out_min INT8; -- minimum reserve_out still alive
-DECLARE
- denom_min INT8; -- minimum denomination still alive
-BEGIN
-
-DELETE FROM prewire
- WHERE finished=TRUE;
-
-DELETE FROM wire_fee
- WHERE end_date < in_ancient_date;
-
--- TODO: use closing fee as threshold?
-DELETE FROM reserves
- WHERE gc_date < in_now
- AND current_balance_val = 0
- AND current_balance_frac = 0;
-
-SELECT
- reserve_out_serial_id
- INTO
- reserve_out_min
- FROM reserves_out
- ORDER BY reserve_out_serial_id ASC
- LIMIT 1;
-
-DELETE FROM recoup
- WHERE reserve_out_serial_id < reserve_out_min;
--- FIXME: recoup_refresh lacks GC!
-
-SELECT
- reserve_uuid
- INTO
- reserve_uuid_min
- FROM reserves
- ORDER BY reserve_uuid ASC
- LIMIT 1;
-
-DELETE FROM reserves_out
- WHERE reserve_uuid < reserve_uuid_min;
-
--- FIXME: this query will be horribly slow;
--- need to find another way to formulate it...
-DELETE FROM denominations
- WHERE expire_legal < in_now
- AND denominations_serial NOT IN
- (SELECT DISTINCT denominations_serial
- FROM reserves_out)
- AND denominations_serial NOT IN
- (SELECT DISTINCT denominations_serial
- FROM known_coins
- WHERE coin_pub IN
- (SELECT DISTINCT coin_pub
- FROM recoup))
- AND denominations_serial NOT IN
- (SELECT DISTINCT denominations_serial
- FROM known_coins
- WHERE coin_pub IN
- (SELECT DISTINCT coin_pub
- FROM recoup_refresh));
-
-SELECT
- melt_serial_id
- INTO
- melt_min
- FROM refresh_commitments
- ORDER BY melt_serial_id ASC
- LIMIT 1;
-
-DELETE FROM refresh_revealed_coins
- WHERE melt_serial_id < melt_min;
-
-DELETE FROM refresh_transfer_keys
- WHERE melt_serial_id < melt_min;
-
-SELECT
- known_coin_id
- INTO
- coin_min
- FROM known_coins
- ORDER BY known_coin_id ASC
- LIMIT 1;
-
-DELETE FROM deposits
- WHERE known_coin_id < coin_min;
-
-SELECT
- deposit_serial_id
- INTO
- deposit_min
- FROM deposits
- ORDER BY deposit_serial_id ASC
- LIMIT 1;
-
-DELETE FROM refunds
- WHERE deposit_serial_id < deposit_min;
-
-DELETE FROM aggregation_tracking
- WHERE deposit_serial_id < deposit_min;
-
-SELECT
- denominations_serial
- INTO
- denom_min
- FROM denominations
- ORDER BY denominations_serial ASC
- LIMIT 1;
-
-DELETE FROM cs_nonce_locks
- WHERE max_denomination_serial <= denom_min;
-
-END $$;
-
-
---
--- Name: exchange_do_history_request(bytea, bytea, bigint, bigint, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_history_request(in_reserve_pub bytea, in_reserve_sig bytea, in_request_timestamp bigint, in_history_fee_val bigint, in_history_fee_frac integer, OUT out_balance_ok boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-BEGIN
- -- FIXME
-END $$;
-
-
---
--- Name: exchange_do_melt(bytea, bigint, integer, bytea, bytea, bytea, bigint, integer, boolean); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_melt(in_cs_rms bytea, in_amount_with_fee_val bigint, in_amount_with_fee_frac integer, in_rc bytea, in_old_coin_pub bytea, in_old_coin_sig bytea, in_known_coin_id bigint, in_noreveal_index integer, in_zombie_required boolean, OUT out_balance_ok boolean, OUT out_zombie_bad boolean, OUT out_noreveal_index integer) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- denom_max INT8;
-BEGIN
--- Shards: INSERT refresh_commitments (by rc)
--- (rare:) SELECT refresh_commitments (by old_coin_pub) -- crosses shards!
--- (rare:) SEELCT refresh_revealed_coins (by melt_serial_id)
--- (rare:) PERFORM recoup_refresh (by rrc_serial) -- crosses shards!
--- UPDATE known_coins (by coin_pub)
-
-INSERT INTO refresh_commitments
- (rc
- ,old_coin_pub
- ,old_coin_sig
- ,amount_with_fee_val
- ,amount_with_fee_frac
- ,noreveal_index
- )
- VALUES
- (in_rc
- ,in_old_coin_pub
- ,in_old_coin_sig
- ,in_amount_with_fee_val
- ,in_amount_with_fee_frac
- ,in_noreveal_index)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: see if an identical record exists.
- out_noreveal_index=-1;
- SELECT
- noreveal_index
- INTO
- out_noreveal_index
- FROM refresh_commitments
- WHERE rc=in_rc;
- out_balance_ok=FOUND;
- out_zombie_bad=FALSE; -- zombie is OK
- RETURN;
-END IF;
-
-
-IF in_zombie_required
-THEN
- -- Check if this coin was part of a refresh
- -- operation that was subsequently involved
- -- in a recoup operation. We begin by all
- -- refresh operations our coin was involved
- -- with, then find all associated reveal
- -- operations, and then see if any of these
- -- reveal operations was involved in a recoup.
- PERFORM
- FROM recoup_refresh
- WHERE rrc_serial IN
- (SELECT rrc_serial
- FROM refresh_revealed_coins
- WHERE melt_serial_id IN
- (SELECT melt_serial_id
- FROM refresh_commitments
- WHERE old_coin_pub=in_old_coin_pub));
- IF NOT FOUND
- THEN
- out_zombie_bad=TRUE;
- out_balance_ok=FALSE;
- RETURN;
- END IF;
-END IF;
-
-out_zombie_bad=FALSE; -- zombie is OK
-
-
--- Check and update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=remaining_frac-in_amount_with_fee_frac
- + CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 100000000
- ELSE 0
- END,
- remaining_val=remaining_val-in_amount_with_fee_val
- - CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 1
- ELSE 0
- END
- WHERE coin_pub=in_old_coin_pub
- AND ( (remaining_val > in_amount_with_fee_val) OR
- ( (remaining_frac >= in_amount_with_fee_frac) AND
- (remaining_val >= in_amount_with_fee_val) ) );
-
-IF NOT FOUND
-THEN
- -- Insufficient balance.
- out_noreveal_index=-1;
- out_balance_ok=FALSE;
- RETURN;
-END IF;
-
-
-
--- Special actions needed for a CS melt?
-IF NOT NULL in_cs_rms
-THEN
- -- Get maximum denominations serial value in
- -- existence, this will determine how long the
- -- nonce will be locked.
- SELECT
- denominations_serial
- INTO
- denom_max
- FROM denominations
- ORDER BY denominations_serial DESC
- LIMIT 1;
-
- -- Cache CS signature to prevent replays in the future
- -- (and check if cached signature exists at the same time).
- INSERT INTO cs_nonce_locks
- (nonce
- ,max_denomination_serial
- ,op_hash)
- VALUES
- (cs_rms
- ,denom_serial
- ,in_rc)
- ON CONFLICT DO NOTHING;
-
- IF NOT FOUND
- THEN
- -- Record exists, make sure it is the same
- SELECT 1
- FROM cs_nonce_locks
- WHERE nonce=cs_rms
- AND op_hash=in_rc;
-
- IF NOT FOUND
- THEN
- -- Nonce reuse detected
- out_balance_ok=FALSE;
- out_zombie_bad=FALSE;
- out_noreveal_index=42; -- FIXME: return error message more nicely!
- ASSERT false, 'nonce reuse attempted by client';
- END IF;
- END IF;
-END IF;
-
--- Everything fine, return success!
-out_balance_ok=TRUE;
-out_noreveal_index=in_noreveal_index;
-
-END $$;
-
-
---
--- Name: exchange_do_purse_deposit(bigint, bytea, bigint, integer, bytea, bytea, bigint, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_purse_deposit(in_partner_id bigint, in_purse_pub bytea, in_amount_with_fee_val bigint, in_amount_with_fee_frac integer, in_coin_pub bytea, in_coin_sig bytea, in_amount_without_fee_val bigint, in_amount_without_fee_frac integer, OUT out_balance_ok boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
--- Store the deposit request.
-INSERT INTO purse_deposits
- (partner_serial_id
- ,purse_pub
- ,coin_pub
- ,amount_with_fee_val
- ,amount_with_fee_frac
- ,coin_sig)
- VALUES
- (in_partner_id
- ,in_purse_pub
- ,in_coin_pub
- ,in_amount_with_fee_val
- ,in_amount_with_fee_frac
- ,in_coin_sig)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: check if coin_sig is the same,
- -- if so, success, otherwise conflict!
- SELECT
- 1
- FROM purse_deposits
- WHERE coin_pub = in_coin_pub
- AND purse_pub = in_purse_pub
- AND coin_sig = in_cion_sig;
- IF NOT FOUND
- THEN
- -- Deposit exists, but with differences. Not allowed.
- out_balance_ok=FALSE;
- out_conflict=TRUE;
- RETURN;
- END IF;
-END IF;
-
-
--- Debit the coin
--- Check and update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=remaining_frac-in_amount_with_fee_frac
- + CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 100000000
- ELSE 0
- END,
- remaining_val=remaining_val-in_amount_with_fee_val
- - CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 1
- ELSE 0
- END
- WHERE coin_pub=in_coin_pub
- AND ( (remaining_val > in_amount_with_fee_val) OR
- ( (remaining_frac >= in_amount_with_fee_frac) AND
- (remaining_val >= in_amount_with_fee_val) ) );
-
-IF NOT FOUND
-THEN
- -- Insufficient balance.
- out_balance_ok=FALSE;
- out_conflict=FALSE;
- RETURN;
-END IF;
-
-
--- Credit the purse.
-UPDATE purse_requests
- SET
- balance_frac=balance_frac+in_amount_without_fee_frac
- - CASE
- WHEN balance_frac+in_amount_without_fee_frac >= 100000000
- THEN 100000000
- ELSE 0
- END,
- balance_val=balance_val+in_amount_without_fee_val
- + CASE
- WHEN balance_frac+in_amount_without_fee_frac >= 100000000
- THEN 1
- ELSE 0
- END
- WHERE purse_pub=in_purse_pub;
-
-out_conflict=FALSE;
-out_balance_ok=TRUE;
-
-END $$;
-
-
---
--- Name: exchange_do_purse_merge(bytea, bytea, bigint, bytea, character varying, bytea); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_purse_merge(in_purse_pub bytea, in_merge_sig bytea, in_merge_timestamp bigint, in_reserve_sig bytea, in_partner_url character varying, in_reserve_pub bytea, OUT out_no_partner boolean, OUT out_no_balance boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- my_partner_serial_id INT8;
-BEGIN
-
-IF in_partner_url IS NULL
-THEN
- my_partner_serial_id=0;
-ELSE
- SELECT
- partner_serial_id
- INTO
- my_partner_serial_id
- FROM partners
- WHERE partner_base_url=in_partner_url
- AND start_date <= in_merge_timestamp
- AND end_date > in_merge_timestamp;
- IF NOT FOUND
- THEN
- out_no_partner=TRUE;
- out_conflict=FALSE;
- RETURN;
- END IF;
-END IF;
-
-out_no_partner=FALSE;
-
-
--- Check purse is 'full'.
-PERFORM
- FROM purse_requests
- WHERE purse_pub=in_purse_pub
- AND balance_val >= amount_with_fee_val
- AND ( (balance_frac >= amount_with_fee_frac) OR
- (balance_val > amount_with_fee_val) );
-IF NOT FOUND
-THEN
- out_no_balance=TRUE;
- out_conflict=FALSE;
- RETURN;
-END IF;
-out_no_balance=FALSE;
-
-
-
--- Store purse merge signature, checks for purse_pub uniqueness
-INSERT INTO purse_merges
- (partner_serial_id
- ,reserve_pub
- ,purse_pub
- ,merge_sig
- ,merge_timestamp)
- VALUES
- (my_partner_serial_id
- ,in_reserve_pub
- ,in_purse_pub
- ,in_merge_sig
- ,in_merge_timestamp)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: see if an identical record exists.
- -- Note that by checking 'merge_sig', we implicitly check
- -- identity over everything that the signature covers.
- PERFORM
- FROM purse_merges
- WHERE purse_pub=in_purse_pub
- AND merge_sig=in_merge_sig;
- IF NOT FOUND
- THEN
- -- Purse was merged, but to some other reserve. Not allowed.
- out_conflict=TRUE;
- RETURN;
- END IF;
-
- -- "success"
- out_conflict=FALSE;
- RETURN;
-END IF;
-out_conflict=FALSE;
-
--- Store account merge signature.
-INSERT INTO account_merges
- (reserve_pub
- ,reserve_sig
- ,purse_pub)
- VALUES
- (in_reserve_pub
- ,in_reserve_sig
- ,in_purse_pub);
-
-
-RETURN;
-
-END $$;
-
-
---
--- Name: exchange_do_recoup_to_coin(bytea, bigint, bytea, bytea, bigint, bytea, bigint); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_recoup_to_coin(in_old_coin_pub bytea, in_rrc_serial bigint, in_coin_blind bytea, in_coin_pub bytea, in_known_coin_id bigint, in_coin_sig bytea, in_recoup_timestamp bigint, OUT out_recoup_ok boolean, OUT out_internal_failure boolean, OUT out_recoup_timestamp bigint) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- tmp_val INT8; -- amount recouped
-DECLARE
- tmp_frac INT8; -- amount recouped
-BEGIN
-
--- Shards: UPDATE known_coins (by coin_pub)
--- SELECT recoup_refresh (by coin_pub)
--- UPDATE known_coins (by coin_pub)
--- INSERT recoup_refresh (by coin_pub)
-
-
-out_internal_failure=FALSE;
-
-
--- Check remaining balance of the coin.
-SELECT
- remaining_frac
- ,remaining_val
- INTO
- tmp_frac
- ,tmp_val
-FROM known_coins
- WHERE coin_pub=in_coin_pub;
-
-IF NOT FOUND
-THEN
- out_internal_failure=TRUE;
- out_recoup_ok=FALSE;
- RETURN;
-END IF;
-
-IF tmp_val + tmp_frac = 0
-THEN
- -- Check for idempotency
- SELECT
- recoup_timestamp
- INTO
- out_recoup_timestamp
- FROM recoup_refresh
- WHERE coin_pub=in_coin_pub;
- out_recoup_ok=FOUND;
- RETURN;
-END IF;
-
--- Update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=0
- ,remaining_val=0
- WHERE coin_pub=in_coin_pub;
-
-
--- Credit the old coin.
-UPDATE known_coins
- SET
- remaining_frac=remaining_frac+tmp_frac
- - CASE
- WHEN remaining_frac+tmp_frac >= 100000000
- THEN 100000000
- ELSE 0
- END,
- remaining_val=remaining_val+tmp_val
- + CASE
- WHEN remaining_frac+tmp_frac >= 100000000
- THEN 1
- ELSE 0
- END
- WHERE coin_pub=in_old_coin_pub;
-
-
-IF NOT FOUND
-THEN
- RAISE NOTICE 'failed to increase old coin balance from recoup';
- out_recoup_ok=TRUE;
- out_internal_failure=TRUE;
- RETURN;
-END IF;
-
-
-INSERT INTO recoup_refresh
- (coin_pub
- ,known_coin_id
- ,coin_sig
- ,coin_blind
- ,amount_val
- ,amount_frac
- ,recoup_timestamp
- ,rrc_serial
- )
-VALUES
- (in_coin_pub
- ,in_known_coin_id
- ,in_coin_sig
- ,in_coin_blind
- ,tmp_val
- ,tmp_frac
- ,in_recoup_timestamp
- ,in_rrc_serial);
-
--- Normal end, everything is fine.
-out_recoup_ok=TRUE;
-out_recoup_timestamp=in_recoup_timestamp;
-
-END $$;
-
-
---
--- Name: exchange_do_recoup_to_reserve(bytea, bigint, bytea, bytea, bigint, bytea, bigint, bigint, bigint); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_recoup_to_reserve(in_reserve_pub bytea, in_reserve_out_serial_id bigint, in_coin_blind bytea, in_coin_pub bytea, in_known_coin_id bigint, in_coin_sig bytea, in_reserve_gc bigint, in_reserve_expiration bigint, in_recoup_timestamp bigint, OUT out_recoup_ok boolean, OUT out_internal_failure boolean, OUT out_recoup_timestamp bigint) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- tmp_val INT8; -- amount recouped
-DECLARE
- tmp_frac INT8; -- amount recouped
-BEGIN
--- Shards: SELECT known_coins (by coin_pub)
--- SELECT recoup (by coin_pub)
--- UPDATE known_coins (by coin_pub)
--- UPDATE reserves (by reserve_pub)
--- INSERT recoup (by coin_pub)
-
-out_internal_failure=FALSE;
-
-
--- Check remaining balance of the coin.
-SELECT
- remaining_frac
- ,remaining_val
- INTO
- tmp_frac
- ,tmp_val
-FROM known_coins
- WHERE coin_pub=in_coin_pub;
-
-IF NOT FOUND
-THEN
- out_internal_failure=TRUE;
- out_recoup_ok=FALSE;
- RETURN;
-END IF;
-
-IF tmp_val + tmp_frac = 0
-THEN
- -- Check for idempotency
- SELECT
- recoup_timestamp
- INTO
- out_recoup_timestamp
- FROM recoup
- WHERE coin_pub=in_coin_pub;
-
- out_recoup_ok=FOUND;
- RETURN;
-END IF;
-
-
--- Update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=0
- ,remaining_val=0
- WHERE coin_pub=in_coin_pub;
-
-
--- Credit the reserve and update reserve timers.
-UPDATE reserves
- SET
- current_balance_frac=current_balance_frac+tmp_frac
- - CASE
- WHEN current_balance_frac+tmp_frac >= 100000000
- THEN 100000000
- ELSE 0
- END,
- current_balance_val=current_balance_val+tmp_val
- + CASE
- WHEN current_balance_frac+tmp_frac >= 100000000
- THEN 1
- ELSE 0
- END,
- gc_date=GREATEST(gc_date, in_reserve_gc),
- expiration_date=GREATEST(expiration_date, in_reserve_expiration)
- WHERE reserve_pub=in_reserve_pub;
-
-
-IF NOT FOUND
-THEN
- RAISE NOTICE 'failed to increase reserve balance from recoup';
- out_recoup_ok=TRUE;
- out_internal_failure=TRUE;
- RETURN;
-END IF;
-
-
-INSERT INTO recoup
- (coin_pub
- ,coin_sig
- ,coin_blind
- ,amount_val
- ,amount_frac
- ,recoup_timestamp
- ,reserve_out_serial_id
- )
-VALUES
- (in_coin_pub
- ,in_coin_sig
- ,in_coin_blind
- ,tmp_val
- ,tmp_frac
- ,in_recoup_timestamp
- ,in_reserve_out_serial_id);
-
--- Normal end, everything is fine.
-out_recoup_ok=TRUE;
-out_recoup_timestamp=in_recoup_timestamp;
-
-END $$;
-
-
---
--- Name: exchange_do_refund(bigint, integer, bigint, integer, bigint, integer, bytea, bigint, bigint, bigint, bytea, bytea, bytea); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_refund(in_amount_with_fee_val bigint, in_amount_with_fee_frac integer, in_amount_val bigint, in_amount_frac integer, in_deposit_fee_val bigint, in_deposit_fee_frac integer, in_h_contract_terms bytea, in_rtransaction_id bigint, in_deposit_shard bigint, in_known_coin_id bigint, in_coin_pub bytea, in_merchant_pub bytea, in_merchant_sig bytea, OUT out_not_found boolean, OUT out_refund_ok boolean, OUT out_gone boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- dsi INT8; -- ID of deposit being refunded
-DECLARE
- tmp_val INT8; -- total amount refunded
-DECLARE
- tmp_frac INT8; -- total amount refunded
-DECLARE
- deposit_val INT8; -- amount that was originally deposited
-DECLARE
- deposit_frac INT8; -- amount that was originally deposited
-BEGIN
--- Shards: SELECT deposits (coin_pub, shard, h_contract_terms, merchant_pub)
--- INSERT refunds (by coin_pub, rtransaction_id) ON CONFLICT DO NOTHING
--- SELECT refunds (by coin_pub)
--- UPDATE known_coins (by coin_pub)
-
-SELECT
- deposit_serial_id
- ,amount_with_fee_val
- ,amount_with_fee_frac
- ,done
-INTO
- dsi
- ,deposit_val
- ,deposit_frac
- ,out_gone
-FROM deposits
- WHERE coin_pub=in_coin_pub
- AND shard=in_deposit_shard
- AND merchant_pub=in_merchant_pub
- AND h_contract_terms=in_h_contract_terms;
-
-IF NOT FOUND
-THEN
- -- No matching deposit found!
- out_refund_ok=FALSE;
- out_conflict=FALSE;
- out_not_found=TRUE;
- out_gone=FALSE;
- RETURN;
-END IF;
-
-INSERT INTO refunds
- (deposit_serial_id
- ,coin_pub
- ,merchant_sig
- ,rtransaction_id
- ,amount_with_fee_val
- ,amount_with_fee_frac
- )
- VALUES
- (dsi
- ,in_coin_pub
- ,in_merchant_sig
- ,in_rtransaction_id
- ,in_amount_with_fee_val
- ,in_amount_with_fee_frac)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: see if an identical record exists.
- -- Note that by checking 'coin_sig', we implicitly check
- -- identity over everything that the signature covers.
- -- We do select over merchant_pub and h_contract_terms
- -- primarily here to maximally use the existing index.
- PERFORM
- FROM refunds
- WHERE coin_pub=in_coin_pub
- AND deposit_serial_id=dsi
- AND rtransaction_id=in_rtransaction_id
- AND amount_with_fee_val=in_amount_with_fee_val
- AND amount_with_fee_frac=in_amount_with_fee_frac;
-
- IF NOT FOUND
- THEN
- -- Deposit exists, but have conflicting refund.
- out_refund_ok=FALSE;
- out_conflict=TRUE;
- out_not_found=FALSE;
- RETURN;
- END IF;
-
- -- Idempotent request known, return success.
- out_refund_ok=TRUE;
- out_conflict=FALSE;
- out_not_found=FALSE;
- out_gone=FALSE;
- RETURN;
-END IF;
-
-IF out_gone
-THEN
- -- money already sent to the merchant. Tough luck.
- out_refund_ok=FALSE;
- out_conflict=FALSE;
- out_not_found=FALSE;
- RETURN;
-END IF;
-
--- Check refund balance invariant.
-SELECT
- SUM(amount_with_fee_val) -- overflow here is not plausible
- ,SUM(CAST(amount_with_fee_frac AS INT8)) -- compute using 64 bits
- INTO
- tmp_val
- ,tmp_frac
- FROM refunds
- WHERE coin_pub=in_coin_pub
- AND deposit_serial_id=dsi;
-IF tmp_val IS NULL
-THEN
- RAISE NOTICE 'failed to sum up existing refunds';
- out_refund_ok=FALSE;
- out_conflict=FALSE;
- out_not_found=FALSE;
- RETURN;
-END IF;
-
--- Normalize result before continuing
-tmp_val = tmp_val + tmp_frac / 100000000;
-tmp_frac = tmp_frac % 100000000;
-
--- Actually check if the deposits are sufficient for the refund. Verbosely. ;-)
-IF (tmp_val < deposit_val)
-THEN
- out_refund_ok=TRUE;
-ELSE
- IF (tmp_val = deposit_val) AND (tmp_frac <= deposit_frac)
- THEN
- out_refund_ok=TRUE;
- ELSE
- out_refund_ok=FALSE;
- END IF;
-END IF;
-
-IF (tmp_val = deposit_val) AND (tmp_frac = deposit_frac)
-THEN
- -- Refunds have reached the full value of the original
- -- deposit. Also refund the deposit fee.
- in_amount_frac = in_amount_frac + in_deposit_fee_frac;
- in_amount_val = in_amount_val + in_deposit_fee_val;
-
- -- Normalize result before continuing
- in_amount_val = in_amount_val + in_amount_frac / 100000000;
- in_amount_frac = in_amount_frac % 100000000;
-END IF;
-
--- Update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=remaining_frac+in_amount_frac
- - CASE
- WHEN remaining_frac+in_amount_frac >= 100000000
- THEN 100000000
- ELSE 0
- END,
- remaining_val=remaining_val+in_amount_val
- + CASE
- WHEN remaining_frac+in_amount_frac >= 100000000
- THEN 1
- ELSE 0
- END
- WHERE coin_pub=in_coin_pub;
-
-
-out_conflict=FALSE;
-out_not_found=FALSE;
-
-END $$;
-
-
---
--- Name: exchange_do_reserve_purse(bytea, bytea, bigint, bytea, bigint, integer, bytea); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_reserve_purse(in_purse_pub bytea, in_merge_sig bytea, in_merge_timestamp bigint, in_reserve_sig bytea, in_purse_fee_val bigint, in_purse_fee_frac integer, in_reserve_pub bytea, OUT out_no_funds boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- my_purses_active INT8;
-DECLARE
- my_purses_allowed INT8;
-DECLARE
- my_balance_val INT8;
-DECLARE
- my_balance_frac INT4;
-DECLARE
- my_kyc_passed BOOLEAN;
-BEGIN
-
--- comment out for now
-IF TRUE
-THEN
- out_no_funds=FALSE;
- out_conflict=FALSE;
- RETURN;
-END IF;
-
--- Store purse merge signature, checks for purse_pub uniqueness
-INSERT INTO purse_merges
- (partner_serial_id
- ,reserve_pub
- ,purse_pub
- ,merge_sig
- ,merge_timestamp)
- VALUES
- (0
- ,in_reserve_pub
- ,in_purse_pub
- ,in_merge_sig
- ,in_merge_timestamp)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: see if an identical record exists.
- -- Note that by checking 'merge_sig', we implicitly check
- -- identity over everything that the signature covers.
- PERFORM
- FROM purse_merges
- WHERE purse_pub=in_purse_pub
- AND merge_sig=in_merge_sig;
- IF NOT FOUND
- THEN
- -- Purse was merged, but to some other reserve. Not allowed.
- out_conflict=TRUE;
- RETURN;
- END IF;
-
- -- "success"
- out_conflict=FALSE;
- out_no_funds=FALSE;
- RETURN;
-END IF;
-out_conflict=FALSE;
-
-
--- Store account merge signature.
-INSERT INTO account_merges
- (reserve_pub
- ,reserve_sig
- ,purse_pub)
- VALUES
- (in_reserve_pub
- ,in_reserve_sig
- ,in_purse_pub);
-
-
-
--- Charge reserve for purse creation.
--- FIXME: Use different type of purse
--- signature in this case, so that we
--- can properly account for the purse
--- fees when auditing!!!
-SELECT
- purses_active
- ,purses_allowed
- ,kyc_passed
- ,current_balance_val
- ,current_balance_frac
-INTO
- my_purses_active
- ,my_purses_allowed
- ,my_kyc_passed
- ,my_balance_val
- ,my_balance_frac
-FROM reserves
-WHERE reserve_pub=in_reserve_pub;
-
-IF NOT FOUND
-THEN
- out_no_funds=TRUE;
- -- FIXME: be more specific in the returned
- -- error that we don't know the reserve
- -- (instead of merely saying it has no funds)
- RETURN;
-END IF;
-
-IF NOT my_kyc_passed
-THEN
- -- FIXME: might want to categorically disallow
- -- purse creation without KYC (depending on
- -- exchange settings => new argument?)
-END IF;
-
-IF ( (my_purses_active >= my_purses_allowed) AND
- ( (my_balance_val < in_purse_fee_val) OR
- ( (my_balance_val <= in_purse_fee_val) AND
- (my_balance_frac < in_purse_fee_frac) ) ) )
-THEN
- out_no_funds=TRUE;
- RETURN;
-END IF;
-
-IF (my_purses_active < my_purses_allowed)
-THEN
- my_purses_active = my_purses_active + 1;
-ELSE
- -- FIXME: See above: we should probably have
- -- very explicit wallet-approval in the
- -- signature to charge the reserve!
- my_balance_val = my_balance_val - in_purse_fee_val;
- IF (my_balance_frac > in_purse_fee_frac)
- THEN
- my_balance_frac = my_balance_frac - in_purse_fee_frac;
- ELSE
- my_balance_val = my_balance_val - 1;
- my_balance_frac = my_balance_frac + 100000000 - in_purse_fee_frac;
- END IF;
-END IF;
-
-UPDATE reserves SET
- gc_date=min_reserve_gc
- ,current_balance_val=my_balance_val
- ,current_balance_frac=my_balance_frac
- ,purses_active=my_purses_active
- ,kyc_required=TRUE
-WHERE
- reserves.reserve_pub=rpub;
-
-out_no_funds=FALSE;
-
-
-END $$;
-
-
---
--- Name: exchange_do_withdraw(bytea, bigint, integer, bytea, bytea, bytea, bytea, bytea, bigint, bigint); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_withdraw(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, rpub bytea, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- reserve_gc INT8;
-DECLARE
- denom_serial INT8;
-DECLARE
- reserve_val INT8;
-DECLARE
- reserve_frac INT4;
-BEGIN
--- Shards: reserves by reserve_pub (SELECT)
--- reserves_out (INSERT, with CONFLICT detection) by wih
--- reserves by reserve_pub (UPDATE)
--- reserves_in by reserve_pub (SELECT)
--- wire_targets by wire_target_h_payto
-
-SELECT denominations_serial
- INTO denom_serial
- FROM denominations
- WHERE denom_pub_hash=h_denom_pub;
-
-IF NOT FOUND
-THEN
- -- denomination unknown, should be impossible!
- reserve_found=FALSE;
- balance_ok=FALSE;
- kycok=FALSE;
- account_uuid=0;
- ruuid=0;
- ASSERT false, 'denomination unknown';
- RETURN;
-END IF;
-
-
-SELECT
- current_balance_val
- ,current_balance_frac
- ,gc_date
- ,reserve_uuid
- INTO
- reserve_val
- ,reserve_frac
- ,reserve_gc
- ,ruuid
- FROM reserves
- WHERE reserves.reserve_pub=rpub;
-
-IF NOT FOUND
-THEN
- -- reserve unknown
- reserve_found=FALSE;
- balance_ok=FALSE;
- kycok=FALSE;
- account_uuid=0;
- ruuid=2;
- RETURN;
-END IF;
-
--- We optimistically insert, and then on conflict declare
--- the query successful due to idempotency.
-INSERT INTO reserves_out
- (h_blind_ev
- ,denominations_serial
- ,denom_sig
- ,reserve_uuid
- ,reserve_sig
- ,execution_date
- ,amount_with_fee_val
- ,amount_with_fee_frac)
-VALUES
- (h_coin_envelope
- ,denom_serial
- ,denom_sig
- ,ruuid
- ,reserve_sig
- ,now
- ,amount_val
- ,amount_frac)
-ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- idempotent query, all constraints must be satisfied
- reserve_found=TRUE;
- balance_ok=TRUE;
- kycok=TRUE;
- account_uuid=0;
- RETURN;
-END IF;
-
--- Check reserve balance is sufficient.
-IF (reserve_val > amount_val)
-THEN
- IF (reserve_frac >= amount_frac)
- THEN
- reserve_val=reserve_val - amount_val;
- reserve_frac=reserve_frac - amount_frac;
- ELSE
- reserve_val=reserve_val - amount_val - 1;
- reserve_frac=reserve_frac + 100000000 - amount_frac;
- END IF;
-ELSE
- IF (reserve_val = amount_val) AND (reserve_frac >= amount_frac)
- THEN
- reserve_val=0;
- reserve_frac=reserve_frac - amount_frac;
- ELSE
- reserve_found=TRUE;
- balance_ok=FALSE;
- kycok=FALSE; -- we do not really know or care
- account_uuid=0;
- RETURN;
- END IF;
-END IF;
-
--- Calculate new expiration dates.
-min_reserve_gc=GREATEST(min_reserve_gc,reserve_gc);
-
--- Update reserve balance.
-UPDATE reserves SET
- gc_date=min_reserve_gc
- ,current_balance_val=reserve_val
- ,current_balance_frac=reserve_frac
-WHERE
- reserves.reserve_pub=rpub;
-
-reserve_found=TRUE;
-balance_ok=TRUE;
-
-
-
--- Special actions needed for a CS withdraw?
-IF NOT NULL cs_nonce
-THEN
- -- Cache CS signature to prevent replays in the future
- -- (and check if cached signature exists at the same time).
- INSERT INTO cs_nonce_locks
- (nonce
- ,max_denomination_serial
- ,op_hash)
- VALUES
- (cs_nonce
- ,denom_serial
- ,h_coin_envelope)
- ON CONFLICT DO NOTHING;
-
- IF NOT FOUND
- THEN
- -- See if the existing entry is identical.
- SELECT 1
- FROM cs_nonce_locks
- WHERE nonce=cs_nonce
- AND op_hash=h_coin_envelope;
- IF NOT FOUND
- THEN
- reserve_found=FALSE;
- balance_ok=FALSE;
- kycok=FALSE;
- account_uuid=0;
- ruuid=1; -- FIXME: return error message more nicely!
- ASSERT false, 'nonce reuse attempted by client';
- END IF;
- END IF;
-END IF;
-
-
-
--- Obtain KYC status based on the last wire transfer into
--- this reserve. FIXME: likely not adequate for reserves that got P2P transfers!
--- SELECT
--- kyc_ok
--- ,wire_target_serial_id
--- INTO
--- kycok
--- ,account_uuid
--- FROM reserves_in
--- JOIN wire_targets ON (wire_source_h_payto = wire_target_h_payto)
--- WHERE reserve_pub=rpub
--- LIMIT 1; -- limit 1 should not be required (without p2p transfers)
-
-WITH reserves_in AS materialized (
- SELECT wire_source_h_payto
- FROM reserves_in WHERE
- reserve_pub=rpub
-)
-SELECT
- kyc_ok
- ,wire_target_serial_id
-INTO
- kycok
- ,account_uuid
-FROM wire_targets
- WHERE wire_target_h_payto = (
- SELECT wire_source_h_payto
- FROM reserves_in
- );
-
-END $$;
-
-
---
--- Name: FUNCTION exchange_do_withdraw(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, rpub bytea, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.exchange_do_withdraw(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, rpub bytea, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint) IS 'Checks whether the reserve has sufficient balance for a withdraw operation (or the request is repeated and was previously approved) and if so updates the database with the result';
-
-
---
--- Name: exchange_do_withdraw_limit_check(bigint, bigint, bigint, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_withdraw_limit_check(ruuid bigint, start_time bigint, upper_limit_val bigint, upper_limit_frac integer, OUT below_limit boolean) RETURNS boolean
- LANGUAGE plpgsql
- AS $$
-DECLARE
- total_val INT8;
-DECLARE
- total_frac INT8; -- INT4 could overflow during accumulation!
-BEGIN
--- NOTE: Read-only, but crosses shards.
--- Shards: reserves by reserve_pub
--- reserves_out by reserve_uuid -- crosses shards!!
-
-
-SELECT
- SUM(amount_with_fee_val) -- overflow here is not plausible
- ,SUM(CAST(amount_with_fee_frac AS INT8)) -- compute using 64 bits
- INTO
- total_val
- ,total_frac
- FROM reserves_out
- WHERE reserve_uuid=ruuid
- AND execution_date > start_time;
-
--- normalize result
-total_val = total_val + total_frac / 100000000;
-total_frac = total_frac % 100000000;
-
--- compare to threshold
-below_limit = (total_val < upper_limit_val) OR
- ( (total_val = upper_limit_val) AND
- (total_frac <= upper_limit_frac) );
-END $$;
-
-
---
--- Name: FUNCTION exchange_do_withdraw_limit_check(ruuid bigint, start_time bigint, upper_limit_val bigint, upper_limit_frac integer, OUT below_limit boolean); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.exchange_do_withdraw_limit_check(ruuid bigint, start_time bigint, upper_limit_val bigint, upper_limit_frac integer, OUT below_limit boolean) IS 'Check whether the withdrawals from the given reserve since the given time are below the given threshold';
-
-
---
--- Name: prepare_sharding(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.prepare_sharding() RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- CREATE EXTENSION IF NOT EXISTS postgres_fdw;
-
- PERFORM detach_default_partitions();
-
- ALTER TABLE IF EXISTS wire_targets
- DROP CONSTRAINT IF EXISTS wire_targets_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS reserves
- DROP CONSTRAINT IF EXISTS reserves_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS reserves_in
- DROP CONSTRAINT IF EXISTS reserves_in_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS reserves_close
- DROP CONSTRAINT IF EXISTS reserves_close_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS reserves_out
- DROP CONSTRAINT IF EXISTS reserves_out_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS reserves_out_denominations_serial_fkey
- ,DROP CONSTRAINT IF EXISTS reserves_out_h_blind_ev_key
- ;
-
- ALTER TABLE IF EXISTS known_coins
- DROP CONSTRAINT IF EXISTS known_coins_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS known_coins_denominations_serial_fkey
- ;
-
- ALTER TABLE IF EXISTS refresh_commitments
- DROP CONSTRAINT IF EXISTS refresh_commitments_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS refresh_old_coin_pub_fkey
- ;
-
- ALTER TABLE IF EXISTS refresh_revealed_coins
- DROP CONSTRAINT IF EXISTS refresh_revealed_coins_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS refresh_revealed_coins_denominations_serial_fkey
- ;
-
- ALTER TABLE IF EXISTS refresh_transfer_keys
- DROP CONSTRAINT IF EXISTS refresh_transfer_keys_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS deposits
- DROP CONSTRAINT IF EXISTS deposits_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS deposits_extension_details_serial_id_fkey
- ,DROP CONSTRAINT IF EXISTS deposits_coin_pub_merchant_pub_h_contract_terms_key CASCADE
- ;
-
- ALTER TABLE IF EXISTS refunds
- DROP CONSTRAINT IF EXISTS refunds_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS wire_out
- DROP CONSTRAINT IF EXISTS wire_out_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS wire_out_wtid_raw_key CASCADE
- ;
-
- ALTER TABLE IF EXISTS aggregation_tracking
- DROP CONSTRAINT IF EXISTS aggregation_tracking_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS aggregation_tracking_wtid_raw_fkey
- ;
-
- ALTER TABLE IF EXISTS recoup
- DROP CONSTRAINT IF EXISTS recoup_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS recoup_refresh
- DROP CONSTRAINT IF EXISTS recoup_refresh_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS prewire
- DROP CONSTRAINT IF EXISTS prewire_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS cs_nonce_locks
- DROP CONSTRAINT IF EXISTS cs_nonce_locks_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS purse_requests
- DROP CONSTRAINT IF EXISTS purse_requests_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS purse_merges
- DROP CONSTRAINT IF EXISTS purse_merges_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS account_merges
- DROP CONSTRAINT IF EXISTS account_merges_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS contracts
- DROP CONSTRAINT IF EXISTS contracts_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS history_requests
- DROP CONSTRAINT IF EXISTS history_requests_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS close_requests
- DROP CONSTRAINT IF EXISTS close_requests_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS purse_deposits
- DROP CONSTRAINT IF EXISTS purse_deposits_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS wads_out
- DROP CONSTRAINT IF EXISTS wads_out_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS wad_out_entries
- DROP CONSTRAINT IF EXISTS wad_out_entries_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS wads_in
- DROP CONSTRAINT IF EXISTS wads_in_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS wads_in_wad_id_origin_exchange_url_key
- ;
-
- ALTER TABLE IF EXISTS wad_in_entries
- DROP CONSTRAINT IF EXISTS wad_in_entries_pkey CASCADE
- ;
-
-END
-$$;
-
-
---
--- Name: recoup_delete_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.recoup_delete_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- DELETE FROM recoup_by_reserve
- WHERE reserve_out_serial_id = OLD.reserve_out_serial_id
- AND coin_pub = OLD.coin_pub;
- RETURN OLD;
-END $$;
-
-
---
--- Name: FUNCTION recoup_delete_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.recoup_delete_trigger() IS 'Replicate recoup deletions into recoup_by_reserve table.';
-
-
---
--- Name: recoup_insert_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.recoup_insert_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- INSERT INTO recoup_by_reserve
- (reserve_out_serial_id
- ,coin_pub)
- VALUES
- (NEW.reserve_out_serial_id
- ,NEW.coin_pub);
- RETURN NEW;
-END $$;
-
-
---
--- Name: FUNCTION recoup_insert_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.recoup_insert_trigger() IS 'Replicate recoup inserts into recoup_by_reserve table.';
-
-
---
--- Name: reserves_out_by_reserve_delete_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.reserves_out_by_reserve_delete_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- DELETE FROM reserves_out_by_reserve
- WHERE reserve_uuid = OLD.reserve_uuid;
- RETURN OLD;
-END $$;
-
-
---
--- Name: FUNCTION reserves_out_by_reserve_delete_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.reserves_out_by_reserve_delete_trigger() IS 'Replicate reserve_out deletions into reserve_out_by_reserve table.';
-
-
---
--- Name: reserves_out_by_reserve_insert_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.reserves_out_by_reserve_insert_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- INSERT INTO reserves_out_by_reserve
- (reserve_uuid
- ,h_blind_ev)
- VALUES
- (NEW.reserve_uuid
- ,NEW.h_blind_ev);
- RETURN NEW;
-END $$;
-
-
---
--- Name: FUNCTION reserves_out_by_reserve_insert_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.reserves_out_by_reserve_insert_trigger() IS 'Replicate reserve_out inserts into reserve_out_by_reserve table.';
-
-
---
--- Name: wire_out_delete_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.wire_out_delete_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- DELETE FROM aggregation_tracking
- WHERE wtid_raw = OLD.wtid_raw;
- RETURN OLD;
-END $$;
-
-
---
--- Name: FUNCTION wire_out_delete_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.wire_out_delete_trigger() IS 'Replicate reserve_out deletions into aggregation_tracking. This replaces an earlier use of an ON DELETE CASCADE that required a DEFERRABLE constraint and conflicted with nice partitioning.';
-
-
-SET default_tablespace = '';
-
-SET default_table_access_method = heap;
-
---
--- Name: patches; Type: TABLE; Schema: _v; Owner: -
---
-
-CREATE TABLE _v.patches (
- patch_name text NOT NULL,
- applied_tsz timestamp with time zone DEFAULT now() NOT NULL,
- applied_by text NOT NULL,
- requires text[],
- conflicts text[]
-);
-
-
---
--- Name: TABLE patches; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON TABLE _v.patches IS 'Contains information about what patches are currently applied on database.';
-
-
---
--- Name: COLUMN patches.patch_name; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.patch_name IS 'Name of patch, has to be unique for every patch.';
-
-
---
--- Name: COLUMN patches.applied_tsz; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.applied_tsz IS 'When the patch was applied.';
-
-
---
--- Name: COLUMN patches.applied_by; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.applied_by IS 'Who applied this patch (PostgreSQL username)';
-
-
---
--- Name: COLUMN patches.requires; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.requires IS 'List of patches that are required for given patch.';
-
-
---
--- Name: COLUMN patches.conflicts; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.conflicts IS 'List of patches that conflict with given patch.';
-
-
---
--- Name: account_merges; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.account_merges (
- account_merge_request_serial_id bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_pub bytea NOT NULL,
- CONSTRAINT account_merges_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT account_merges_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT account_merges_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE account_merges; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.account_merges IS 'Merge requests where a purse- and account-owner requested merging the purse into the account';
-
-
---
--- Name: COLUMN account_merges.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.account_merges.reserve_pub IS 'public key of the target reserve';
-
-
---
--- Name: COLUMN account_merges.reserve_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.account_merges.reserve_sig IS 'signature by the reserve private key affirming the merge, of type TALER_SIGNATURE_WALLET_ACCOUNT_MERGE';
-
-
---
--- Name: COLUMN account_merges.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.account_merges.purse_pub IS 'public key of the purse';
-
-
---
--- Name: account_merges_account_merge_request_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.account_merges ALTER COLUMN account_merge_request_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.account_merges_account_merge_request_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: account_merges_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.account_merges_default (
- account_merge_request_serial_id bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_pub bytea NOT NULL,
- CONSTRAINT account_merges_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT account_merges_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT account_merges_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.account_merges ATTACH PARTITION public.account_merges_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: aggregation_tracking; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.aggregation_tracking (
- aggregation_serial_id bigint NOT NULL,
- deposit_serial_id bigint NOT NULL,
- wtid_raw bytea NOT NULL
-)
-PARTITION BY HASH (deposit_serial_id);
-
-
---
--- Name: TABLE aggregation_tracking; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.aggregation_tracking IS 'mapping from wire transfer identifiers (WTID) to deposits (and back)';
-
-
---
--- Name: COLUMN aggregation_tracking.wtid_raw; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.aggregation_tracking.wtid_raw IS 'identifier of the wire transfer';
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.aggregation_tracking ALTER COLUMN aggregation_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.aggregation_tracking_aggregation_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: aggregation_tracking_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.aggregation_tracking_default (
- aggregation_serial_id bigint NOT NULL,
- deposit_serial_id bigint NOT NULL,
- wtid_raw bytea NOT NULL
-);
-ALTER TABLE ONLY public.aggregation_tracking ATTACH PARTITION public.aggregation_tracking_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: aggregation_transient; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.aggregation_transient (
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- wire_target_h_payto bytea,
- exchange_account_section text NOT NULL,
- wtid_raw bytea NOT NULL,
- CONSTRAINT aggregation_transient_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT aggregation_transient_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-)
-PARTITION BY HASH (wire_target_h_payto);
-
-
---
--- Name: TABLE aggregation_transient; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.aggregation_transient IS 'aggregations currently happening (lacking wire_out, usually because the amount is too low); this table is not replicated';
-
-
---
--- Name: COLUMN aggregation_transient.amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.aggregation_transient.amount_val IS 'Sum of all of the aggregated deposits (without deposit fees)';
-
-
---
--- Name: COLUMN aggregation_transient.wtid_raw; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.aggregation_transient.wtid_raw IS 'identifier of the wire transfer';
-
-
---
--- Name: aggregation_transient_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.aggregation_transient_default (
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- wire_target_h_payto bytea,
- exchange_account_section text NOT NULL,
- wtid_raw bytea NOT NULL,
- CONSTRAINT aggregation_transient_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT aggregation_transient_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-);
-ALTER TABLE ONLY public.aggregation_transient ATTACH PARTITION public.aggregation_transient_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: app_bankaccount; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_bankaccount (
- is_public boolean NOT NULL,
- account_no integer NOT NULL,
- balance character varying NOT NULL,
- user_id integer NOT NULL
-);
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.app_bankaccount_account_no_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.app_bankaccount_account_no_seq OWNED BY public.app_bankaccount.account_no;
-
-
---
--- Name: app_banktransaction; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_banktransaction (
- id bigint NOT NULL,
- amount character varying NOT NULL,
- subject character varying(200) NOT NULL,
- date timestamp with time zone NOT NULL,
- cancelled boolean NOT NULL,
- request_uid character varying(128) NOT NULL,
- credit_account_id integer NOT NULL,
- debit_account_id integer NOT NULL
-);
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.app_banktransaction_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.app_banktransaction_id_seq OWNED BY public.app_banktransaction.id;
-
-
---
--- Name: app_talerwithdrawoperation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_talerwithdrawoperation (
- withdraw_id uuid NOT NULL,
- amount character varying NOT NULL,
- selection_done boolean NOT NULL,
- confirmation_done boolean NOT NULL,
- aborted boolean NOT NULL,
- selected_reserve_pub text,
- selected_exchange_account_id integer,
- withdraw_account_id integer NOT NULL
-);
-
-
---
--- Name: auditor_balance_summary; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_balance_summary (
- master_pub bytea NOT NULL,
- denom_balance_val bigint NOT NULL,
- denom_balance_frac integer NOT NULL,
- deposit_fee_balance_val bigint NOT NULL,
- deposit_fee_balance_frac integer NOT NULL,
- melt_fee_balance_val bigint NOT NULL,
- melt_fee_balance_frac integer NOT NULL,
- refund_fee_balance_val bigint NOT NULL,
- refund_fee_balance_frac integer NOT NULL,
- risk_val bigint NOT NULL,
- risk_frac integer NOT NULL,
- loss_val bigint NOT NULL,
- loss_frac integer NOT NULL,
- irregular_recoup_val bigint NOT NULL,
- irregular_recoup_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_balance_summary; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_balance_summary IS 'the sum of the outstanding coins from auditor_denomination_pending (denom_pubs must belong to the respectives exchange master public key); it represents the auditor_balance_summary of the exchange at this point (modulo unexpected historic_loss-style events where denomination keys are compromised)';
-
-
---
--- Name: auditor_denom_sigs; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_denom_sigs (
- auditor_denom_serial bigint NOT NULL,
- auditor_uuid bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- auditor_sig bytea,
- CONSTRAINT auditor_denom_sigs_auditor_sig_check CHECK ((length(auditor_sig) = 64))
-);
-
-
---
--- Name: TABLE auditor_denom_sigs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_denom_sigs IS 'Table with auditor signatures on exchange denomination keys.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.auditor_uuid; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.auditor_uuid IS 'Identifies the auditor.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.denominations_serial IS 'Denomination the signature is for.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.auditor_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.auditor_sig IS 'Signature of the auditor, of purpose TALER_SIGNATURE_AUDITOR_EXCHANGE_KEYS.';
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.auditor_denom_sigs ALTER COLUMN auditor_denom_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.auditor_denom_sigs_auditor_denom_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: auditor_denomination_pending; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_denomination_pending (
- denom_pub_hash bytea NOT NULL,
- denom_balance_val bigint NOT NULL,
- denom_balance_frac integer NOT NULL,
- denom_loss_val bigint NOT NULL,
- denom_loss_frac integer NOT NULL,
- num_issued bigint NOT NULL,
- denom_risk_val bigint NOT NULL,
- denom_risk_frac integer NOT NULL,
- recoup_loss_val bigint NOT NULL,
- recoup_loss_frac integer NOT NULL,
- CONSTRAINT auditor_denomination_pending_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64))
-);
-
-
---
--- Name: TABLE auditor_denomination_pending; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_denomination_pending IS 'outstanding denomination coins that the exchange is aware of and what the respective balances are (outstanding as well as issued overall which implies the maximum value at risk).';
-
-
---
--- Name: COLUMN auditor_denomination_pending.num_issued; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.num_issued IS 'counts the number of coins issued (withdraw, refresh) of this denomination';
-
-
---
--- Name: COLUMN auditor_denomination_pending.denom_risk_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.denom_risk_val IS 'amount that could theoretically be lost in the future due to recoup operations';
-
-
---
--- Name: COLUMN auditor_denomination_pending.recoup_loss_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.recoup_loss_val IS 'amount actually lost due to recoup operations past revocation';
-
-
---
--- Name: auditor_exchange_signkeys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_exchange_signkeys (
- master_pub bytea NOT NULL,
- ep_start bigint NOT NULL,
- ep_expire bigint NOT NULL,
- ep_end bigint NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT auditor_exchange_signkeys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT auditor_exchange_signkeys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE auditor_exchange_signkeys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_exchange_signkeys IS 'list of the online signing keys of exchanges we are auditing';
-
-
---
--- Name: auditor_exchanges; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_exchanges (
- master_pub bytea NOT NULL,
- exchange_url character varying NOT NULL,
- CONSTRAINT auditor_exchanges_master_pub_check CHECK ((length(master_pub) = 32))
-);
-
-
---
--- Name: TABLE auditor_exchanges; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_exchanges IS 'list of the exchanges we are auditing';
-
-
---
--- Name: auditor_historic_denomination_revenue; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_historic_denomination_revenue (
- master_pub bytea NOT NULL,
- denom_pub_hash bytea NOT NULL,
- revenue_timestamp bigint NOT NULL,
- revenue_balance_val bigint NOT NULL,
- revenue_balance_frac integer NOT NULL,
- loss_balance_val bigint NOT NULL,
- loss_balance_frac integer NOT NULL,
- CONSTRAINT auditor_historic_denomination_revenue_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64))
-);
-
-
---
--- Name: TABLE auditor_historic_denomination_revenue; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_historic_denomination_revenue IS 'Table with historic profits; basically, when a denom_pub has expired and everything associated with it is garbage collected, the final profits end up in here; note that the denom_pub here is not a foreign key, we just keep it as a reference point.';
-
-
---
--- Name: COLUMN auditor_historic_denomination_revenue.revenue_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_historic_denomination_revenue.revenue_balance_val IS 'the sum of all of the profits we made on the coin except for withdraw fees (which are in historic_reserve_revenue); so this includes the deposit, melt and refund fees';
-
-
---
--- Name: auditor_historic_reserve_summary; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_historic_reserve_summary (
- master_pub bytea NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- reserve_profits_val bigint NOT NULL,
- reserve_profits_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_historic_reserve_summary; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_historic_reserve_summary IS 'historic profits from reserves; we eventually GC auditor_historic_reserve_revenue, and then store the totals in here (by time intervals).';
-
-
---
--- Name: auditor_predicted_result; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_predicted_result (
- master_pub bytea NOT NULL,
- balance_val bigint NOT NULL,
- balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_predicted_result; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_predicted_result IS 'Table with the sum of the ledger, auditor_historic_revenue and the auditor_reserve_balance. This is the final amount that the exchange should have in its bank account right now.';
-
-
---
--- Name: auditor_progress_aggregation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_aggregation (
- master_pub bytea NOT NULL,
- last_wire_out_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_aggregation; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_aggregation IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_coin; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_coin (
- master_pub bytea NOT NULL,
- last_withdraw_serial_id bigint DEFAULT 0 NOT NULL,
- last_deposit_serial_id bigint DEFAULT 0 NOT NULL,
- last_melt_serial_id bigint DEFAULT 0 NOT NULL,
- last_refund_serial_id bigint DEFAULT 0 NOT NULL,
- last_recoup_serial_id bigint DEFAULT 0 NOT NULL,
- last_recoup_refresh_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_coin; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_coin IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_deposit_confirmation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_deposit_confirmation (
- master_pub bytea NOT NULL,
- last_deposit_confirmation_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_deposit_confirmation; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_deposit_confirmation IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_reserve; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_reserve (
- master_pub bytea NOT NULL,
- last_reserve_in_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_out_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_recoup_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_close_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_reserve; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_reserve IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_reserve_balance; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_reserve_balance (
- master_pub bytea NOT NULL,
- reserve_balance_val bigint NOT NULL,
- reserve_balance_frac integer NOT NULL,
- withdraw_fee_balance_val bigint NOT NULL,
- withdraw_fee_balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_reserve_balance; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_reserve_balance IS 'sum of the balances of all customer reserves (by exchange master public key)';
-
-
---
--- Name: auditor_reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_reserves (
- reserve_pub bytea NOT NULL,
- master_pub bytea NOT NULL,
- reserve_balance_val bigint NOT NULL,
- reserve_balance_frac integer NOT NULL,
- withdraw_fee_balance_val bigint NOT NULL,
- withdraw_fee_balance_frac integer NOT NULL,
- expiration_date bigint NOT NULL,
- auditor_reserves_rowid bigint NOT NULL,
- origin_account text,
- CONSTRAINT auditor_reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- Name: TABLE auditor_reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_reserves IS 'all of the customer reserves and their respective balances that the auditor is aware of';
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auditor_reserves_auditor_reserves_rowid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditor_reserves_auditor_reserves_rowid_seq OWNED BY public.auditor_reserves.auditor_reserves_rowid;
-
-
---
--- Name: auditor_wire_fee_balance; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_wire_fee_balance (
- master_pub bytea NOT NULL,
- wire_fee_balance_val bigint NOT NULL,
- wire_fee_balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_wire_fee_balance; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_wire_fee_balance IS 'sum of the balances of all wire fees (by exchange master public key)';
-
-
---
--- Name: auditors; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditors (
- auditor_uuid bigint NOT NULL,
- auditor_pub bytea NOT NULL,
- auditor_name character varying NOT NULL,
- auditor_url character varying NOT NULL,
- is_active boolean NOT NULL,
- last_change bigint NOT NULL,
- CONSTRAINT auditors_auditor_pub_check CHECK ((length(auditor_pub) = 32))
-);
-
-
---
--- Name: TABLE auditors; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditors IS 'Table with auditors the exchange uses or has used in the past. Entries never expire as we need to remember the last_change column indefinitely.';
-
-
---
--- Name: COLUMN auditors.auditor_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.auditor_pub IS 'Public key of the auditor.';
-
-
---
--- Name: COLUMN auditors.auditor_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.auditor_url IS 'The base URL of the auditor.';
-
-
---
--- Name: COLUMN auditors.is_active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.is_active IS 'true if we are currently supporting the use of this auditor.';
-
-
---
--- Name: COLUMN auditors.last_change; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.last_change IS 'Latest time when active status changed. Used to detect replays of old messages.';
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.auditors ALTER COLUMN auditor_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.auditors_auditor_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: auth_group; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_group (
- id integer NOT NULL,
- name character varying(150) NOT NULL
-);
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_group_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_group_id_seq OWNED BY public.auth_group.id;
-
-
---
--- Name: auth_group_permissions; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_group_permissions (
- id bigint NOT NULL,
- group_id integer NOT NULL,
- permission_id integer NOT NULL
-);
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_group_permissions_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_group_permissions_id_seq OWNED BY public.auth_group_permissions.id;
-
-
---
--- Name: auth_permission; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_permission (
- id integer NOT NULL,
- name character varying(255) NOT NULL,
- content_type_id integer NOT NULL,
- codename character varying(100) NOT NULL
-);
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_permission_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_permission_id_seq OWNED BY public.auth_permission.id;
-
-
---
--- Name: auth_user; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user (
- id integer NOT NULL,
- password character varying(128) NOT NULL,
- last_login timestamp with time zone,
- is_superuser boolean NOT NULL,
- username character varying(150) NOT NULL,
- first_name character varying(150) NOT NULL,
- last_name character varying(150) NOT NULL,
- email character varying(254) NOT NULL,
- is_staff boolean NOT NULL,
- is_active boolean NOT NULL,
- date_joined timestamp with time zone NOT NULL
-);
-
-
---
--- Name: auth_user_groups; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user_groups (
- id bigint NOT NULL,
- user_id integer NOT NULL,
- group_id integer NOT NULL
-);
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_groups_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_groups_id_seq OWNED BY public.auth_user_groups.id;
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_id_seq OWNED BY public.auth_user.id;
-
-
---
--- Name: auth_user_user_permissions; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user_user_permissions (
- id bigint NOT NULL,
- user_id integer NOT NULL,
- permission_id integer NOT NULL
-);
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_user_permissions_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_user_permissions_id_seq OWNED BY public.auth_user_user_permissions.id;
-
-
---
--- Name: close_requests; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.close_requests (
- reserve_pub bytea NOT NULL,
- close_timestamp bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- close_val bigint NOT NULL,
- close_frac integer NOT NULL,
- CONSTRAINT close_requests_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT close_requests_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (reserve_pub);
-
-
---
--- Name: TABLE close_requests; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.close_requests IS 'Explicit requests by a reserve owner to close a reserve immediately';
-
-
---
--- Name: COLUMN close_requests.close_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.close_requests.close_timestamp IS 'When the request was created by the client';
-
-
---
--- Name: COLUMN close_requests.reserve_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.close_requests.reserve_sig IS 'Signature affirming that the reserve is to be closed';
-
-
---
--- Name: COLUMN close_requests.close_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.close_requests.close_val IS 'Balance of the reserve at the time of closing, to be wired to the associated bank account (minus the closing fee)';
-
-
---
--- Name: close_requests_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.close_requests_default (
- reserve_pub bytea NOT NULL,
- close_timestamp bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- close_val bigint NOT NULL,
- close_frac integer NOT NULL,
- CONSTRAINT close_requests_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT close_requests_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.close_requests ATTACH PARTITION public.close_requests_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: contracts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.contracts (
- contract_serial_id bigint NOT NULL,
- purse_pub bytea NOT NULL,
- pub_ckey bytea NOT NULL,
- contract_sig bytea NOT NULL,
- e_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- CONSTRAINT contracts_contract_sig_check CHECK ((length(contract_sig) = 64)),
- CONSTRAINT contracts_pub_ckey_check CHECK ((length(pub_ckey) = 32)),
- CONSTRAINT contracts_purse_pub_check CHECK ((length(purse_pub) = 32))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE contracts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.contracts IS 'encrypted contracts associated with purses';
-
-
---
--- Name: COLUMN contracts.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.contracts.purse_pub IS 'public key of the purse that the contract is associated with';
-
-
---
--- Name: COLUMN contracts.pub_ckey; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.contracts.pub_ckey IS 'Public ECDH key used to encrypt the contract, to be used with the purse private key for decryption';
-
-
---
--- Name: COLUMN contracts.contract_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.contracts.contract_sig IS 'signature over the encrypted contract by the purse contract key';
-
-
---
--- Name: COLUMN contracts.e_contract; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.contracts.e_contract IS 'AES-GCM encrypted contract terms (contains gzip compressed JSON after decryption)';
-
-
---
--- Name: contracts_contract_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.contracts ALTER COLUMN contract_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.contracts_contract_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: contracts_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.contracts_default (
- contract_serial_id bigint NOT NULL,
- purse_pub bytea NOT NULL,
- pub_ckey bytea NOT NULL,
- contract_sig bytea NOT NULL,
- e_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- CONSTRAINT contracts_contract_sig_check CHECK ((length(contract_sig) = 64)),
- CONSTRAINT contracts_pub_ckey_check CHECK ((length(pub_ckey) = 32)),
- CONSTRAINT contracts_purse_pub_check CHECK ((length(purse_pub) = 32))
-);
-ALTER TABLE ONLY public.contracts ATTACH PARTITION public.contracts_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: cs_nonce_locks; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.cs_nonce_locks (
- cs_nonce_lock_serial_id bigint NOT NULL,
- nonce bytea NOT NULL,
- op_hash bytea NOT NULL,
- max_denomination_serial bigint NOT NULL,
- CONSTRAINT cs_nonce_locks_nonce_check CHECK ((length(nonce) = 32)),
- CONSTRAINT cs_nonce_locks_op_hash_check CHECK ((length(op_hash) = 64))
-)
-PARTITION BY HASH (nonce);
-
-
---
--- Name: TABLE cs_nonce_locks; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.cs_nonce_locks IS 'ensures a Clause Schnorr client nonce is locked for use with an operation identified by a hash';
-
-
---
--- Name: COLUMN cs_nonce_locks.nonce; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.cs_nonce_locks.nonce IS 'actual nonce submitted by the client';
-
-
---
--- Name: COLUMN cs_nonce_locks.op_hash; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.cs_nonce_locks.op_hash IS 'hash (RC for refresh, blind coin hash for withdraw) the nonce may be used with';
-
-
---
--- Name: COLUMN cs_nonce_locks.max_denomination_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.cs_nonce_locks.max_denomination_serial IS 'Maximum number of a CS denomination serial the nonce could be used with, for GC';
-
-
---
--- Name: cs_nonce_locks_cs_nonce_lock_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.cs_nonce_locks ALTER COLUMN cs_nonce_lock_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.cs_nonce_locks_cs_nonce_lock_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: cs_nonce_locks_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.cs_nonce_locks_default (
- cs_nonce_lock_serial_id bigint NOT NULL,
- nonce bytea NOT NULL,
- op_hash bytea NOT NULL,
- max_denomination_serial bigint NOT NULL,
- CONSTRAINT cs_nonce_locks_nonce_check CHECK ((length(nonce) = 32)),
- CONSTRAINT cs_nonce_locks_op_hash_check CHECK ((length(op_hash) = 64))
-);
-ALTER TABLE ONLY public.cs_nonce_locks ATTACH PARTITION public.cs_nonce_locks_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: denomination_revocations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.denomination_revocations (
- denom_revocations_serial_id bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT denomination_revocations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE denomination_revocations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.denomination_revocations IS 'remembering which denomination keys have been revoked';
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.denomination_revocations ALTER COLUMN denom_revocations_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.denomination_revocations_denom_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: denominations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.denominations (
- denominations_serial bigint NOT NULL,
- denom_pub_hash bytea NOT NULL,
- denom_type integer DEFAULT 1 NOT NULL,
- age_mask integer DEFAULT 0 NOT NULL,
- denom_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- valid_from bigint NOT NULL,
- expire_withdraw bigint NOT NULL,
- expire_deposit bigint NOT NULL,
- expire_legal bigint NOT NULL,
- coin_val bigint NOT NULL,
- coin_frac integer NOT NULL,
- fee_withdraw_val bigint NOT NULL,
- fee_withdraw_frac integer NOT NULL,
- fee_deposit_val bigint NOT NULL,
- fee_deposit_frac integer NOT NULL,
- fee_refresh_val bigint NOT NULL,
- fee_refresh_frac integer NOT NULL,
- fee_refund_val bigint NOT NULL,
- fee_refund_frac integer NOT NULL,
- CONSTRAINT denominations_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64)),
- CONSTRAINT denominations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE denominations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.denominations IS 'Main denominations table. All the valid denominations the exchange knows about.';
-
-
---
--- Name: COLUMN denominations.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.denominations.denominations_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: COLUMN denominations.denom_type; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.denominations.denom_type IS 'determines cipher type for blind signatures used with this denomination; 0 is for RSA';
-
-
---
--- Name: COLUMN denominations.age_mask; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.denominations.age_mask IS 'bitmask with the age restrictions that are being used for this denomination; 0 if denomination does not support the use of age restrictions';
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.denominations ALTER COLUMN denominations_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.denominations_denominations_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: deposit_confirmations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposit_confirmations (
- master_pub bytea NOT NULL,
- serial_id bigint NOT NULL,
- h_contract_terms bytea NOT NULL,
- h_extensions bytea NOT NULL,
- h_wire bytea NOT NULL,
- exchange_timestamp bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- wire_deadline bigint NOT NULL,
- amount_without_fee_val bigint NOT NULL,
- amount_without_fee_frac integer NOT NULL,
- coin_pub bytea NOT NULL,
- merchant_pub bytea NOT NULL,
- exchange_sig bytea NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT deposit_confirmations_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposit_confirmations_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT deposit_confirmations_exchange_sig_check CHECK ((length(exchange_sig) = 64)),
- CONSTRAINT deposit_confirmations_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposit_confirmations_h_contract_terms_check1 CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposit_confirmations_h_wire_check CHECK ((length(h_wire) = 64)),
- CONSTRAINT deposit_confirmations_master_sig_check CHECK ((length(master_sig) = 64)),
- CONSTRAINT deposit_confirmations_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-
-
---
--- Name: TABLE deposit_confirmations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposit_confirmations IS 'deposit confirmation sent to us by merchants; we must check that the exchange reported these properly.';
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.deposit_confirmations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.deposit_confirmations_serial_id_seq OWNED BY public.deposit_confirmations.serial_id;
-
-
---
--- Name: deposits; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits (
- deposit_serial_id bigint NOT NULL,
- shard bigint NOT NULL,
- coin_pub bytea NOT NULL,
- known_coin_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wallet_timestamp bigint NOT NULL,
- exchange_timestamp bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- wire_deadline bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- h_contract_terms bytea NOT NULL,
- coin_sig bytea NOT NULL,
- wire_salt bytea NOT NULL,
- wire_target_h_payto bytea,
- done boolean DEFAULT false NOT NULL,
- extension_blocked boolean DEFAULT false NOT NULL,
- extension_details_serial_id bigint,
- CONSTRAINT deposits_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposits_coin_sig_check CHECK ((length(coin_sig) = 64)),
- CONSTRAINT deposits_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposits_merchant_pub_check CHECK ((length(merchant_pub) = 32)),
- CONSTRAINT deposits_wire_salt_check CHECK ((length(wire_salt) = 16)),
- CONSTRAINT deposits_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32))
-)
-PARTITION BY HASH (coin_pub);
-
-
---
--- Name: TABLE deposits; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposits IS 'Deposits we have received and for which we need to make (aggregate) wire transfers (and manage refunds).';
-
-
---
--- Name: COLUMN deposits.shard; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.shard IS 'Used for load sharding in the materialized indices. Should be set based on merchant_pub. 64-bit value because we need an *unsigned* 32-bit value.';
-
-
---
--- Name: COLUMN deposits.known_coin_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.known_coin_id IS 'Used for garbage collection';
-
-
---
--- Name: COLUMN deposits.wire_salt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.wire_salt IS 'Salt used when hashing the payto://-URI to get the h_wire';
-
-
---
--- Name: COLUMN deposits.wire_target_h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.wire_target_h_payto IS 'Identifies the target bank account and KYC status';
-
-
---
--- Name: COLUMN deposits.done; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.done IS 'Set to TRUE once we have included this deposit in some aggregate wire transfer to the merchant';
-
-
---
--- Name: COLUMN deposits.extension_blocked; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.extension_blocked IS 'True if the aggregation of the deposit is currently blocked by some extension mechanism. Used to filter out deposits that must not be processed by the canonical deposit logic.';
-
-
---
--- Name: COLUMN deposits.extension_details_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.extension_details_serial_id IS 'References extensions table, NULL if extensions are not used';
-
-
---
--- Name: deposits_by_ready; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits_by_ready (
- wire_deadline bigint NOT NULL,
- shard bigint NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint,
- CONSTRAINT deposits_by_ready_coin_pub_check CHECK ((length(coin_pub) = 32))
-)
-PARTITION BY RANGE (wire_deadline);
-
-
---
--- Name: TABLE deposits_by_ready; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposits_by_ready IS 'Enables fast lookups for deposits_get_ready, auto-populated via TRIGGER below';
-
-
---
--- Name: deposits_by_ready_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits_by_ready_default (
- wire_deadline bigint NOT NULL,
- shard bigint NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint,
- CONSTRAINT deposits_by_ready_coin_pub_check CHECK ((length(coin_pub) = 32))
-);
-ALTER TABLE ONLY public.deposits_by_ready ATTACH PARTITION public.deposits_by_ready_default DEFAULT;
-
-
---
--- Name: deposits_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits_default (
- deposit_serial_id bigint NOT NULL,
- shard bigint NOT NULL,
- coin_pub bytea NOT NULL,
- known_coin_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wallet_timestamp bigint NOT NULL,
- exchange_timestamp bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- wire_deadline bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- h_contract_terms bytea NOT NULL,
- coin_sig bytea NOT NULL,
- wire_salt bytea NOT NULL,
- wire_target_h_payto bytea,
- done boolean DEFAULT false NOT NULL,
- extension_blocked boolean DEFAULT false NOT NULL,
- extension_details_serial_id bigint,
- CONSTRAINT deposits_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposits_coin_sig_check CHECK ((length(coin_sig) = 64)),
- CONSTRAINT deposits_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposits_merchant_pub_check CHECK ((length(merchant_pub) = 32)),
- CONSTRAINT deposits_wire_salt_check CHECK ((length(wire_salt) = 16)),
- CONSTRAINT deposits_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32))
-);
-ALTER TABLE ONLY public.deposits ATTACH PARTITION public.deposits_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.deposits ALTER COLUMN deposit_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.deposits_deposit_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: deposits_for_matching; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits_for_matching (
- refund_deadline bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint,
- CONSTRAINT deposits_for_matching_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposits_for_matching_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-)
-PARTITION BY RANGE (refund_deadline);
-
-
---
--- Name: TABLE deposits_for_matching; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposits_for_matching IS 'Enables fast lookups for deposits_iterate_matching, auto-populated via TRIGGER below';
-
-
---
--- Name: deposits_for_matching_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits_for_matching_default (
- refund_deadline bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint,
- CONSTRAINT deposits_for_matching_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposits_for_matching_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-ALTER TABLE ONLY public.deposits_for_matching ATTACH PARTITION public.deposits_for_matching_default DEFAULT;
-
-
---
--- Name: django_content_type; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_content_type (
- id integer NOT NULL,
- app_label character varying(100) NOT NULL,
- model character varying(100) NOT NULL
-);
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.django_content_type_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.django_content_type_id_seq OWNED BY public.django_content_type.id;
-
-
---
--- Name: django_migrations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_migrations (
- id bigint NOT NULL,
- app character varying(255) NOT NULL,
- name character varying(255) NOT NULL,
- applied timestamp with time zone NOT NULL
-);
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.django_migrations_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.django_migrations_id_seq OWNED BY public.django_migrations.id;
-
-
---
--- Name: django_session; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_session (
- session_key character varying(40) NOT NULL,
- session_data text NOT NULL,
- expire_date timestamp with time zone NOT NULL
-);
-
-
---
--- Name: exchange_sign_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.exchange_sign_keys (
- esk_serial bigint NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- valid_from bigint NOT NULL,
- expire_sign bigint NOT NULL,
- expire_legal bigint NOT NULL,
- CONSTRAINT exchange_sign_keys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT exchange_sign_keys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE exchange_sign_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.exchange_sign_keys IS 'Table with master public key signatures on exchange online signing keys.';
-
-
---
--- Name: COLUMN exchange_sign_keys.exchange_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.exchange_pub IS 'Public online signing key of the exchange.';
-
-
---
--- Name: COLUMN exchange_sign_keys.master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.master_sig IS 'Signature affirming the validity of the signing key of purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.';
-
-
---
--- Name: COLUMN exchange_sign_keys.valid_from; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.valid_from IS 'Time when this online signing key will first be used to sign messages.';
-
-
---
--- Name: COLUMN exchange_sign_keys.expire_sign; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.expire_sign IS 'Time when this online signing key will no longer be used to sign.';
-
-
---
--- Name: COLUMN exchange_sign_keys.expire_legal; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.expire_legal IS 'Time when this online signing key legally expires.';
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.exchange_sign_keys ALTER COLUMN esk_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.exchange_sign_keys_esk_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: extension_details; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.extension_details (
- extension_details_serial_id bigint NOT NULL,
- extension_options character varying
-)
-PARTITION BY HASH (extension_details_serial_id);
-
-
---
--- Name: TABLE extension_details; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.extension_details IS 'Extensions that were provided with deposits (not yet used).';
-
-
---
--- Name: COLUMN extension_details.extension_options; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.extension_details.extension_options IS 'JSON object with options set that the exchange needs to consider when executing a deposit. Supported details depend on the extensions supported by the exchange.';
-
-
---
--- Name: extension_details_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.extension_details_default (
- extension_details_serial_id bigint NOT NULL,
- extension_options character varying
-);
-ALTER TABLE ONLY public.extension_details ATTACH PARTITION public.extension_details_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: extension_details_extension_details_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.extension_details ALTER COLUMN extension_details_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.extension_details_extension_details_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: extensions; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.extensions (
- extension_id bigint NOT NULL,
- name character varying NOT NULL,
- config bytea
-);
-
-
---
--- Name: TABLE extensions; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.extensions IS 'Configurations of the activated extensions';
-
-
---
--- Name: COLUMN extensions.name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.extensions.name IS 'Name of the extension';
-
-
---
--- Name: COLUMN extensions.config; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.extensions.config IS 'Configuration of the extension as JSON-blob, maybe NULL';
-
-
---
--- Name: extensions_extension_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.extensions ALTER COLUMN extension_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.extensions_extension_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: global_fee; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.global_fee (
- global_fee_serial bigint NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- history_fee_val bigint NOT NULL,
- history_fee_frac integer NOT NULL,
- kyc_fee_val bigint NOT NULL,
- kyc_fee_frac integer NOT NULL,
- account_fee_val bigint NOT NULL,
- account_fee_frac integer NOT NULL,
- purse_fee_val bigint NOT NULL,
- purse_fee_frac integer NOT NULL,
- purse_timeout bigint NOT NULL,
- kyc_timeout bigint NOT NULL,
- history_expiration bigint NOT NULL,
- purse_account_limit integer NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT global_fee_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE global_fee; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.global_fee IS 'list of the global fees of this exchange, by date';
-
-
---
--- Name: COLUMN global_fee.global_fee_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.global_fee.global_fee_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: global_fee_global_fee_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.global_fee ALTER COLUMN global_fee_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.global_fee_global_fee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: history_requests; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.history_requests (
- reserve_pub bytea NOT NULL,
- request_timestamp bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- history_fee_val bigint NOT NULL,
- history_fee_frac integer NOT NULL,
- CONSTRAINT history_requests_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT history_requests_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (reserve_pub);
-
-
---
--- Name: TABLE history_requests; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.history_requests IS 'Paid history requests issued by a client against a reserve';
-
-
---
--- Name: COLUMN history_requests.request_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.history_requests.request_timestamp IS 'When was the history request made';
-
-
---
--- Name: COLUMN history_requests.reserve_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.history_requests.reserve_sig IS 'Signature approving payment for the history request';
-
-
---
--- Name: COLUMN history_requests.history_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.history_requests.history_fee_val IS 'History fee approved by the signature';
-
-
---
--- Name: history_requests_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.history_requests_default (
- reserve_pub bytea NOT NULL,
- request_timestamp bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- history_fee_val bigint NOT NULL,
- history_fee_frac integer NOT NULL,
- CONSTRAINT history_requests_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT history_requests_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.history_requests ATTACH PARTITION public.history_requests_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: known_coins; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.known_coins (
- known_coin_id bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- coin_pub bytea NOT NULL,
- age_commitment_hash bytea,
- denom_sig bytea NOT NULL,
- remaining_val bigint NOT NULL,
- remaining_frac integer NOT NULL,
- CONSTRAINT known_coins_age_commitment_hash_check CHECK ((length(age_commitment_hash) = 32)),
- CONSTRAINT known_coins_coin_pub_check CHECK ((length(coin_pub) = 32))
-)
-PARTITION BY HASH (coin_pub);
-
-
---
--- Name: TABLE known_coins; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.known_coins IS 'information about coins and their signatures, so we do not have to store the signatures more than once if a coin is involved in multiple operations';
-
-
---
--- Name: COLUMN known_coins.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.denominations_serial IS 'Denomination of the coin, determines the value of the original coin and applicable fees for coin-specific operations.';
-
-
---
--- Name: COLUMN known_coins.coin_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.coin_pub IS 'EdDSA public key of the coin';
-
-
---
--- Name: COLUMN known_coins.age_commitment_hash; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.age_commitment_hash IS 'Optional hash of the age commitment for age restrictions as per DD 24 (active if denom_type has the respective bit set)';
-
-
---
--- Name: COLUMN known_coins.denom_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.denom_sig IS 'This is the signature of the exchange that affirms that the coin is a valid coin. The specific signature type depends on denom_type of the denomination.';
-
-
---
--- Name: COLUMN known_coins.remaining_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.remaining_val IS 'Value of the coin that remains to be spent';
-
-
---
--- Name: known_coins_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.known_coins_default (
- known_coin_id bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- coin_pub bytea NOT NULL,
- age_commitment_hash bytea,
- denom_sig bytea NOT NULL,
- remaining_val bigint NOT NULL,
- remaining_frac integer NOT NULL,
- CONSTRAINT known_coins_age_commitment_hash_check CHECK ((length(age_commitment_hash) = 32)),
- CONSTRAINT known_coins_coin_pub_check CHECK ((length(coin_pub) = 32))
-);
-ALTER TABLE ONLY public.known_coins ATTACH PARTITION public.known_coins_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.known_coins ALTER COLUMN known_coin_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.known_coins_known_coin_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_accounts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_accounts (
- account_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- h_wire bytea NOT NULL,
- salt bytea NOT NULL,
- payto_uri character varying NOT NULL,
- active boolean NOT NULL,
- CONSTRAINT merchant_accounts_h_wire_check CHECK ((length(h_wire) = 64)),
- CONSTRAINT merchant_accounts_salt_check CHECK ((length(salt) = 16))
-);
-
-
---
--- Name: TABLE merchant_accounts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_accounts IS 'bank accounts of the instances';
-
-
---
--- Name: COLUMN merchant_accounts.h_wire; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.h_wire IS 'salted hash of payto_uri';
-
-
---
--- Name: COLUMN merchant_accounts.salt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.salt IS 'salt used when hashing payto_uri into h_wire';
-
-
---
--- Name: COLUMN merchant_accounts.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.payto_uri IS 'payto URI of a merchant bank account';
-
-
---
--- Name: COLUMN merchant_accounts.active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.active IS 'true if we actively use this bank account, false if it is just kept around for older contracts to refer to';
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_accounts ALTER COLUMN account_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_accounts_account_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_contract_terms; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_contract_terms (
- order_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- order_id character varying NOT NULL,
- contract_terms bytea NOT NULL,
- h_contract_terms bytea NOT NULL,
- creation_time bigint NOT NULL,
- pay_deadline bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- paid boolean DEFAULT false NOT NULL,
- wired boolean DEFAULT false NOT NULL,
- fulfillment_url character varying,
- session_id character varying DEFAULT ''::character varying NOT NULL,
- claim_token bytea NOT NULL,
- CONSTRAINT merchant_contract_terms_claim_token_check CHECK ((length(claim_token) = 16)),
- CONSTRAINT merchant_contract_terms_h_contract_terms_check CHECK ((length(h_contract_terms) = 64))
-);
-
-
---
--- Name: TABLE merchant_contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_contract_terms IS 'Contracts are orders that have been claimed by a wallet';
-
-
---
--- Name: COLUMN merchant_contract_terms.merchant_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.merchant_serial IS 'Identifies the instance offering the contract';
-
-
---
--- Name: COLUMN merchant_contract_terms.order_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.order_id IS 'Not a foreign key into merchant_orders because paid contracts persist after expiration';
-
-
---
--- Name: COLUMN merchant_contract_terms.contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.contract_terms IS 'These contract terms include the wallet nonce';
-
-
---
--- Name: COLUMN merchant_contract_terms.h_contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.h_contract_terms IS 'Hash over contract_terms';
-
-
---
--- Name: COLUMN merchant_contract_terms.pay_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.pay_deadline IS 'How long is the offer valid. After this time, the order can be garbage collected';
-
-
---
--- Name: COLUMN merchant_contract_terms.refund_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.refund_deadline IS 'By what times do refunds have to be approved (useful to reject refund requests)';
-
-
---
--- Name: COLUMN merchant_contract_terms.paid; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.paid IS 'true implies the customer paid for this contract; order should be DELETEd from merchant_orders once paid is set to release merchant_order_locks; paid remains true even if the payment was later refunded';
-
-
---
--- Name: COLUMN merchant_contract_terms.wired; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.wired IS 'true implies the exchange wired us the full amount for all non-refunded payments under this contract';
-
-
---
--- Name: COLUMN merchant_contract_terms.fulfillment_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.fulfillment_url IS 'also included in contract_terms, but we need it here to SELECT on it during repurchase detection; can be NULL if the contract has no fulfillment URL';
-
-
---
--- Name: COLUMN merchant_contract_terms.session_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.session_id IS 'last session_id from we confirmed the paying client to use, empty string for none';
-
-
---
--- Name: COLUMN merchant_contract_terms.claim_token; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.claim_token IS 'Token optionally used to access the status of the order. All zeros (not NULL) if not used';
-
-
---
--- Name: merchant_deposit_to_transfer; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_deposit_to_transfer (
- deposit_serial bigint NOT NULL,
- coin_contribution_value_val bigint NOT NULL,
- coin_contribution_value_frac integer NOT NULL,
- credit_serial bigint NOT NULL,
- execution_time bigint NOT NULL,
- signkey_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- CONSTRAINT merchant_deposit_to_transfer_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_deposit_to_transfer; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_deposit_to_transfer IS 'Mapping of deposits to (possibly unconfirmed) wire transfers; NOTE: not used yet';
-
-
---
--- Name: COLUMN merchant_deposit_to_transfer.execution_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposit_to_transfer.execution_time IS 'Execution time as claimed by the exchange, roughly matches time seen by merchant';
-
-
---
--- Name: merchant_deposits; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_deposits (
- deposit_serial bigint NOT NULL,
- order_serial bigint,
- deposit_timestamp bigint NOT NULL,
- coin_pub bytea NOT NULL,
- exchange_url character varying NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- deposit_fee_val bigint NOT NULL,
- deposit_fee_frac integer NOT NULL,
- refund_fee_val bigint NOT NULL,
- refund_fee_frac integer NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- signkey_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- account_serial bigint NOT NULL,
- CONSTRAINT merchant_deposits_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT merchant_deposits_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_deposits; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_deposits IS 'Refunds approved by the merchant (backoffice) logic, excludes abort refunds';
-
-
---
--- Name: COLUMN merchant_deposits.deposit_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.deposit_timestamp IS 'Time when the exchange generated the deposit confirmation';
-
-
---
--- Name: COLUMN merchant_deposits.wire_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.wire_fee_val IS 'We MAY want to see if we should try to get this via merchant_exchange_wire_fees (not sure, may be too complicated with the date range, etc.)';
-
-
---
--- Name: COLUMN merchant_deposits.signkey_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.signkey_serial IS 'Online signing key of the exchange on the deposit confirmation';
-
-
---
--- Name: COLUMN merchant_deposits.exchange_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.exchange_sig IS 'Signature of the exchange over the deposit confirmation';
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_deposits ALTER COLUMN deposit_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_deposits_deposit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_exchange_signing_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_exchange_signing_keys (
- signkey_serial bigint NOT NULL,
- master_pub bytea NOT NULL,
- exchange_pub bytea NOT NULL,
- start_date bigint NOT NULL,
- expire_date bigint NOT NULL,
- end_date bigint NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT merchant_exchange_signing_keys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT merchant_exchange_signing_keys_master_pub_check CHECK ((length(master_pub) = 32)),
- CONSTRAINT merchant_exchange_signing_keys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_exchange_signing_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_exchange_signing_keys IS 'Here we store proofs of the exchange online signing keys being signed by the exchange master key';
-
-
---
--- Name: COLUMN merchant_exchange_signing_keys.master_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_exchange_signing_keys.master_pub IS 'Master public key of the exchange with these online signing keys';
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_exchange_signing_keys ALTER COLUMN signkey_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_exchange_signing_keys_signkey_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_exchange_wire_fees; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_exchange_wire_fees (
- wirefee_serial bigint NOT NULL,
- master_pub bytea NOT NULL,
- h_wire_method bytea NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT merchant_exchange_wire_fees_h_wire_method_check CHECK ((length(h_wire_method) = 64)),
- CONSTRAINT merchant_exchange_wire_fees_master_pub_check CHECK ((length(master_pub) = 32)),
- CONSTRAINT merchant_exchange_wire_fees_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_exchange_wire_fees; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_exchange_wire_fees IS 'Here we store proofs of the wire fee structure of the various exchanges';
-
-
---
--- Name: COLUMN merchant_exchange_wire_fees.master_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_exchange_wire_fees.master_pub IS 'Master public key of the exchange with these wire fees';
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_exchange_wire_fees ALTER COLUMN wirefee_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_exchange_wire_fees_wirefee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_instances; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_instances (
- merchant_serial bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- auth_hash bytea,
- auth_salt bytea,
- merchant_id character varying NOT NULL,
- merchant_name character varying NOT NULL,
- address bytea NOT NULL,
- jurisdiction bytea NOT NULL,
- default_max_deposit_fee_val bigint NOT NULL,
- default_max_deposit_fee_frac integer NOT NULL,
- default_max_wire_fee_val bigint NOT NULL,
- default_max_wire_fee_frac integer NOT NULL,
- default_wire_fee_amortization integer NOT NULL,
- default_wire_transfer_delay bigint NOT NULL,
- default_pay_delay bigint NOT NULL,
- CONSTRAINT merchant_instances_auth_hash_check CHECK ((length(auth_hash) = 64)),
- CONSTRAINT merchant_instances_auth_salt_check CHECK ((length(auth_salt) = 32)),
- CONSTRAINT merchant_instances_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-
-
---
--- Name: TABLE merchant_instances; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_instances IS 'all the instances supported by this backend';
-
-
---
--- Name: COLUMN merchant_instances.auth_hash; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.auth_hash IS 'hash used for merchant back office Authorization, NULL for no check';
-
-
---
--- Name: COLUMN merchant_instances.auth_salt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.auth_salt IS 'salt to use when hashing Authorization header before comparing with auth_hash';
-
-
---
--- Name: COLUMN merchant_instances.merchant_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.merchant_id IS 'identifier of the merchant as used in the base URL (required)';
-
-
---
--- Name: COLUMN merchant_instances.merchant_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.merchant_name IS 'legal name of the merchant as a simple string (required)';
-
-
---
--- Name: COLUMN merchant_instances.address; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.address IS 'physical address of the merchant as a Location in JSON format (required)';
-
-
---
--- Name: COLUMN merchant_instances.jurisdiction; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.jurisdiction IS 'jurisdiction of the merchant as a Location in JSON format (required)';
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_instances ALTER COLUMN merchant_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_instances_merchant_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_inventory; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_inventory (
- product_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- product_id character varying NOT NULL,
- description character varying NOT NULL,
- description_i18n bytea NOT NULL,
- unit character varying NOT NULL,
- image bytea NOT NULL,
- taxes bytea NOT NULL,
- price_val bigint NOT NULL,
- price_frac integer NOT NULL,
- total_stock bigint NOT NULL,
- total_sold bigint DEFAULT 0 NOT NULL,
- total_lost bigint DEFAULT 0 NOT NULL,
- address bytea NOT NULL,
- next_restock bigint NOT NULL,
- minimum_age integer DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE merchant_inventory; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_inventory IS 'products offered by the merchant (may be incomplete, frontend can override)';
-
-
---
--- Name: COLUMN merchant_inventory.description; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.description IS 'Human-readable product description';
-
-
---
--- Name: COLUMN merchant_inventory.description_i18n; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.description_i18n IS 'JSON map from IETF BCP 47 language tags to localized descriptions';
-
-
---
--- Name: COLUMN merchant_inventory.unit; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.unit IS 'Unit of sale for the product (liters, kilograms, packages)';
-
-
---
--- Name: COLUMN merchant_inventory.image; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.image IS 'NOT NULL, but can be 0 bytes; must contain an ImageDataUrl';
-
-
---
--- Name: COLUMN merchant_inventory.taxes; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.taxes IS 'JSON array containing taxes the merchant pays, must be JSON, but can be just "[]"';
-
-
---
--- Name: COLUMN merchant_inventory.price_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.price_val IS 'Current price of one unit of the product';
-
-
---
--- Name: COLUMN merchant_inventory.total_stock; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_stock IS 'A value of -1 is used for unlimited (electronic good), may never be lowered';
-
-
---
--- Name: COLUMN merchant_inventory.total_sold; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_sold IS 'Number of products sold, must be below total_stock, non-negative, may never be lowered';
-
-
---
--- Name: COLUMN merchant_inventory.total_lost; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_lost IS 'Number of products that used to be in stock but were lost (spoiled, damaged), may never be lowered; total_stock >= total_sold + total_lost must always hold';
-
-
---
--- Name: COLUMN merchant_inventory.address; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.address IS 'JSON formatted Location of where the product is stocked';
-
-
---
--- Name: COLUMN merchant_inventory.next_restock; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.next_restock IS 'GNUnet absolute time indicating when the next restock is expected. 0 for unknown.';
-
-
---
--- Name: COLUMN merchant_inventory.minimum_age; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.minimum_age IS 'Minimum age of the customer in years, to be used if an exchange supports the age restriction extension.';
-
-
---
--- Name: merchant_inventory_locks; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_inventory_locks (
- product_serial bigint NOT NULL,
- lock_uuid bytea NOT NULL,
- total_locked bigint NOT NULL,
- expiration bigint NOT NULL,
- CONSTRAINT merchant_inventory_locks_lock_uuid_check CHECK ((length(lock_uuid) = 16))
-);
-
-
---
--- Name: TABLE merchant_inventory_locks; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_inventory_locks IS 'locks on inventory helt by shopping carts; note that locks MAY not be honored if merchants increase total_lost for inventory';
-
-
---
--- Name: COLUMN merchant_inventory_locks.total_locked; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory_locks.total_locked IS 'how many units of the product does this lock reserve';
-
-
---
--- Name: COLUMN merchant_inventory_locks.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory_locks.expiration IS 'when does this lock automatically expire (if no order is created)';
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_inventory ALTER COLUMN product_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_inventory_product_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_keys (
- merchant_priv bytea NOT NULL,
- merchant_serial bigint NOT NULL,
- CONSTRAINT merchant_keys_merchant_priv_check CHECK ((length(merchant_priv) = 32))
-);
-
-
---
--- Name: TABLE merchant_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_keys IS 'private keys of instances that have not been deleted';
-
-
---
--- Name: merchant_kyc; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_kyc (
- kyc_serial_id bigint NOT NULL,
- kyc_timestamp bigint NOT NULL,
- kyc_ok boolean DEFAULT false NOT NULL,
- exchange_sig bytea,
- exchange_pub bytea,
- exchange_kyc_serial bigint DEFAULT 0 NOT NULL,
- account_serial bigint NOT NULL,
- exchange_url character varying NOT NULL,
- CONSTRAINT merchant_kyc_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT merchant_kyc_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_kyc; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_kyc IS 'Status of the KYC process of a merchant account at an exchange';
-
-
---
--- Name: COLUMN merchant_kyc.kyc_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.kyc_timestamp IS 'Last time we checked our KYC status at the exchange. Useful to re-check if the status is very stale. Also the timestamp used for the exchange signature (if present).';
-
-
---
--- Name: COLUMN merchant_kyc.kyc_ok; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.kyc_ok IS 'true if the KYC check was passed successfully';
-
-
---
--- Name: COLUMN merchant_kyc.exchange_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.exchange_sig IS 'signature of the exchange affirming the KYC passed (or NULL if exchange does not require KYC or not kyc_ok)';
-
-
---
--- Name: COLUMN merchant_kyc.exchange_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.exchange_pub IS 'public key used with exchange_sig (or NULL if exchange_sig is NULL)';
-
-
---
--- Name: COLUMN merchant_kyc.exchange_kyc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.exchange_kyc_serial IS 'Number to use in the KYC-endpoints of the exchange to check the KYC status or begin the KYC process. 0 if we do not know it yet.';
-
-
---
--- Name: COLUMN merchant_kyc.account_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.account_serial IS 'Which bank account of the merchant is the KYC status for';
-
-
---
--- Name: COLUMN merchant_kyc.exchange_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.exchange_url IS 'Which exchange base URL is this KYC status valid for';
-
-
---
--- Name: merchant_kyc_kyc_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_kyc ALTER COLUMN kyc_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_kyc_kyc_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_order_locks; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_order_locks (
- product_serial bigint NOT NULL,
- total_locked bigint NOT NULL,
- order_serial bigint NOT NULL
-);
-
-
---
--- Name: TABLE merchant_order_locks; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_order_locks IS 'locks on orders awaiting claim and payment; note that locks MAY not be honored if merchants increase total_lost for inventory';
-
-
---
--- Name: COLUMN merchant_order_locks.total_locked; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_order_locks.total_locked IS 'how many units of the product does this lock reserve';
-
-
---
--- Name: merchant_orders; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_orders (
- order_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- order_id character varying NOT NULL,
- claim_token bytea NOT NULL,
- h_post_data bytea NOT NULL,
- pay_deadline bigint NOT NULL,
- creation_time bigint NOT NULL,
- contract_terms bytea NOT NULL,
- CONSTRAINT merchant_orders_claim_token_check CHECK ((length(claim_token) = 16)),
- CONSTRAINT merchant_orders_h_post_data_check CHECK ((length(h_post_data) = 64))
-);
-
-
---
--- Name: TABLE merchant_orders; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_orders IS 'Orders we offered to a customer, but that have not yet been claimed';
-
-
---
--- Name: COLUMN merchant_orders.merchant_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.merchant_serial IS 'Identifies the instance offering the contract';
-
-
---
--- Name: COLUMN merchant_orders.claim_token; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.claim_token IS 'Token optionally used to authorize the wallet to claim the order. All zeros (not NULL) if not used';
-
-
---
--- Name: COLUMN merchant_orders.h_post_data; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.h_post_data IS 'Hash of the POST request that created this order, for idempotency checks';
-
-
---
--- Name: COLUMN merchant_orders.pay_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.pay_deadline IS 'How long is the offer valid. After this time, the order can be garbage collected';
-
-
---
--- Name: COLUMN merchant_orders.contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.contract_terms IS 'Claiming changes the contract_terms, hence we have no hash of the terms in this table';
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_orders ALTER COLUMN order_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_orders_order_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_refund_proofs; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_refund_proofs (
- refund_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- signkey_serial bigint NOT NULL,
- CONSTRAINT merchant_refund_proofs_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_refund_proofs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_refund_proofs IS 'Refunds confirmed by the exchange (not all approved refunds are grabbed by the wallet)';
-
-
---
--- Name: merchant_refunds; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_refunds (
- refund_serial bigint NOT NULL,
- order_serial bigint NOT NULL,
- rtransaction_id bigint NOT NULL,
- refund_timestamp bigint NOT NULL,
- coin_pub bytea NOT NULL,
- reason character varying NOT NULL,
- refund_amount_val bigint NOT NULL,
- refund_amount_frac integer NOT NULL
-);
-
-
---
--- Name: COLUMN merchant_refunds.rtransaction_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_refunds.rtransaction_id IS 'Needed for uniqueness in case a refund is increased for the same order';
-
-
---
--- Name: COLUMN merchant_refunds.refund_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_refunds.refund_timestamp IS 'Needed for grouping of refunds in the wallet UI; has no semantics in the protocol (only for UX), but should be from the time when the merchant internally approved the refund';
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_refunds ALTER COLUMN refund_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_refunds_refund_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_tip_pickup_signatures; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_pickup_signatures (
- pickup_serial bigint NOT NULL,
- coin_offset integer NOT NULL,
- blind_sig bytea NOT NULL
-);
-
-
---
--- Name: TABLE merchant_tip_pickup_signatures; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_pickup_signatures IS 'blind signatures we got from the exchange during the tip pickup';
-
-
---
--- Name: merchant_tip_pickups; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_pickups (
- pickup_serial bigint NOT NULL,
- tip_serial bigint NOT NULL,
- pickup_id bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT merchant_tip_pickups_pickup_id_check CHECK ((length(pickup_id) = 64))
-);
-
-
---
--- Name: TABLE merchant_tip_pickups; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_pickups IS 'tips that have been picked up';
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_tip_pickups ALTER COLUMN pickup_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_tip_pickups_pickup_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_tip_reserve_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_reserve_keys (
- reserve_serial bigint NOT NULL,
- reserve_priv bytea NOT NULL,
- exchange_url character varying NOT NULL,
- payto_uri character varying,
- CONSTRAINT merchant_tip_reserve_keys_reserve_priv_check CHECK ((length(reserve_priv) = 32))
-);
-
-
---
--- Name: COLUMN merchant_tip_reserve_keys.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserve_keys.payto_uri IS 'payto:// URI used to fund the reserve, may be NULL once reserve is funded';
-
-
---
--- Name: merchant_tip_reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_reserves (
- reserve_serial bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- merchant_serial bigint NOT NULL,
- creation_time bigint NOT NULL,
- expiration bigint NOT NULL,
- merchant_initial_balance_val bigint NOT NULL,
- merchant_initial_balance_frac integer NOT NULL,
- exchange_initial_balance_val bigint DEFAULT 0 NOT NULL,
- exchange_initial_balance_frac integer DEFAULT 0 NOT NULL,
- tips_committed_val bigint DEFAULT 0 NOT NULL,
- tips_committed_frac integer DEFAULT 0 NOT NULL,
- tips_picked_up_val bigint DEFAULT 0 NOT NULL,
- tips_picked_up_frac integer DEFAULT 0 NOT NULL,
- CONSTRAINT merchant_tip_reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- Name: TABLE merchant_tip_reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_reserves IS 'private keys of reserves that have not been deleted';
-
-
---
--- Name: COLUMN merchant_tip_reserves.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.expiration IS 'FIXME: EXCHANGE API needs to tell us when reserves close if we are to compute this';
-
-
---
--- Name: COLUMN merchant_tip_reserves.merchant_initial_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.merchant_initial_balance_val IS 'Set to the initial balance the merchant told us when creating the reserve';
-
-
---
--- Name: COLUMN merchant_tip_reserves.exchange_initial_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.exchange_initial_balance_val IS 'Set to the initial balance the exchange told us when we queried the reserve status';
-
-
---
--- Name: COLUMN merchant_tip_reserves.tips_committed_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.tips_committed_val IS 'Amount of outstanding approved tips that have not been picked up';
-
-
---
--- Name: COLUMN merchant_tip_reserves.tips_picked_up_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.tips_picked_up_val IS 'Total amount tips that have been picked up from this reserve';
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_tip_reserves ALTER COLUMN reserve_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_tip_reserves_reserve_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_tips; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tips (
- tip_serial bigint NOT NULL,
- reserve_serial bigint NOT NULL,
- tip_id bytea NOT NULL,
- justification character varying NOT NULL,
- next_url character varying NOT NULL,
- expiration bigint NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- picked_up_val bigint DEFAULT 0 NOT NULL,
- picked_up_frac integer DEFAULT 0 NOT NULL,
- was_picked_up boolean DEFAULT false NOT NULL,
- CONSTRAINT merchant_tips_tip_id_check CHECK ((length(tip_id) = 64))
-);
-
-
---
--- Name: TABLE merchant_tips; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tips IS 'tips that have been authorized';
-
-
---
--- Name: COLUMN merchant_tips.reserve_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.reserve_serial IS 'Reserve from which this tip is funded';
-
-
---
--- Name: COLUMN merchant_tips.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.expiration IS 'by when does the client have to pick up the tip';
-
-
---
--- Name: COLUMN merchant_tips.amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.amount_val IS 'total transaction cost for all coins including withdraw fees';
-
-
---
--- Name: COLUMN merchant_tips.picked_up_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.picked_up_val IS 'Tip amount left to be picked up';
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_tips ALTER COLUMN tip_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_tips_tip_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_transfer_signatures; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfer_signatures (
- credit_serial bigint NOT NULL,
- signkey_serial bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- credit_amount_val bigint NOT NULL,
- credit_amount_frac integer NOT NULL,
- execution_time bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- CONSTRAINT merchant_transfer_signatures_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_transfer_signatures; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfer_signatures IS 'table represents the main information returned from the /transfer request to the exchange.';
-
-
---
--- Name: COLUMN merchant_transfer_signatures.credit_amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_signatures.credit_amount_val IS 'actual value of the (aggregated) wire transfer, excluding the wire fee, according to the exchange';
-
-
---
--- Name: COLUMN merchant_transfer_signatures.execution_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_signatures.execution_time IS 'Execution time as claimed by the exchange, roughly matches time seen by merchant';
-
-
---
--- Name: merchant_transfer_to_coin; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfer_to_coin (
- deposit_serial bigint NOT NULL,
- credit_serial bigint NOT NULL,
- offset_in_exchange_list bigint NOT NULL,
- exchange_deposit_value_val bigint NOT NULL,
- exchange_deposit_value_frac integer NOT NULL,
- exchange_deposit_fee_val bigint NOT NULL,
- exchange_deposit_fee_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE merchant_transfer_to_coin; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfer_to_coin IS 'Mapping of (credit) transfers to (deposited) coins';
-
-
---
--- Name: COLUMN merchant_transfer_to_coin.exchange_deposit_value_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_to_coin.exchange_deposit_value_val IS 'Deposit value as claimed by the exchange, should match our values in merchant_deposits minus refunds';
-
-
---
--- Name: COLUMN merchant_transfer_to_coin.exchange_deposit_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_to_coin.exchange_deposit_fee_val IS 'Deposit value as claimed by the exchange, should match our values in merchant_deposits';
-
-
---
--- Name: merchant_transfers; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfers (
- credit_serial bigint NOT NULL,
- exchange_url character varying NOT NULL,
- wtid bytea,
- credit_amount_val bigint NOT NULL,
- credit_amount_frac integer NOT NULL,
- account_serial bigint NOT NULL,
- verified boolean DEFAULT false NOT NULL,
- confirmed boolean DEFAULT false NOT NULL,
- CONSTRAINT merchant_transfers_wtid_check CHECK ((length(wtid) = 32))
-);
-
-
---
--- Name: TABLE merchant_transfers; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfers IS 'table represents the information provided by the (trusted) merchant about incoming wire transfers';
-
-
---
--- Name: COLUMN merchant_transfers.credit_amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.credit_amount_val IS 'actual value of the (aggregated) wire transfer, excluding the wire fee, according to the merchant';
-
-
---
--- Name: COLUMN merchant_transfers.verified; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.verified IS 'true once we got an acceptable response from the exchange for this transfer';
-
-
---
--- Name: COLUMN merchant_transfers.confirmed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.confirmed IS 'true once the merchant confirmed that this transfer was received';
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_transfers ALTER COLUMN credit_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_transfers_credit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: partner_accounts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.partner_accounts (
- payto_uri character varying NOT NULL,
- partner_serial_id bigint,
- partner_master_sig bytea,
- last_seen bigint NOT NULL,
- CONSTRAINT partner_accounts_partner_master_sig_check CHECK ((length(partner_master_sig) = 64))
-);
-
-
---
--- Name: TABLE partner_accounts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.partner_accounts IS 'Table with bank accounts of the partner exchange. Entries never expire as we need to remember the signature for the auditor.';
-
-
---
--- Name: COLUMN partner_accounts.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partner_accounts.payto_uri IS 'payto URI (RFC 8905) with the bank account of the partner exchange.';
-
-
---
--- Name: COLUMN partner_accounts.partner_master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partner_accounts.partner_master_sig IS 'Signature of purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS by the partner master public key';
-
-
---
--- Name: COLUMN partner_accounts.last_seen; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partner_accounts.last_seen IS 'Last time we saw this account as being active at the partner exchange. Used to select the most recent entry, and to detect when we should check again.';
-
-
---
--- Name: partners; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.partners (
- partner_serial_id bigint NOT NULL,
- partner_master_pub bytea NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- wad_frequency bigint NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- master_sig bytea NOT NULL,
- partner_base_url text NOT NULL,
- CONSTRAINT partners_master_sig_check CHECK ((length(master_sig) = 64)),
- CONSTRAINT partners_partner_master_pub_check CHECK ((length(partner_master_pub) = 32))
-);
-
-
---
--- Name: TABLE partners; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.partners IS 'exchanges we do wad transfers to';
-
-
---
--- Name: COLUMN partners.partner_master_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.partner_master_pub IS 'offline master public key of the partner';
-
-
---
--- Name: COLUMN partners.start_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.start_date IS 'starting date of the partnership';
-
-
---
--- Name: COLUMN partners.end_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.end_date IS 'end date of the partnership';
-
-
---
--- Name: COLUMN partners.wad_frequency; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.wad_frequency IS 'how often do we promise to do wad transfers';
-
-
---
--- Name: COLUMN partners.wad_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.wad_fee_val IS 'how high is the fee for a wallet to be added to a wad to this partner';
-
-
---
--- Name: COLUMN partners.master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.master_sig IS 'signature of our master public key affirming the partnership, of purpose TALER_SIGNATURE_MASTER_PARTNER_DETAILS';
-
-
---
--- Name: COLUMN partners.partner_base_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.partner_base_url IS 'base URL of the REST API for this partner';
-
-
---
--- Name: partners_partner_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.partners ALTER COLUMN partner_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.partners_partner_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: prewire; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.prewire (
- prewire_uuid bigint NOT NULL,
- wire_method text NOT NULL,
- finished boolean DEFAULT false NOT NULL,
- failed boolean DEFAULT false NOT NULL,
- buf bytea NOT NULL
-)
-PARTITION BY HASH (prewire_uuid);
-
-
---
--- Name: TABLE prewire; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.prewire IS 'pre-commit data for wire transfers we are about to execute';
-
-
---
--- Name: COLUMN prewire.finished; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.finished IS 'set to TRUE once bank confirmed receiving the wire transfer request';
-
-
---
--- Name: COLUMN prewire.failed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.failed IS 'set to TRUE if the bank responded with a non-transient failure to our transfer request';
-
-
---
--- Name: COLUMN prewire.buf; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.buf IS 'serialized data to send to the bank to execute the wire transfer';
-
-
---
--- Name: prewire_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.prewire_default (
- prewire_uuid bigint NOT NULL,
- wire_method text NOT NULL,
- finished boolean DEFAULT false NOT NULL,
- failed boolean DEFAULT false NOT NULL,
- buf bytea NOT NULL
-);
-ALTER TABLE ONLY public.prewire ATTACH PARTITION public.prewire_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.prewire ALTER COLUMN prewire_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.prewire_prewire_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: purse_deposits; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_deposits (
- purse_deposit_serial_id bigint NOT NULL,
- partner_serial_id bigint,
- purse_pub bytea NOT NULL,
- coin_pub bytea NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- coin_sig bytea NOT NULL,
- CONSTRAINT purse_deposits_coin_sig_check CHECK ((length(coin_sig) = 64)),
- CONSTRAINT purse_deposits_purse_pub_check CHECK ((length(purse_pub) = 32))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE purse_deposits; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.purse_deposits IS 'Requests depositing coins into a purse';
-
-
---
--- Name: COLUMN purse_deposits.partner_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_deposits.partner_serial_id IS 'identifies the partner exchange, NULL in case the target purse lives at this exchange';
-
-
---
--- Name: COLUMN purse_deposits.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_deposits.purse_pub IS 'Public key of the purse';
-
-
---
--- Name: COLUMN purse_deposits.coin_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_deposits.coin_pub IS 'Public key of the coin being deposited';
-
-
---
--- Name: COLUMN purse_deposits.amount_with_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_deposits.amount_with_fee_val IS 'Total amount being deposited';
-
-
---
--- Name: COLUMN purse_deposits.coin_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_deposits.coin_sig IS 'Signature of the coin affirming the deposit into the purse, of type TALER_SIGNATURE_PURSE_DEPOSIT';
-
-
---
--- Name: purse_deposits_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_deposits_default (
- purse_deposit_serial_id bigint NOT NULL,
- partner_serial_id bigint,
- purse_pub bytea NOT NULL,
- coin_pub bytea NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- coin_sig bytea NOT NULL,
- CONSTRAINT purse_deposits_coin_sig_check CHECK ((length(coin_sig) = 64)),
- CONSTRAINT purse_deposits_purse_pub_check CHECK ((length(purse_pub) = 32))
-);
-ALTER TABLE ONLY public.purse_deposits ATTACH PARTITION public.purse_deposits_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: purse_deposits_purse_deposit_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.purse_deposits ALTER COLUMN purse_deposit_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.purse_deposits_purse_deposit_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: purse_merges; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_merges (
- purse_merge_request_serial_id bigint NOT NULL,
- partner_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- merge_sig bytea NOT NULL,
- merge_timestamp bigint NOT NULL,
- CONSTRAINT purse_merges_merge_sig_check CHECK ((length(merge_sig) = 64)),
- CONSTRAINT purse_merges_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT purse_merges_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE purse_merges; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.purse_merges IS 'Merge requests where a purse-owner requested merging the purse into the account';
-
-
---
--- Name: COLUMN purse_merges.partner_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_merges.partner_serial_id IS 'identifies the partner exchange, NULL in case the target reserve lives at this exchange';
-
-
---
--- Name: COLUMN purse_merges.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_merges.reserve_pub IS 'public key of the target reserve';
-
-
---
--- Name: COLUMN purse_merges.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_merges.purse_pub IS 'public key of the purse';
-
-
---
--- Name: COLUMN purse_merges.merge_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_merges.merge_sig IS 'signature by the purse private key affirming the merge, of type TALER_SIGNATURE_WALLET_PURSE_MERGE';
-
-
---
--- Name: COLUMN purse_merges.merge_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_merges.merge_timestamp IS 'when was the merge message signed';
-
-
---
--- Name: purse_merges_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_merges_default (
- purse_merge_request_serial_id bigint NOT NULL,
- partner_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- merge_sig bytea NOT NULL,
- merge_timestamp bigint NOT NULL,
- CONSTRAINT purse_merges_merge_sig_check CHECK ((length(merge_sig) = 64)),
- CONSTRAINT purse_merges_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT purse_merges_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-ALTER TABLE ONLY public.purse_merges ATTACH PARTITION public.purse_merges_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: purse_merges_purse_merge_request_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.purse_merges ALTER COLUMN purse_merge_request_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.purse_merges_purse_merge_request_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: purse_requests; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_requests (
- purse_requests_serial_id bigint NOT NULL,
- purse_pub bytea NOT NULL,
- merge_pub bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- h_contract_terms bytea NOT NULL,
- age_limit integer NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- balance_val bigint DEFAULT 0 NOT NULL,
- balance_frac integer DEFAULT 0 NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT purse_requests_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT purse_requests_merge_pub_check CHECK ((length(merge_pub) = 32)),
- CONSTRAINT purse_requests_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT purse_requests_purse_sig_check CHECK ((length(purse_sig) = 64))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE purse_requests; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.purse_requests IS 'Requests establishing purses, associating them with a contract but without a target reserve';
-
-
---
--- Name: COLUMN purse_requests.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.purse_pub IS 'Public key of the purse';
-
-
---
--- Name: COLUMN purse_requests.purse_expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.purse_expiration IS 'When the purse is set to expire';
-
-
---
--- Name: COLUMN purse_requests.h_contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.h_contract_terms IS 'Hash of the contract the parties are to agree to';
-
-
---
--- Name: COLUMN purse_requests.amount_with_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.amount_with_fee_val IS 'Total amount expected to be in the purse';
-
-
---
--- Name: COLUMN purse_requests.balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.balance_val IS 'Total amount actually in the purse';
-
-
---
--- Name: COLUMN purse_requests.purse_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.purse_sig IS 'Signature of the purse affirming the purse parameters, of type TALER_SIGNATURE_PURSE_REQUEST';
-
-
---
--- Name: purse_requests_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_requests_default (
- purse_requests_serial_id bigint NOT NULL,
- purse_pub bytea NOT NULL,
- merge_pub bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- h_contract_terms bytea NOT NULL,
- age_limit integer NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- balance_val bigint DEFAULT 0 NOT NULL,
- balance_frac integer DEFAULT 0 NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT purse_requests_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT purse_requests_merge_pub_check CHECK ((length(merge_pub) = 32)),
- CONSTRAINT purse_requests_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT purse_requests_purse_sig_check CHECK ((length(purse_sig) = 64))
-);
-ALTER TABLE ONLY public.purse_requests ATTACH PARTITION public.purse_requests_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: purse_requests_purse_requests_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.purse_requests ALTER COLUMN purse_requests_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.purse_requests_purse_requests_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: recoup; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup (
- recoup_uuid bigint NOT NULL,
- coin_pub bytea NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- recoup_timestamp bigint NOT NULL,
- reserve_out_serial_id bigint NOT NULL,
- CONSTRAINT recoup_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT recoup_coin_sig_check CHECK ((length(coin_sig) = 64))
-)
-PARTITION BY HASH (coin_pub);
-
-
---
--- Name: TABLE recoup; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.recoup IS 'Information about recoups that were executed between a coin and a reserve. In this type of recoup, the amount is credited back to the reserve from which the coin originated.';
-
-
---
--- Name: COLUMN recoup.coin_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.coin_pub IS 'Coin that is being debited in the recoup. Do not CASCADE ON DROP on the coin_pub, as we may keep the coin alive!';
-
-
---
--- Name: COLUMN recoup.coin_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.coin_sig IS 'Signature by the coin affirming the recoup, of type TALER_SIGNATURE_WALLET_COIN_RECOUP';
-
-
---
--- Name: COLUMN recoup.coin_blind; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.coin_blind IS 'Denomination blinding key used when creating the blinded coin from the planchet. Secret revealed during the recoup to provide the linkage between the coin and the withdraw operation.';
-
-
---
--- Name: COLUMN recoup.reserve_out_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.reserve_out_serial_id IS 'Identifies the h_blind_ev of the recouped coin and provides the link to the credited reserve.';
-
-
---
--- Name: recoup_by_reserve; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_by_reserve (
- reserve_out_serial_id bigint NOT NULL,
- coin_pub bytea,
- CONSTRAINT recoup_by_reserve_coin_pub_check CHECK ((length(coin_pub) = 32))
-)
-PARTITION BY HASH (reserve_out_serial_id);
-
-
---
--- Name: TABLE recoup_by_reserve; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.recoup_by_reserve IS 'Information in this table is strictly redundant with that of recoup, but saved by a different primary key for fast lookups by reserve_out_serial_id.';
-
-
---
--- Name: recoup_by_reserve_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_by_reserve_default (
- reserve_out_serial_id bigint NOT NULL,
- coin_pub bytea,
- CONSTRAINT recoup_by_reserve_coin_pub_check CHECK ((length(coin_pub) = 32))
-);
-ALTER TABLE ONLY public.recoup_by_reserve ATTACH PARTITION public.recoup_by_reserve_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: recoup_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_default (
- recoup_uuid bigint NOT NULL,
- coin_pub bytea NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- recoup_timestamp bigint NOT NULL,
- reserve_out_serial_id bigint NOT NULL,
- CONSTRAINT recoup_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT recoup_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-ALTER TABLE ONLY public.recoup ATTACH PARTITION public.recoup_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.recoup ALTER COLUMN recoup_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.recoup_recoup_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: recoup_refresh; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_refresh (
- recoup_refresh_uuid bigint NOT NULL,
- coin_pub bytea NOT NULL,
- known_coin_id bigint NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- recoup_timestamp bigint NOT NULL,
- rrc_serial bigint NOT NULL,
- CONSTRAINT recoup_refresh_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_refresh_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT recoup_refresh_coin_sig_check CHECK ((length(coin_sig) = 64))
-)
-PARTITION BY HASH (coin_pub);
-
-
---
--- Name: TABLE recoup_refresh; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.recoup_refresh IS 'Table of coins that originated from a refresh operation and that were recouped. Links the (fresh) coin to the melted operation (and thus the old coin). A recoup on a refreshed coin credits the old coin and debits the fresh coin.';
-
-
---
--- Name: COLUMN recoup_refresh.coin_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.coin_pub IS 'Refreshed coin of a revoked denomination where the residual value is credited to the old coin. Do not CASCADE ON DROP on the coin_pub, as we may keep the coin alive!';
-
-
---
--- Name: COLUMN recoup_refresh.known_coin_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.known_coin_id IS 'FIXME: (To be) used for garbage collection (in the future)';
-
-
---
--- Name: COLUMN recoup_refresh.coin_blind; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.coin_blind IS 'Denomination blinding key used when creating the blinded coin from the planchet. Secret revealed during the recoup to provide the linkage between the coin and the refresh operation.';
-
-
---
--- Name: COLUMN recoup_refresh.rrc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.rrc_serial IS 'Link to the refresh operation. Also identifies the h_blind_ev of the recouped coin (as h_coin_ev).';
-
-
---
--- Name: recoup_refresh_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_refresh_default (
- recoup_refresh_uuid bigint NOT NULL,
- coin_pub bytea NOT NULL,
- known_coin_id bigint NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- recoup_timestamp bigint NOT NULL,
- rrc_serial bigint NOT NULL,
- CONSTRAINT recoup_refresh_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_refresh_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT recoup_refresh_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-ALTER TABLE ONLY public.recoup_refresh ATTACH PARTITION public.recoup_refresh_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.recoup_refresh ALTER COLUMN recoup_refresh_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.recoup_refresh_recoup_refresh_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: refresh_commitments; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_commitments (
- melt_serial_id bigint NOT NULL,
- rc bytea NOT NULL,
- old_coin_pub bytea NOT NULL,
- old_coin_sig bytea NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- noreveal_index integer NOT NULL,
- CONSTRAINT refresh_commitments_old_coin_sig_check CHECK ((length(old_coin_sig) = 64)),
- CONSTRAINT refresh_commitments_rc_check CHECK ((length(rc) = 64))
-)
-PARTITION BY HASH (rc);
-
-
---
--- Name: TABLE refresh_commitments; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_commitments IS 'Commitments made when melting coins and the gamma value chosen by the exchange.';
-
-
---
--- Name: COLUMN refresh_commitments.rc; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_commitments.rc IS 'Commitment made by the client, hash over the various client inputs in the cut-and-choose protocol';
-
-
---
--- Name: COLUMN refresh_commitments.old_coin_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_commitments.old_coin_pub IS 'Coin being melted in the refresh process.';
-
-
---
--- Name: COLUMN refresh_commitments.noreveal_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_commitments.noreveal_index IS 'The gamma value chosen by the exchange in the cut-and-choose protocol';
-
-
---
--- Name: refresh_commitments_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_commitments_default (
- melt_serial_id bigint NOT NULL,
- rc bytea NOT NULL,
- old_coin_pub bytea NOT NULL,
- old_coin_sig bytea NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- noreveal_index integer NOT NULL,
- CONSTRAINT refresh_commitments_old_coin_sig_check CHECK ((length(old_coin_sig) = 64)),
- CONSTRAINT refresh_commitments_rc_check CHECK ((length(rc) = 64))
-);
-ALTER TABLE ONLY public.refresh_commitments ATTACH PARTITION public.refresh_commitments_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.refresh_commitments ALTER COLUMN melt_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.refresh_commitments_melt_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: refresh_revealed_coins; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_revealed_coins (
- rrc_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- freshcoin_index integer NOT NULL,
- link_sig bytea NOT NULL,
- denominations_serial bigint NOT NULL,
- coin_ev bytea NOT NULL,
- h_coin_ev bytea NOT NULL,
- ev_sig bytea NOT NULL,
- ewv bytea NOT NULL,
- CONSTRAINT refresh_revealed_coins_h_coin_ev_check CHECK ((length(h_coin_ev) = 64)),
- CONSTRAINT refresh_revealed_coins_link_sig_check CHECK ((length(link_sig) = 64))
-)
-PARTITION BY HASH (melt_serial_id);
-
-
---
--- Name: TABLE refresh_revealed_coins; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_revealed_coins IS 'Revelations about the new coins that are to be created during a melting session.';
-
-
---
--- Name: COLUMN refresh_revealed_coins.rrc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.rrc_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: COLUMN refresh_revealed_coins.melt_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.melt_serial_id IS 'Identifies the refresh commitment (rc) of the melt operation.';
-
-
---
--- Name: COLUMN refresh_revealed_coins.freshcoin_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.freshcoin_index IS 'index of the fresh coin being created (one melt operation may result in multiple fresh coins)';
-
-
---
--- Name: COLUMN refresh_revealed_coins.coin_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.coin_ev IS 'envelope of the new coin to be signed';
-
-
---
--- Name: COLUMN refresh_revealed_coins.h_coin_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.h_coin_ev IS 'hash of the envelope of the new coin to be signed (for lookups)';
-
-
---
--- Name: COLUMN refresh_revealed_coins.ev_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.ev_sig IS 'exchange signature over the envelope';
-
-
---
--- Name: COLUMN refresh_revealed_coins.ewv; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.ewv IS 'exchange contributed values in the creation of the fresh coin (see /csr)';
-
-
---
--- Name: refresh_revealed_coins_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_revealed_coins_default (
- rrc_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- freshcoin_index integer NOT NULL,
- link_sig bytea NOT NULL,
- denominations_serial bigint NOT NULL,
- coin_ev bytea NOT NULL,
- h_coin_ev bytea NOT NULL,
- ev_sig bytea NOT NULL,
- ewv bytea NOT NULL,
- CONSTRAINT refresh_revealed_coins_h_coin_ev_check CHECK ((length(h_coin_ev) = 64)),
- CONSTRAINT refresh_revealed_coins_link_sig_check CHECK ((length(link_sig) = 64))
-);
-ALTER TABLE ONLY public.refresh_revealed_coins ATTACH PARTITION public.refresh_revealed_coins_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.refresh_revealed_coins ALTER COLUMN rrc_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.refresh_revealed_coins_rrc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: refresh_transfer_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_transfer_keys (
- rtc_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- transfer_pub bytea NOT NULL,
- transfer_privs bytea NOT NULL,
- CONSTRAINT refresh_transfer_keys_transfer_pub_check CHECK ((length(transfer_pub) = 32))
-)
-PARTITION BY HASH (melt_serial_id);
-
-
---
--- Name: TABLE refresh_transfer_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_transfer_keys IS 'Transfer keys of a refresh operation (the data revealed to the exchange).';
-
-
---
--- Name: COLUMN refresh_transfer_keys.rtc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.rtc_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: COLUMN refresh_transfer_keys.melt_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.melt_serial_id IS 'Identifies the refresh commitment (rc) of the operation.';
-
-
---
--- Name: COLUMN refresh_transfer_keys.transfer_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.transfer_pub IS 'transfer public key for the gamma index';
-
-
---
--- Name: COLUMN refresh_transfer_keys.transfer_privs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.transfer_privs IS 'array of TALER_CNC_KAPPA - 1 transfer private keys that have been revealed, with the gamma entry being skipped';
-
-
---
--- Name: refresh_transfer_keys_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_transfer_keys_default (
- rtc_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- transfer_pub bytea NOT NULL,
- transfer_privs bytea NOT NULL,
- CONSTRAINT refresh_transfer_keys_transfer_pub_check CHECK ((length(transfer_pub) = 32))
-);
-ALTER TABLE ONLY public.refresh_transfer_keys ATTACH PARTITION public.refresh_transfer_keys_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.refresh_transfer_keys ALTER COLUMN rtc_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.refresh_transfer_keys_rtc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: refunds; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refunds (
- refund_serial_id bigint NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint NOT NULL,
- merchant_sig bytea NOT NULL,
- rtransaction_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- CONSTRAINT refunds_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT refunds_merchant_sig_check CHECK ((length(merchant_sig) = 64))
-)
-PARTITION BY HASH (coin_pub);
-
-
---
--- Name: TABLE refunds; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refunds IS 'Data on coins that were refunded. Technically, refunds always apply against specific deposit operations involving a coin. The combination of coin_pub, merchant_pub, h_contract_terms and rtransaction_id MUST be unique, and we usually select by coin_pub so that one goes first.';
-
-
---
--- Name: COLUMN refunds.deposit_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refunds.deposit_serial_id IS 'Identifies ONLY the merchant_pub, h_contract_terms and coin_pub. Multiple deposits may match a refund, this only identifies one of them.';
-
-
---
--- Name: COLUMN refunds.rtransaction_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refunds.rtransaction_id IS 'used by the merchant to make refunds unique in case the same coin for the same deposit gets a subsequent (higher) refund';
-
-
---
--- Name: refunds_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refunds_default (
- refund_serial_id bigint NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint NOT NULL,
- merchant_sig bytea NOT NULL,
- rtransaction_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- CONSTRAINT refunds_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT refunds_merchant_sig_check CHECK ((length(merchant_sig) = 64))
-);
-ALTER TABLE ONLY public.refunds ATTACH PARTITION public.refunds_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.refunds ALTER COLUMN refund_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.refunds_refund_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves (
- reserve_uuid bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- current_balance_val bigint NOT NULL,
- current_balance_frac integer NOT NULL,
- purses_active bigint DEFAULT 0 NOT NULL,
- purses_allowed bigint DEFAULT 0 NOT NULL,
- kyc_required boolean DEFAULT false NOT NULL,
- kyc_passed boolean DEFAULT false NOT NULL,
- expiration_date bigint NOT NULL,
- gc_date bigint NOT NULL,
- CONSTRAINT reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-)
-PARTITION BY HASH (reserve_pub);
-
-
---
--- Name: TABLE reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves IS 'Summarizes the balance of a reserve. Updated when new funds are added or withdrawn.';
-
-
---
--- Name: COLUMN reserves.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.reserve_pub IS 'EdDSA public key of the reserve. Knowledge of the private key implies ownership over the balance.';
-
-
---
--- Name: COLUMN reserves.current_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.current_balance_val IS 'Current balance remaining with the reserve.';
-
-
---
--- Name: COLUMN reserves.purses_active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.purses_active IS 'Number of purses that were created by this reserve that are not expired and not fully paid.';
-
-
---
--- Name: COLUMN reserves.purses_allowed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.purses_allowed IS 'Number of purses that this reserve is allowed to have active at most.';
-
-
---
--- Name: COLUMN reserves.kyc_required; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.kyc_required IS 'True if a KYC check must have been passed before withdrawing from this reserve. Set to true once a reserve received a P2P payment.';
-
-
---
--- Name: COLUMN reserves.kyc_passed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.kyc_passed IS 'True once KYC was passed for this reserve. The KYC details are then available via the wire_targets table under the key of wire_target_h_payto which is to be derived from the reserve_pub and the base URL of this exchange.';
-
-
---
--- Name: COLUMN reserves.expiration_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.expiration_date IS 'Used to trigger closing of reserves that have not been drained after some time';
-
-
---
--- Name: COLUMN reserves.gc_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.gc_date IS 'Used to forget all information about a reserve during garbage collection';
-
-
---
--- Name: reserves_close; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_close (
- close_uuid bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- execution_date bigint NOT NULL,
- wtid bytea NOT NULL,
- wire_target_h_payto bytea,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- CONSTRAINT reserves_close_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT reserves_close_wtid_check CHECK ((length(wtid) = 32))
-)
-PARTITION BY HASH (reserve_pub);
-
-
---
--- Name: TABLE reserves_close; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_close IS 'wire transfers executed by the reserve to close reserves';
-
-
---
--- Name: COLUMN reserves_close.wire_target_h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_close.wire_target_h_payto IS 'Identifies the credited bank account (and KYC status). Note that closing does not depend on KYC.';
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.reserves_close ALTER COLUMN close_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.reserves_close_close_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: reserves_close_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_close_default (
- close_uuid bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- execution_date bigint NOT NULL,
- wtid bytea NOT NULL,
- wire_target_h_payto bytea,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- CONSTRAINT reserves_close_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT reserves_close_wtid_check CHECK ((length(wtid) = 32))
-);
-ALTER TABLE ONLY public.reserves_close ATTACH PARTITION public.reserves_close_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: reserves_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_default (
- reserve_uuid bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- current_balance_val bigint NOT NULL,
- current_balance_frac integer NOT NULL,
- purses_active bigint DEFAULT 0 NOT NULL,
- purses_allowed bigint DEFAULT 0 NOT NULL,
- kyc_required boolean DEFAULT false NOT NULL,
- kyc_passed boolean DEFAULT false NOT NULL,
- expiration_date bigint NOT NULL,
- gc_date bigint NOT NULL,
- CONSTRAINT reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-ALTER TABLE ONLY public.reserves ATTACH PARTITION public.reserves_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: reserves_in; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_in (
- reserve_in_serial_id bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- wire_reference bigint NOT NULL,
- credit_val bigint NOT NULL,
- credit_frac integer NOT NULL,
- wire_source_h_payto bytea,
- exchange_account_section text NOT NULL,
- execution_date bigint NOT NULL,
- CONSTRAINT reserves_in_wire_source_h_payto_check CHECK ((length(wire_source_h_payto) = 32))
-)
-PARTITION BY HASH (reserve_pub);
-
-
---
--- Name: TABLE reserves_in; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_in IS 'list of transfers of funds into the reserves, one per incoming wire transfer';
-
-
---
--- Name: COLUMN reserves_in.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_in.reserve_pub IS 'Public key of the reserve. Private key signifies ownership of the remaining balance.';
-
-
---
--- Name: COLUMN reserves_in.credit_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_in.credit_val IS 'Amount that was transferred into the reserve';
-
-
---
--- Name: COLUMN reserves_in.wire_source_h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_in.wire_source_h_payto IS 'Identifies the debited bank account and KYC status';
-
-
---
--- Name: reserves_in_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_in_default (
- reserve_in_serial_id bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- wire_reference bigint NOT NULL,
- credit_val bigint NOT NULL,
- credit_frac integer NOT NULL,
- wire_source_h_payto bytea,
- exchange_account_section text NOT NULL,
- execution_date bigint NOT NULL,
- CONSTRAINT reserves_in_wire_source_h_payto_check CHECK ((length(wire_source_h_payto) = 32))
-);
-ALTER TABLE ONLY public.reserves_in ATTACH PARTITION public.reserves_in_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.reserves_in ALTER COLUMN reserve_in_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.reserves_in_reserve_in_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: reserves_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out (
- reserve_out_serial_id bigint NOT NULL,
- h_blind_ev bytea,
- denominations_serial bigint NOT NULL,
- denom_sig bytea NOT NULL,
- reserve_uuid bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- execution_date bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- CONSTRAINT reserves_out_h_blind_ev_check CHECK ((length(h_blind_ev) = 64)),
- CONSTRAINT reserves_out_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (h_blind_ev);
-
-
---
--- Name: TABLE reserves_out; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_out IS 'Withdraw operations performed on reserves.';
-
-
---
--- Name: COLUMN reserves_out.h_blind_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_out.h_blind_ev IS 'Hash of the blinded coin, used as primary key here so that broken clients that use a non-random coin or blinding factor fail to withdraw (otherwise they would fail on deposit when the coin is not unique there).';
-
-
---
--- Name: COLUMN reserves_out.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_out.denominations_serial IS 'We do not CASCADE ON DELETE here, we may keep the denomination data alive';
-
-
---
--- Name: reserves_out_by_reserve; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out_by_reserve (
- reserve_uuid bigint NOT NULL,
- h_blind_ev bytea,
- CONSTRAINT reserves_out_by_reserve_h_blind_ev_check CHECK ((length(h_blind_ev) = 64))
-)
-PARTITION BY HASH (reserve_uuid);
-
-
---
--- Name: TABLE reserves_out_by_reserve; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_out_by_reserve IS 'Information in this table is strictly redundant with that of reserves_out, but saved by a different primary key for fast lookups by reserve public key/uuid.';
-
-
---
--- Name: reserves_out_by_reserve_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out_by_reserve_default (
- reserve_uuid bigint NOT NULL,
- h_blind_ev bytea,
- CONSTRAINT reserves_out_by_reserve_h_blind_ev_check CHECK ((length(h_blind_ev) = 64))
-);
-ALTER TABLE ONLY public.reserves_out_by_reserve ATTACH PARTITION public.reserves_out_by_reserve_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: reserves_out_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out_default (
- reserve_out_serial_id bigint NOT NULL,
- h_blind_ev bytea,
- denominations_serial bigint NOT NULL,
- denom_sig bytea NOT NULL,
- reserve_uuid bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- execution_date bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- CONSTRAINT reserves_out_h_blind_ev_check CHECK ((length(h_blind_ev) = 64)),
- CONSTRAINT reserves_out_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.reserves_out ATTACH PARTITION public.reserves_out_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.reserves_out ALTER COLUMN reserve_out_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.reserves_out_reserve_out_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.reserves ALTER COLUMN reserve_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.reserves_reserve_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: revolving_work_shards; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE UNLOGGED TABLE public.revolving_work_shards (
- shard_serial_id bigint NOT NULL,
- last_attempt bigint NOT NULL,
- start_row integer NOT NULL,
- end_row integer NOT NULL,
- active boolean DEFAULT false NOT NULL,
- job_name character varying NOT NULL
-);
-
-
---
--- Name: TABLE revolving_work_shards; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.revolving_work_shards IS 'coordinates work between multiple processes working on the same job with partitions that need to be repeatedly processed; unlogged because on system crashes the locks represented by this table will have to be cleared anyway, typically using "taler-exchange-dbinit -s"';
-
-
---
--- Name: COLUMN revolving_work_shards.shard_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.shard_serial_id IS 'unique serial number identifying the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.last_attempt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.last_attempt IS 'last time a worker attempted to work on the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.start_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.start_row IS 'row at which the shard scope starts, inclusive';
-
-
---
--- Name: COLUMN revolving_work_shards.end_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.end_row IS 'row at which the shard scope ends, exclusive';
-
-
---
--- Name: COLUMN revolving_work_shards.active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.active IS 'set to TRUE when a worker is active on the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.job_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.job_name IS 'unique name of the job the workers on this shard are performing';
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.revolving_work_shards ALTER COLUMN shard_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.revolving_work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: signkey_revocations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.signkey_revocations (
- signkey_revocations_serial_id bigint NOT NULL,
- esk_serial bigint NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT signkey_revocations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE signkey_revocations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.signkey_revocations IS 'Table storing which online signing keys have been revoked';
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.signkey_revocations ALTER COLUMN signkey_revocations_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.signkey_revocations_signkey_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wad_in_entries; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wad_in_entries (
- wad_in_entry_serial_id bigint NOT NULL,
- wad_in_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- h_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- merge_timestamp bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- deposit_fees_val bigint NOT NULL,
- deposit_fees_frac integer NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT wad_in_entries_h_contract_check CHECK ((length(h_contract) = 64)),
- CONSTRAINT wad_in_entries_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT wad_in_entries_purse_sig_check CHECK ((length(purse_sig) = 64)),
- CONSTRAINT wad_in_entries_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT wad_in_entries_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE wad_in_entries; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wad_in_entries IS 'list of purses aggregated in a wad according to the sending exchange';
-
-
---
--- Name: COLUMN wad_in_entries.wad_in_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.wad_in_serial_id IS 'wad for which the given purse was included in the aggregation';
-
-
---
--- Name: COLUMN wad_in_entries.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.reserve_pub IS 'target account of the purse (must be at the local exchange)';
-
-
---
--- Name: COLUMN wad_in_entries.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.purse_pub IS 'public key of the purse that was merged';
-
-
---
--- Name: COLUMN wad_in_entries.h_contract; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.h_contract IS 'hash of the contract terms of the purse';
-
-
---
--- Name: COLUMN wad_in_entries.purse_expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.purse_expiration IS 'Time when the purse was set to expire';
-
-
---
--- Name: COLUMN wad_in_entries.merge_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.merge_timestamp IS 'Time when the merge was approved';
-
-
---
--- Name: COLUMN wad_in_entries.amount_with_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.amount_with_fee_val IS 'Total amount in the purse';
-
-
---
--- Name: COLUMN wad_in_entries.wad_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.wad_fee_val IS 'Total wad fees paid by the purse';
-
-
---
--- Name: COLUMN wad_in_entries.deposit_fees_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.deposit_fees_val IS 'Total deposit fees paid when depositing coins into the purse';
-
-
---
--- Name: COLUMN wad_in_entries.reserve_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.reserve_sig IS 'Signature by the receiving reserve, of purpose TALER_SIGNATURE_ACCOUNT_MERGE';
-
-
---
--- Name: COLUMN wad_in_entries.purse_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.purse_sig IS 'Signature by the purse of purpose TALER_SIGNATURE_PURSE_MERGE';
-
-
---
--- Name: wad_in_entries_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wad_in_entries_default (
- wad_in_entry_serial_id bigint NOT NULL,
- wad_in_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- h_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- merge_timestamp bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- deposit_fees_val bigint NOT NULL,
- deposit_fees_frac integer NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT wad_in_entries_h_contract_check CHECK ((length(h_contract) = 64)),
- CONSTRAINT wad_in_entries_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT wad_in_entries_purse_sig_check CHECK ((length(purse_sig) = 64)),
- CONSTRAINT wad_in_entries_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT wad_in_entries_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.wad_in_entries ATTACH PARTITION public.wad_in_entries_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wad_in_entries_wad_in_entry_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wad_in_entries ALTER COLUMN wad_in_entry_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wad_in_entries_wad_in_entry_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wad_out_entries; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wad_out_entries (
- wad_out_entry_serial_id bigint NOT NULL,
- wad_out_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- h_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- merge_timestamp bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- deposit_fees_val bigint NOT NULL,
- deposit_fees_frac integer NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT wad_out_entries_h_contract_check CHECK ((length(h_contract) = 64)),
- CONSTRAINT wad_out_entries_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT wad_out_entries_purse_sig_check CHECK ((length(purse_sig) = 64)),
- CONSTRAINT wad_out_entries_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT wad_out_entries_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE wad_out_entries; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wad_out_entries IS 'Purses combined into a wad';
-
-
---
--- Name: COLUMN wad_out_entries.wad_out_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.wad_out_serial_id IS 'Wad the purse was part of';
-
-
---
--- Name: COLUMN wad_out_entries.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.reserve_pub IS 'Target reserve for the purse';
-
-
---
--- Name: COLUMN wad_out_entries.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.purse_pub IS 'Public key of the purse';
-
-
---
--- Name: COLUMN wad_out_entries.h_contract; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.h_contract IS 'Hash of the contract associated with the purse';
-
-
---
--- Name: COLUMN wad_out_entries.purse_expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.purse_expiration IS 'Time when the purse expires';
-
-
---
--- Name: COLUMN wad_out_entries.merge_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.merge_timestamp IS 'Time when the merge was approved';
-
-
---
--- Name: COLUMN wad_out_entries.amount_with_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.amount_with_fee_val IS 'Total amount in the purse';
-
-
---
--- Name: COLUMN wad_out_entries.wad_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.wad_fee_val IS 'Wat fee charged to the purse';
-
-
---
--- Name: COLUMN wad_out_entries.deposit_fees_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.deposit_fees_val IS 'Total deposit fees charged to the purse';
-
-
---
--- Name: COLUMN wad_out_entries.reserve_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.reserve_sig IS 'Signature by the receiving reserve, of purpose TALER_SIGNATURE_ACCOUNT_MERGE';
-
-
---
--- Name: COLUMN wad_out_entries.purse_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.purse_sig IS 'Signature by the purse of purpose TALER_SIGNATURE_PURSE_MERGE';
-
-
---
--- Name: wad_out_entries_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wad_out_entries_default (
- wad_out_entry_serial_id bigint NOT NULL,
- wad_out_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- h_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- merge_timestamp bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- deposit_fees_val bigint NOT NULL,
- deposit_fees_frac integer NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT wad_out_entries_h_contract_check CHECK ((length(h_contract) = 64)),
- CONSTRAINT wad_out_entries_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT wad_out_entries_purse_sig_check CHECK ((length(purse_sig) = 64)),
- CONSTRAINT wad_out_entries_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT wad_out_entries_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.wad_out_entries ATTACH PARTITION public.wad_out_entries_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wad_out_entries_wad_out_entry_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wad_out_entries ALTER COLUMN wad_out_entry_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wad_out_entries_wad_out_entry_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wads_in; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wads_in (
- wad_in_serial_id bigint NOT NULL,
- wad_id bytea NOT NULL,
- origin_exchange_url text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- arrival_time bigint NOT NULL,
- CONSTRAINT wads_in_wad_id_check CHECK ((length(wad_id) = 24))
-)
-PARTITION BY HASH (wad_id);
-
-
---
--- Name: TABLE wads_in; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wads_in IS 'Incoming exchange-to-exchange wad wire transfers';
-
-
---
--- Name: COLUMN wads_in.wad_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_in.wad_id IS 'Unique identifier of the wad, part of the wire transfer subject';
-
-
---
--- Name: COLUMN wads_in.origin_exchange_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_in.origin_exchange_url IS 'Base URL of the originating URL, also part of the wire transfer subject';
-
-
---
--- Name: COLUMN wads_in.amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_in.amount_val IS 'Actual amount that was received by our exchange';
-
-
---
--- Name: COLUMN wads_in.arrival_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_in.arrival_time IS 'Time when the wad was received';
-
-
---
--- Name: wads_in_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wads_in_default (
- wad_in_serial_id bigint NOT NULL,
- wad_id bytea NOT NULL,
- origin_exchange_url text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- arrival_time bigint NOT NULL,
- CONSTRAINT wads_in_wad_id_check CHECK ((length(wad_id) = 24))
-);
-ALTER TABLE ONLY public.wads_in ATTACH PARTITION public.wads_in_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wads_in_wad_in_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wads_in ALTER COLUMN wad_in_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wads_in_wad_in_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wads_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wads_out (
- wad_out_serial_id bigint NOT NULL,
- wad_id bytea NOT NULL,
- partner_serial_id bigint NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- execution_time bigint NOT NULL,
- CONSTRAINT wads_out_wad_id_check CHECK ((length(wad_id) = 24))
-)
-PARTITION BY HASH (wad_id);
-
-
---
--- Name: TABLE wads_out; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wads_out IS 'Wire transfers made to another exchange to transfer purse funds';
-
-
---
--- Name: COLUMN wads_out.wad_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_out.wad_id IS 'Unique identifier of the wad, part of the wire transfer subject';
-
-
---
--- Name: COLUMN wads_out.partner_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_out.partner_serial_id IS 'target exchange of the wad';
-
-
---
--- Name: COLUMN wads_out.amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_out.amount_val IS 'Amount that was wired';
-
-
---
--- Name: COLUMN wads_out.execution_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_out.execution_time IS 'Time when the wire transfer was scheduled';
-
-
---
--- Name: wads_out_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wads_out_default (
- wad_out_serial_id bigint NOT NULL,
- wad_id bytea NOT NULL,
- partner_serial_id bigint NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- execution_time bigint NOT NULL,
- CONSTRAINT wads_out_wad_id_check CHECK ((length(wad_id) = 24))
-);
-ALTER TABLE ONLY public.wads_out ATTACH PARTITION public.wads_out_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wads_out_wad_out_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wads_out ALTER COLUMN wad_out_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wads_out_wad_out_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wire_accounts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_accounts (
- payto_uri character varying NOT NULL,
- master_sig bytea,
- is_active boolean NOT NULL,
- last_change bigint NOT NULL,
- CONSTRAINT wire_accounts_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE wire_accounts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_accounts IS 'Table with current and historic bank accounts of the exchange. Entries never expire as we need to remember the last_change column indefinitely.';
-
-
---
--- Name: COLUMN wire_accounts.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.payto_uri IS 'payto URI (RFC 8905) with the bank account of the exchange.';
-
-
---
--- Name: COLUMN wire_accounts.master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.master_sig IS 'Signature of purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS';
-
-
---
--- Name: COLUMN wire_accounts.is_active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.is_active IS 'true if we are currently supporting the use of this account.';
-
-
---
--- Name: COLUMN wire_accounts.last_change; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.last_change IS 'Latest time when active status changed. Used to detect replays of old messages.';
-
-
---
--- Name: wire_auditor_account_progress; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_auditor_account_progress (
- master_pub bytea NOT NULL,
- account_name text NOT NULL,
- last_wire_reserve_in_serial_id bigint DEFAULT 0 NOT NULL,
- last_wire_wire_out_serial_id bigint DEFAULT 0 NOT NULL,
- wire_in_off bigint NOT NULL,
- wire_out_off bigint NOT NULL
-);
-
-
---
--- Name: TABLE wire_auditor_account_progress; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_auditor_account_progress IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: wire_auditor_progress; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_auditor_progress (
- master_pub bytea NOT NULL,
- last_timestamp bigint NOT NULL,
- last_reserve_close_uuid bigint NOT NULL
-);
-
-
---
--- Name: wire_fee; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_fee (
- wire_fee_serial bigint NOT NULL,
- wire_method character varying NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT wire_fee_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE wire_fee; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_fee IS 'list of the wire fees of this exchange, by date';
-
-
---
--- Name: COLUMN wire_fee.wire_fee_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_fee.wire_fee_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wire_fee ALTER COLUMN wire_fee_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wire_fee_wire_fee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wire_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_out (
- wireout_uuid bigint NOT NULL,
- execution_date bigint NOT NULL,
- wtid_raw bytea NOT NULL,
- wire_target_h_payto bytea,
- exchange_account_section text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT wire_out_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT wire_out_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-)
-PARTITION BY HASH (wtid_raw);
-
-
---
--- Name: TABLE wire_out; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_out IS 'wire transfers the exchange has executed';
-
-
---
--- Name: COLUMN wire_out.wire_target_h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_out.wire_target_h_payto IS 'Identifies the credited bank account and KYC status';
-
-
---
--- Name: COLUMN wire_out.exchange_account_section; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_out.exchange_account_section IS 'identifies the configuration section with the debit account of this payment';
-
-
---
--- Name: wire_out_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_out_default (
- wireout_uuid bigint NOT NULL,
- execution_date bigint NOT NULL,
- wtid_raw bytea NOT NULL,
- wire_target_h_payto bytea,
- exchange_account_section text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT wire_out_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT wire_out_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-);
-ALTER TABLE ONLY public.wire_out ATTACH PARTITION public.wire_out_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wire_out ALTER COLUMN wireout_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wire_out_wireout_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wire_targets; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_targets (
- wire_target_serial_id bigint NOT NULL,
- wire_target_h_payto bytea NOT NULL,
- payto_uri character varying NOT NULL,
- kyc_ok boolean DEFAULT false NOT NULL,
- external_id character varying,
- CONSTRAINT wire_targets_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32))
-)
-PARTITION BY HASH (wire_target_h_payto);
-
-
---
--- Name: TABLE wire_targets; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_targets IS 'All senders and recipients of money via the exchange';
-
-
---
--- Name: COLUMN wire_targets.wire_target_h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_targets.wire_target_h_payto IS 'Unsalted hash of payto_uri';
-
-
---
--- Name: COLUMN wire_targets.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_targets.payto_uri IS 'Can be a regular bank account, or also be a URI identifying a reserve-account (for P2P payments)';
-
-
---
--- Name: COLUMN wire_targets.kyc_ok; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_targets.kyc_ok IS 'true if the KYC check was passed successfully';
-
-
---
--- Name: COLUMN wire_targets.external_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_targets.external_id IS 'Name of the user that was used for OAuth 2.0-based legitimization';
-
-
---
--- Name: wire_targets_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_targets_default (
- wire_target_serial_id bigint NOT NULL,
- wire_target_h_payto bytea NOT NULL,
- payto_uri character varying NOT NULL,
- kyc_ok boolean DEFAULT false NOT NULL,
- external_id character varying,
- CONSTRAINT wire_targets_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32))
-);
-ALTER TABLE ONLY public.wire_targets ATTACH PARTITION public.wire_targets_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wire_targets_wire_target_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wire_targets ALTER COLUMN wire_target_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wire_targets_wire_target_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: work_shards; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.work_shards (
- shard_serial_id bigint NOT NULL,
- last_attempt bigint NOT NULL,
- start_row bigint NOT NULL,
- end_row bigint NOT NULL,
- completed boolean DEFAULT false NOT NULL,
- job_name character varying NOT NULL
-);
-
-
---
--- Name: TABLE work_shards; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.work_shards IS 'coordinates work between multiple processes working on the same job';
-
-
---
--- Name: COLUMN work_shards.shard_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.shard_serial_id IS 'unique serial number identifying the shard';
-
-
---
--- Name: COLUMN work_shards.last_attempt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.last_attempt IS 'last time a worker attempted to work on the shard';
-
-
---
--- Name: COLUMN work_shards.start_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.start_row IS 'row at which the shard scope starts, inclusive';
-
-
---
--- Name: COLUMN work_shards.end_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.end_row IS 'row at which the shard scope ends, exclusive';
-
-
---
--- Name: COLUMN work_shards.completed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.completed IS 'set to TRUE once the shard is finished by a worker';
-
-
---
--- Name: COLUMN work_shards.job_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.job_name IS 'unique name of the job the workers on this shard are performing';
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.work_shards ALTER COLUMN shard_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: app_bankaccount account_no; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount ALTER COLUMN account_no SET DEFAULT nextval('public.app_bankaccount_account_no_seq'::regclass);
-
-
---
--- Name: app_banktransaction id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction ALTER COLUMN id SET DEFAULT nextval('public.app_banktransaction_id_seq'::regclass);
-
-
---
--- Name: auditor_reserves auditor_reserves_rowid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves ALTER COLUMN auditor_reserves_rowid SET DEFAULT nextval('public.auditor_reserves_auditor_reserves_rowid_seq'::regclass);
-
-
---
--- Name: auth_group id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group ALTER COLUMN id SET DEFAULT nextval('public.auth_group_id_seq'::regclass);
-
-
---
--- Name: auth_group_permissions id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions ALTER COLUMN id SET DEFAULT nextval('public.auth_group_permissions_id_seq'::regclass);
-
-
---
--- Name: auth_permission id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission ALTER COLUMN id SET DEFAULT nextval('public.auth_permission_id_seq'::regclass);
-
-
---
--- Name: auth_user id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user ALTER COLUMN id SET DEFAULT nextval('public.auth_user_id_seq'::regclass);
-
-
---
--- Name: auth_user_groups id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups ALTER COLUMN id SET DEFAULT nextval('public.auth_user_groups_id_seq'::regclass);
-
-
---
--- Name: auth_user_user_permissions id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions ALTER COLUMN id SET DEFAULT nextval('public.auth_user_user_permissions_id_seq'::regclass);
-
-
---
--- Name: deposit_confirmations serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations ALTER COLUMN serial_id SET DEFAULT nextval('public.deposit_confirmations_serial_id_seq'::regclass);
-
-
---
--- Name: django_content_type id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type ALTER COLUMN id SET DEFAULT nextval('public.django_content_type_id_seq'::regclass);
-
-
---
--- Name: django_migrations id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_migrations ALTER COLUMN id SET DEFAULT nextval('public.django_migrations_id_seq'::regclass);
-
-
---
--- Data for Name: patches; Type: TABLE DATA; Schema: _v; Owner: -
---
-
-COPY _v.patches (patch_name, applied_tsz, applied_by, requires, conflicts) FROM stdin;
-exchange-0001 2022-05-02 20:31:57.856832+02 grothoff {} {}
-merchant-0001 2022-05-02 20:31:58.689509+02 grothoff {} {}
-auditor-0001 2022-05-02 20:31:59.197067+02 grothoff {} {}
-\.
-
-
---
--- Data for Name: account_merges_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.account_merges_default (account_merge_request_serial_id, reserve_pub, reserve_sig, purse_pub) FROM stdin;
-\.
-
-
---
--- Data for Name: aggregation_tracking_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.aggregation_tracking_default (aggregation_serial_id, deposit_serial_id, wtid_raw) FROM stdin;
-\.
-
-
---
--- Data for Name: aggregation_transient_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.aggregation_transient_default (amount_val, amount_frac, wire_target_h_payto, exchange_account_section, wtid_raw) FROM stdin;
-\.
-
-
---
--- Data for Name: app_bankaccount; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_bankaccount (is_public, account_no, balance, user_id) FROM stdin;
-t 3 +TESTKUDOS:0 3
-t 4 +TESTKUDOS:0 4
-t 5 +TESTKUDOS:0 5
-t 6 +TESTKUDOS:0 6
-t 7 +TESTKUDOS:0 7
-t 8 +TESTKUDOS:0 8
-t 9 +TESTKUDOS:0 9
-f 10 +TESTKUDOS:0 10
-f 11 +TESTKUDOS:0 11
-f 12 +TESTKUDOS:90 12
-t 1 -TESTKUDOS:200 1
-f 13 +TESTKUDOS:82 13
-t 2 +TESTKUDOS:28 2
-\.
-
-
---
--- Data for Name: app_banktransaction; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_banktransaction (id, amount, subject, date, cancelled, request_uid, credit_account_id, debit_account_id) FROM stdin;
-1 TESTKUDOS:100 Joining bonus 2022-05-02 20:32:08.901914+02 f 50d22041-64ce-4fc3-b2e2-572fe211f025 12 1
-2 TESTKUDOS:10 HFY3XJR5XH19TBKJ22ZMGHDVCQD1Z8A9DPRD9SDTB6PRD9KX96TG 2022-05-02 20:32:12.354897+02 f 0240d38f-c322-471e-b850-deb57e1b2391 2 12
-3 TESTKUDOS:100 Joining bonus 2022-05-02 20:32:19.074017+02 f 26e0c18e-5531-4e80-ac29-74187d58f57f 13 1
-4 TESTKUDOS:18 D4ANTKNHAJ99EKAHYB9VKFMKS7BRCFFK3XA662YPTEBG8K5WVY70 2022-05-02 20:32:19.767664+02 f 755ad4dc-948a-47fa-ae74-54806385660b 2 13
-\.
-
-
---
--- Data for Name: app_talerwithdrawoperation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_talerwithdrawoperation (withdraw_id, amount, selection_done, confirmation_done, aborted, selected_reserve_pub, selected_exchange_account_id, withdraw_account_id) FROM stdin;
-9e47fcb3-2ae6-498f-b2b4-72b7fd4b5eed TESTKUDOS:10 t t f HFY3XJR5XH19TBKJ22ZMGHDVCQD1Z8A9DPRD9SDTB6PRD9KX96TG 2 12
-ac57842e-cc12-4560-a088-3ab3ef1f0f4a TESTKUDOS:18 t t f D4ANTKNHAJ99EKAHYB9VKFMKS7BRCFFK3XA662YPTEBG8K5WVY70 2 13
-\.
-
-
---
--- Data for Name: auditor_balance_summary; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_balance_summary (master_pub, denom_balance_val, denom_balance_frac, deposit_fee_balance_val, deposit_fee_balance_frac, melt_fee_balance_val, melt_fee_balance_frac, refund_fee_balance_val, refund_fee_balance_frac, risk_val, risk_frac, loss_val, loss_frac, irregular_recoup_val, irregular_recoup_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_denom_sigs; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_denom_sigs (auditor_denom_serial, auditor_uuid, denominations_serial, auditor_sig) FROM stdin;
-1 1 9 \\x149f68b651c89fa37a4a1c3497d6001eb852d376d957c20efc04bbffc130540f3fb9c9e1de4f2f30962f09f79ab63b0797fd4b327cb7cfd63019a3a3a7d5e101
-2 1 139 \\x594297451bdc316f9f7801c2840f1ae5e99d541ae20c372b7c876761ec1877ad7c3d3fcd962ef2a7bc63069900afd0edb7cdc0f2cea782683760a40792aea10e
-3 1 198 \\xe3700d0f3894e1462b79c066f30432bd21662787497ae392a1016529d1f12d9f81a90ec8e07f3742381c553c03a9f2d01340d491f0595931575bf7e876188804
-4 1 372 \\xbfbaa63a569ea1ded26d36e296ea8df2942df9879773533005e33f3d038c122de3e66631797f6dd6a53b8d13a45fa18035ae760a7a07fe014d2016867764190e
-5 1 209 \\x2a6981ec250dff1dc0076a62046003249b561b1075188d8a3ac764438fcba6a3f4dcb8b82c9d68d241036d3af195de9c534d9b2200bd61fd9adbe0a8d283cc06
-6 1 221 \\x59f385979473c3fcb6ae37b72931deb66f986bfb3287ed2e3d5290edaa036c40f2fbdb5d5e341f350582e81dc2236fbf9ff7f6af2ff82a418afc6e77a9a1a406
-7 1 388 \\xd04d5ee6890dc30727b1a5294b6b64a41f4697e9ab8fdc01f212719a209251e7399566e3170aaf9135a1d9d100999353814df7f6ef9019de318ac4f1c5a64008
-8 1 422 \\x04686c83dd20231165c5c7ee4f18a6c7de5a811bcce5d8805226b45e8af8a98fad7ec6a9ac183418b0fb479657d047cbe04fdc55d268cb5c7c6418f8e86adc0f
-9 1 411 \\x6cecbb9205cda673598d3db01cb4104b3bd46d8dd596509acb3b3782186f7a905c046b5348451930b2f2005262ee34cb11a8d3cb15d65a44d2eab3e485a92701
-10 1 312 \\xcdf3fd8c2b0de883bd0bbd35533f1fe7b9cedd44656f679d50bb649be6e705a31d3b6b8830c77c11dbef226bd75093235532f47ef98748bca439d3281e56af09
-11 1 23 \\x9527d19dc5332df2ff5029795182496b3818da2fcfc9245be3c07ee83890a9380496f13bc3392c3b8621bf2d63c41a12624fe451ebf3fde2a051748c6b0bac0f
-12 1 267 \\xc0549b5eaedd9a978bd45f9b8769e6f39396c9560b7bcc1171dc45807e9f1f75c78f20e09fc7085eb093b428aae9a4703023ee836d8cf13c8928aead2922fc0c
-13 1 299 \\xc732094858c10f02cf61bfa44a9eb2c7de5d9ea81e92259dad0fec392a35a83ebf29ca24b913f1aff7a436644d2112c128789650267feaa8f772da07cc38830c
-14 1 343 \\x435404ad01c5e938a306257d7b4dbc65462a556c6de7d7b3cc3daca2904f6722f55ed36c3927c844db20beecfa268602d5beb70d156ff5b293a3fd54c07b9c0a
-15 1 77 \\x3298842fefbcacad27b61030d2173fadb52878f7b4b091d1dd2f22425ade36ef77cbfc6fd49a59ca5de755975fc89148609ac12b1950dd8a57d2b7cf5a97390d
-16 1 318 \\x7c1bc7b9416e579540f8b602db38c07de454977e0d79190c11b81fd761eddf76d0c0db0a4b4409fc486d45a74361157ee1eae50710d6994a9daf17717ef7aa0a
-17 1 391 \\x2b0a9edb9a903337e29a851f2b4ac2b07e82a358ba4065643aa778c8b7aeb955430aab6555e81e1a3e67e9570fa2fe20916f5503ce87330aee6124f21aa69403
-18 1 348 \\x38b9d783e277f1662d4e49b245abb3e552f015a8be2f59214bb9b5fecb996c09df9644ee5f47981d6e6e6dd3a809c7ac5132d727d6e460b4dec767efd9a4c80d
-19 1 360 \\x3896df088d81c084256982febcdb72eecf61060d9394581742670a554e8c2ab8eb28facd2f4d7354152680598812c6a0ee930a5b4eea6f9e237c0054c900040e
-20 1 34 \\x7aba15f0df2d174ca5b3ce60c13ab22088b142119405c6ac5f29c41cf4131a153787c7366235c552ad5e4191d3f7bb96058aa18971ab3770724fc9fcfc525d0a
-21 1 402 \\xe1664ba87e1a447f1908da2d3df9e188b9e0cd77cb041a33d88c23578a8102ef8ab6779bec68ef2b603e116d16d245c96e1d5577cf7d3b8fb38ac8c5d87b8500
-22 1 114 \\x22be2a0e3d15e05152e72826891243a5979b76a305698edcd834ca81e7e6562ef665b2cd5a08b41656d1887014d310834bbe96e5c01a08957d23a35e62adeb01
-23 1 287 \\x3d47a3b3948619db10f0eaa198a66d84d0c2db1e49376b48a6a6b0b94cb58abda478127fbec65b7e311dc348749d6efca074c2b01f8156437fb594a022797e0b
-24 1 413 \\x1a14c6ff3d709db89c31b1b4eeaf540d36eb229d4e364f1810e0bd25528f875a67ed5127020d4a4fcb722eee3195f4b550c53335351741b7d76205d068b40e07
-25 1 334 \\x8083994ea17bf385be258e38b6ee280dc154655c452a6ba24d453c1c1c7704a98015d938ced0ff40f1bb4cc1b10ee45b2fb3ec33bc66962ec6860fd5ae9a4b0a
-26 1 335 \\x2c3433aff168fae806af742d9b253af9ee1c2ed5600b50d8ff93d47a872c8dc352173b210098ce839b722e0aa9d3adfa1d31fb9ce6f5ce98c945e72b7cf3fa0c
-27 1 346 \\x49727fcdc441417e919cafd584a1e304a0478cea2e73fc6368120586d2f81364f92361fb513151a698d17aa0a6ee6d9fffaac915e23dfbeaf196cd02543ae002
-28 1 20 \\x0a340bcf243f4375fde678fa9ba77ebaf1bd57e9ff1da5ff1f26dbd8795262badf39ee6237b403c08cf252f4409e926abaf8b3a10b4b37ea0553e010015d5702
-29 1 95 \\x7288d06d9a9b420f179a2e5e293fbdd39c2abc6e3706e9f40cd6120c6144d5b88be5c000ceee6eb3d5f49b463430cba9b92d2b94940615287bb38a268f776008
-30 1 248 \\x4f78ac0c91353f9743325eb744a800b3903adc3b9b74cf18b195a1c73d5702353f646996546f0703ad726032225653d0126c78980b44e6bbb09a7550218c910d
-31 1 148 \\xf8dafeace7e85e4436e2561feb99e5b83d87dd830c506c4917dcdef79144253f3dbedd347a7536b55cc4b9a4d3ef64b2f9df5b0c6a603ef710f14632627a9906
-32 1 158 \\x9d0817360f2f350237cb98aa47c488b5579640ca7439f55eb35c11629e4f1471afaa9bd534902bf0a2318176d1860fb719b36cd174725884f1a0ae34180b7a04
-33 1 193 \\x76c7320573c51fa23d7b52d8be58581315671cb4549d6741ae87c9eaae3756b1e62c9952efb0b07439c0c1079736acbd9a0925c8de96a5827f86d7e494ef1701
-34 1 268 \\xf8bbb37fd21b22df3f580a73f63c4bdd24eb71da4234015f12b426e90cae7bb1695b3b3c4b31fe47c2562072c4e93de51304dc377bb0a42ca87e93c9bafd7c0e
-35 1 70 \\xfb26ab8b3d29ba3266f565943714f8edd2e5e55fe186dbe96d1997f018e59a2d7005a15dd27b00d3d871ddbddb52c7a55ca1cff3cb083362572dc4c0c9dbe806
-36 1 387 \\x82ca7d203df22ed1ac780db0b5779e6ca6db2b0b985958b66d2534d8c518e7267efacd122d3b8b3439b96d30c3b487b3aad55a690150ea981a609bca0f13470b
-37 1 120 \\xd3c92a6f1a505804ddb95a010e9d8fe4a193df475bb32ffc9461a4ac26d3414ae3a2008f51eaa6ab45cd8a288d00329dc8d3e51520b5b4951eeb0dad48051100
-38 1 394 \\x0409af586128157888fb7bee0e08ead256436611ea55a1a1a26dad1a00589496ad7c4ebca0f6bb4851bc6d3ec4a1079d8c489d81e1656bba04261e239c02920b
-39 1 146 \\xcad7ebc66936178f54c7032c0c7b21c6e05bcdb32134a82865f5a16820d746701b08633bfd107844328abe281b0796d59be6a960a43a049b06e25252091c6808
-40 1 194 \\x31a960d8528ed4a3dc9d420c54c3533ae939faf6ed73a2e68c6304272995a8ce740433334518880a83a3fbf82c34455025ba83e697dba486546a413b31a7e200
-41 1 256 \\x79e227dee8823d19f27b68a65e8c1a7eb8198bd01686f633d23efcf3a957571b76a79ac7385e068fcefffd6be7c1e64b66a6de2c573c516310dba8b9fcc51406
-42 1 295 \\xd3bc5f5f9474ab666a2de6f8213b8001ca75dfdb129f8ef49e84cb68a90cfdf3c7300cb6fb6d0b55e502903a32551e2b5e22f2281e81b7e845355d4550c1d707
-43 1 196 \\x20cd07075edeb81be4e5afbc9310110598a954349eac1b508fc538c5a68e0d08abbff0a8cab6977082bd5c98e6ca311d8fcbd0edce176794ffab40378a78d90c
-44 1 357 \\x718db20664f4b929ae6fafe8271e036b777621c82f5d196973106322c801451dd69d40afeed02264d3c7402c15a32a630b48ea638b6d20a10c51e39b17fe5804
-45 1 26 \\x8027437ca59254a9563c5d8b94987820cfd4fb6b786ebc1f767576e26cae165524234fa4dc6e3e2b8504ffb0cd192f2cb36a8c5493d5c8b20428fefba50d4207
-46 1 132 \\x3724028c01f31482d8a5f61e0e8f5de96c7297dcc63bc714846e3329a33a7cb3687585ccd2ba5a9a391ac60056b473b1bcb40f1d715edc6ee7e8d64809dcca05
-47 1 63 \\x91bdccd65e9656d97b99c0f87ba799269330a515abc95a7f6688f76af94e0edfac7c3b933280bf63ff0136ef0e405794978c71719a62022bb8b5371d6a498303
-48 1 367 \\xe18f6ac337a658f10a09436b428d4c817d00120baf1bdaeb364e964d976879af917ba670c44c74a67ecb683fab0b0dc5eeaca4c36668164c49205f95f7840f07
-49 1 184 \\x2eb1d54d3f4dd83a126d6dad3fdb7ae0ec1db6ad35088e13ae3969253003557cb983769cb83fdbd84402658c21548e54d72f09475394ed1f786ffe8942937301
-50 1 32 \\x2fba4c344ca9aebabee686c07044c632ae2d621b9127bb514a5a8a2a7e59b8b5164409bda701ffac11fb7e656e440aec4fa5f878d50838827e146a2e981d6f06
-51 1 316 \\x90635a819b62c217826c8916577f683bdfad82bc04f97e2978c88985ea440160e9e251a7e8944d8780d72097027a1ef9a599457ddf7bfdafbd0b4145eb43e405
-52 1 160 \\xcef5189f126a0f1eff621e3d836ac29a21f5933794e21d43ae7c0dc46a53aabd22eb8989d2c4caba2d2cca9043b55b6ce1776cd3eae96147e4d0233f58847108
-53 1 337 \\x189cdba36acca4461507f094c561cfae0e92463e16bdf0a50926a44266b8fa2df9ef88c8d6eac20be76dd3359e1737e14c23fc733b9225087e1aa91ee5073801
-54 1 15 \\x3f44a8762173bb08700576b42e942886f9cd82e301be3fc6a49c0929454e440260cdc8fa86cf3eca84dc6750443e7be0cba2c3a383d0e9648dd1b000c96d060a
-55 1 215 \\xfab9f5f11aa1d3875489ecd96ceba59438f0a91bbe272e417e6290575b1640ddf717973ea415adaba8b153813b75650436647ef0ff65ad1cf44be1e7881f1b00
-56 1 332 \\x13dfa221a589fbc6205619086dc0da979ef0c218bf230cf1e780b9805d18fa020cc7f3c587baba88e5c574fc390fff0bc44737c7ca04533f5b57d3db513a8a06
-57 1 52 \\xcd471e4c49c6658556dd37de42547be446ca49390b6a759823202497b3189ea98e500ddb7ed2c1469fa1383217c48277e43ed7ad93e1d3b25c6a0d72a47d510a
-58 1 416 \\x3b098f1d346b59f53c5a65986a4c0330cc14a96f429cf64a48f8078a3bfb98e47bdcb0f9f29432df27d5cdc7e4fa563b61eee01c0cc6c3b7d07b66aa07fdab02
-59 1 71 \\x593b06396a43ba696fb90cbb062018ffbeb1a7e8b78cf35abcbb35c0ba47deefdfb011908912a28680554254ac49f7546157225ec7d3d26ffae6c55e030ea700
-60 1 373 \\x5b1d66d6095222cdd7aba9cd3732bedd834a55964f2bcaa81eba5fe785ad48fc382f4f3ea9b5bf3c04beebb20009004ebd912ba2bd4a3cc23f8191173eadc402
-61 1 153 \\x57cba6840cd5d2a33e7c2bf12ac2bd5e7406b90d8b3d82e7b72fb03a30e426d9c4442e7ea892966397ff2a2aa44eeb0d8d2bc18aed4d95be1618848d27a0420e
-62 1 163 \\x56230a6e5357048c846828c1c4647edefe4a923a473e957477de092e5ef510e2433595d8036bb919a757947f6864406c78d8bac884f5e62fd6511cd262adbe01
-63 1 53 \\x5d971e5f86664e73564cc0cfc4f5664e84457d59b0f47f30e039e2b366fa52620860fb1d16d09a6eb8db1f2af170add41afdb7ede04ce4f2e2c4f6ffa3f92506
-64 1 89 \\x45d64fec9e08e791f6eb9fb4886361cea790c2622a5c287b4a5bba00e7cb2d1f1431ba3fbac87e4dfbee7540d3d6fc07453e0f56ad1b29319f4d1d3f8c8a5700
-65 1 74 \\x5120b81ee47db33f44973818cf83ea4075cd93ca4cd6fb3dd21f121dcc5c10ec7bc1e9d0bfb4928edce466e7abc4eeb9aef3d19922d0cbab7b7ff42dd355bb0d
-66 1 353 \\xa1aaeba1c66aaccf13df2ff395e8709f93caadc01d79dd25fc8d617184bc7a99c024b58549f0e66898d2b48395e94a5b87255e1ffa24e84b87d7b781c0632800
-67 1 24 \\xf5e6dcbe5f8a31aa2002d818d3f68b6d3e660a6668ea290c645d037c7c3aa2f0c2fafbe57fc19077a4a2747e1d5c26c2c7a051e3e8b7a010db43be0a06da0505
-68 1 185 \\xd39378a33ed8060b5cf097492c821408c297fe561a933fa966830eac2bfc6326e5bf9740f1fddaf60ff9364ebd790f52a699e2beaebff57af7be0878b54ccf0b
-69 1 342 \\x1cc6ba6a41acb5e2381bb030ad31661527b45f9e85ef40141d8f70ef23b73a40a795c1148e842b3b99320c20e9ded638aaeaa6891892f55d2b7bcfb566c4a607
-70 1 50 \\x9bc43f4bab2e1dc7b5adcc015f56519a57b4c9ceefaf45a9bfa8d1250b75d7de5d829764d94b8431e27642086fd8840c8b8f2fd34246ad35e68ef24b58f2a906
-71 1 66 \\x46dd0782ce85d25a4afd88ae0a3f68a5cf25b68e942c810d434f87108c421cea7bba504dfee47252b14a4be6728bf4adfc41c521e16f6cacd7da43484b735b0e
-72 1 30 \\xa06c869d2dbe56ea123b31e8f6279a82b9ab0c5acabf39ed513d2fb822dd2d81c35b6dcb9a8025afa691fca53b1577e4367815e08b549a3f390ebad38171a207
-73 1 364 \\x9d8573f27a5929875e7eb340af84298917ae3081ff7214253cf658d0b1ff43f18d555da5c9b43ccd9c092f837b6b3b5c5b1acde4e380f7b625a962c56116ac0f
-74 1 399 \\xddb98cd83d9c614537e59a93fd6df3241fe62ab3cb253381fba45ac459a14961f5a184a370d54dea7a43974bf473e22705d9080a7a54cb5b2ef526f090bba60f
-75 1 85 \\x9d72b94769c251a02f6fbde91e8250c30777660f5f61369daef1599b239f3e2653187b85fa91e086a187b5edf5be4b28627a55f5e2ab29dca76fc37c99c50e09
-76 1 385 \\x635154c7b41057b3100fb16ca1e7be679527efbba49f021a288935e6d628c9cd5c287c0626a16550361f60a310d951b45221fad0be3f2b393a1c426debf99d05
-77 1 260 \\xa7f32981140b56b6f84e551a49282384693bad9831c492cc8081504e5bbd9eb409aa6d01f17424a651d7598dda969073dc1ea3a7214fe964681502fda2bd2e07
-78 1 172 \\x0e8d44fd5342d9ae319de60b64903d598a8d3a2c301ae3b57ab8196c363b33527a39ae65a25f9525f6ceedbb26c666dac8d2bcb02a8380f5444c166ad1cc7e0e
-79 1 101 \\x46323d8936ecab0666abd7a4cd56e9453d425555cf400418a98a95e84bee237e0920f979e6646db96b95c581314d1e76ea51401316491ca3f1ffdd548ddd7002
-80 1 225 \\x6e38ff53c18125f0aadc982000184612d7297aa2658157d36d584fa9ddc17492c400784c444f24d5d95275985af26b830ecb09d6bbc605096cacbf622bccc504
-81 1 211 \\x37e7994eb165436bd03addf198b25e6830a8b686114803241f19988b3ce7d869fc5a8e3fdb233e5c857e075adbce91a1aea32c3b7632b4272858613e0905c40e
-82 1 54 \\xd0cdadd70b3d68e80d67bfce9255c4b0a3dfa4028ffd82fb748ce65b5fdcc495e6f5c81ad9864459462630beaa8ad1feda4a625b250a2b55496cbc3b310c790f
-83 1 200 \\xc0b6515b30807ad9b6bcd3fe8637f11723201b72090490fcbfae3b2d4bf25969654ba4db6453d7033130dbee1ce554d1836449019e70e80e4cf0385351d30e0c
-84 1 122 \\x53cf84b60765a81e8754aea39caf97e4986be59e76a56afebff5f06a95ba60a702085f0c850b0bf249f4501b4459f81b5eda5deb2bf0b668488b96761481e803
-85 1 327 \\x6e0a53a91acc8fda91946614dd63d4aaf0aa111b64e6fadaee097d1aae2005e675be11e854dad41fa315e2c3e9fee56c1864e0a1d871732b6a6caf6ccb500309
-86 1 79 \\xdd03bdb23089d9da37c0e02cc081d3d31e049849b708c796d7f8b20d618459e54194431beeca1ff5351dfb3c177f05dc1b8d5a11e2ad2fb8d90ae0ca393dd70c
-87 1 195 \\xe14680c91f825c8aab97f0c8c36ec89a5831e94241950c9cf8df7094e9b8d227d6aacc52a741f13ed7dd83b209c61b8f2b9d3eeefb0fdcf87ab163dc71c90009
-88 1 226 \\x561f3b002c7a8a2c5bad4dbffd31746c2fc1d9affbd833bcc952ed0ed1278c41696ada577af7e069faee24cfda01a5f8642db3257b517f72a3d94aca4e50f00f
-89 1 169 \\x43b66f8c4133102150ce3d1a719c20403c18aeb79ee16810b264ced218fb8aeb6bec9a62190e33d36f6960f90eb0498edc63d800a2c7ac8a2eef36b1f13d4a08
-90 1 117 \\xb2b4c69dcf3c66a1a7ef7337d0b3bf7e86fc58f9f24c3da2190cbb790bd86b5ab8f1592a4af109211d32c4f2c75ac32d803284d26b592597d8cedb0bcbd9eb06
-91 1 341 \\xb69ca1173ab063991b3a97cd29b954d13d2984cc957870580bf6cafcf8162ceac8b88c0f4fe5e767084fbaddb6244ed27d2a152c628ec3cd9464abc2f5a0a20b
-92 1 423 \\xed57edae62dc3a299963aa4b6960fb87c4e9e7a5e6df3fc13f610f3d76bccf4f496613770c5cffeb719d05b9caaa1769f740f74582ef8ac35dd47236fc69ee07
-93 1 219 \\x737ab08631d9b34ef14871515329506d42d4af2cef0a6175fc5c9b4bcde96c7cf7838913b890c7575c310822e30c00e9a9bd011739d39190a6c0a9efddb60400
-94 1 244 \\x73634b81e176b77d70a67be69f4d45064cda620c1da026646968d6577ca95473a72b9075024940724a210c1df3fe15f5587d9908ae272cb23eb167f7e408d504
-95 1 104 \\x4ca3effbcae3cd0c77eff0afd1552776cceb36c5ef2ac1aafb871e7fff199c97c9974876422f2934517432ec442ed1a767f7fc3bff9fb33043cec738cd536d04
-96 1 86 \\x214f6f9f96e165af8803fccd56f6e2329f2bd1b6baf300b86d98af98a7ae2f5365bc91c0d129e98401452fef4217c641fcc08f6b70df915dab84e99036e1f50f
-97 1 167 \\xaa23c2b403cfebc1348d575c89f921814eaf34f7e8d629cd6dc9925a571733401f0601080dcdab79397f2933d178ca6729c1b2c1a9d0cca416af35eaed4ea90f
-98 1 309 \\x609aa74b228d18c732657af8b85652d0f902771bea298f536254836101d659bbf969aba04e7a3e7143492c16966495aa671d3394d139b0ea39b086a808e0850a
-99 1 16 \\xa16db22a43b4e7815bfe2dd3bad2b01718af3db0096cce82cd70b5bad0855ebfd96850c82e806b0c29c2cc49bacbed3e2d2b4b7367e08867b4a0cca92ea93c0e
-100 1 150 \\xb7337cfb7370fa676c76301eaf952d74a30e0fdfe81ca9162a8c00bc13d4f999f93d7235df7819112e4237ee3967bbdcda1aac9e002ac70536bec45e833b340e
-101 1 359 \\xf931588292e70f5599e6326bf33adebfabe63a719349a4012e759de82e0db065d8822d023f6699693ac9cf2692225c17409c9706dcfe4677e34f296162404d04
-102 1 72 \\xa749155911ecae1367293fd16840826c84dcb82eb9ad7bf527a67bea058789b7837703672e5c16e4c17a01798a9de72162a49786bf03cf3de1a79ac21652450b
-103 1 49 \\x0ccd7cf3a98501c88c609fe6a780c048d976ed40656a12028174656a357e24844980ad3d54898511fabd8985747044e463501cc7352f94f8dbcd9860170eef0c
-104 1 281 \\xcfbb6118e55eed796c4cb6ae63eb1d2d6f8c185200b4299d03c52cc0490f17ef99430f1cabb7e5246c893d2d23e46808f04d6f6fc98e6ce56a106e0a01127807
-105 1 2 \\xb66a9b06f85b6e46b828bdd485cee98347048da63e2636b5baaf3a6e3e163a93ca4cbbc92db47f7ebb7cfaae1d315fd762b415822ddda60bb66b814c3ac0780d
-106 1 5 \\x42bcea7da19252ef7be76e2a23381e936654dbb91d96a301ba31f5d79244c1c03691f1cb92220ad6ae3644bb51f4bab57f3ec9aab9b2f1d3b2e76bc0a6c9920e
-107 1 231 \\xb4df160b6105ba575eceb3c297332d52e63a2092f151992ff5cb320e4502bef128ee58df5ba429ac1c885e818b87a547f452fcccdc0f24f9231093c1e2443b06
-108 1 142 \\xee558a14d48ef11d7db6742b92c6f11ef6914690a17303f69fbcfd2342765a60b3b38f301317871985a40bb66701f1f6a0e1a795b6c64ad81208085695157d0e
-109 1 83 \\x26542c789350350ef0952e21cb7bf6a97295f3d4116329750289d0f6d4fe976c70f22150c251433ec13cbedbd371fc1e0df1ac3862623579a76de11645cbdd05
-110 1 311 \\xd724231233533efb7b01aef49363b7c9f5c7f5f1a66dcf6a9c727761124f70b3907c5e0c61fb262e92e66cc64d15f2386d9ab21b1ca5366efe8b06d49ce8f004
-111 1 407 \\x43bfec64f57b86e4ddc6efdab6d228e749fa50f7eb682f024bfc076b034a5116795afd1f05f99868231ec35a5253f0447e5927434557161cfb8a9c53b5977304
-112 1 410 \\x9a72db1b1173c632dc1480edac552bba55e7cc1c7d46cf323bcc5413aabd50b58e4af940a5a82b51d976ae15a67c58f77a450e53b20d026adbe2454f0d5b0201
-113 1 149 \\x621f1931cf06ad5c227c0ae8c7c02138b0a3547be3541e5a7473c827ee49403275c1528d6994045664f80feed96f57fbb1f3dbe8eedfc6a3e6633cff3525d20a
-114 1 296 \\x0de29d596a2dc67dd3cbc8f64ab30fc15c215414658d327218d8def30b8f20922959901055d4e98b87087981b80c2fd0d613efef6037ceee78c06b1fbeec730b
-115 1 58 \\x8f3676a679aff4e0a27f729a917e5916fd8abe0df789dd93d0574a1ea020cc6da03143ac48d41eba11acefc38ce0ef1fb77436322be501f21778c5658a1fce00
-116 1 355 \\x3efbd9541496028f58a709d1880b5677cb5d0fdbd3e5f2d5a0cd070854ca83134c437b53b7c38f5d0961eae24dfcabc1caa4abd49e5013a5742dc0dd6cdc5309
-117 1 351 \\xff139c839384552911ed2faec23372d8c546107a3833db79698eeaff890fa53fda1f98b856b52bc057c529129aae355b78bfebdc3e56e7bda1beb9186ce88a0d
-118 1 80 \\x85daab785b66698d08d417cd27c09bcdb3f193f99195927e70401acd4218f2ba9a0df7e36535252d4aca660078be5c91723824faa96202ae97ef2569aeeca505
-119 1 222 \\x168840b52c8639e2cf0d6090394f34423dc49f52a4560138949ffec290699e74443d7bd677863c21d6d491c2ede4fb40b0e0f6c5bf9b80e7cf8b4747fae6f40b
-120 1 347 \\xcaf08ee861c817a649ec4fa635c140483553d6ccd5207aa98248ae62e0388baad4134770e80979ded3c2a584ecccf28da405159ff5e918ad2b7382e9d32d570d
-121 1 249 \\x75532c2571de2f27ea2c6a7de51c24818fea333f9e48353780ac771bf608b9e82c79fad71e5e410b05ccfb6eb648b511ca673bf5b63bdcdef51091d319e4660f
-122 1 284 \\x0ca010e872eb379794b1262f7b2ef303f477ef6371316dcfcdc1621d4bb8b6dd1a433fa563c7c600a1d6fd4683aee512fec7d2102eea8b353c122d7419139709
-123 1 286 \\x9670f062b0a3d5c5cf1ec9e7511b0d573a5f113468784853bf15b0e60402e7e6ea80b56e96879e504e8580b7d68e9e99929f20d19191618c14af06beb6ba8606
-124 1 420 \\xce4ea0dcceccbdde9f05a7c3da54a410a6379f6137b173a90340fb958e4ca5b76d2a517ff92d7f589e5983e1cb2ae88f641f274d15a9e8b293ebcff7f12ffc0a
-125 1 320 \\x1367df878f16df5265dd2820b60babdb712131de336bb0befda4b0950794a4b39dd5a0610d81431c98461687bd3ea78c3ab4f137a656f278fdace116e1df0608
-126 1 250 \\xc426f0195b8aa30c793f9bf8dde1edc8081cb69ae825db8b424eb144113959dbc0bf30a2c511c5ba8de4d864cf15d77d8ec37a323229ff6bacff467a4e16190f
-127 1 277 \\xc7e403382718076143a1b3d292a248b49c5271dd4dc3deddaf05f7ea9ed6eb1902193aed67ed0fa6f4b4024a029814c2f813d638ddcc2d04c14e5293edac1e0c
-128 1 155 \\xfb3c391673aadeb1d8b6f020937a8ef6ac9704d6169b2b826a69e26a4883148d7e207cb126930fe6896f74143fcb93b2d1cd58549872c762df900c3c8a6b0d02
-129 1 228 \\xa71ce1c39260b3affe3e7ecc2629c30311c27a10f1a7e265d6273450defbb7650724657637fcb6d7504a5c2ba2041dbee55d931436a5b618029289821b5a8504
-130 1 99 \\xceb82c2a023875b47519e0b870673beb2b8c34f0bb814465401356f461cc128afca2b73c6a67f0ec6088f9e714e35f0866b8650a50231b77fe6099654000620e
-131 1 238 \\x58195e59392facfbfe3d7c698972a8fa362dd25e85d4a1fb768c3111bb4e90e71bc5a183068a1f62e5e503a86117d61548b143c86f8615652a0b7a3543104602
-132 1 7 \\x2203f39731a3c9236e03209595eea7f6d464d4082b4c588abf7f85acfbcd3ca543f1aa3b0fb6b444cf890d62c354a8dc2e19246482ccdcc46a006c76ccb14b00
-133 1 161 \\xb49e78c4f37a82e94da2cc5dfc713e44c937443ab93037377242143b3acca5e4d2b9178d05e8be49ae3e58b1fc2e339981c112c4c5feea4b664474033483da04
-134 1 181 \\x71193500ffd275f4fd6b0417544adb6e37e3d74390ff00a295e74f9c35a6fbad44a6e9e5bc4dafd44b08a40f0361ed59d7555974a38f36a4e9c77c6a60df480e
-135 1 314 \\x191dfa87a1d0bb304b3a735af27ab31e6fcdb59ed130115b9aa27966695c9db4ab3c33fd0a1db6b0341a6bbeea6c6aac3dce907bf7e5b2fa37ee35fd72a9c205
-136 1 136 \\x88b55b8410d235eb55b71f7bcdeba324c967cdbcd949ae2f91e1cba59ee4970f4b4659b39b8ace8153b0e6aa6002fe0eaa54df4a0c5a65958b31471dec12d905
-137 1 247 \\x1bdac75ba0409bf1bcce1838a1a848b155173d6b97df0c0799b88431058b22ec98dd28cb1908d3efdde0c21aa103dce07a153e8d386328ab3d1914fdc38b740f
-138 1 131 \\x8670cf5c4b3bb2d0a529b830cb3392322763ba1f5073b8227db65a6b1a76dcde70084d6d38aaccc229d4f45a109bf086151c6ec58c29473de2fe162a1fdaa405
-139 1 370 \\x9485a6eba25ae92cc34c219ede33f923699f64409fa20fa25f785c69e0ca37a845be6b9081f04be5d3986bb5cb363fc04290b758f1d19b612d236b5bfe222206
-140 1 324 \\x7911e6b47ac43d174bfc812b27553e72d71c75e5d349009ee6fda5c252aabe089960321b365c4f3a938ff128e9f6972b120695810d516e89636c4e4461ed5f02
-141 1 179 \\xcc221b001d5d79e6c2c47ac933a4b2b6306a3c910cede34831a3b44260a1cd4844688a13af15df31ceb54e2c779c758b0244f4ba06fe1b169717625db9dfad01
-142 1 288 \\x3c92ea594c0b204d3600817b1a4cb21eecaf39d51a57da49c10d49276eeb445c026589e2ffc512aca1f8c5bf17d68dbb3af6ea68abb2b485568ae2376f35340a
-143 1 395 \\xf3ef4a654cb88b7d47f3a2d7df5299c8f973b3a11e178349fbf5e72a67845bcdf4a92a65d83392262db098f7fbe8f288898c821f0a9ec5384dd4a0e420d1b904
-144 1 73 \\xc8a403ac79e20c3e26a5a724ba379df5912fd0fdbe718950ad3615b264db7007fb5cc3541292e8134bef23865a36d15eada222618f7546a3445bbdca431a3608
-145 1 344 \\x159b796c992ad025bbb8434db9bf2dc4a14b39fc7d1d04fd5f882478365dc7d724a3ed0e8c42bd2142c741ae87b7ed5b0700e0796d73e78e0db30633b0ac6206
-146 1 212 \\x809277a2b58b72e8f6abd41813078616244913c6e5ad1c9fd38edd37f8543db6a12f4e3e144d1169842da5a895ceeeaa0b51e13569c895dd3829600d4bf2880c
-147 1 69 \\xf1864125bc7d12834fc9d45dfa145a857710aa3bf6f177c3208b30e3fc0b52fe4a906fbbe48964f44f8096f8118f4292d24dad6468fb1359237cea10e7f25501
-148 1 175 \\xa926b1855fbea9c1dca3ae43d9c0e9e9277bfd5d5818b08db5aed80ab9e81a787b868f1ee7c127cd13419b8ffc11abd32421fdc956a67b3842f5bfe40684f90b
-149 1 315 \\x1d21ea0f550ff62247bfa2db635222d6e2c09578baaf9bf59970517d3f9611ab638ca967ea8508fe6fa15d69190d1eccd2ed6c993ef37e5c2d242599ccdcc908
-150 1 298 \\x36932376d1c0b22eb2d2df0f3bfa4d97ac952304309766c90fb30137007214abedb7698e29f939a933a9109d043acf33823929959d4abb3ade5340af87838501
-151 1 300 \\x8d56195621f5ee4751eaf72d730dea8326a6440d36de94c4cc682b47298046ab087dabd506191c67db224095db5520523a0f0738626321745e0c167dd0937c09
-152 1 303 \\x7184a01d6631c937bc7c360913a2372a6e20a8bf9d40d49ef58d06cf2ec461220e85ddedfe5b2fd298538d4a00eaa4eb66c5a822bca6bc36caa7009346c7ad04
-153 1 203 \\xa289250bb8ef962ca7557ba1b8402e639f6b90d18b7c50b1457dd14ed309f2134aa008dc18ca878d9c74c510da635dda9a1626d96adec898a901d66772244d08
-154 1 241 \\xe76a97ef11d25922587edafa9971d650b78d1af252e176a17698861029be72e7cb44cd94a441921ce8d3a9b0382199d6e61afdc926efca856e59c4f55c31b10b
-155 1 39 \\xab28c8e644409d1cf9ebb15f8fc114041b174d1f0746eb8c776388a5e39b665f64e065b53f39c5e8052f73fb0635c0542224d99ed42d3ebd0857feb51e50110a
-156 1 270 \\x8cb9b273a28a2ae7c00eb509f1ab9299e6a0470278cc6890ed396d0f4b60b26410b6ce643d7cc3121089a6b235af40ed6188e2ac76ed4fec1670b7e84b9ad30d
-157 1 378 \\xdf2577c10ee60d69a6fd58c18259f4d74138ed114fda9d5561161143687f59dfaa1e533ac29d0f1da3fa5efc6c38132ab0b7981def8876782c6aab9af193900c
-158 1 383 \\x4da49ce5aca035d969a0b472276e04835753bcae11b6b3c35952b31217bfa75d1ab588c1e3a972ac4ee6f8fda47e9c63690cdd42f99577e9bcdec5fc1cdf410a
-159 1 273 \\xb163f80e7c9f04776ccaf34ec5a7c4e8b92952de30900300090266d894ccb3fa2c59433d921c4b3136837388dde32550a8d875868b1d544c5144827b802df201
-160 1 141 \\x123a7495b7f73e4dd93e06631618416e2fa5d105cbe7828acd8ad7809e36d484eb7a1aa02827e5df78eb0e0219db66989354757ac363e56ef23ce027b1587109
-161 1 408 \\xd176c6df475bae2a3c961d542dd6e6bf505cb763d75a0899050c03ddcb50756ff2920fe1dfd7320295e5574ff73378ab7f8d689d3f18fb44ec1ad47ba3c7fa0f
-162 1 272 \\x657f985b3b62be6fd247168fd28678c58041b5cf4916d8cda6c8535e8c0f4c89c9963b377ef732d4f5c3baf568c1336f67c513db82b0ab0a24c80489f1afc305
-163 1 271 \\x94672250e363c35c20bdda6545554dabf02e8d37fb7da6d010fd6f2b80f8183d33407d9ee361bbd837fa688fee1fc592c66f14e4ee2c6c29cfbbc25f9723d001
-164 1 229 \\xaec1639fe4ef372ceda92eedd8115fbf0902ba3dc7631fd7d0d6c1bbfc39cbf08855c40ba9a9d95255f312c2e2fe09865fbbbfe1441694af274593849fe5040b
-165 1 239 \\x9a92864d11d1356fb1f6a71f7037ce856aa1c75ba799813f90324fbc998a7881003b8e6b5fd1327d74c3475204d853bd67331cc84f0eaff95c0044937dd9c709
-166 1 57 \\xe8279886fdad2f04d93f4883f3e69a7049d0844a60eba4d8cbb0c551524b470b85a6299fef55c292d96ab6956f99a4244bd19e7b2b95c6907c70ec61b6409f0c
-167 1 94 \\x725db14eaabf89d3d40922bfa617047a42af1913c6b67bb4df9abb6e9f134c378f1729f4693dea0d6cbaf0db2bfd00157ebb3966096894156517caaf62f4db0a
-168 1 102 \\x839fa1e9c67e87694800eca29cea65d86765fea168a9285fe42dc8a31d7816de518306257cc1f5eb4e393110c29baf33034e6f3b141a49a348f8bb7c8ecd0309
-169 1 170 \\x8f4de9ec01940aa304cecf127c9c2edf293a4c5236bf1704496793707c3bd2967f6f82ddf8d32ca02e192df66159b893ad177bb603144de2c4a8601b0d101c01
-170 1 6 \\x30e07bc3b7bd16bf0e380754570b9c9c7b43826a08c2be87d7677e44931092872d7ea244e8a5dbdf286075e4c3d3d0ab9e78deec231ef39193bb44cd3959c501
-171 1 42 \\xf81812cf43fe624efa98530ccc5d4fca299f5613cf3b45af87e8798de4ab0a60a882b1c1e7548477a69c1d47af5b0a1760e2d99575066a61a2984528d1eaa206
-172 1 109 \\x0b35cb348f6103ad1a947e9cb707bda1e5778ab2cc0329deeae9fd038b5c44969346dc5a8f8c2c60df5c7d0a509d73e408a2e35894b9358636ec33dca1a67200
-173 1 192 \\x53a946b2a9ab57f7cac46cc7db39d014f6d1adcf44860afce85222b8bad2645f991d79be594c6306d91f81c9f7f5fcc75ecf225f9a7858d6f3872420ab5c9708
-174 1 4 \\x06849a5232622997d0e0ebc63f18eef870acbd305c025f031ee052c9104936fcb0bcb84bdfcfbb1314d4eafe05f73f64ad9a9caa3b7a45b3ed095f6fa107c103
-175 1 129 \\xef91f01b78876b72094ba06e786adfaf2d148e8a777e98ab44551757fcb87a92b4bdacb3443d42591d0fde3d19b4df870460ac9d86c9882605372112eea37e0e
-176 1 305 \\xf2f4c6396228a2dbf1f4a6eed01af07ce501bf1f31ba7a72e02b7f76cd81aaee78958610c467c8e680ddc0cba227d3b09da27a1b6acc282360b6fc14cb7eff0b
-177 1 133 \\xccb7df5a2dc7b4055c81a1e6ee12f91ea92533730783af98b07b3a4556eebf804a08c7fe3b4971b867254261105f86aeb1c21a3935411d3e6a41ed7ee6da9003
-178 1 59 \\x540aca17050fcb1a74f299739e03404a4cc34026c3b6163b246fb765d5004afcb86576d3d1b21c58857c53955391ab4ea4b27a209996b28947c4788fc0c82b04
-179 1 310 \\x160dcc0658e1d0d1106f0e312d40a0285d7308f74a13956afb7c1501339c091b9c4f279f7d55a0f958a07e61314ed527256cea00a9867d01f2dfc92e726dc307
-180 1 406 \\x5fc7be532317f9be346652c42735cf7f7ce5263324901c175738c9ac3eddaa4ae97652f80adf18cc58c8e5a8e1a9aa2a5ca7fba6fa8877df8ac47ba9c9f7ff0b
-181 1 266 \\xb2ec3b43370951f742f1cdd3694451dfc4715de1fe4771cf39e009ccf1e1c53c372a34062b71f8123c3b235263a94ba2a467eb705c2591c32888b07c7db5c008
-182 1 12 \\x99e47e057824a9dc2128ff70e012f2b810e72b3fc9e3338bbe31b2b3c3734cfd9dddb61f40b8817a1a5ed8ac04cfce5b54bf738794d5ebaf1ea100a4583fb601
-183 1 107 \\x1d724af9165c5f86e9c6b2ff5e44671dbc6f3621680d6c3d01f6d360f2697d571e5bd9d2bd60f880720cdc8721d9a8b4f74d3fde1330519c35dad4976a2e3206
-184 1 417 \\x01c6009147a711e2e2db74bc9706496b1615d3fc65d0975a2c0d50c33254ee3f58e3f0b8a41858304918a380b8abf7f16717da966dfa105dbb36c70332ace909
-185 1 159 \\xb25874f6f717dd45b3181bec28b836bfc2090a53332bc80084b8ef47086a95862286c07c76f30dfef97c4614437efed15bad18fa6486ce3b58cd7d342605fa06
-186 1 87 \\x620a8f5c5464999e878d93b3b26697b396493a9a92e20fbcb0a387cf08c36ccbef08ac3450928dd3e9da2bf1b8303ab09f74feed1b0b9810ec2067c6ef6b2705
-187 1 246 \\x7d46b0bcadd5fd64d31a04528367cca6fde64de8c38c244500b2ed293e7cd02a5128fe3f1f0ac2a9b4c924f7463dcf7251f79fff3426944852a77f6fd2404d04
-188 1 115 \\x05fcf0e090eedf39e6dda17ac0075c235998c13b27a003e9c6fa45229db66f765272a8730e0d6656847d7e1de3b4b9914a9e620fdb827668f6689410d32fcb0a
-189 1 96 \\xf38e8aa18ca335770345f2ab79bb8a37daa1610ff28efdd2f847389cd660ecf50c105637e845f9d115d97f263f79f7e4713d6b9a3e9d4a2cf4012017c7c18003
-190 1 313 \\x5ecc1f6f01efe5bc8f7c6d619d81f17b3db1e6a6b1e106ca51f6e1d38839a1d3c444cdc44b1c54bec475466e4cddfbde9519e065b764a841898432e162d04b08
-191 1 390 \\x83d6c127af7a6542e6a1eceb632b7db669c658d0e321d22f2558f18292712e43632d3d8fa42e37fbaabc57bc3286dac7202090a6d49167a99439574a8afc740c
-192 1 130 \\xd1228a9a9fe4f7bdccbc49663f64a7e2386d845ef33e0290871ea136555226eab90a35095dfd762bbfc592daa95e5182ea8ec91a4d51f6db7799a6945acfbb01
-193 1 126 \\xe3342f51e58fb911bd21b757fd23bfe1ebd6885b5eb4c86dbcab4a44ffb871ee1a472f4f083cba995c942289e30970cd63769e65aa08125d2d43d801b6256a02
-194 1 369 \\x03ba5a814e82a932058662cd09d0cb3562388966a997b9d98a1d867a0bba2712ab68aedd0190aa7aa6e920163b1594003e312331dee75880a4daf47490fb6507
-195 1 240 \\x5e997b1c43b432586115eda00cbfd702d4cb346e2e4dab0dbc3c95a939228bd338e9519a3a5bbeabab31175c63df667dcde84b891fa3aa4dde6de9470265000d
-196 1 90 \\x818f1ed04e736b53e75a178d384298c881200a1333c0420067f60f768a3bb50c160e159a94faa8ede7939da16d4943299d86ac5703419533ffde9938d94df70f
-197 1 389 \\xc23026e8e3049ac12fa368ab6c2902d109c64a9bc5d361ca40af36600c2f4b08d89951c7bc4c0c878e0ac4998da4abb39caa664e3cc309772b5cab0beaae8d01
-198 1 400 \\xd3a36880c78c562f348a9c127cdbee21c50f787d761eadadb53b1777b70c9bd05ad84f269f2270cdc34f979480c50e20c95ffc55892dfb09b107eb1f59a1ee01
-199 1 255 \\x94d920c56c061e183c280a87a4867096838770eff469d56e8f0d89eef97be66e6b7aa2b1e4abd39cf89ea9ebf6e044dbf657ef9723394265ab5376928b04b20c
-200 1 322 \\xdecebb7567c7833fc3a2cacdc78935434aeaf4b40c24671eadb0d2302c611daeb095d841ea08c5e3b4926af64785fb3d8b498a5752ce2a049a2ca118deb6780e
-201 1 319 \\x4c662c84e7bfce7b207df43ea94cca4386363a10fd5a08b9cb344a10ce15ea726927a72dbe9188be47957d74495e90c6c3beaf6e4b98fe70e91aad5a67958a03
-202 1 143 \\xe6644a45d77fc2ae37d34081464154207e89b82e2ebc8d31cc1c0903abc50725c33a4205c80b235af17f981e5f319b8fcb5e8192e49c0037fa6d74c6486e5d01
-203 1 307 \\x751e21fd5e281e28dc12263682eba9e80a647c170d7b02feb27eff3d7c84e946266cd17daaf3b2b19c54d080e3d7fccd0000eb3b7634e17669f746dd360cc50b
-204 1 60 \\xa3be50a3a074557be873a6af6e646d553f682dba582c7ea9de88c6b7f1be79f2350c02b0c979adf522c36d135b1f0d0412986004689ef045e699db35bfbe1606
-205 1 321 \\x896b8550f1605443ec355bef0ef880b1553d76f598432dfa8bc15b12869ac6a9e678f28a690b5e202894a79edb4a01b714449fe8fadfcff9cceaf7da53449c04
-206 1 291 \\xe8b23cab1bb7cb541cc21cf8631e3de55ab83a3bda43779a25333556baf58c1168ad362e647c0ad41f7fca56179d22f9d5aa919cb8b410402340b506c6644d0b
-207 1 127 \\x750ee5fc36aec8bba3af9fe1e7034c8cfd571d1db44ebfa2598a3574307bf7ee04f6d582319462be1e2828067aa08c2f504cc553de18a098e00d3173d9ac0e08
-208 1 17 \\x5b2435ee5cd7d8de8c36b4c81961c31efccef2ccf4829ddba660b3ba49be87965052a6997fc5cc4d477c81325ff686268c368285b874afd7f0db71483aa8d60f
-209 1 138 \\x472dc8038d00075632160c959aaf057173c14fa234eae471e010c1594c813ec0ffcc204b64ed0bd83824550e066a4bda58298365d9ef88c5b3f653ef62566003
-210 1 152 \\x0224f65b46fb690a8b693c37b471a652fb77acf2c2bf7920b6c11cfc98d49c83e187fcf2f2d3aa636d36a8cb5621bb07ac64fb60a9c89dd78fefcf06dbbb0a06
-211 1 325 \\xc7a90f187df9b2830f20a9f2134424de133563ba18e26b911e9352c167e3423d97886d59f325dc912dfb2ec0b99d2413013c6aeacda38bd9c8bed0038dd13a04
-212 1 140 \\x7e72f32ef9df1222522cac95934332f92822c1eed9795ea338f1f75003cf3e272e12c24033b9398d0814fa8c8874a388c826eef16e86b993401c617ede162509
-213 1 31 \\xabbcc159f592c163460df2c9f51850def0442ce0bc8db4f3b1360fa9e6e50dd040bfe42676ce2b827aeeb78a6d8437726ee09efaa24cf0915c5d9ad8b3285e09
-214 1 197 \\xba1b5409abe1d8d1389e6295473f6816edd8dd8601ecc96f963edb84a200ef2eac773b109b6550347c12b7b61da79199996b73f953bb8e6553a27cb98445be0c
-215 1 409 \\x88adb2ea0e02c479dc73415d6a665db42088fbcf1db77f5e98836f12a661c91db75f1acbcbc9b8043bc1d2fcbb9679b3e44673b10be91746ea3f21d512789209
-216 1 412 \\x84824b3e3019d4855464ae7649e9bc61b6e292d2fa625c315424c7c1fc1b023562e7812a8a26af923fc5240cc1dad0fd87185636c79679193044697aa61de004
-217 1 65 \\xdacc947e17e8dd0a485234cb2a62f2c7ce5fd9bb4eea2a13ff7a852af867ddda6b01b75414d37b585c540b9a7ebd9c8bad6fc1a4ca8d14be97754b7a522d4006
-218 1 147 \\xa42efe7e2bb10541fdc8e17c4afda4b31435e63d6a69ab0feaae644c0e3f7f85b8ec78b29d84e117caee4a52645b25931959e72c59a31029d3277258d090800c
-219 1 78 \\xb1aaca26a72eda44ba63b6e6c706a6fa973db4e2092f789f262e8690c2ea0a6ed805922f05cc5e3e6c4f1e6ac8c0e93c4be2ac562801ab51dc933b55497fc60e
-220 1 14 \\x46e2fc48cd5657f91f14d6d43f82e9932026c0f9229a60af48e28f7729a7dd87dc2ff71c365f0dc1a2f4b73725ef9728635c058a53b12b143a8bf4d02050750c
-221 1 67 \\x7a41fea491af6c58eddceb58bfde7224fdfe089e3d7ec3c87ef4290ccbb2ffb9df504f850aec654d1e7a967b98e41ebbea83b3385ca118e6d0e53062e3b03a0c
-222 1 33 \\xed53cb4869668291b1d638988bb85c8a509fbc52a6fbae6c831cc62cec3fc55543b0ed266d5ea4d6ec4b081226cb0769bf28ddd5d1e4265174e1f37bca395406
-223 1 254 \\x1de2c13c4a9b15c908f13eff6cf7b401d69fa6db3d887aa90dbec76a7963acf27b43305ff2f28ee78e3b0b31081fcc0420015a78b5ec3a62f645907121f2300b
-224 1 227 \\xdd7a0ba88dbc83839dd8af0c001842daef74c28765b879e674d9a5c576fa4b0ae7bbb742b6e48c3b20640e45ebd42d5113263a6f10eed4213bbaff102d81ec02
-225 1 361 \\x6f0d4ed9075b4463615b1443a6cfcffafd3eb314a13be92879044d019280b0990a54f1b3d1116e385851fd286755f5699abe80bbda105dae640c9262a4c7900c
-226 1 206 \\x7278b64bf297093df4e71877f32d20cc08ddf20da2895b17827b3f1ddfd015233da490d03b0fc0555f19288154696805116470e32d02a52bafbc6c84de556e01
-227 1 293 \\x4cf474e98eabf9a88db7d4087c0d9a6f9b335d455dbcd4814c0c3f7d90e615ad7b3aa03c6bcff659704203a62847cee15e671b784353f483e6f9c841ba62d60b
-228 1 84 \\x04b7f5f1f2fceab5b733c75c0ed15080cd7273951fa8978e4093ab79a437a9d000ff77175c74cd87d2e19ed7d196a36b4c267d748f5c7f687bd0f9f741d6010c
-229 1 396 \\xf3ec028db008d500726b7c6fa24da277de7546cc163826dd371ca858dc0b6d28cf31623278ce4b62f3faf4f9f2c48cb676692ca8ff8a9967310a43f2d59a4500
-230 1 317 \\x7d7bae62a5b1c869252d322f3546dc98eda32a88f956302e9b220463e6548952ac5d8007f5f505280d53a32b9be1feb034e61eb283d64f377367ad189fa06f04
-231 1 404 \\x7d2c15ce7a2fd14d3d7ba395652c19190ecd9c303bd5f4f7857f345e88299811cb2315d4e218a19af041b869a1e196a89de3dae18f49943153d3b2296dd4fd09
-232 1 223 \\xbfa301a330421878bab2e386fb7b91fb26de3115157581ec1d65bfd93682796ec25cbdee55d50a095e58fd9b8acc2c756820168095537337ee8f7e3a4937f707
-233 1 280 \\x834c3c879aeddc848ff17f293c3dfade1fe22cae10d4d9db0137688537cf5e48cf337c269214abbcde99abdfebd37a5a94d21f613d2450c874fa1c25aad1eb06
-234 1 202 \\x6efd96923bf10bcf272aebb80934972abdfae1e8bfdfbc9b1f8fd55ee08175ac67ec4d2d0ee520f690d27d4a7ca540d228d197f873b9b3708655b2f41f8b290e
-235 1 93 \\x5a5c8ad5c4d13be28cd40464569a48d4b3624833e5dd61a05009869257ec87fd86217610ec2ac5587bd604562e27b62d6cec364d662c09ef5786f9a2699b650a
-236 1 187 \\x856eccaa986d07b47c16430edafa4b340d68fafe19e4d295bc3a65bec0d043965175948dc165fe6de0a04d35cd27b1a4f397a4891ec34eff0a4ab0d5e0584a06
-237 1 214 \\x466067a5a54b43797a7046010db7f190945f41e93cf3a5bf3447cac4354ddaf8d1e76c2081c6d3089362cc4a3ec6366dd7d607c1196a1593ff36567630ace809
-238 1 308 \\x0b68e696ff033a3957ada83d12cd4491fbd2be043dc1ae666d74012e5fe89ff0fc446b95632ef9fac63e744ab9b26c8a0db46ec65817c949ad4d45791877ec06
-239 1 82 \\xedef4511f1fa6fbf0fdecc1ce3d9049be5f1c7fbb670f51e6e4c483eaf176def8ebfa318ca4de18c10bedc09c564ed0427fa3b108d937fa6897dc6784ec9f00e
-240 1 116 \\x59045e061e78665142845bbfc41af24a5fa80a647895d46b69eb9b0be4be2451526545576664b69f825ef82ea2efaef1e43e39c8370221bbd1b31d89dbfe5d04
-241 1 419 \\x6ddf5f45b7f1d9b9eb643ef6f198729797416d1ef5823f78703c05bd82b1d71db693da22ac5bfe924b279147f9038d61545f60e37aa1d0a59d8d7f2c59723307
-242 1 190 \\x553c750a1531bb23a4338f60b67946b8a693f4d2cbc0cd27b57197bb0aa1f45b1ae49b1eaf23d5f6da7517c8d1898c3dd3706f9d39b2525d52c7a57c738c9f02
-243 1 397 \\x0878377dfe41bf4e09a206aef411bdb0a8f98ac633396144aa4f38a425f9c4d605955adcf5df05248e99f0d22eb312ca888295106b10e6cb86f41c454c523b0e
-244 1 224 \\x00b6863580cef35060c34062b081f26b00889ebe02a005034f2a19effaed053f3c8785f8918e92a052e40e2bb3c4cdc2771fb078654cc54bd0693093cb36170a
-245 1 382 \\x52207bf019c4f2a56e042f1a7596649cb6b7b8f422c5b4ed1319e6afd73f71af794e117391d1778722581fb00cb5b9c0ba6afde08f4fc7f0b40b30c36ba0b70f
-246 1 36 \\x9f25d0ee934e929de5dda9e7490e5651a161ab1392bf5df757e2747e581d0c3374a79d3943af4a002f2d10ef9f701d9f0013dc09b06d4edb6d2e596361dbc10c
-247 1 97 \\xd4f306f64b0cdbd65143f1abfffc9f3876574f8be02949232da112e93c84850acadf33f223c8d77e4f79b47e3a208743f19c03680eeae75bdb2ad2e4f6f94208
-248 1 261 \\x594c92b7588470ed3f2da86df9459f31d851ca38ac5b9177ccf4f784cb8f037b4e10fa7e0f64db9e8c4fea138aab61c846474732a4e61ad9a3339ee13aff4f0c
-249 1 242 \\xe862659e1406a4fcae6098c61338c72c9f8731855fcf4b6dda3bbdecd3a48d4283cabefb3fb38f35e9712486ef0290bd60190d9282a5514218f317a5cbac140a
-250 1 297 \\xf8463826774f62694beb7f838b4fe41e4fc721c0e7a08fbb3b3ce9731aea5610d98f071dc6bc82aaf164abadfaebc62cf9aa7aa909119a977b47f70862c22e04
-251 1 40 \\x5ca874af5972239cc6e9e426122bc806a4e1e73661f6a42c54d37a0018fd74f1c15fb669aececea5c1081adfe1ba191c621b7e23cb0a0c739a4b43a7bbf89c0f
-252 1 292 \\xa76b5997b859ce085032394980929bb812497d86013e004df94399cc8ec4987ca7e463c19e5570fad6fe5a4162568d6f73c85ca6e3946ce4a344a093d4cf750e
-253 1 173 \\x9c081561589637ab7c387f9915a542975a98ec9fcc9ec93909a2d2152e217cc8ab07ca307b9177154c5de834e682eda362abaa573d97e46ef396c095c7c2c403
-254 1 62 \\x5695ffd64fa3a8c29045c226efbd9668aa33f5051f2b8b27431c218991453c2f03b8665ff096cb37df9bca87d5384188a79d0034aaf1a939bdfeda3f2a2cb604
-255 1 330 \\x8959b0a86941d2bf3db6cb104beadd342f756e71a1ce60d38a3f80642579c6fbd407213b94c6468911cc1e51b07f48f5af427e2ec8017be6380394057d58510c
-256 1 375 \\xbe86418581d521c0cb8631ea8ded9eba9c6bf99d7ecb38879c0bb63f3f7493aa6249a040f1acc8ec0ceeb597399ad66a72ad53194c24cfaf4b70e9bb6adf8006
-257 1 106 \\x284da2ab185450c5f821d7515699bbe2f56936fbed497fdab3483f7e678fe9d4d170e673f80ae9bceb008775898a2d06810c3256fd9341ed3089f152ed50b809
-258 1 259 \\x0a6ecffca0577897bc80788e3486aad51b5d3df2379923ca482fc5581ada69c72f3ac3eecffccb399323d5e2031349c998db94c1049709a5946bfe01abeb7208
-259 1 105 \\x590c8e03630a959be2843dfb37e7b59287def7487532c4f5a049fc9690550b6ddf4eaed8445b5b674d8805c0c4d9e59e9cf639d2954e44eee4f972395e556406
-260 1 251 \\x32fba3499afa8fd74b4843a1cdb78bc438fa15c8ec49dd8af5582383d77f03871b62779c4e54f85517e0e98684808badf87452db4ce43a70226e09317db60c03
-261 1 19 \\x5614963cc3303076b2d662f98dc29d53acec2623e6be30ce328555eedc0685a37f528a3629376551588e81bb5646809fd10499a3af51a44e90dffe03d454a00d
-262 1 257 \\xae29276912c2dce7fd253747f593682623c40d9275d790219298d1ca18194075ac8e132f07ad8e132537e140e8d15bfe21267d980eaf5866414bcc614302500c
-263 1 48 \\x655ec8923a63cfe0e7fce96e8f36a606c34a9154077b3f02356a9c6aa35b3764bb552c0046810273bf753fa51e55202d93dea34a9d546c67e1e1f4ca15788e0f
-264 1 352 \\x47ba94477d7416d414fcefe7b646189c81ffda3c7ff13589bd7fd418ee2d3f66d0c05cf84c7c489f736cf992f6ab2fab09a3589e6632f712fa5ffdeb9079c105
-265 1 414 \\xea1b05dcdcc28fd74a7c3e02feaa825b7249630f90622e22ea788c971b9368ef74f6e5ce84f4de9c4895f49c80e0c35bfec5cc8d30dd6f74e24a242bbb2d0209
-266 1 22 \\x1b0067eda8d490187805ecec3762be96215cfe41983bf1e31f8d863e1e78444a0e7f6a98e566a57d934663905e71d9927afa4bb7cfec724c8de814e470855c09
-267 1 81 \\x04ba4b215d96cae2870496e81c6424c1ea13fe60886239b0bd91257b687c054b516f1edec229cdbeb94f8d2345c2f1448d39e918798ebefc59571a5d004d8202
-268 1 1 \\xda35043fd43a9da289c02d31721bf0a6a030a185633ccb8408e8bacf5066f724ef251ed79e4a5f7e049765428653d690ecd7c9201449146e8028517bddda5a01
-269 1 177 \\xdcce855c029e759b5faef063f4f31af3bf9821e14efdc1668431d77e8a3c7e163c9ad7a5bd5799cc033ac542ba89f8affd2e2989f281f61be22e5123a7b11c04
-270 1 174 \\xa442333e5a9b0e08ef6a3a2735169aba96913bc8d8f8007d4c853e23ba8cb241c922d46ead7c2ff2aee4210917e37d858c30eb455a3ca51e636df6ec60dec900
-271 1 245 \\xc38f0270e6a09c53b74384f677f16b998b9014555d01360fe81e6c0090c06a7ae588abaf0bfeb6ecbcc95fdc94e64d246aa8e6c93fc879c39c7043dcbf6b5f04
-272 1 264 \\x8b607158b4a6d1504a746129caad18d0d048f869e1106a6e4c6fb6d416dffce4bdadaf9a3b33754f52865859339ebbafee90689decd9410846abb7b5ca7a8608
-273 1 100 \\xeb0ea6ef1003543ae3bf5ab1fdc06e62b8d73b3d0871d1b9761984f68d17d68d296ff4c9ca901a7eb1a778774ad5e3e5ac41a4fbe4e28bd624acb334dbadd30b
-274 1 333 \\x0e79d2ec62c4c4690fe976a8c84dd217dd5bd5e90f17d6647ebde0bd7cd7060b455636267ed3eceedf259c048fce8ecf8d789133054576033a9e271f72d3a604
-275 1 64 \\x4ce28eefad95fb47b30f984f3a2f85f1c708483f7264748bad6f0ac9825146d679a2de74647d4a0e783e3fb23f5d6e639687c0934614417dca4bc0d8ddefba0a
-276 1 123 \\x21251399a95df69a192f8617301fe413fd8ac7c340a3947d1ef4b8d8749fb76e837986ad136dc0bb2649b96362132d60d7d07da7af990b400d68ea5468b5cb03
-277 1 349 \\x9b25c5ce4af488f66991d6f4fd21400363c44db149d8628ed44e3f72c869e9d038782f0584c02c2d9bdafc258f0e0789d91640fbe8fc9f8cdebe555612045000
-278 1 92 \\x1cc87e5e21c72e518e2db16d22096131174bd2c79817244a4845c6bbd19696e955c836d0e236084c086a33bdb9a88b76c5bcc710d5ad05b0d8bb870d31d8950f
-279 1 111 \\x11312ceee9d913ba30f88df8fe4002e5f210dc4c6bcde4b640a5a565587eb2f47eeb2e013241b51f8ffacd77814d70aa46f952fb0827e3d0e896b69eaa6e9c04
-280 1 339 \\xf3e13818068851c708694c2a9af24db606f34a956328d775e27f64dbbb1d6b62fa2a0e7c03706ca8e3e4f34acb14067d038a79eba11c072c2472cde27611160a
-281 1 47 \\x5bb73a302c3b6326439716a2bf168ac2acf0b4bb8b30dc85326e3fd1f3517d02a25d3e4ae35ea5c339ffe5d9c13923d90762606df7281062c3c4c01e9e33b406
-282 1 128 \\x81a99cc50d33b1cf24eac65bdd6477da0625d2c78ee550cb68b2a02c6503603a7aebb3fce4cc8e66da417c343f6832246f311ce3d2f98fe83c4314be70aa5d01
-283 1 329 \\x3196dfa172fba6b19325dd2badbcdb21cbf4cc3c6a0994d38171b7c4baa3529e3cbf8dc59020d5250c5e0ec4c7d5f3d75be5a9ed5625ecc8c8d86a7af0731203
-284 1 68 \\xc2caf46a0d8d697d7f0eb16061023fb8199e90f471119e2db15077512eb17a48ff1639b7b3968b8dd9257d7f9bf3e11f3c1f494aac7db287b1226215fd274a03
-285 1 220 \\x0f15087de53ddcb448d6cd7de2d2766e63ca1a60682da04928bc9f7ca5189df189034d9584dd34f88c34ff5133bf19b991e34dba7328793fbbf70603c0507607
-286 1 398 \\x1f7957cd432bc02e30de8d7ba761648b359a49c6dda8f496e4fa58498a4cc48214a5549bb473703a341d86ff03722b8b7115e7f5fefc4f26072b1ecf8189a103
-287 1 207 \\xf5e4fbad20af89a153a9272d64ff0f4cfef67cea212a5e1b049858383c921f9fd49e401c0a5109d5af9e6b254c0fe3fc5d0f74603bd26440b7b08d7d10790d09
-288 1 306 \\xe01887491d8df4b76c02c9d04ec0155b9ad494aef2442a22ddb4781876a98e2dc5863c42119b9b85a316a31b2a8bddc705f9dcfad65778d49a3c75b1221fa202
-289 1 27 \\xb9b0edd81d80287a795853afc44a2928fc5f2c8ca62f4b0d073d06887805754f156814c4ab7e7c06da8012a34c85fdf454fafcab69985d4207d16e9bdc00a002
-290 1 180 \\xf65be98013f7fa528a3aa3faee065191a0bfccefa9fd53a807b9da5814a2e766b1b3e4b71da1aeb68bb87a9b69531d4dfffdfa9b081c42cce17c1d1c8d68c70c
-291 1 191 \\xdfd0eb69402cf88be1762a39fde89b0f077805fc808244c80a40a0e8eeb5701b631899781b190f877c0d589c893931c9f4ae14692b255dc01866715cd0172a02
-292 1 164 \\xc63e4e6f8f3b83694ae06bcb6f84d8f694f5bf67b3c0b4cc6c328cc8c22a90c1ac9337f6136150be9d3626807972c2dc4c0e29d9cf58487c463ff2343de93109
-293 1 151 \\x53a59f7bebdd0c9a3e6df1d369fdeeb2cd02a95a287632f6ecf3719c7d408f52d9e83437de06a470ffee1d83f2c206d373b2cf2949340032cbd318266bf3480a
-294 1 25 \\xac4377470744a8fb5e5f1aacfed043d7983758245bb3d0ebde806cb90c221a71cc8ef8a5b5979bb932e0c4ae231fa476e25853f940b6b8cd03905b7a48aa7a02
-295 1 124 \\xce60f04c458a6960b87bbdd8e29994f00d17ea6e35590ddcd777dffd37cd4a6244f239a3241ab01455094f0cfbf300a287a2bb9f8bc42cc0ecaec55cca0ce409
-296 1 274 \\x2c71bd419a5626ce3a570a143c1cf635ae1074e5751e87d605d64a4030bb65a4d549464d2b8e598d636a5864ff5b491e1d48c8f04b8dea2b1b2ca0b434859c05
-297 1 403 \\x2d90209acab473b008b5b1faf5af8f4708c5e657ac4e5c0efbf583c833c1d4b405ab02791969268b1707cebf209385672e7edd7f0e222f020fba6bb939a2150a
-298 1 10 \\x78a5e6a163ffe0a6a48a5ac19184af2d198b9b37a32de70be63ed4dc5e920ae36a05059f382c18cc48e4e36c1ac5ebd38ba86ca3b782384d082637620beee40d
-299 1 21 \\x4b959c57b5d78cc6a138a286503e45fd0741d713987b40f81f353e78bb7cdff38346fafe2e0f0100e0b03c3f990b934780c2717a5406161b43211c7d81caae0d
-300 1 178 \\xded9a9ef32c3f36703db4367f547b7421bde5ce54ed231b6b7e34f254e26e90171267bbc6714d1f23f280d9840b6806c7bd47c077757cfc56d91b38db9555803
-301 1 108 \\x77f91af2b6be1cf91ced004448dc0471e1111bd2d8d73c152631e1c417c469fd41c4a31a79bf48388b7f238757c19f89ec344200b8467a8990014f0a54b91101
-302 1 302 \\x5c61824a3b704a086c8eaec06403f9ff5d3bc8ce1a10b30667520312c8997cf4e8e75414102e57fa5c50f56bf07360ac3a049e9785c0fb3103f30db225f22905
-303 1 189 \\x4b568f472adc7e6ef38dbb1ada62fd2834516c2ea23a6ed0b86c22e8ea64f1b0e34eba20cf901c86bf9c1f71d97ddb2a0ee77e141c038a90c1837e2ba8e90f01
-304 1 338 \\x894aa98e1d4bfb651ff81bc1cc99e0f9c20e54931b939035589abe238d9c023053d0b3373a1af80bc71b94eca49fe6b545db2d821cf4e530c665f901c0fc4405
-305 1 366 \\x193a1e787b1fc0bc00a0e16d43899e39b1db7f8794af67988560f35598f4731f4fcde3080e9d12008b84928eea2abfeb8f2d4e2ccc7492d261ff23cb76eaff0f
-306 1 331 \\xb6e2088009381bc9ed6b79a55d56d5a01cbd4a6de8ae0b5f4d293c60267380f68ad5d525dac71574856f5e367b7b9febcafae451c17056309c7fd41024b64702
-307 1 237 \\x2d097b1aba922631b13dffb8b56d2f0f474c5010dd5329c0a2d6e3656bc35c4c28830f1fb37741e16367ed25d32d20b4268098262876be0cd59542129221a407
-308 1 157 \\x327441c067d6bd6d5bbf625c2cd225cd7eec3c5ec88dd57f77d94d8199313e62760a9ad7f4a1e4a44d5a0a15f6962dbc8e2f37c1324db9206f57dddb9618860e
-309 1 384 \\x32bd4d1b0afd81cd36e79507e210769398c48662e5a6329b8f4b6e757aa4c78b03eb0102a1c9d300777e887be4ae6e41ffeea769f03f9f52045c737d4ac12709
-310 1 269 \\x75a49334ad4e5f464445855edef22ffbd42e5a02631eaa6770c94e34334ccc592d3c9e08d035aa04964cac19c3e2cdae6e1aecafe95948b6f5b819c971be0402
-311 1 234 \\xa1ef5ec0d149cdc799b7833ac98a87d43dfab16fb00ca4885963e40a10a5eceaf6182df9fa066164417f30e7ecaf6b337fba63d184d2f8af41849466e0e8db00
-312 1 405 \\x1bef89bfc3e42de1eefa2dd79072091cc12547016347f82d8c121e549f4450e9d101a8a09fb652a454112d704b42567effe0ec85e93b14e237200112fda5980e
-313 1 216 \\x255a15b69a6873cb6ca89d6645c0c0f50c4b967bc588425dc778c3c2696690572837abde5978b5ec83cb23ebc37a673491e9dda438a499427985066bd0ebe00f
-314 1 11 \\xa35ba4da3634c0f6c030b5f61eecf303a6f91716a47a1707de180265ae20700a3a6621de204ba9b6625606d1127744bafc2086373998f95690c80a399706a903
-315 1 204 \\x1ecb64c913eb36bc907fd39c94b5e5fb7535df12b2a3b63b3e3852b8988dbb5afa3ec1e476ec87cf2d2dff12de2aab8803f890abe65794ec1f64a1a6135b1e05
-316 1 263 \\x9169b2ae49ee50906be587770fbea3c56ba83060ee43de22c7382c675793bbf23799b3697180806276af5bc243d476942db217ebe719b31a4acf758456018205
-317 1 162 \\x2cf8fe14c002f9a08f9713425c252a5095b246ddb415abf4aac904369eba8e6e3793fa5124d627e0cfb2124d8b66ef71785d8c245d8863195bcf8204b7ae220c
-318 1 38 \\x6cdf1a1420a6355d3fa9df4fd406e6f4a4b7e73f2e38344fe7264d40cc533a80c549d2386d4f4deb1020a61a127ca8b84f5e24a6659d8552a28d9d41eef7650d
-319 1 41 \\xf94ad66072e9554034425ac291a9c8f0d54be33528c4a16c9f34f805d588c5ac7095fc1f0651ffea230a9463a0ad58ccb7c217067c0a4258c5bddb358b1d180f
-320 1 328 \\x551c4d964e36a8cf433e87e649068b9becd3c0fcd74bea099d86f2c03e3b36b552dbc31a4531a53a48be414a4605a11d55c2ff496d614ef51d8f76476ed82905
-321 1 29 \\x4ada0eb40d28fa832da19f886715b9fa6aef13dd9802e987e928f700ca321d353f37e6b35117581c42862541f356f7257748397028115ba288d0c892d733150e
-322 1 3 \\x87738e26803d9fcb12117747e0bb9a36f3bace2bb522447e448aa22526363ba5c5c915d7f465ad3f19538c7b665997833744b1801a9d43307b02ab6603335f08
-323 1 46 \\xc0964fb8e9c9e31272af580ef982ecdf12a04f2ba05cb99994a8f136e4137b8d55e591a5fb4df2395ebf6a8ce724f79f1fbf6c5e95b769d67c994d049fecd807
-324 1 44 \\x3577f6ba378ba3d7f7bc7b1584c43329c5029713550e606f9177a84066a87eaa13cb20ef7d36141e229e353a7bf56fea1276c4639036fd9611bf13713349f704
-325 1 301 \\xf5467b521ef12ed949285f1cac8dc78fde2d71c889acb3a7144438f066069c3b89421420b3fd1088e812f3f6af7f03e16b7793a3793ffa55c98eb8a3ce00d301
-326 1 258 \\x972459ab4f3a4bafc3b7df0586d6c5d27a5424fbd422696cd177ce657f4c44d77f46e987fac1543b641773794582af42f8bcf9e773a83eca6196524d8e38f304
-327 1 304 \\xe316296d9ae41db64501e552d59f4eae6c61dccdbb10406321006af47e369e91b087b661854a981aecb844e27ae516f5440ea8187a01915cb2270cca7b47740e
-328 1 183 \\xb5109e568b7956fdc70cf0408cb9ab5d60f739d7a66edbf8fa174c82134ecd7585d31490a107c6ea8e21431e51fa2c067ed8439a7affe04506961ffee7cb400b
-329 1 265 \\x768f545a2ab9a61c22195b72f84c3a31b2fbe4624f2ee290b4d5c018dd411c253cb787248f8f0ee5286e4ac354083293dbbaec2e9d1b208c39fd65d18a8e0a0d
-330 1 213 \\x35ef383981939c0b4b1cdaa30317f2ce22dd3fe2bb19f916a77b9700557b1766472773098a9898ce300dd3e00eeb64f143718aaf0091a4f6ce0bcffe1955f60d
-331 1 424 \\x764fb2149852c087f9c7883333c4ec13359aba710970d244d0a2a016fa5b488306b91a704fd6065aab554f4f5f54a8648f5d0221b4407fc4eb52e0971de73301
-332 1 201 \\x8a103c666b66ca2057c9459d933bc4af1cbb891aedeea23931738499101c98cdea7ce85f5daca5f03ded730abe00f19649364c7f0f2d0596c481661ff85af107
-333 1 379 \\x7b2ec85edf0e20ece95c70c8cabfcb82dbc4b94ecc2718d5df79affd538a97542dfe35f70832d5ca2c72349f3a6a89eb345162a0b72875cfed3a1d93e146de01
-334 1 279 \\x6753fbf5d66393792e1a2d3546b216465090fb6a3f1d830b803ef0daa968e1a0718a61eff08839a68f5f42481850b41bbabecd18675c88baebe8515619884e09
-335 1 91 \\xaefa81746633600b1b50f2a7d3513536465d152d9b3fd37881cc93c5b0bbe94d6e8af9e78cb1d8c930bbea5f543162cb886fc0a8fdba688f28f4506100915400
-336 1 51 \\xf9b47f0d1a338aafa6df753395dc90e2449c492f70bae6c6f377e915bc6422ed9fb3e89d9cf118a5f5ec2fc320b07e6a48ed4dd0c4836524a8fa3a7eae03750e
-337 1 113 \\x1a3c0660c0ca6b00f81139ff39471e50a4f7a2cd5a6412a5b511c45d2d049e0665251a2a8207e45b97ddb6241b716f6029b63a924b24834812f9c09249f7730c
-338 1 182 \\x30679cf0494b87c6da5661e415ad0bf3d1c404558c8c285a3e1c22a374a43c13694f665d1ec7c1f1f76557df13982b11dec1593dd6eabf6a7870eb241b64f005
-339 1 55 \\x93de34d7cb5703fff592b79a103cf0fc7bece34e83f2c26cb8f01dea9c61b219bda2cc8e3ee346c67b50f8808ca7c8c6385d5e8df5d135c0a11ff121828e3e07
-340 1 61 \\xdf9e64bcf7cf6122556fa4518a11557d37333cd2c7d52da988e2499b372a669cbe70f4f976624fd2ece8c3e602c9cc6972a981d83ce2ae0b89e0d642388dce0c
-341 1 13 \\x5c505a79a7f8adfce735353ba4c5e922da0273dfee38b84eab14a80a1659727d6bd76245c7b96f6ebddd75a2aeb298cf3ff9b5aeceff82b104c82f734367b00c
-342 1 285 \\x69f62c99dfc7e090afb2b12d037f9f332881fd3ae359454d3e89a6f4d0821afc425077937025ded6602a052e4e5d09ab322cefa4e91b43954fb26e0279115a09
-343 1 43 \\x7d55c33c007ccc9ce5dd941c70d5115b989119e3bdc8337274d9ff39f5f660cbab110d0f5e5edd7605422ad8750cee60f9d1314e8334e00654793a39f9c07b06
-344 1 121 \\xf45767110f44b248b611da4357bfdfa688f7eb823342585022c320eea19923fc0a247a69a9ce08ea0dd3d8f7c6bdb5bf2cff3d1d3e1f062c2182eb0ae9de530b
-345 1 289 \\x73158a319d5143db831fa320c1193a68facf5ea87cfe61ebf30ba20cfb9323fa16a3963bb97ec876476ae5d00530720828f452e402dfbb4eb46fdf72506d370b
-346 1 134 \\x103f34a42280435af6ddc27a7e8b53917df112cb78d2acb707345e42abac20a98c3c3338b786b7f89ea4cc66768c3eb7bcfcaee3afe19e9f82afcd2347609a0d
-347 1 283 \\x5a9009488b97a15affeafdba84b73c58924022b3d848459c0575f90d02803a200a3a9e98f3ea69fdbe5388cb618f20593ab9103f611e3dc7d3cc74283089ef0d
-348 1 37 \\x9d78952334f92a6d488c8ee2b5c39c3b52c84c40cfda55a74e03b528f89581c516b944a157ca328bc3ec01a4fb5fe1f7fe282986193fe49a6d4c703ce7c4e50e
-349 1 119 \\xda88960e65b6ea36f0645dadf1ce2e1a96ab31d7edaa0d01b7d999a56fba4e812347be110c6bd776980f71e1bb67c8584e6022d9845c6e948399b636ba1caa07
-350 1 56 \\x739ccb6c27fe6282f019fe5c461887ffca7f1c08a5d53978e3dd77490696629a0e21dcac44a88413a97a81bab3827907a49b743330b12d0e41f6a6c7ff172e06
-351 1 380 \\xd92b806f9df9417d8b22d1008ff78f4838aa66f915620d4c6e4905118d28abf813bc677e3b4d531d72ce040d785b72e9194cbe05742815f5ccaca790ebbf4d07
-352 1 243 \\xacce6897d1d3378f7a4b8f26f2e38b0df9ae1aac5b0b2659c56ff239872b215fccf502cf0a42fde9265128d9ca566d460bfb1eab8ddfe18a57f14e2e1be9b50e
-353 1 421 \\x54d32426d0e57276fa7df04c57362616189ce484d354d6627dc14c3973c172380a08bba78ca7e824342adddae68c5b57d0e2bc73ba91b20f163820bbfe302708
-354 1 418 \\x4682ab77b7be0052a2291cc7965f60cd0b8475761dc306a71a3e58f453d75771562fd9b4b2bf4d1406b77d57651c6dce8b8841da2d06b9819be32695b0cc4204
-355 1 75 \\x76cd491f615602c626704c13267942b6bfe49a58d2116bae269e1f4613b710dcc70485a2a2461d1b9bcfeb14b09de793b19c9af795af4f8e91b26b98f74f010a
-356 1 376 \\x5556bdc7d70fa7a4a53969e00fd24983b799507857dc83b3f2d3a21f89ffa5159411ebf6efc175f215f976ca6d15efe5a2dd853ea7198546b7f706e962982d01
-357 1 276 \\x1eefaf9dfdc64d8b080863ee6912b716a9e1664b82e34c1645d35c4b923e70bfda644b0081e8503937c13341b0049f8635400040629023124f1d37dbaa06da0a
-358 1 18 \\xd1a6024f197c950cb3eba60a6857debb6df4ac0388b5f235c7c8172b966e495daa65b9791fbef1323e6f01252fffe5c29c9fbee1cb63c226a3d6b89ac5dbaf03
-359 1 156 \\xa399c611b9561ab3bbf337eb75099813976459cb1d1ad68e75b0ca4e81be9f91ea8b4529777a09aaeb2583d2ec33d40dc5c7ad0143bddacc98665c823ea88805
-360 1 176 \\x76aa056fdba3eb8c2244c8df7edfa2d7838bdf14134c3db30e0602236d363e59bceeda7d0df51346c36cf1aa59a2f906d8ba281314b7bf5ad48f104e3b06620c
-361 1 356 \\xfe8fc9d74a9323069af9b01d8e4c22f0ac7266b5ad2c204c2fe96485368db198174f36b43a461afd84d27fb9b777a5aa7e0d606174345c33827741deec2e8604
-362 1 377 \\x5a1a6d5fcbbad70379e0177306e3a65ea05fba24878bf58c7e73d9ec76d58af98475e5de6e7b5b88f4aff84d3a432025af22246de424e832d5eba534536ff40a
-363 1 112 \\xc2071b9ba51b790381a04425e571dca9098d1122aa74fb2438720e76267dfb9d66fd50fafe4b4a20e93df92a0cfea277fad1415290270e6619df0223ed964106
-364 1 125 \\x3c3fe29a376a874401260b14b846afc56a70b15526a2b43177f74728648ce142cf4d762d826705c5953e86cb59f01b8c49e84ae67201789b4e70deb65a0ce10f
-365 1 171 \\x52f94a87b82f20efa96aa9f9b9e6b90a6d4988ea7d7bc136bef83751e49d894b15f19615499c7926c4ade9279efc0968dde0f908ada304dc2eaf3f3e6ef3a304
-366 1 354 \\x5073eabd85c5f10fc0e58bea4179fe7be3ee990844e08e20b6b4eeb073b85abaaa64e3f0ab95f72638ffff2f800cd9041d3f40394ae2a5934cdc68ba655c8c02
-367 1 166 \\xae82c0f8719a15012c8c1ff633e361ceb11d928a953b26dc6c82b00011f66acb1c6ad84bd11fccfa7c2c34e27effbf7761ce3babf364f4c6f6707a045804e302
-368 1 233 \\x64546cecfa625bb8b27a4ef53e111f0df3c4ebf2e91af65dd392a7366060d271fe1b9375f5d7a25cace8f0f0afa6a5a9040d0483791189f5f9359f84f7b6bf0b
-369 1 188 \\x82676a080fe25f1d060fd929a09b274108cd89d6263b32f350ca2c5508bb03432263ed97bc64dd7accf266732a18af371f3197ddf1156750ab08a4661338f600
-370 1 374 \\x6320814917a9329ac04762d04f6be62f639b614eea55f184992b4db804e53610a8157626141e27d433fe6393e04e1f405fdec08ed2f42b5ddd98bb3dbb96f20f
-371 1 76 \\xe03051518637b2134909d16ad3eeb0bf773d3978dcdca540f1e67cdc23d9e32cc6554ec969a651d01384ae0871bb7e8f7575c4d920145ab11f1add0a8ec06801
-372 1 368 \\xc7542da51818d4aedac809c52921c7bccd8b07d60ae03ade605a46ecc40cd13d45e69e5509dd4cf633751e8c72aa0cd78f00ecbfd2b4e1d538ad31d4349b4d08
-373 1 208 \\x2cdb3e9af1f39efea8fea8287af11b3e675e5150efe71a9d4874d93fc97b0486442f7b1bfa780886224809581c85e5708a12eb6d534c15c14da60bf037488e0d
-374 1 262 \\xc82081269ab0d775e6e53bd6018a75c8000c701b5b9a2d7e313a232746c54beb2eb25cf59c46c05544252fa8ea14d42dabeaa6eb7c99ab7bdaae45b6074d2e04
-375 1 205 \\x69b26537779e42dcb1d683f3b5820ac469c3573cde0334d6f96bc72dafa2231b33d444cddc688fbaec7f22971b98aeb73c168e7ec340ff979c6033890413d702
-376 1 165 \\xc27b3e66db5ac8325936eda6aa2a535b37f1c2357ee7ebb77e74c58533050e65ccfe9f2d26695b0254c4b454d0be5f0a8813cb721c4c3129d4921d7fe404680d
-377 1 88 \\x5f8eb681dc928e500fb7000ab3faaf78acb6b89a4f5bfcb3ca511f8ae82bbc7a01987211c40a8e8f5fdb48a7d5894a9531449d8868f1b782f58e1ac18a1c9603
-378 1 350 \\x84d282997bab90695d3bc4e0eabda2542a6b2955e729cad77ed35c1616d3e8ea8867c6dab2626e616989162be764eb5b0f698799ac4e2c9aff2c01e835854601
-379 1 236 \\xb7da37056c2dc17d70352118ba26bd38d138388455728be85c06b5cbf8d556cc65b0ec54b7b441957eb9061ec61427ffafeb1e4671dfa872458b61df34aa3c04
-380 1 362 \\x1321fc879127b47ba70e7edfe24223de7fae5c1497c7afdcfca4689855f0938bce22c6df46dea6bf736fda736fd1d81fb5b872202cc71a263584907330486b00
-381 1 415 \\x3a75c012a488b369fff665f12fe600d53ade23048c783ed6761281a0b3280c129d1f731e16c33288150cbd1f1fae8abb51bf876affbef29bfa61728e2acd950d
-382 1 401 \\xf9be3a32790ac427b842f59e1363948bc1553add1edb65e2f2315413e787c4040dfa413d06776d66375021af16e13557d4bb1c8362f7d2a49a4651473649c403
-383 1 8 \\xf727b4313cf9118bbdb5cfe2038298cf91d25afc52ff9d31d1b45c235ef8dd888a277eda4af2efebe139f88c0265682fec725973b51aec392ad3fdcb4a41f10f
-384 1 363 \\x6437ffe2c811c97fb05436e0223cbbae91fef7b9caf93bf8a9aff597d9c5a20589e7715dcae2c1e0b4b83c8026b411c59d3bc314e1c2171ff05dfb53b1c52500
-385 1 392 \\xbe93922b8b09cd9137aec5c6c3bfa60aa78975dcfeb2fbd7348cdb8217dd7e0572550aab272fe5cd8807abcc8d85526b73f8d0d28f8327cf4265124b240e1200
-386 1 210 \\xeecd51e92d7a844e7fdbf863447872cb6487b54c40a57c3fbf353c43bed7962f8aa6a7a3eae0635b173ece5a0744d7fca436d5d0143502dec0a4e76ab7f56e09
-387 1 103 \\x020b380c1077b2dcda132ad73b2a9dcdd4084e167c35ed62c635a97b640dbed5a9a9176721b8a16893a1dcbf6cb135d9688794d9422d03376529d7eb671ae90e
-388 1 252 \\x7f79de461da5d7a694063db2713be42daae204b2d361f893c74b1de7d2f649214dea37614f7875d3cd6859dadeb73f8c48950ead5308aed1298fc4730f7f2302
-389 1 323 \\x0d23dd986832386063a1fd178f68ce5fc638fd6bf0afae8127a858fee99a4bea1f02e32228fcbaa187fb7022660ce2a55f8e5407f8b3e785ab872a0949474205
-390 1 365 \\x98884ddfa92513b5b7e445a061b526cd905bfd36a80a0c77f57a9b5af7ba94d92c1161e87324496670ad744793e9661878a9a616ded2894c08106b270305d507
-391 1 386 \\x337f743ab5803ad7892ecc067503c819ac63d6049743b103f5cda89f25dc63a40106050215deac3d9ac4d7b94ce2cea5a89e5dccaf7f1ac6d167d82d751d6302
-392 1 336 \\x4ee6fe6e96834bd4728111517cecb4523097826733a06d87a19eeb9cf5acbfd9a024ad3611ac830c918dea0dcc1763bc6b7f1294f4c817731eb9e8217f428b0e
-393 1 371 \\xa0acd38812e641b16f919976a32afcb9c1d51294f0e878db516f299b0ec28f09a0886cc2027786c4bea215798a93af02622c07f1c48bc8f4360e2165799bdf00
-394 1 253 \\x6b8afc2aba70fdbc0ab56abe8f42941df83e5429f3973422472e6a82247c790c3895678a5051f24ea00664c441a717eb7562e849ac412990da150e0b7363b00f
-395 1 294 \\xc84186487c3bed848af33825d0e00d5e1e73f7154532003408cefcaa00ef43d964e39ef5527156eab178d68f659ab32036d5beedaab04445e775c10345c23a00
-396 1 282 \\x2907c94d30658cc8734e5671485fce7a461eebc33c47c08ec221ddd223f38f989826533a0a4341e7a796086ff323489f56873e7ae82e015b1a576b06ab5ff703
-397 1 218 \\x47ebb4475e91f4545ba84b8876d04cfaf8580b0ae33c7c856d65a4927fbd75023a440d72ba75d8dfbf6a51546a38ea88e3642cbf9856ce4a9a9bd8691c08cb00
-398 1 232 \\x924d2c23ff93042acbaf36d19f6e3f8b52e4e17eced4067168743b4b27e445a8dd2cb058b79dd68d1a0061048237872fd726bbb99b9d2351db4e05f4a1dca901
-399 1 137 \\x9b6ff53aab32135e3af4c7b2c9a593159aca02bdbe53dc5ccd6ff182692c26d0be1313a28fa2c970b657aab5a54c4ae1779f058342b9720f208bd27ed1be2f0a
-400 1 275 \\x5e462de7d15c1b3657a6c6d88c0782fe1531aef60450a9b91fc7b0a5c8acb4b3da3cca10505222519f288b6398cd180c34f68aaa92430610bef18fffe0560202
-401 1 35 \\xd526573aeb9437620d1ace60fa9a7809eae1e03d1d311121ae5cf118f398deb8f40e81a849167a26d26a10968e09746ef66c7ee3cf5e30bcbef30b8438e9630f
-402 1 278 \\xc898cfeb57a6666b28b2c2fcbc91c1785add7c408d682a7eabba5284abbd9675c68f0ac772c67444898cfff4b728f91e8acc45888c6a4d96cac9debdf6462201
-403 1 345 \\xd38c851b38f568912603b280d40a5869c5b25cbeee1901a0dc26eba7dc80d6607cc5c8bb37e66d77bb256da7b7a78c4a0fcb529b8ffc0834c77b0a9f6fe6a90f
-404 1 186 \\x08acc4d7cca2f58d38abb3cc096992d7aac1b11da1b129da05b6380848d123954c027c77eff551c55e01d354306dd4ea30ed50de86bb64bfdde00d5c54f58505
-405 1 135 \\x5c53ee8a8128d719ea5a0acd61d3093102e15de394f165b4f7d8b222924340e20596670f7ea41fc1ba9ec58b235a32f021331110667d9a647e969f1aee1a3509
-406 1 290 \\xa79681860db2f319f18197e84419f7e6bb44595b2361db89ba8a2b01424604e202a13d9d3bd33b43bbfa578d65d7a567671f1489e9569e6cf28ebf7683ca9403
-407 1 217 \\xe41ad91f3e25566ac5ecc4c6e51ecb1aafd7042065aa3989274dd78a508d530013ef47d51bbc1806da5ea5b62d7d69c254d87784791ac6ee314af91d335b1b02
-408 1 28 \\xe3615bac4f2cfabd11833182642d1e769a1d9365ce635cae03d3ea23ff6613a979f141409fa0c8f8ebb1384bfb07cfe9d185fa36a042b52c09c6b736a226320e
-409 1 118 \\xc9be4e1df3c639ff1281bf54778734f2bfb2999408ae88a2d0738c7e83dd2e0254e7ee5688a237f3930fbfdfbd4f233d5fa4d365b974d51528b8e5a74180620a
-410 1 110 \\x10211315ed7cdc18d2af6bcf81e9af687b3621ca16a02baed3a2a426c20cdd909616ac964fcd92254997fc4be4aa6957db0291ee308331ece6e3d045c400240f
-411 1 98 \\xb33779b9b0fd044ef8bb76d4ad70cb26d5d0dc95a85bf363f5c5ad5f3284809bef86cf9dde1574f4fbcf9d5dc6beb28830497b47edbb4c733b3a8dc2f61b3409
-412 1 154 \\x29472a3f4a9cd993587162a4982c69c671ee5e179c20e1499fb5462b3831b06ae6aef0577cb40198dd972deedf9e84ead798482fe0ce30f24e3ec165c3ee4b0c
-413 1 230 \\x17d239642f020492a48b2fafdd0e3e36b46bc01ae3169ac882c256bc31f9002dc1382e4ea6049779da442f15d604cd462f177873f2d74aad6b2f780ffbd59b08
-414 1 326 \\x44d353a23b1e66cd86c1a8a1b5c1ece11971b973378e8b436fece8a5c31df6f1952c45d5a954a96d2e5964eeafd97b53ed4b934c3572fa3e51380562e78ea90f
-415 1 340 \\x603988d03c944e1c7f50404a120fb484afa5ace6fb068ac8a8647f927cf9a80f74ae8370b8fe92f1acf6e2afb2a1ddef3a816434b0f31f9eac8681325bea0901
-416 1 168 \\xc0c1dace2b05ba6844ec8988208c46997e8f092e9fa87a487e51836425e236b5637fe4df7e3d2f14cf4fee20aa9417a2ca281dcb43ac9d773ac1968f620a3c0f
-417 1 358 \\xc1ce2d21e27d7ea78e1b680322992efaa9952a8d73064676d07924304b7a343035b5e7ea4df51576307c3c7c864ab1e1ab3d544dd67c08c3697be042975c5705
-418 1 393 \\x2ac2673b5e5a31f2e947e2b3aa267a2e886f6d91ae826a97b1f271a0240ff3d3eae29cea6f7a1281c06da0c1319e4f19112bc5e1e40538c2d540cbffb4321e02
-419 1 381 \\x52afd9026f8ea012d32577b5143187485fc78151b085ec236861d141b136fddd8652319f4ff5baf6d0bee6e93f47a215822416b3a55548c487205410c4066e04
-420 1 199 \\xa7d180a92eb2c1455ca9f5cd29341205ae935d7819220a1f918ead914851e719a4e0e57a1cba94ad07c2a5ecd3c2bdfeec744c8103fa6cde1ee505624744b509
-421 1 235 \\x71686f8c035ff30427b582c0e8bad61ad5e072317338c68dd89ba928a35f77e50f3c7be6974d578ce9ce5398988a77e85da0a695887a2ae7122af8101cfe5609
-422 1 145 \\xcfc46d5b29e56f1e3d0dd3c13f84bb85f6e4bd4c2c22967a68725386eac39b17def2e3de93aea47f282383c3d565aa958508faad11107eaa62b85d5de8b0650d
-423 1 45 \\x8fe0f1ead115700b67ed3de3f9285eb66803bb1791abd0212ce20f5ea6ca2774085a34fe6f13fc267a237b88730023aa03bf39f69a022c0419a88bbadb5f200a
-424 1 144 \\x03240b5ea3a5af710adc27bb6c4ec1a300863022e965ab4d8fc24cb9fbb4f1317117e151e046f5f6a969d2ef52ba6823a3e6d8396966d14cad507623e2969301
-\.
-
-
---
--- Data for Name: auditor_denomination_pending; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_denomination_pending (denom_pub_hash, denom_balance_val, denom_balance_frac, denom_loss_val, denom_loss_frac, num_issued, denom_risk_val, denom_risk_frac, recoup_loss_val, recoup_loss_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_exchange_signkeys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_exchange_signkeys (master_pub, ep_start, ep_expire, ep_end, exchange_pub, master_sig) FROM stdin;
-\\xaf96eb56a9f9586fce845e9a7d730d4b96e369c2f3822ce94684a2bb123bbb3d 1651516319000000 1658773919000000 1661193119000000 \\x47ad02a8c69cd47f05a8dd35e227ff48bb5129bcb55b44a4d8626335492424dd \\x5c46764aef393066362dc49bbaa54d15ce826c6929709cf64f3061f1526d2df5f8b895379451ef9e678bc5213e4aea5900dd69d1ec66ab21aabccaa1b49ffa0b
-\.
-
-
---
--- Data for Name: auditor_exchanges; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_exchanges (master_pub, exchange_url) FROM stdin;
-\\xaf96eb56a9f9586fce845e9a7d730d4b96e369c2f3822ce94684a2bb123bbb3d http://localhost:8081/
-\.
-
-
---
--- Data for Name: auditor_historic_denomination_revenue; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_historic_denomination_revenue (master_pub, denom_pub_hash, revenue_timestamp, revenue_balance_val, revenue_balance_frac, loss_balance_val, loss_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_historic_reserve_summary; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_historic_reserve_summary (master_pub, start_date, end_date, reserve_profits_val, reserve_profits_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_predicted_result; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_predicted_result (master_pub, balance_val, balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_aggregation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_aggregation (master_pub, last_wire_out_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_coin; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_coin (master_pub, last_withdraw_serial_id, last_deposit_serial_id, last_melt_serial_id, last_refund_serial_id, last_recoup_serial_id, last_recoup_refresh_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_deposit_confirmation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_deposit_confirmation (master_pub, last_deposit_confirmation_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_reserve; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_reserve (master_pub, last_reserve_in_serial_id, last_reserve_out_serial_id, last_reserve_recoup_serial_id, last_reserve_close_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_reserve_balance; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_reserve_balance (master_pub, reserve_balance_val, reserve_balance_frac, withdraw_fee_balance_val, withdraw_fee_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_reserves (reserve_pub, master_pub, reserve_balance_val, reserve_balance_frac, withdraw_fee_balance_val, withdraw_fee_balance_frac, expiration_date, auditor_reserves_rowid, origin_account) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_wire_fee_balance; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_wire_fee_balance (master_pub, wire_fee_balance_val, wire_fee_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditors; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditors (auditor_uuid, auditor_pub, auditor_name, auditor_url, is_active, last_change) FROM stdin;
-1 \\x08bbda01b75f4378a0e2c7b7bf1dc7bad8429a7e9063a22ca798f4f682df38ac TESTKUDOS Auditor http://localhost:8083/ t 1651516325000000
-\.
-
-
---
--- Data for Name: auth_group; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_group (id, name) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_group_permissions; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_group_permissions (id, group_id, permission_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_permission; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_permission (id, name, content_type_id, codename) FROM stdin;
-1 Can add permission 1 add_permission
-2 Can change permission 1 change_permission
-3 Can delete permission 1 delete_permission
-4 Can view permission 1 view_permission
-5 Can add group 2 add_group
-6 Can change group 2 change_group
-7 Can delete group 2 delete_group
-8 Can view group 2 view_group
-9 Can add user 3 add_user
-10 Can change user 3 change_user
-11 Can delete user 3 delete_user
-12 Can view user 3 view_user
-13 Can add content type 4 add_contenttype
-14 Can change content type 4 change_contenttype
-15 Can delete content type 4 delete_contenttype
-16 Can view content type 4 view_contenttype
-17 Can add session 5 add_session
-18 Can change session 5 change_session
-19 Can delete session 5 delete_session
-20 Can view session 5 view_session
-21 Can add bank account 6 add_bankaccount
-22 Can change bank account 6 change_bankaccount
-23 Can delete bank account 6 delete_bankaccount
-24 Can view bank account 6 view_bankaccount
-25 Can add taler withdraw operation 7 add_talerwithdrawoperation
-26 Can change taler withdraw operation 7 change_talerwithdrawoperation
-27 Can delete taler withdraw operation 7 delete_talerwithdrawoperation
-28 Can view taler withdraw operation 7 view_talerwithdrawoperation
-29 Can add bank transaction 8 add_banktransaction
-30 Can change bank transaction 8 change_banktransaction
-31 Can delete bank transaction 8 delete_banktransaction
-32 Can view bank transaction 8 view_banktransaction
-\.
-
-
---
--- Data for Name: auth_user; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user (id, password, last_login, is_superuser, username, first_name, last_name, email, is_staff, is_active, date_joined) FROM stdin;
-1 pbkdf2_sha256$260000$X4khWuKsdDGMKXOJj87oov$8lrJ0v4joqfsaHJ0ormGQCoJe884nzdGAouUG0BLErk= \N f Bank f t 2022-05-02 20:32:00.09996+02
-3 pbkdf2_sha256$260000$yDlM8eqo85YoQBr6RSO8fO$Dgv6wRw2b73KGFUQ2agQan4OlD6IInsBxAEbuLztDeU= \N f blog f t 2022-05-02 20:32:00.286589+02
-4 pbkdf2_sha256$260000$atelB5gPkE2zbXAYExflsv$6x3NnFvXWXQKvjOXmyWPqfiT71oPfXEQiz+ynDXqHMU= \N f Tor f t 2022-05-02 20:32:00.379814+02
-5 pbkdf2_sha256$260000$O05raDydITjc19XegCDFrh$0iKnlWkV54jkmPMJqfSr3Ob4TVffFWNWPLAXOIIrrwc= \N f GNUnet f t 2022-05-02 20:32:00.472378+02
-6 pbkdf2_sha256$260000$lavhq0e0qGBgxBjNBSmhAi$0Qdn6gOTTAxDXTFPQRYcTYJ6sbW8dw7lIskGOyjdof0= \N f Taler f t 2022-05-02 20:32:00.567669+02
-7 pbkdf2_sha256$260000$1ZvbmltsJ0KHcBFJcrwl0s$Sqzcj6OD8wUvNFpcbBKex/VaiCv9fvL199rg+PA+FgM= \N f FSF f t 2022-05-02 20:32:00.663395+02
-8 pbkdf2_sha256$260000$waX1B2A8OY6wZNmBrNQfFR$R20xkYnSHjXnNyoeCOMLpI8q0BowVVGmkIM3kPbTtsA= \N f Tutorial f t 2022-05-02 20:32:00.758441+02
-9 pbkdf2_sha256$260000$3okuCkBjB1sJEWqRL8vR5f$PRUCqXKt0hUTME4exnI0awzV6ocJdkcOa9aDAnQvZzc= \N f Survey f t 2022-05-02 20:32:00.854477+02
-10 pbkdf2_sha256$260000$PgnaA9aCdWAQIRlxbeIKaS$uFOm7Hdv3ExjBDZwvHHjF6j6H9bXzMVH44RtZn+he9k= \N f 42 f t 2022-05-02 20:32:01.313577+02
-11 pbkdf2_sha256$260000$xcJ7Nf2NTjyo8cvfu1pxle$Y8o3cZNz/ir1KcL76iIQb9JnzLTzHLGfEm0LW4XBKgg= \N f 43 f t 2022-05-02 20:32:01.759163+02
-2 pbkdf2_sha256$260000$RaI674iv8moqcyfjA2ieml$jJ3kpJJV5AQWZagaBncDcm+lSSMn45Qlqs1BiRTnmIQ= \N f Exchange f t 2022-05-02 20:32:00.194032+02
-12 pbkdf2_sha256$260000$mc7zuT8ylQOTxJDQZVy4jG$1yXsSi4LPHsvnDWnVjMJH7T5XihECrGaN9xumv8IF2o= \N f testuser-pc10aumb f t 2022-05-02 20:32:08.774084+02
-13 pbkdf2_sha256$260000$0NgYsHjVNy7HTYQ99hLKzl$zCRJ/klPX8b8ZaqFVAUhB8757MSUNzgQry+wMwQkthI= \N f testuser-5saj9erp f t 2022-05-02 20:32:18.94757+02
-\.
-
-
---
--- Data for Name: auth_user_groups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user_groups (id, user_id, group_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_user_user_permissions; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user_user_permissions (id, user_id, permission_id) FROM stdin;
-\.
-
-
---
--- Data for Name: close_requests_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.close_requests_default (reserve_pub, close_timestamp, reserve_sig, close_val, close_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: contracts_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.contracts_default (contract_serial_id, purse_pub, pub_ckey, contract_sig, e_contract, purse_expiration) FROM stdin;
-\.
-
-
---
--- Data for Name: cs_nonce_locks_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.cs_nonce_locks_default (cs_nonce_lock_serial_id, nonce, op_hash, max_denomination_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: denomination_revocations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.denomination_revocations (denom_revocations_serial_id, denominations_serial, master_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: denominations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.denominations (denominations_serial, denom_pub_hash, denom_type, age_mask, denom_pub, master_sig, valid_from, expire_withdraw, expire_deposit, expire_legal, coin_val, coin_frac, fee_withdraw_val, fee_withdraw_frac, fee_deposit_val, fee_deposit_frac, fee_refresh_val, fee_refresh_frac, fee_refund_val, fee_refund_frac) FROM stdin;
-1 \\x004823b7ac655bfca9722e1cd6bfcf9a1324ad9ab0d1a95482f26c0de77b5eab0e92b61f3a10614d01636e79906e5bd52c4e83f274443f2a77c1fcd092e107b2 1 0 \\x000000010000000000800003d818a453b0b7b2b30c0e1216a1c9571ce064e88ca3cf858dc0816fdfa578de1ec8285bd0455b7de03860a7e99a2b256ffd5d86113609171a95235c3d0a8dd4e2792baefc9788c33a0c8f5123905178d77ad82877b697fd0d3046cdb0df511052a61f88204c4daa1ea01ce1e717b311c9f8187be7218dd20183a5f7ec54997f1f010001 \\xd090cfd97a66a2f6a6d6e31bbd457405d84c7214389dd88f6908bf9382e0f0eff1078458595fb15ef3b98298e4cf4d4569ee80ec7f2619bd5ba2d5410720bf02 1663001819000000 1663606619000000 1726678619000000 1821286619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-2 \\x01f891516850be0be09bea62a6c63622721b271e2d369c8b42da2f23a6b8797bd0b1c45a07d2bf7dfa399d75afa050eafb78a1180c0b7735b1b0621810d5fbc2 1 0 \\x000000010000000000800003a39b44a3614eebb27ea7d80729d90252cfd512c2b803e979cadabc078b99b5869946ecc97364edefb0b7fee8307ab59219ba0233ddc3d8a4721336112b7cb094418b42045464ba38611345d3dfabbb227d914ecb42f45aa4720368c7e6e3e5bd77deec98633dd644d41f15766b489cb115122cf36ce4af451a64364948d3b8c7010001 \\x0017ee3d25983a6bf3868b095cc927067e293735f27d50ae62840a8ad02d69730a39db1e51a5eb08f3f9b6b6aae6faa4e9186f0647fed644d55848977592d003 1675091819000000 1675696619000000 1738768619000000 1833376619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-3 \\x018c72ffee6c92e2f14ebf13d19dc6921fc190c54c30638da8e80a9d4aa44f76b5e6ac26b7f1e33991f53444ac4f2fdc3ebe576954e77ea622ab7ebd69941c0b 1 0 \\x000000010000000000800003c01c77224364cc489a2a1efb84459fc61dda317736d1e2fa524be5ddee7977573d672f8080e345ada170d4545a62af50ef7d541bb8a1fac57d2dcfcd6251a08c0090624e9369fb23a4dc03a73f7ad3b22c4acc372b60d8d86a4fa2e89635dc42bebd4cd66a36ae28ea1a9dffad65115adc316adae667f6dd90a46af84ed66b4f010001 \\xbb301ade3f7497993cb0a54127d22e8ea33d20ca384c6f6cac3fbd8ff9b4bc7221a92c8b11c482df2ca7604205dbec185de37ca4737304368a0016309066e70d 1658770319000000 1659375119000000 1722447119000000 1817055119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-4 \\x03d82e51052113855ed4c333ffa76464f5292d0e43d3cb7c879a13c8c98dcc95f58a0df7f26c83413f7e79e92c0e070f6cd0e3e721a421a6a840eec5b7d1364e 1 0 \\x000000010000000000800003eef28baeaf15553ca3120c9f5e21e133eb1e68123b75e3e068843f17436491a3f1ab369009f77ceeaa0b71df4c4d3a95281e10399e0f95e154b66aac9e606876f49d7cee39ebcf449fa8813e516b528aa99f842fa47cff4673be1b714510dda11fb99ddc1a97cd2611ce4445931941943446de42d3c100be3eb63c036ab4988b010001 \\x1720dbb804304347709d998ffe11d2e41bed2fb38338c003b11a11ff5797c593258d76d63c1f6a611f32c87c4c46daab822ff24ee37606cd745bd6a106dccf04 1670255819000000 1670860619000000 1733932619000000 1828540619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-5 \\x040cd1f86e9450306c3a16a363a387c0df96c6b92b7808de21e5c688c1b52cf1c6175e62c310e8c8de78a839fc0369fa595d12cc8333a41f293c6e71466e24c7 1 0 \\x000000010000000000800003bfbafbd445afdb6b10d5d03d481cd833ce569ba8e101d7ce5f5a51c47e195b4079184c386c6566b7931a3c9219c66269b854abe5de6225cceb7afab76a3073b5bbdfa1804616fb61af7d5caa20e5c06f7d09461d9cf367100dcccae7caba0ea119e89f564348461745c6e21d51dc13beec32a6fdd9fc28d955c0eb7ef5c80887010001 \\x69acf048c2c976a45b88823601fa5aa36524a079071cf2d6ea886330cb23a2894ca68118051796ecdb876b372e226021ea47efecb8f3dd44d68cd499e9279705 1675091819000000 1675696619000000 1738768619000000 1833376619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-6 \\x072cab33895bf7f2851c1a1e46ef07f4c141b2fa4c9bf81efcd3bbf50e89f207d211dc745fab2c420dc215461439f04ba84082ce42c6d65aa0f86277d85739f3 1 0 \\x000000010000000000800003c60c0c7ec55108a6b980c5b6e6df17adb40b368dd8b71936634a15aadbd7fe31f7aa7a7fc1838a7a70068f1f48d36320b9cb75afeffa1042ca10f3f73c817a7000308914cb0a866bd9d3a865118f4f78c776b68175445771f58970914342906f5e152843d28f30ed8d4c16a6cd880bd52d4db9be2630ec34dfca54f556f3c387010001 \\x10634c949cc9e419e2651699147a03e1b48d9450f76c760a78b8c632bb883303398392c8a2b2d3d8b12f4cbc0eb60ada12cea71b7a0cdc5dc16e970ad30d580e 1670255819000000 1670860619000000 1733932619000000 1828540619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-7 \\x0a94851a92215843379611fc49dcadd0df3c75e8b8cc521a80d3805aa631b0343a53bc08e90c7083b3db39172f7776f81f50252eeed5dad2547f3a6d20eabd45 1 0 \\x000000010000000000800003b9bf2bc74a0a8d7f4b72064613394dbb8e37ee1d859471f6921bc4b703ef5b5f4342c46cd200348240b328b7c27fd2b42421f2395431713b93c2a6b162f42c73ff4bfc8a9fc0e1ed6ee3403dbd024afd1a6dbf29cd9d8b2cbb417b8d67a9a52a0482eaadd6b94e516d60053668df0653a3b547f86fc225485492f93ced448dcd010001 \\x80572df928cdfe3cbf4f767546ba39d11abcf4a3544d956698875999e0b0ff73f6a007319228bd474ec283d9ce21d6b3225e7f2955db4a3499f9c5c96984ec01 1673278319000000 1673883119000000 1736955119000000 1831563119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-8 \\x0c54269ea65e4680fb0edff83d04c9424d8c137f6264c155777d4d26062ea63a6f4936286d8431a2e2a91bc2726cab1762893ed8e1dbabe24e4d26d5d8a2a3e2 1 0 \\x000000010000000000800003e58dac4647563ec07313978705d0121122d802d157c897a21558dfc1fa72df0579b3e3e2454590a51093b82c1ebe440aa2ebb523390342b17a353564b1b240f6194b97c1531f8b1e680dd9207074358ac4aca84f3783385b8e4ac12edeab4ee5ae676d70b46c51cf7e11c8ecd8608e47f0202b1c9c1ae673611e38b86d5720df010001 \\xfcac228ba0b0dff093cbb5b65b09cf537f8b5c16c466f5b51c05b57043c79579a92ba9a646981d15caeb5b2fc71d85132ee9541fe57117570eb352f7d9df090c 1654538819000000 1655143619000000 1718215619000000 1812823619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-9 \\x0d2c072e17c652b3bc30df5520b7dc1444079b21e5c3be4d89a58604eda4c83e02b3b8f1c0f198b3c8ffd131146ec7bd53cae16972fd8e34744b99591feb4299 1 0 \\x000000010000000000800003bc5ba49dff58c4d5c39ceac1ead68c225f5b438a8f8d83a873f4da847b15fcb52ce74c1232f9888788e6659b375147a02561e40be962373f5e80f2d28a8743622b45c65556e704398aa4af9d972051431697187c83bb03c5ddfd5e6a3c1684f79947bc38a725be724e1b0c888c4eab4a732ef6f6a6030000db3167dd527d93a1010001 \\xc77dc4984d625cd369210aff2b4f37a7e3395b7c018bf89c0b3c2f8ea28782a4fbc905af72a1f7b5c039c9de1fef8c56a2f78387c4b04d12ddfa07bc37cc2e0a 1682950319000000 1683555119000000 1746627119000000 1841235119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-10 \\x12a085b645a1663a800e529e841d3593424f6e02bf1f06bc35daecfa566f1652c7df2bcbe93eccd8655f4b8737dc75f6ede019d4364a0e06fa311718556f9fe1 1 0 \\x000000010000000000800003c8fc5adc28ef035f510d5f5dceeeb3f8159e662e41b7c48c4ac198de3f8daca6cf0c5a7172a6c01464b570cf20b525de74c7f597440c7d73f70e20662b6ef386fb35fbce3c99b4657a70c500f4c140f8917c85f216a5f462997e25941cd132c01d1b4913385e9a7e2898050e2459ff4a7d4327f13924abdf3838c4b795de272d010001 \\xa2bd3980a26f2c22bd181e9599e31cb926b6d683f6f93f9c9ab6491b8f2377de189acedb7ff7c4ab5351cfea5648fd949b4e5c71757c8de9b5101807ac7fc909 1660583819000000 1661188619000000 1724260619000000 1818868619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-11 \\x139467b8d05eee7cbd2593e544291b8636e665562e8583f519f37ca56a7764aa04185d8d50bea2a12a49998a7677822d3d81735e08728fcf5c129da15938d137 1 0 \\x000000010000000000800003ed7f83a04432ca029e98854a7d8045fa7c5bc64eb616a2091d9d0c6c311170501524f479178c15dcb2c25507af8f40398cd3ac08573844c165623e50d81432b1ade88e8a5bafecb79b1ef9803382e8ed12f4860a1cd9282395a9794b2c90758a3075fa6922a4af5b1c388695f6296a4a644265d47e6c54d4406d74d7adac613b010001 \\xb762edbfa80ca0b689438437d496a484df56211ea66702c6461e6f9ab06ccf3a00156b5179b93eaebf3532b8fc2ce04518bf7c97d962c86c999a270541810801 1659374819000000 1659979619000000 1723051619000000 1817659619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-12 \\x1488089355ba829865a2ede38b492fd01a9c829f5b434cab8996a873bc2f9f7095e6529d3d56e856e30bd9af38ec889aea1fcefc8d72caf9f9afcf19c0dbf9e8 1 0 \\x000000010000000000800003bafd97f55da5ec11f054e9bee564253c5cd2a0a7b184cbb97db2f683396c425284c5c53698bb39dea5d96b85da0abad5d5ed18a668ab07403de73389448e3ae9af8758be34e47b614b4d81981469483d4b8419e710fbcb254ebababa3b5b3d0a0676bb59f6c54f3067fd766b367425dd79a88d9838112fc6416941bff04bfa1d010001 \\x30c40b7cd6c59390be236a19db378ed567fbe0ac44a84e24bbc73a3b4359cda9770fb750247dd283f01a32f013e2ab36a8777ded5a6c1781c8dca08f20066808 1669651319000000 1670256119000000 1733328119000000 1827936119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-13 \\x147454ab30248641c6de454a3c8c69709155e595768933dffa77f0970c667dd13f60b400d42773713cb34cf2740dc5c0c7d0b9ea7f5c83c4a583a16ab6f3c667 1 0 \\x000000010000000000800003c0594cb894cf21388cdeae77a4350d497f50e8c78ad96aa183563971f2a6afab37d4669532312b873a699ec057738c5761c18d3bd38d5b06fd1aca670f5a0d2bdd2f3b229970d1c64f9465a96e6b6e66f2a1d973382dd3da2b91aa4a661e617c31ebf6fc920fbb4fb829e8827beb1aba26c36e51beae36fa200403063813d833010001 \\x3d7586085b25db703b1d11a33d4d7b8ed3cdbcea03f17fd1ae4146d6b25c1e9ff5ead609bb89dd00895af1ca4ef1ae2aa50da4f13d73a22790704848e509640e 1657561319000000 1658166119000000 1721238119000000 1815846119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-14 \\x14ac04e9bcc769c4eff986272a99eadd2ed64ec784bd0649119586a0559ba7b666b099ba8d7f45f8cfbc197d183cad2d13fee3af460756c6c10b7566921c937a 1 0 \\x000000010000000000800003e2700d32474c9aeef7e72e9ad0ec82c46f6cf31fffe28d1b59d5eac0353cfd73624dca4cbb3fdc69be98be345d78080a92b487b52c9682e8068171599db308836648700fb859cac9cf75c11a6035d9cbd5f88c774b831f54010721926aea1a617c6b88aa55a3cb25f936d260ff614d7181f7c0488feb0c68787c8d5ce984eccb010001 \\x335d00e6f49fee9c323d1815352f2c8278c569706d370b6eb313465eacac99b830b6ed330239eb0ac40bcf4eaa158e41e2ec833c801c75acc5a4fd75768c670e 1666628819000000 1667233619000000 1730305619000000 1824913619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-15 \\x15e091117f1aecf679e80a1134662fccecf821f0b7a2c5f8b46ad0ffd3bbf50d53b54dc7212878540105c0081fa1b3f84ed2ed6698629408a316dc9f6e012399 1 0 \\x000000010000000000800003a6ad13028ed47096f7b22454d09269a2b19c62baba93f2c3786f6816e95e2c268fd992bc1b0954bb29f1bf4d7b522c7b31bda2a45f19078f1de6fd8b0af2fc22c2e3ca36bc7538c4fc04a26b8f96a341be2f4735c1dff4a6dc93bf76ec04cff0b3bdcc251d08c38c20495ed69ea0056f53888fd2a89b99155f95129d886142c5010001 \\xe1787c9cbc2f2a6abf416c08da9dc5a8956a37ec8953899661f4439a3407ca669de41f4b1f3363cb455b4614682aca1a9f6e1ee857659d4ebd42e1ff4e58f80e 1679323319000000 1679928119000000 1743000119000000 1837608119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-16 \\x1640feec0a7c084b617fc6d0b882ab21e49a99101ed91a70c63cd20b5345c0b6465c5e68211605a5965f8124095edfe3364ec2889ed545c270a06852368bad32 1 0 \\x000000010000000000800003c38db41b8915322801081c9a8cd0fd481185af21739b8d8ab5467f9ccc2697b5768201cf1ba79aefbfeb6c60751b35279cea31ddbad471711de954333c6640cd77928105c387e3cabebb1b2cf2269a3a8be8a88c7b5a57e087e4caf319476bb3386905d1150bb084902857517024336669df824aadc4562eb73a05c5b4593cd3010001 \\x28a0110db4f89dc058fc6a002257397300e81d7eb84b07c95ae07543c9113310030ec7a457a09a87464f510c1eff633565c92e5fb0a81836773923c88ac94e08 1675696319000000 1676301119000000 1739373119000000 1833981119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-17 \\x1930fe6a60cddbbffcb071847d0522420479d1789f3c09287351ae3915d616ff1481f2a369e915b2d943957c8b5932a34652afa5bbe7447278f61f70eb05d4a2 1 0 \\x000000010000000000800003cc8060c42f401c9946dc72fa91fdc666f832696a54a50a6c448fb8cdf2c9793a531bc01730e656abe91171f5a49068d65e52c5f42eb0c78f902012d263c0e3fd5eb724bedd1d29575d70c789db4966f8bed224dc798df3be80eb283b67315a7176b1efe46ffcd85ccffb33230b1f9612fd9545d2251afcac0368bf443dcab617010001 \\x5ca20babb56c11c0f02965a11c30e8f3077d7a4b468457d02ed2f075934207d409d38d2966ad28ba81916bdf922fae7f41f51326fd801df5149fa21a6d11bd00 1667837819000000 1668442619000000 1731514619000000 1826122619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-18 \\x1b6c2f2131eed89f9d348cd226db91be615060ca616732151debdc3900f45b6ff2d8a4aae362eb68340ad3c87d02a9809de89ae1f2fc8ebd629ff0f449658aed 1 0 \\x000000010000000000800003b699ed10e2411ac2c3650c6b6bc2e0ceff6f430c3b61287dc42291858f3343a23614c09645a9bbf480e8b7f75fbde74684130432d8f02beb650b79d889234eea40bb116429f45356b797b461c224f20ca05d4f0ddb8f5e9448f0a4a2c463ee9cd4145c3a7e28fa28736a0abba06e0d9a7b72c93e62bff17b6a1525f8d627e6db010001 \\x6e85df0a3e7a016fad4f90aa4d6bbdd60a74614e2cb12d30c41f7cf0a0d8b846758e71e59ca0e5446b50cc7b9666b2c370ba0b7052ad0af7367876bf95cb9b04 1656352319000000 1656957119000000 1720029119000000 1814637119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-19 \\x1e2842f4e8e09b3ff10d0bf1825aaf41c78b2f3de241a8c59d83be8e660523c1852e2d68b95046414944822530890061a965face8754bb82682b688eca947b68 1 0 \\x000000010000000000800003b5b0bf87da7b75be3b7976790d69cb49f8082722e8e11d4b09c53e52f50b51f41fac53895590951856c7882375f3a9fca46d2768221e47a1a2f01ffe77ffd7bc535867a806c4e5be287251270591d55c42be9d0531218ebfbb890f4c164fc3a12a64f085c74f8f4b77cb8ea23b38c2cb1737515db3c63726f8983ca7591ca597010001 \\x59e945362ddac5ffb27f4e1a3836e941c09ae15b6204d02622eee2aeadb9ba1c7fe5e4a260e67bb9637491ed9e2e643ac5b49343b43bd976af4e030bf5cf9e00 1663606319000000 1664211119000000 1727283119000000 1821891119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-20 \\x1ffca0cf308134d98a4043c2201188d73d8df6b7cd6284ab6c6cf6127ca87e051d68ca82bcbf9e6cf01000b5ff57dfcbe49b53e5525e89c06c9a99b2f161da27 1 0 \\x000000010000000000800003b967f95a79f3890ffa4738c38230e7664bf1ae8b89df84cfd4461a97f8e1660f857ae6a30e6b2d5137954bb47c48287d2df200be464d3eaa5ecdbe36fc68a1506d7157bef416a1a49459645925e9d3049f643b8f6a175af8a5cde97d9f93d9e5a8856f6d3170036020bfc38aace20e23d1e81269afda6875cf46630c89ab60db010001 \\x53d262425ae8d80bd7cc92afdd5f6ce2acd5d08385aa819c39acbb1ef609a49aba1cbd65842a3c26701471082e29ccd2a73bdef746b3c4c07f424f7d2845a104 1681136819000000 1681741619000000 1744813619000000 1839421619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-21 \\x1f987f8f71ecf31da2ac74f789b2baa0d448b9af4d048e7629b90da75be1397a74543fc8b0e0f4362fdcf1d35936ae0b0f287266235b4d2087da514e35467189 1 0 \\x000000010000000000800003b7588bdc9345b5da029124211f97504db3db5b5c706048364f5f98147cc36c85f7fd03449aa7b834c15eacbddc2656d565472c6a143ec406fd3549f79f79498d4d5ecd2cee7a845c7d5db1766a06ab1fa1b3e84c305d152f6d3bf02feff8a161ec7ddf53a0e10b7130c5ab94ab89cd2ae81eecaca9f1f9155698ffa01ba69b71010001 \\x96993f0d2fff901a6b07d228acbf01feca97d871145009a076162979f6976ced76211ffca3e8341dad544586ae49bc6c3ff8356141ec8a8aa774d2147b9a6909 1660583819000000 1661188619000000 1724260619000000 1818868619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-22 \\x25a4ecaa03253a7c1ba33f5318b89c93452ffb7718e4f90ded2ea39865c1ffe66071d0f5a0733de25c5acf09a2bfee4f78b7716f089a5ae55e904e2512798e2e 1 0 \\x000000010000000000800003c5e0ce4da151f2d74b26913fea4469af19436db0a8bb1b0598b7328f6313d082ee7243b8bcd22648bb90473ca417fe4b6ad20d35d3f5134d7c114e567f70bf8bcbe73f153cb915e4625d8b60d8adcd3d7a716c582a5d88f183d2ac259f8f237446797952c698d04939448fe9b1eba84d8f970631f269b2aa56340e49ad442e77010001 \\x2ff6b621fe98d0fccaf884ea58c82e2ae6fa2b105a803021b37da0c5c055db52067c2f1fe062f258455e52b221b24a366a7c4b953dd0220e390bd7adec8fe201 1663001819000000 1663606619000000 1726678619000000 1821286619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-23 \\x2eece63efe16c36ed0b7ab7588a793fe855b557f666662200be70b67d750d5f105e38ecb6f812fb3d525fb2ad52f6d9f71ead9ab576969d5ba5acee7958469d8 1 0 \\x000000010000000000800003bbb157bc54266396020ba13c371ba5bde3a9d4cecdc3a12d29773af42c0b1732f54dba34bbe4bab3278dcad5a12ed75db8cd11ac0ea1e2ff7168761854ef6b3d43b6df216dfb1a5a997d746a569dde3f9fce33c79cb95fa18201476ace90f3d8ab23b705d5b1c31f64d98dad80637c449b1ac56521b5795b90a00f7a2f9237e7010001 \\xbca63172f29277d8fb432ed4a022ed0335fa790f1e0abebb89b7f7f91304cd2cb5361e9d19f60de4e588ee6c4b5a505007cb214c67c7b1cc9fd32d6a08331e0c 1682345819000000 1682950619000000 1746022619000000 1840630619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-24 \\x2ecc0ab45b29452ba140b42735fde7739f596bbe58df341e4afae9faef6e9515f8751e909301c5f0882a64f96f17e0f9b570f0775caa0dbea1e7e9efbf9b88dc 1 0 \\x000000010000000000800003f031bc7b3457ffe1542f027ef9536c3941a9478aa068c9645cfa5f31b13519ee544b96cb90dfb30cb7dd280a8cc285f7877b5b2ee73d278edc0ec9548e2b7eb1d5299e7e977b9e71e54adc4e9ec90013f213b9478996c9ff0aa20af3ddc310ac96acda53d3ce9f353a7146d67010307ed543b50379299be56adf09d550ebd7f3010001 \\x18e6d1901daa255ed6bc4954a3e31edc9d5bc97b048ca4b8c2b766159a9ae1189e06cfdc0ce2d05ef29806ba1958915dc6d8c845fadbe6bdedd3913490f5fa03 1678114319000000 1678719119000000 1741791119000000 1836399119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-25 \\x2f040de31f779dde4d792e79a7b9c023f279005270e2aaa8c910d31293083fb73ecc5395c2dc3dc27e03bf0f49a3358d0c0770316a50dc869cc2712c5132c9f4 1 0 \\x000000010000000000800003a9c6ac9990c60847b70b22db767d47bffdfe720b6341dcb0440176ed4424aa16e7a1885817bc760b7482a24986494c59a3a0185f5c05384da69d9e8dd02ff4f9deb54dec32a725dac2d0de023e98cae0970d1a9e55d2c1dd30ac7bf643628b39ecd109499290e03dcc2d9c240585d05fb508a0b6f1ce0e8757d3ff8b897c0bb9010001 \\xdcc4cc77bffbc46569e0e805e71440b84b833b8bdcac0311d937424680e1210f795151ad9e5da27b73365a6d0531e5e37a0c4d68aad366d267810408f7355206 1661188319000000 1661793119000000 1724865119000000 1819473119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-26 \\x33106cc80d41dfa5aac07f19b560a9f06f2880312b85c7fffc0d4cc94a59229424253da8c1c7c735284c7a1b6384f165c475b6b84d057370a0fe12b6ab221681 1 0 \\x000000010000000000800003b80e6c4a4e9ceb792af40b600bce1e9a287f7a5ab363ad06f49725f49b30b8ba232424e5a2e2d57d2aae360d8aa3777400011cea2887096de279549d3ae43ad90146b55e9ec79e8a03db35b694d9a6a93563addc4b11d1a8bab42d2124b055bf7dea61491a77aaa8a5fd2e41c2749363749f6b7ee76055ae26614a42680136c7010001 \\x431d44b432d48b3ad4f593a0311a480f40c4f01cbcb3aa91d9d439162a0eb898e90c9d07ee0ff00d0510487ef520d63b565832e38582a984c57e2103618cca06 1679927819000000 1680532619000000 1743604619000000 1838212619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-27 \\x3b0ca1f6cc54d4ce08b2426b9b889a23b76ab38530344053a076572c56a52b47944c9db3aeae7a8d26befe59862a32a68205a278b54012aa26d0500ac5d8c388 1 0 \\x000000010000000000800003d8bc203730b2d6c5b17451ffe45f7a13deb083b5262a24f5cfcaa7fddc1a853c9b66cad13d3447c03edf04a6ac24f039de18dc303ba4d6dc4c06e93839accf7bcc52f251464ac0cc704746debff1b9b6cd9d9d59b0eeed6ea967004319ad5e88521788f325dc05c185d44fc89015d9b048c5cd73580c927442f5d9dde4a17521010001 \\x32da353922681a1b689e40709b9feec2a1fb2ce2aa83aafa661797638c2ce045d0d7f49b5f7d3659b33a32dc2073f0c53ff1579a6617a50a1d9483e4a1a2a702 1661188319000000 1661793119000000 1724865119000000 1819473119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-28 \\x3f507e44e018efc04cdbbdeebe015983fdadb65f56ac1bddd374c3099a05a9706142ecd17130d7bbf6c969dda4b4aa52e358dcb7d4fe34c9afc2d37d12522b6c 1 0 \\x000000010000000000800003adc9eb936e2f17238f1c7df701e88c42eba6ff53250e52d46e1a1a7deb0b546c852da4b39c2fb05c88dd363816d7c242984c1cc30668f43d74492381dce4224da541767cb06358d07b9fa6964077828d7932f918389240a40168f2f5bb045a952fc0113c899e1223cfa48606f2b77089d7109f54a431ff36ce3ec72bdc513a7f010001 \\xd9a5e6401b57e6bc29f76c09f8d2a28fc09aebfa88a474ea8406374565f1012df6df2a765780cbafbb44f5b7490961355046c82e7d714f8bd84277ff8320d905 1652725319000000 1653330119000000 1716402119000000 1811010119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-29 \\x40d4d453df07b4c9ec3f91df893b9cd5c0cec25729796d679b16fee727b6076ae459fc35ee8da43cb4060dce80ddb191822f83163700ca52b0593da340702e64 1 0 \\x000000010000000000800003b32d940740cd9ad66f8d3daa1fad0a119a8cd0b0f66ad8ee50513255840201868c3747e790a361da7289761fb89e0ac6f6a5a6315e61d2a605f3bcda65ccf58be219f38b2d15cd595334aa3dd0453d061d0d92bbef6cfebf8cff7c631ae1130eb07198c11f5490022357d2d1d85ddcecb804832211ca0c2e2a2d906e10e0f375010001 \\x75346144ea999759071bff6470262c678538b333d26359002889139569b947db1a9578932e7261130a4cfef44a97ba8b8f23354597c01006ce9ea536f75ef60c 1658770319000000 1659375119000000 1722447119000000 1817055119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-30 \\x4be0149a6f4fa6677379c4690ae2581928820749bd3640e536b03e3734d3a89d26850f0caed19c00463cf5a8e36cef92e98a206d7bbff02fe9b0ccfb80505fff 1 0 \\x000000010000000000800003be9145e87c24ba8d862e6e85c0b3bb73780adeb57c3f15d1686233543851d44837911819fb5d8a0cf6443f0c969df62c8f67ba16951b78ffeb2784b305d94dd47a9d1d15b8100b6ebd15e86a100baa370d2e248d8159da039e099b7634ec5cb184504f6b64345ec2bd05941257fa0fddf25f17991bcc54f645aecc62f8a8384d010001 \\x5aca5b0b249f398eca6e3419bdb1b13376e244364c32590668e8aed61513461470456e4d5b6a8ec626e5732c29e4fe428d2562dc704bfb5497a7b893704e330c 1678114319000000 1678719119000000 1741791119000000 1836399119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-31 \\x4dfcef9f52692529d65d5e80a921b1bf4306a90f33b97554b0d4853f1b2f4d94d672fd56cde9bc4ae0bc073b7d60af46514be4f6fdd7ed62db11dd43b36965a8 1 0 \\x000000010000000000800003c39df8cea7759c4733985a0e1f284e6f7e5b6f7fb05ab073804b2f21b6baaea74600aa2e2f6fb57d6a30c75fe45127fb1ac7c650810b4a68866535c1ffc8eb90e680c61192173dc2036b6a6138209baaf286e50796817f89ec7fe25fa6fc9375d517d03002618356da4270949901cb98136ffa1f0ebc9a2ab857dcf2c931751b010001 \\xbd264922c5cb6f6330b0d64f99ced161752ebe752e63856de3b9974413c7936d3d14581ba0c0d2ec70057b1ce0f6fbaa8c69472576fc8c8c3d1acd261fd0050b 1667233319000000 1667838119000000 1730910119000000 1825518119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-32 \\x5098399c947694ec39bf2c92cc60b1589d02d53b17dc883780637211efe1857cce7af4e5da4e00c95ad0c9a44eace031e1a1fa8c5bfefa92aac4259984fe9283 1 0 \\x00000001000000000080000395706c0242e380133762b1402da2590de488350c1c7cecde134a5c6c13b10193194a7baafbc729f1a9816a4102804f26c10a2a92c1c66957cb893a4b9db429040c64bf8166e8f9c3d4dd3ef2e912d0cbc6669c86f978099b37c7cb0e6ab6d8370956de3a6f595359acae526fdb65aa491a727a3619fc4e887aa06d934b36571b010001 \\x1007ca7e0682e2f7c9e377b7488d38f2b552431f4a014e318f6275ada38cd88dbb2bba89e8db1b7625f7639494dbd25c864c0eea8ac612b64c78bc587c645b05 1679323319000000 1679928119000000 1743000119000000 1837608119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-33 \\x5190436110eadf7a948e4750353c864df19bd2b2b44095e9f271775b0d2a8e9d360e9610a94dd04a13fc20b66f1cc5e01bfea58902203b3373fa851106c684ff 1 0 \\x000000010000000000800003dc9939f141be6b12445b45e3792f24a77c80fc0aad27a3708353d8e9eae233f1be0d296284b151e4a453213f107ae9ee919f4f9114b930d09438b7fb55ee0f83e5898914eef6537154653e3c4489c67b458ef5479bce4fbf27937bf7578160e28ab5c2ed02c221e1897226e48ad02f74f30240504cb101b1fe03399b8f891fc5010001 \\xca36be6639509d883eee075fdaa4f8793b4dbe047460de61eb2d74d3414fcb44a25658f15157b2e7ce1d87891f47a3cb1136f22c0013b4d875567efe3a0fc403 1666628819000000 1667233619000000 1730305619000000 1824913619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-34 \\x552489b4c4042a57826c260e7c653dce9b29c8c2951c4fb416579e9cf2d955c11e6c7daa36c1ff536ed648eed40e6cd658d49f5f23e3424802315e158d29cf21 1 0 \\x000000010000000000800003d1af0a7d78293347514d2476e66e51a69ca9bc5b0269e81904c864d600aeee4577b7e4126d6f3b50bf288b684866672cac65eb0d5e844e8f0fc899c4d96661c6a75e0010121e08bc79c4696edd8dcf81fefb127353bd4ef1dfe30c230577d0ba497f22af9db4380c4959d005544951694bcdc9e8e1b49f6a96d171332e534a4d010001 \\x8bc8bbe2048b9b4ec03955fea2f5798ad9c3c816c7842e9736dfa8ef0c8ca38fedbac0473624c437c34e996112baec10dc0afc9c60752af634dc05ab3eb64608 1681741319000000 1682346119000000 1745418119000000 1840026119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-35 \\x59f05a655edf77b951a336b2b8cd5cc4422529286a4fb3a96a38801819b706474630874a3dd682eb6fadb445ec244b170dbcbfb0c2e7479e8047a605f6376c04 1 0 \\x000000010000000000800003c3a30aa7863d7f6da71e07e8ff9b769e5f16fa075a9910cd0a2a002f19c8ef47a1e5ee58c78988fe4eea3bcf92e250e04a3733c42a91a4b34db4114f3f550b5dc16a9d00771bee253ca68f6386d559310e44dfec40b897ecfd6bd5666467c263cee389f1414353b13de396d693fdbdd72da660579e7fafb587f815086f98de1b010001 \\x711edbc6cd50d09cbe3b7ea6382db50d51990512636f71a2560c2e1085874ec3b86f2b948a55c0cad6575b740ed9136bc2a795f9ecfd5211169688a0189f2805 1652725319000000 1653330119000000 1716402119000000 1811010119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-36 \\x594899550e4728f23eda3ffeba413107c554a10ef43bddee1438be1a7bb74ef966baf056b9e7c00c1c64151d2241522a0582836cd03734bfebc3700e9cbd3d47 1 0 \\x0000000100000000008000039e063adfaf447ffd5990dbbcaed2c0be619da54b1c6fa680ac1b94de073392f44353523362deba184645aa0a3e3061372fa03c3ad75a2ca50c3101851b5eb55fe3918fcb8121632a5b0344166c2e734d826c7d517830655579f9c763a2dd9c587f06ba3c01b7b23f8b7864bfcc3531b1327bf1f260b3f771b7406c597b4058e5010001 \\xec7c7d0aac0646b37e4683360275e2f219438f6652d5ad6dec1684a96b36aab689aec57b1755cec59bfd8b7e87742c4ff026b8203157aff9faaac7b490a8ff06 1664815319000000 1665420119000000 1728492119000000 1823100119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-37 \\x5f584ba5e01d67574b36676ba0533616fa48d6898ff276c1d43deea8f6784c54b6e78e4e7146946ef7ae45a1846865b6523ec4f6827ce3e8fb98aa725c975bed 1 0 \\x000000010000000000800003b23e51de4549d1ece86db303cde2991086fd5216c7627a655dc131b6660bddc9318db9ddf83664af3ceac81d5f6daf9426e0ac30173ada6f8fd68a219878c776c69833eacd3feaff885814d9835e67bb065b0b5c29fe1e049be922aee4ce482ca4086b7bfc91111ac6d9d44fe8a4c2655d7a5582110be1313467e2a101dd4ae9010001 \\xd506c0c594f6dd9c30b4c7198d2dc20b47827d1c738ca5437bbc4dbf9d3afd27f957592bb6e3a71a9ab9dfc5da432ad2e333c6761ccbb84e9154379d04473207 1656956819000000 1657561619000000 1720633619000000 1815241619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-38 \\x6368c3a09b5d85db6beec91fc0f88021b24f98de464e337c4887eb14b3cbe67b6393852ed4cb1fd6447cf2b045516f0da09f3dd4602f54b4fcd869f896155e31 1 0 \\x0000000100000000008000039a28479cbe2a70009b5b2221c4872af718af69fae21664d9d820c9838e4f4221a8ef5a2d44b8530ee102afb2a202a940adbcab6746a00f8c0a27fcbacca31b944fe784d60beee7a2c9bbfbe310f83333d1e1af02ae28dc89de21308e08d47c3c66337c77bb5eb0658f7137b2150291863b648689f85d941d9817ae3b914d072b010001 \\xdcfa0b12e8c5210ab8f70972bd9e43e1d1a264065fcbed41d10deaf7fbf47472e9c0408dac7b014d4b06e9a13f050b26f4b24c3ca10a7960bf1bc25c2164e60a 1659374819000000 1659979619000000 1723051619000000 1817659619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-39 \\x6870f9e403438c072c4751d63c2bdee4ab77009ab61b1a1f0eef49d5306499de436d2e191295bcabfccb02510ffe07383d6a0e121aa5587c78ec13c870d1d559 1 0 \\x000000010000000000800003e22612097b08f7597fd780b3ef7318b96fa72ffa2db9f2e7811593c8e3d533b9379f5657461565c80747ecf0f5c1ba11e83a408069c2fc39765351ef070968f3e2c446e00e4f6e3640e559f3e00806f33ccca8c47bab8bed0d8d528151771c4aedf44dbc9764155ee20d8d67bcd758ba20556cb12ee994b210ef7967c6e04817010001 \\x7b8fc0501a4526da85741bce8b44b902ca021763e8a2c0785f53d6d68440d728182e85a64f62945024a6e6c97321e600a0da8ad19ea8ade9193952ef945a570b 1671464819000000 1672069619000000 1735141619000000 1829749619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-40 \\x69c856b181910b3461da5fb345dcf4b5a42e67c3d4867ec20c4dc175d24226890b826802c43dcc06fd056061ab1c9ebf5afe8e835b166ddc86839fbf1c8a2695 1 0 \\x000000010000000000800003b8a1dbf610024f7f73884789b9edbe34b0691e065abd00a584e560a69ba98fafadfc2286ab01935947824c2c1c1d76960c76784029eaa30637c98f2742f8a7b25ee42f599d6a73ff7093f9705d10b43ac7610737201db4341f9b787ca66f824187afba6c325328e3c0f28b8f9d4601d34dd24d62f99639adc746076afc303ab5010001 \\x24dd2d574c719630889734ebceb1555c7febb48273b9aa5b73717a33349bc084f5f8399bcf5f6a93d97de82d5f18016484b17f511d3857bae003e31db824b70c 1664210819000000 1664815619000000 1727887619000000 1822495619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-41 \\x6a90b399c8dc009f24f3df471b9059676870475524e6d5475cd623666dae2bffd9cd48037b7978e03c84f566dc18b882e75bdbf09a0e6d1871dec5f82db8986c 1 0 \\x000000010000000000800003b26e94ca99fc331c36042c5fb51b44ac3e8d0f42c6c7461fbaf4ec42bcd3d195cc403878e693139162089258991215b50940665a475932f34d7ca28894d8af26ca6c40a1dba89bfe6d6d89cafa103fca00788f3a9216ab36998355dffaa978002d14a8fc24c35d8fd79e495578e54a97d8d4367dc71f55855e98481c8b974e45010001 \\x504ed9cd919e6ea8a3166fc70e2ab4bc00be6afa1b7bbe738c2d927ec41c7c117f58237bc7b509c6a9ae65ca4b309a57c7a00e51125c86644fd2e4ad5b2cf50a 1659374819000000 1659979619000000 1723051619000000 1817659619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-42 \\x6e34f340f98ab739c10a4353fd312b9f68b351bea7c1258fbc016403a835ea998cd20004e052dca1fff10dfa86f5df358b893d7fef8f215b230d1ab454911439 1 0 \\x000000010000000000800003c565a4062bdd0169a8d2c91564794551a66d20b08e0c9f57306d5f5ce260e904e34028aa189b78b09b477231e4aa88f33b2ca093fdfb5c99caa961044bdba13da80974eed482b01c569fe6e42e990a9d4c6b17b183dd9896c2a7af954b1c4e50f84592f63b30ad1e214de82028964c719751cc609213c178260554b356b86e61010001 \\xe6a6bf63e63eeacd306303c90a35c98a484dc9ce3d4c53b5ba9884d8a5c0e8ecad4637e01bf2e8aed2f752053caa63a5aa76f8f1f5dfc306f1294fa84000130d 1670255819000000 1670860619000000 1733932619000000 1828540619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-43 \\x6f20b4b10227b9ae8f28aada7721ce296e38a8101c1ae8b9552569c28da3e258f45237f8206fd91e8149442e290351a5ae2a57577c84972dfb0a00d085e6a858 1 0 \\x000000010000000000800003b6dde947a2ba647ad5aefbc04d46860168d5314ed55d2f92416fba4f8c0aaa9e2100732cd0723decc6b503611fb485a40370c270257594a56a5b6696bb6600aeeeb990b3bc93fd155f4984eacf9352f9007e38ba6d219a558f0a1432efd909d4378716613c08eff89450b43f90175c90fdece6e3e5ef0d345888515d7c6e389b010001 \\xc4555433ed01095b56254e803ddedee9f1e6f499e1cb7583b92d8a49cf51318da45b6e563158a478c265801560793e276bed220948fbe9bd196b04e16305c307 1657561319000000 1658166119000000 1721238119000000 1815846119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-44 \\x7578d2f1d0878c1098b34f0007fe0830fac4e5811c65a2b4f8e675e56e38f5f55d94daaf20ff993cff7096652f67d6e588b1c805eb21384ec3f68e3a943f87d5 1 0 \\x000000010000000000800003c7f6d83b07463bfd4394a8eff5ce779846628501a90477234086e53c70bfb0bc15521be931de29ca79327291c3ee154c56d601e8e246a5e05525bf65b7dd6104a8afac644047a37d7415550899c583d992f701c940880f0864faddd75ba7c0574accdf114d0e743e1bf90993709212b5318eee55b6ab5868c0dd4a044e1edd29010001 \\x5ad92b9b4f1a721b7e32b531bdbb72dc980d4a013010d8962a5de0fbb3acc05564c0b786cdaf7d049977e976d25f0d95a17534fab539e2d06bb85e842395f30a 1658770319000000 1659375119000000 1722447119000000 1817055119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-45 \\x76f8d5267b3d7148fa5c6a709001172af3649f8a4a013fba01d82093300e7d5c0367877f49e8214ae40e73761a4733f7272a4d99ced652f251011ae0c54ecc02 1 0 \\x000000010000000000800003bea8e71639822d47c17980581f90d53d44252daee1e50bb99751a079e698f3672f44a7647bd5c218a8dc8d95b4d42bd14b18a3bd5af6c66691d5209bcbe8c2c50666f694cbdb7594caafebdd1786411a92a1be7423458ce48a93389e234469a7116f7e3d5bf2d7459597e7ae0ffff337976db1b3d32659a3024663e5dedd4225010001 \\x1e3da1b940ce868350d2a723359b20fee6b505c7569f8e39d4a4e7f9463dc789d8a4cf794a73edfda77614d8701df5f36d8021274c9c0b11e90ec99c955d7408 1651516319000000 1652121119000000 1715193119000000 1809801119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-46 \\x76d89f34d3d6e3721fda87b68bee3a59e35dc8a1886be239228ddabecde3cbfc63b057fd1da1fb8bed36507cbf83a7cacac4cd28efc59df9812b658394312d8c 1 0 \\x0000000100000000008000039ee2f9c7ea2c63ba1a488131af3cb6b2716bd6459352217ba377c11f0f5f0882ac021ce5a28f882d1ab8df61abb0a35ca7f20b6e5606e10b69c2d1a907e6d56e5b91e79c454ed1943327358140f74b4be743932a67255a603e5d3fd7c2e36f1bad53a00b85f0cc738967c6235d054735633616e80931f5660cfe9885f1b9742b010001 \\x67448b37e6adb83444e063545b99448dbfa3cc7f50be553dd7151f5a80ef7b2df46582fa6a7c4099a0d3e0bdb0778a373db3e329a9ea795d78351de7aff2720b 1658770319000000 1659375119000000 1722447119000000 1817055119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-47 \\x79d0ec7b885ddd3ed5028e8e40f4d5715fba5c3148d3791a4f4463ba241db3dcc8ce3a8dd69cd74472004441de624f73cd3698f2ea6fce87315ae864969b9931 1 0 \\x000000010000000000800003b38da5abaf11df6382c1b0792eb3ba90b70cadaf6eb3a4c89e4617b31d0eeb29e4579dbe7c491cc7ad23923d9e36512481b8a6e28eed6a02d182b3106ecc07de7e304d74b8e31bb5a7f566ff6f99880a1aa06a77fd1bda9559f5c02929d1a4c124e383992346bdf2238bddf613423b6db5d8e714c885011a73bbf5da81bd20e1010001 \\x060708e88803e22892812250d3a2cc92630584e554d3225e7121f6d5e778613b8f11e449a770c2b519abf0161c6f90489ba09074d35212aac0259682c8390b08 1661792819000000 1662397619000000 1725469619000000 1820077619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-48 \\x7a90307112054163ac58866d87bc1de1efe2b62537e484563b775151abee635e3b67012745f99b2cc53564862d04d94e9b4ad4c02c01a3af0bc721ed9c822723 1 0 \\x000000010000000000800003c4360fb4b4f2d0eded1e71bf15787d7d365268b0e510771a4c403482e53dcbf1dbccb6435a6b5c1dff57bd32ac6e4d9acc358a2a75424b714bef1c26e95ec15f8ce29f3c3e4ef1e708c693b66a7272349d9ca89c289c301bc87fd2d9005ce3103300a2826e375080c5170f945e97473311383767fcd4efed7de10a21e5924103010001 \\xc185b4ecf887ff308137a6811994bc474c03fca5d80b97aaa02226aa27d8dc3a9dcce3570da01ce1c3bdee6d53d7e931cfe72a3368afaa800a4d3aa8cc40c905 1663606319000000 1664211119000000 1727283119000000 1821891119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-49 \\x7b48dbed47bf43b4f2b1afac57cf95cbfddf5767711c101db129eff7a614ac2847751fc4c44aebd302704d9dcfac518e5051f3e6db41521d4ad31b012a98de73 1 0 \\x000000010000000000800003acd3b5af9da4361fe255ceb119c33ab0b2e3e087182a26944a6bf71fed949011ced4fc76181420419cdcfe2b1123f6da4a3a0959d6418c0fcb174452671f7d69015889c046cc9a3fb1d0504d32fb7c6f1fdd5df2fd7383dfe2661b186ce0074411e1b16556f2903618426054608912a7f56f35f503240c79f716b9713363eac5010001 \\xbf6a0dd1c4cb9435dada5a097f8eed5d1156ea35ead32055b20e22de4003c98e83564895c2c4392b8fb8c74f9f05f1bd55f95e37bcdcf2cd7fe05546be6efc0b 1675696319000000 1676301119000000 1739373119000000 1833981119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-50 \\x7c4896e25566550e6f669426c6b540f182131a8540840f335c370f3ce1a7ba6bef873a01ed3e85ca6e9a260f83ebbe5fe82b0297c1e7595e9e03e95170d9038a 1 0 \\x000000010000000000800003a3e4e0b3648b4e316ea42435f9be305b0c66af85345bc7dfa7268d6d7b0646d546f74dd81d5d1335eec6ada9aaa393656962c171c7e288777d37c3e6c3efcd2d33c7a558c3f0e3744401944f521065c37c331147f600861c6879fa926c9b2ecc0a0daf9df4976f995666d7db8a41189a834a5841ffb90edc90ef4bf14ff19379010001 \\x177aa63cc8113ba5a4dd8d786b8f7bf25579aee715b8ae27962c309bfa0ec59074eb97a5a8bff0d0342cbcadde307296aa3b63470f98315577a237e97d964802 1678114319000000 1678719119000000 1741791119000000 1836399119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-51 \\x8210697a875449cd4369c10636d40b8bc0adfe1982058c77abbc709e3d890164ec71057e457e4446b90252700c23c3a74e376b76e92c0f4b0806a116e19d9fda 1 0 \\x0000000100000000008000039a29cade9cccc42dfea6dceb3490d0d761a11a5600775add06ed00e25aac68e091dc816c6542dad213bea56623c3ad9ab9ca12950c00ab43f1c57ee565f8972425b3f33437f58b7453bb0097a35b9ca07265d21b0764120a9fffaf78e8bf05225b35a4a16e1d70626242e0b27630221d7a4d94ae2fb3577e7c6c63061ffa8593010001 \\xe39306c4827d0602a6be13941aea8da17e4d903a8aa6d25723f5090ecf14eb05d97985c610c605681b8cea9bae2c0f47116191ac601f13d9e73b1e1ce132ee00 1658165819000000 1658770619000000 1721842619000000 1816450619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-52 \\x8380dcbcefe1ddf5bf9b5bcea5e5b310b79ab1077570f4732037389263c0238e9a58952184d49ddf827d18e0856a4aa4cb3fe58cef8da300b0b1697ef55ffc7c 1 0 \\x000000010000000000800003b671e95c73587cb9720a79db7a550553636e8a6dad1d24bd236ff89c5f1472bd2e56c650e358a342c8cdeb082172009ef78228af3caeeac4b5499019032c3a0177601078a8d5fab3f1e43326b9cb7f3f5107d64190cd9fc76997313f474ea5515cf6131eb66e50e55aa20b94634230ed9d0f4bd04e0e6d17413c968832c424f9010001 \\xbf3b1e9f3a3a8bdb4744013f8a2e81aba024f730e88ed62e25693af4d1caeb4975638cfdfced085c50cc2601b24cd13eb99a670e6b3fb76c9f19b58c6ed27701 1678718819000000 1679323619000000 1742395619000000 1837003619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-53 \\x8ad4bf2ab66e9bbac091c9d506e6a97183adf78cbe0b42250870ac6f418717978845c53efd5c1b149a48fa2fd50d661c5633be4b3a3cc870c58713e7c23805ac 1 0 \\x000000010000000000800003ce914b4760510a8c0b682a7a067b72989b78804707230de48e24b703c9e0f5cac7925e528331f1968e6e4bbdb4bb9b997958924f413d0b92230e57fe73520f6206138d5657f68fbf740df593888d491376216aa6cc6657b5e9add47b0eef1211896bb1a22934cd605786df6c02d1c5011d33b56c95f13a91dcd3c890f9b73fab010001 \\x23585e4211cbbf3c344bbe3b06126062d515019ad3e27c0fce61f1dfc7c2ab96273dfd8bd22e593443fc1a7da512ff0924db9dcd8fe75bc6ae84eca52c80d900 1678718819000000 1679323619000000 1742395619000000 1837003619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-54 \\x8b988114cef8c230bb536511fe01e676af8a6e3b1c49f16c476707077a4396d5839bc77b7b51e1001d0711474b648a320836eca4df946b3eeb08df82d5a91334 1 0 \\x000000010000000000800003c1bea8f1abcac267ab58b8ca7322c827bcb9f445748126eca857078e9774278d98a2fb4839be50bad31d5064a3610a3e7b3e9f95a3c8692deb92644dffdb5ab753611d9e1124e954707f86407a4d0690ac33280e2c2604d5fad399a44d903b6074eda6567648243f5d838dbb12ba327952f33a56cb081083f8d6b41994205f93010001 \\xd945e45f08763644ee2d3c2757bfbd9157a8b36ddd825b7d285f8be3d56b1d5c3219c4822294f15aec2937d525d99a06aa09487304db5553ab524fa076cd090d 1676905319000000 1677510119000000 1740582119000000 1835190119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-55 \\x8bcc04e2ce2ecb4a7f2c06bc19fa4639ba3ffee455b8eb6b260db504537a9176ccdf6c94289c9569678592db64399dff88e1946cfc53bca363b6eda5d3356718 1 0 \\x000000010000000000800003bd350ca5501870b6f53d54f5383b0bcfe8d6ff18fb96bdaefa01cbdf48e03a3ba65f8c89636dacf9f256eb1704877075fff2f6a4f9449ec25ac9e2f4b17235b39dd3ba8109ba01356612a72ec7e757812975efb42f34f3b36fa3f9faf9740cba4ddaec83aa5b9883e11ba67816cd43c89772ee6c679cbac194b0b58a52c97047010001 \\x37d54f7a0c94275101db4952c468cca6e4753b51363793a717fb1db0a0f6fa9569c8dbf2451377c496bc84cfeaaf0c0bb70300ce9c4322447135262602c84309 1657561319000000 1658166119000000 1721238119000000 1815846119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-56 \\x8c505b83cfae43cdc0500d7d186d1c49dcf51e56b21039394a2f805365cd7b988a121abae2aafccde1f5afd24978707edc12753b25d35f0a1c223b74a9f5a3a7 1 0 \\x000000010000000000800003ccdbc68af577acbf45cf7a8c081efec11752aa6f80a9805b32e67efcf618fde80017320f584be50de1039ae1db8088492a1e13b3e9900d1ffc489c11c693f8e2d694f03a1c0ea21b3a405a494cf4487946512ac4f9cfe0c874e98ff50d9a9684d9d15743f0cb111af775ca86a6ece71cc53c8ac1212fd811ade5f5b409081f07010001 \\xa865c32365f41b735eb67f293f5704dd80f48fca2af611071cb3167929de3b5676a2302a0d32b435057a13ddaf8071631cabc51ec24716ab148dbcb2a01a3508 1656956819000000 1657561619000000 1720633619000000 1815241619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-57 \\x8cfc2ad78737a62bb52ced08829c477afc6d60335ab33376c84145271198066e488187a61ec11c30cee31f01b62f7e3d88a4c669c37dac6d624470208b44e6ba 1 0 \\x000000010000000000800003c67ddc55cf05616f79917765fd00c658d39a32d7dc07ec09c28854fd7612e7bb77fbfe6903eed9ddf602cbe1acd2a03f97d7afeb0385a4f2795c467ddc423cd719619c9fa8bc1ab780d610fa7bc662be0e3535e66d6f842c65cf5a0b58fe58d24e2e212eff2ecbb82a212e4642bbb07dfebc5eb86637a3099acf71a151703371010001 \\x91b526826bf2e47cfab700c6ea1a15eabefa5296a050321136daa8ba538a62a63b8489ac2d409c15f546da8b30147a6d83ce1dcdbc78b9957a355bb89553f103 1670860319000000 1671465119000000 1734537119000000 1829145119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-58 \\x8df032d80c001013c5b9ce01899d6569af34cf46c991781dffb4bc53276951ca95a4158f995a3a3dd147a9b6480a45e64f00ef89fdf2c5522f3fba123a6dc661 1 0 \\x000000010000000000800003da2bd6afa6b243de84dd6e9964a8497305fdc592785d0623927999f3e9196f1df9a4456a18eb9d5a2aebc2be6d233f4707610c952b8902df90d6a5730d7e26ec856d4b60dc602c2e7ababd2310352e9f489e5592b0c6ad34e72766153bb43aba0d0f6b0d27dc1e2f41edf8783d8f3c10d566fbf85fdea068e3c5a44d117fa1d9010001 \\xc579c41d3ee96e322be231c0229096f3d8ad5d29cbc821556990208fbdd30190cb830cf4f93df571d3ecadcaccdbe76ad6b34c0b0b894cc7da372b62df0e8902 1674487319000000 1675092119000000 1738164119000000 1832772119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-59 \\x8d90100f42a1a55e2dff06431cbd6a1a262a7e11daaf14758de93bbce5016e9a90943191d942c3aad84d18212eec4fced8406b153b4f8806f34b3aa4c32dbd3e 1 0 \\x000000010000000000800003d35c8f3cb54e156b203c5eef05edeedaa06c0525310d5ad527761c358b5401f9c02ff49edb9997fe6d00061976b879db8894858e6aab8bb7e66a0661a3a9958bb59aedfaa3c5798c7c889e7b86c09dde0fbfcbe256f060124e6c4dc461639cfd99aa70c939af6bfef3b16a7dd36e79a8f63093f14923a9207f65f03aeaa06ef1010001 \\xf2014786d630b14631e904d9a394ca578c0ec337a9007a56a2ebef136e7c92fed48bf7b784d5145437f6751cfb16c278fcdc96dbb20d35fb80a1f3b49a39a705 1669651319000000 1670256119000000 1733328119000000 1827936119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-60 \\x8e64ba0889a5b87317df39684522cf224d84c59eb4dcb9ec3f9f2667802fbfb1199665f4dfd436432b2553dc1db7c0e62ce75e353e89ecf129a040b3c87e29e5 1 0 \\x000000010000000000800003c8669bd36247fcf0f9d852b2c1f847774cfeed9a306764a1b09ed4ef0361c390c4ffad8e0db674fb578369d144557ae75e5f60daedf2ba2c9dd7655665ce0b0c9dea5b01bbba68faab1133e60f3804c7add79e9347735783b161cf401a6755a06c0fecb63d56534be7725f0f9801e6352e6b7fc7f4f3ee08910d8b3cb61e002b010001 \\xc5fd7b30df6acaa89918a69a73c704136f0c4be435b9ef605e4cf184fdb9d077e0166d3a569c7cf960e8a6d625b4246b5435c3399d21261751917f9cdd6e5809 1667837819000000 1668442619000000 1731514619000000 1826122619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-61 \\x8f78548531e32e693066b9f62a07c560b6e8632f541c7f9aadb04a1ec1bdcf780b449928c035cd7d82a46c59917f01ec939a383009ca7f98710a505ebc942be2 1 0 \\x000000010000000000800003b92e019e83c10552c313fa11d71db0cbcabad4a4488e4305212c1f5e8f6e5b7d524810c82870e24750f80c5abf67f7d579b06743767baa66a0ad1cf87e0534043ba6028163e034fcc00de5832b8f507c284c70a3961d9955a17a3b7eecc912232c73e02c016e7fd3392af7bb535a8973f68c403c15ae1c6148042ce1c180ac0d010001 \\x249c83c8fe739bddcbb8d4c5f6ebf7f5b34eb8c6475af2268bff00586e164841c8228b5d3608be673acbf03437b7252cc5a022e829d19d11ddcaa37ddf21a905 1657561319000000 1658166119000000 1721238119000000 1815846119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-62 \\x8f94b3ba3525b0c5caee1a38001d068b19e9438e7e7ed5329ba1c614a4b2cae2b3f2dbb36ebd1d26bd94f18fb008475fb634735226c5d8908b8cd5e5cd4135ab 1 0 \\x000000010000000000800003a99ff206698ae9ab4a4e59747b18effd80972d76e28f1f08e8c5a2c3857c4f5897809b11d30ac2e492c6a200c6411f8893a8bd6384dd2ecde6eba723f5db2a3c8d9463c91db6241685b2e27e60bd55209255fff16d2e2f9e60a09de0a65c8f881dd52346355b97d8eecb11929d419ffbb61e96099c8894387e10741aced532f7010001 \\x4cd9a3bfd8c917d7e53724692f8ada5de65cce2f582db4b82bcbb3508bafbfa0ca8bd437c841707cbf334fdcc3ee9089cb98350e672d17c3b00005a4de93fd0d 1664210819000000 1664815619000000 1727887619000000 1822495619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-63 \\x93d8801198fc3d3e810acc61155646d50c6d5664db238fea4cb97c38de043695885a739d0e265515876a4e5cb0a46d29708e0750c03760be7b7dacd4792e9fde 1 0 \\x000000010000000000800003a0f6505d3c27f0c8eef518aba3d976025de5533acd270145308e55b3ec89dfebd5e37b3ea5ce1220881fc4cd7344bd11667201792d4912970afa154290e73be4d32058740162323734ccc45a574819abd17c271e1d99e761e738c5dfb5c334d8f1283dc077cbbd8421fa17d863b68260a95cfe4354c745d4baa21d89ffffe62f010001 \\x05632d5c298b79691c0e63cb68ea1370335ef8d6d18bb4c25079368b7d8920c20f0ee870585eeb0bcd479e5ac4b698d07e1f6dd0900d5129d85c94702e754f0e 1679927819000000 1680532619000000 1743604619000000 1838212619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-64 \\x96e0ea51774d030f557e51b9c989cd2a049d6daf7c7aa396d5f9f889ef84edd12080fecc2b947dfa9cff8015daee0f3fa575a73a9de77aa97396cc8e8b0afb6b 1 0 \\x000000010000000000800003ae4aa1f6d5176f7ba6b06e1108f7f1037a20853337ebcaf59d457c352ca6e79fc64b6cf97038a2a007d7d842d0077a98993ce5eab8e334bdf63afc0b8400da1b7ce2a0d2ef9b8484eeca35f4e3ce818b22ad9056f85b4c745f81efc3c5e969e3911e83871a5fd5cbe7a6a9af090e2defb0da463b1b36b0a85b433244548e6a93010001 \\xa0d7b2dad1980d462a5ac30c08b13d1b0f3ce96aa7d78e42fe70430e8b0ebc5e7fbf9f3153286f8e04a8a52e219d129546198036f2a875e999eb04558135a80d 1662397319000000 1663002119000000 1726074119000000 1820682119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-65 \\x968c490dccce7388f0673e20dddbeb90a6906b9dcfb25bdfe6357b9d97b72a113de5918e2686a774236403f08eab851cebe11623e46b25e1a6db9ba919450bfe 1 0 \\x000000010000000000800003d3cfa4af48d716b79dcd4542c708f7e9dd9650faebf67c81b7ef528890751cb6216b446ea633e721f8f299387909305981d96ea8c8c0202cbf160b52ea4e05e5c27a8b32352cab8a11bbf3c2bb66386170807573f0d9f4265398c29d2fcbccc74b0808abd8521e655965749e5fd2e09fbfd5e85a5e4f291bce1360a7aa657691010001 \\x3c1f2efe737dbccbc6982d02776aa6666349f692e39cae468d03c1c09f8641a98345a039ebe41de756fd3d128bea67f116d8e1170732ca90182a0e3cc342ce0f 1666628819000000 1667233619000000 1730305619000000 1824913619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-66 \\x97381a73a5a882e0274aaaa37c43657d8c497501789dbcb7539964a48432267877e819aa0fc25c1451b709781c6460cd2d3f81ca66fb35024525cb80a8179fa2 1 0 \\x000000010000000000800003b25b2b72917f5eb6af7fadb066cde64c1f37bfb1d769fae6ce2ea8f1ba9e925e418a88d8deb46758031991e719c7f286345b6c717843e582ca9d824e83c9d792c2dee117671ceea6ee8be6963ec4350ed7e7f617c7d7d782d2149bed5bd75c0340a1122be084a7948522822f257a1e1219c9e52bfdfefb120c3d12ba3204beed010001 \\xdc2b0e608e58b9218d085cb2f2ad55fdd1b3b809f6b19b8ecb7910bf67d20f7bde21bd998e20e544435c32cd8fe69794c161a3beb954d11547ca58a5f637300d 1678114319000000 1678719119000000 1741791119000000 1836399119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-67 \\x9834452574198c36b00dc74658ef175e3d7e7a2ec0ca63096731361b14dcb60d2171b215c8793f150ba6e2faff91770098d02a4c230f36a58725cf874475bfbe 1 0 \\x000000010000000000800003ad25ebf4d6e5d2044a7e263b11170e3ebbb13a2a6b9a4c604ea522dfbe8677c9d25a4e81d8a3170d4c3edf63d2ebd551347fc26748c49a46e3fc938a8673aa0c0aedea3b93ca442c06483e2197485a3d207bb091815007cdd74be8a21693f0031f7517538c40d10e66431721c35326773d77aa716588b65532f4aa9de532d52b010001 \\x4862bbb7600d39e14482ef5d0e699e4fcd68487292cdeff6079ff4367884afabb199416161b99a2c50479a6e19d753c34bc692f35723f128bd7862cf499d4309 1666628819000000 1667233619000000 1730305619000000 1824913619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-68 \\x9b88425e77be2f1f2d1f38c6b3b8c15e3802eb6330dbf97a15fc14997d2709c700e01423daee06b00fc7f13f675d885ad1e06c1577424c64f72e8253c7ece317 1 0 \\x000000010000000000800003b5993fd3f515e9195a146ed0801615d36dcf984f214334a3f65640b94dfdafcf78b0feb12eca29df65d61d6b54dc3d44ae3be6c2dc87aeb215d746d4af6324e5dd4d66a28f5f4f1e781cedf2d73e54eaa8f8d712db349ebfbcc2f67744ee915e3dc0ffc745c8f0a62e2bb596733db865d562ecfacd2836d5ea0b736731f9c533010001 \\xce0e9de5932f1ae35902145f4bf28a63f182e5a090c5aa7bbc1d6178dec0ef4aa07354dee0030ea28ff581a7f10d30481339ad361d5b636e8b04d6b0ddc31206 1661792819000000 1662397619000000 1725469619000000 1820077619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-69 \\x9b346b565da1000ff48d783fb8d550b37d4a247edbed79564e8ea5f59b257d694bf8e43326c6b5cfc7095eeb8981a487dc0655a8cbda1ab9d54f64e23fdda236 1 0 \\x000000010000000000800003b1b288ddec1f42357d9f844837beec0c16f61ddb29bdc700e567eaf24e3f59b208d78ea343587f5a5951cc6cc4d65b467861af4ee97ac04449e31270307c4becf4fe0903a669ec426eb04623548075f349a671305acde8bfa000d942fb870e28abeed60a59d6158085a0395996e5c46b517321c40be824a1314b8c10ed343387010001 \\x92d5de0d6954663d79be7e893d992d3097edf2cab083c0b320f00fad16e012144c321dffbf5fd4164b8047627f9b8e5f1e62ad9710860b6301fae6b4b831320c 1672069319000000 1672674119000000 1735746119000000 1830354119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-70 \\x9bf0e03a84e5329660590c58d7ca9b3d9c90cafc7025278f8d68594e8f707be65c3034e5164d1ea103819db72615376de6285c4e777fd465885d9085687dbe40 1 0 \\x000000010000000000800003e8e08faf166a86826bbd7f19d16da154606465aafa2275ffbbd9fdaa24deb8d3c5d0649f6abc3fa3779a70d721d7bce41d31be4e230e9661ec4a741166f41065dd602283c39c0cf1fa8d4ca4711010dacd47840ca5f77da4c4e481815ceda0320d17c891fc53549e6294b0b654d4721c9bb38443a6dd6a7f81cfe8d2784f42ef010001 \\x9a56454b6936d04b4d726abdc61e0ffa8cfd15cad9506b70d2e18dc75bea952582522dbf1960c14f8ad6867585f573998368e83be73c9d56a606c0d8ac32700c 1680532319000000 1681137119000000 1744209119000000 1838817119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-71 \\x9ed8819a7878951731361cddbe5e834e22533709ee1948d04274e01f68048ace530cf669f038fa60ee2727601646f95354a973309e816be48852a84de27803b6 1 0 \\x000000010000000000800003b7b392286783a488f88704103e39f1c676cd9e7ef56b55d9ef323e17531321249b61006b0b87569d24eb90fa22f31fb998945ce6f0af3f6aa433b1af4e9a4ec7af51a1970fde78d814afdc89ff7366e3de08481d679e3e6ea7e889f6c80768e6f1312fd7f7648a2fc12f81241c64c4f9afe671f4453144265a1c06ff3aff64eb010001 \\xe5ab00dddcaf9c04f05f2df6007a8a50174147b37d04eb0e018fdfbc5f857378aaa8ca5f140e1354861747ba006247772c8711fbf67a307b17bc2fd535904007 1678718819000000 1679323619000000 1742395619000000 1837003619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-72 \\xa20cc300f37ef128fe8820e1b60f5e3763b174a272631689bad68778e9a657b7e80ca83681030936dd7414c6a34e2d4470b3bfac3bd75400c7b3b631e4837a41 1 0 \\x000000010000000000800003c4e9af70d267de4c927c1846df61e26447cf8c2bbdfd8021072f2a283dc89f52c5ae247b7d00bf01f4992a52c33cd6a99f1694575f971033beac7be56b93d7b423e76cf4dbc3ef35efa313ca6098ebed909478fafcfe3e91a79a1ae5b3c8f3fb49b92242bff73fab5b03e5cb63c026a30583304c0f70415dc9a134348a53c31f010001 \\x4f9db3cef4e943b0753b131b7d342102a644048fc47399587b3eda9f12776040dd7a3712e63976c0cc51a0315421eef75ba99803dc963aff91317db68623cc0c 1675696319000000 1676301119000000 1739373119000000 1833981119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-73 \\xa374d75f646d470b84f0a4e045c96a574f00c823fa2a711053cc43ce7ec9f77c15362375f66081958d48f24bac04012268034da96fe089068a2584a499136348 1 0 \\x000000010000000000800003d62ab499e88072d1bb35c86f93c979fe60812ae9aeb8fb541b43e29a49911c81e50f15b25abccd400e2099eded73703f8d78a4b75d7518740af1fd0c165c532ff4ad13a73cb6504d5281df0f81a16c6a696b2b84f2a6fd8e28fc9d206a83bccc9b18b9c4216ee2293a2c82588da35f7924b409b4c519a6f46253934f67839cad010001 \\xeb237920369a9e379f91cfe67eb9d740152c4db4c0fc9866a65371eaf4a41602df8e68936d126c3bfe9a5120fedf21690efd23ec54df939fe1db15b8638d3808 1672673819000000 1673278619000000 1736350619000000 1830958619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-74 \\xa39830f77079af0fd61e489b7d2f960cc986808df7da1dcb55ad49a28f3a6787c87b8f25a6b895feed97a9fbbc87eb37026bd70768c513b26464a06054ad13b2 1 0 \\x000000010000000000800003c6c689ae2005ce8a0ff58b44fb55611b24934a75e367b101247a91b193c71dae18031f13c0cece937b42af47d8d6503502e59449d2e6c20d7494de6132b5797a4cc88823cd44832c7369813d1f123a4bfd5e44f0b5dc7652cf8626b9bfa712f98fba086fb14ea2e49c17d376d85911bc9e46d9a65cd06a594870578eede22593010001 \\xf5c196f5f32f9fca920580ea946d1fba4890269b3e3165edd27922284276b823d3853c3abe7b3d9137e4a5368e06fb0849d6ce228f0b0ac540157150dc96470a 1678114319000000 1678719119000000 1741791119000000 1836399119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-75 \\xa5ecf18e3d6641c9ef3d1afdd395f67e75dd0d05bdccfd10c935b56b177e4711f031fca2919f28945cfe88304d22636a134bc1993a00c5311f9e940ded1125e6 1 0 \\x000000010000000000800003cbcb0630ffbe451d2728fee36ec825a3f474b76b58fce3806d57339cced108e5ddf49d000b8c88a51a4c69bba2b2ca49ab6e4ca281f89931034877412c6c7f00c3a788eb92b6d5237cd196a862dddb0fea81c1d94106d621c22bf82ac20d5219749b98ef04f79a78b7744bf6167429e3be6ba5fb1b3d030d544591f3fa28220f010001 \\xb8ac029b3b96845d19d3b72c2c9706419ec89c6c3d66cfd686e4d64d73dd522c56507f7d5736bf5c0c7f10dcc8a523d0117769815706cea413d55c395abd360f 1656352319000000 1656957119000000 1720029119000000 1814637119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-76 \\xa6b44fcd6d160a8cbd678fa8fe489cc8674cee8951cf6d16d8ad0d2a2a9a5bbac8f6ffcdf84a37efee9b6fa0e95def0cb8fa9ca58697c75c2c57f707edd4a81d 1 0 \\x000000010000000000800003c63cf9abf69cfde73793ce51a93558ae9d55bccd22ac8cac7c225d52f77fce8576c9e11382437e73814a263bcf9b35a3373c73a6e5e7deb0a73608c91d2a6170f318693273d9061f8d4fb5ae634764b04d56dc7be1337fca64ba11fb32cd7f51bdae94578613f46235be9df844f0b4b7f875f6939d44b877b19d2071cafe9d11010001 \\xa9a48b085220ffa9c1d589e87fd833772826bf2f1218a37f037a259db6e3c60cb2984c61fda48b882e851c3f8c88985f9d9ee8330f444ffbd843b869790bd50d 1655143319000000 1655748119000000 1718820119000000 1813428119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-77 \\xa6e8910a90b672b386bcc01bada71ebda955175e67a116f6e425e14a81f48a4a1dfa418c57f2441a6f0e9936a7dd674f5111d29b9adb81db6e0cc9e044bae196 1 0 \\x000000010000000000800003dfc0e8410f2235cc638d6fc104bd2e4e274c358d8e237be57a376ab5ecf0f6d688c9f7b20a247d3ad7d2c008849d27c055332a559bc8f6e07f0b9c9f568cebd01d05fbc195e8c300ee86090aba9782dbb1f42c9412cd6fd86de32deb61fe62e0365fbf3fcb8e2c791415a2e36634b7944e9bef74e67673dfcd60ade1df59ae41010001 \\x25f310c0bb163bd628697cec049e51a7eb10e7edfad63b2dfae4a678d9c622f4c492564795117b27e907ba6d668f37cef2acb8a6aef41cfe19769ce692eb720e 1682345819000000 1682950619000000 1746022619000000 1840630619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-78 \\xafa05ad9d6859dc779d4f409a219a1776f90a5bd06e55b88876895b8212c671ac2f9b9b71cbe1632e577ae32473710da85704b214641fe206c9aa4ad657ba786 1 0 \\x000000010000000000800003d1256605a47e3f6e3039c1345652711e88773204428b7cae99bb869fc23e2ea1b5bd279dc39f146ebb7178204e79415f583ccc56d63f51c3d78cffbe32dc97eae5e2e2e4a96c432cd5906c630e47dd88362a39701c94ad27ae8c3167678418ded499adfe8646e28a3d4921534173a50753318b644ba24cbf8997cfe0756a22b9010001 \\x1c05f409ee40a08498e2f789dbdc9f06fe73b2d3fc95214707480819bad30d5975f103a499bfa651465ddf668ccbaa85b2c218d0ec96d68f2171367fc9c6a30a 1666628819000000 1667233619000000 1730305619000000 1824913619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-79 \\xb0483c00f3b0aca32328e3bbb22b1d8be4d71e15325badac9f8c0e85c55183d981c46539d5862cd4a786bc7b93db74ea69ad2ef4e42d95540ca089f35ad64835 1 0 \\x000000010000000000800003de4de9e3b8e305530b3e7ab1374b63b98db9815c94170faf9bea334048f62b151fed1869309f1e609a9c17ebfed3a071884ead5a3e8952fd5143e955c41e97c14f9d3b7159cbe5a4898ab88499f45c90b666a9f7148c274eb77b2a5a2ef182c0a318e1b73b56a9ba20adeac73378d33ff992796b6ce821c89888f7fd93a45d81010001 \\x904e26ce6ae339fdc0e0ebd734552f258eabe9356887ff678b9d20f3b0080abac01294194595d270a3cc6a05caf32fec453c7b056a662b69a73ba8ee524f6003 1676905319000000 1677510119000000 1740582119000000 1835190119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-80 \\xb34c6dc6b8ae99433f3ceb1b921d6f7d28b6aa72174b44194628c1a0f44c76c34798cbd273dbbebbb35550a1c3e75df7ee7d90fe7a5a308dc4302d02086598a3 1 0 \\x000000010000000000800003beab75b5fe7f4d74439d72259af45672d246e50e1d362ca1785bdee26a7de8dd48d7534b619b3131ad61ab9127abe61f316bdddde4a8bcebb8cb7b4e5b22e8b64424321a771ad35a0157ac2ce8d05153446b245f8e80d829f85f8409efa3dfd05aed67dfeba3199114fd71f7320b3d0037608830bb40563a6f6046287097108d010001 \\x7dd1c0a02550d7733821949d70cf26cb85ddc054553bd857a1cc735541b3916a5da8edd3118f8912e9866521872c5d2494760dd5fd31e2c4d2854a46721e010f 1674487319000000 1675092119000000 1738164119000000 1832772119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-81 \\xb5b02a6956647865309da9eb06b922c5152c7756890c51e52ead5d92c383fd3658ecbfd3fcdf50b7162abd6c4ced60f681ff2f0afa2e3f2c7c108cf753587bb2 1 0 \\x000000010000000000800003b4ed50c47817f34336a0d039ecd5657498564845ed9c2921055c8c6640c091a4a701bbe93a538a4f27dfbd095756274ee4ea96d3b63ceb7c45c9d51e6e666445ac70ff73a759a47db3be9faa3abb15c9a399abeda07da5b0b4a37098d8d330b20e4bb8a0b8fc8eaf100c55969d61c7a7b1ff8c14c132d1c7238d0ecee2d7046f010001 \\x8e93be78482992fed1b9336364644bde538021b60b548d138e52a206bdc9ea753109cec2a1c0735a2eae39bdfc03fde7b65a789bb33d123d25f08d6f00eb3d05 1663001819000000 1663606619000000 1726678619000000 1821286619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-82 \\xb56cff815620c6a42c56d2c4228679c78e021a008ff52bfcfac8d704203d13322ff0af423a43e165d025c3356c61884d4f9a1cd8d47fa98174631aceba52f6e4 1 0 \\x000000010000000000800003ca93efafbbf248b063c98b7de4e63406062d297203ba9b6c15098830543f32949f79830faff083eb6bc90190efea93044fd3c1b5cc4a54f8bfbfdf3f1627a076243b0ce556ab32003d4b3726ab4d4e1d9b0e8bbb1d7bf40cfdc48ff442bf4d409a19d23d8763f34b368d0bd1c1f808f678e05937b5865ad0d4c51aae7c1607c3010001 \\xd0ae1f4e3499048b0a4838fec8fce8ddf67b2e1872661a4379dada9b9e5aebb6d613fd728d70ed6aa7df188fc067d3b59e8467aa78f707261072e9e7d4c37b0b 1665419819000000 1666024619000000 1729096619000000 1823704619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-83 \\xb68498ee90b55d57d36b78e2c6eb8178d04bf322e1c01d17bfd39d8913b1d2ee61fc0fa48b384efbb271432a30e8784e5d4c959d9afacae2055c1c14011df374 1 0 \\x000000010000000000800003a7a38f110d5174cb60dceea23c9f6d7c06a1f3c677ef1bfb1304d585607f5eebddb9cfed4eac6acb7d2b26803f511a8bd7714e10fdadaf8677343cfc60cc27e9050c60494baaa6b3cbd3c7132082cebb138cfb3264796c16fc3c57e3e45d7fbf68a8c211ad912d79060a95062b6df357d14f94e2572f10e358781cc4348b912f010001 \\xfe35d20dcf01b38c023d13bfe959567f07c0c3b70e62a34cd8f365a2a80caf6c251f8479e60dd516bbb1d1e36d683839363c2fe42981af3a37c27dd27dda7209 1675091819000000 1675696619000000 1738768619000000 1833376619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-84 \\xbe4c3b98818da594495b8c68544b1ff9f342d75ea00fe2c8e3b89cee64c915ae1214f91dcd5c4faf7443311bfa5703f039233251137e019d0b918cb7727abae4 1 0 \\x00000001000000000080000398d8c9683e3dd80fc532b0a6d8448253f9291888b5d2622fb86273d33b644e29cc02fd3e82afe2e92370b2fec8cca64a08bc44821a30acbe571207d55bf1360484fc5ce6d243dad9c7a17bf6a6ea2d000bc8c778d9c4f51ac7be6eb8acc7030798270b5a46741bfd2cc35346e99861a064534868f822344863a9dd378d19bbeb010001 \\x65b3ecbaff16ccda0accfc8e9ebf8bc79d824a1243800b168a1a07fee20d4e9c3d229e3985073e58bc0cb11b766b94839e404907e7ac90ed6ee8b1bebeec3007 1666024319000000 1666629119000000 1729701119000000 1824309119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-85 \\xc1b019b4814f75664686c663bba8c48d9805706e513982999f7cbb71addd02c2d21c614acc9405bf2e3c607afed4113814ece8f864472674b023994d250d6e9c 1 0 \\x000000010000000000800003a91e4ef5cca7d537476e7986cce629c1da450ef7e7b21ba8299e481cd60f3d8d235e328ec3e638f1527e4ee1ce41619c2cfac1026b8dc0b7014284c5d69b463ca9e69500591a690bc3f7b7f9a3374a233eecd83142fb0b6ced7d46cf747944b41866bad7875ac92da3739d996a76cde4c98612945eab84bfbd0a9867f8a612b3010001 \\xa0c0a3f9a7e2a83d9feec02a6a04c8b0034661c46845facd5486bfb8938ee8bfea12f2a003dec3b52163e7ba1c8080cecd357e9b26998bd96f323391d188eb0a 1677509819000000 1678114619000000 1741186619000000 1835794619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-86 \\xc208dcdd5056bdc23f6a456a9e38b47e9838b615ad527aee487538f07f21c8980e3d1b0ebb9a6986ce298f5720754d6299701d6e976ad957a36348bfc5434ec4 1 0 \\x000000010000000000800003dfe5ca3049a75ce47ffb271b325ef8c84974746d714a24c3ac76b6e83483b2f7526496fd8da5812bd8050004502cab1bc56600ae355907bb410f2b486f14dd52b6a50d0d664efb096f96b72306741591125b3ca4565a9398cf15d3d3aef41d57500c356962f5b88030a229017fa38755f2f2b7dd53c75d192c659b9f52a9cfe5010001 \\x4d3f945e7b2f569bd6e72ba2708cafad981c518ce44fe8de5a3b2cc7e771e8c53883c7273b336e39f9492aa04ede0ad1b64cd6bf4e2cced45dda4092a0639902 1676300819000000 1676905619000000 1739977619000000 1834585619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-87 \\xc324e025fb720e2292be049a96ce2175a342a336d80c65d1ee8a5194905ff1d6e382daa063caab35d6dddbf87ab3afcc77794a2dc0b1570ae0a7359ad35e8563 1 0 \\x000000010000000000800003bc3de9f525030d91357bc836686ad91cf17a8b045b3d0982f49eaae1897c950ebbdc6ca500e7827abc78adc3570af32a0686d2257061252320fa77be7cfd3cad94f32d48cdcc00668a69a34b813599d959b09506fb042b2ee7880167d111d2e718bf7defc6137cfc08c5dee3218640d244fa3931ef429d622e7b983c76192e0d010001 \\x43e4481cda3c3ffbec08e6615345a2d16cc2fbcff8ac81649cb69f4a5e3d7ac6a36c7b29ef622f3d0d92d2b69690a1960b436c5813432a0ea6de6d285646df05 1669046819000000 1669651619000000 1732723619000000 1827331619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-88 \\xc3d0348ce04a0a936532582d26e7b56759057db347cfd056f43a6840361e8dd36460b1c90cc2332fefbf68cd230879e98945f8001cfa8c8146a0508aef75f8ca 1 0 \\x0000000100000000008000039c5f3818b6d34c8a8114ff877421070046d084f678dc5fb281dbd8ab2bee79a08d4312f5fa0bb82bad1e1d80081984c8a31773698164fbcbec76d131e3e05616e657c01816bdc4357806d0e7f2fcac40885b9007f36fe6457cb0eef8ddf3db6474fbd47bc6637dbbb594f7280f5d286d052ee86869699196fdb1f26dc778b64b010001 \\xcfc4dbe681bd5bad3ec1ca19b310e823d78cd1f25295c43fb1bf96b37b0ef39f10e4cea470c899c36daf7903a3c248b38fe2217d2925c6d2058de7b8dc0bd00f 1654538819000000 1655143619000000 1718215619000000 1812823619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-89 \\xc4d47f1a0c471d745a3756457ab239c2ff9c7302054d69452a76063ce401099f3eb01adcc3f38de4fd4de264653e3fbf8c31ca4e1b821ac4a6e7a0ef28fba063 1 0 \\x000000010000000000800003bfb5683db8b31dc64a3370a5f5a4375bb0c437274eafd1e67f18d43ad1a3216a31c7d5c3fa480dbcaa76b54c3b44388e84b71687550f47c3b1d60b687963b6bc9f4440d609f93544f62980662257b474823adb9da914f2b0be242a04cef5fc51154e3601ebe1d10a3a255c6dbbe8f3efdb5886c1a1274384f59bbe253047d2cb010001 \\xd6356121695d3f6de66eab733489a6f33cbb895543b41cf1d3a184eae74fcea7ea41e31a2618f73cd936020d0c90d5ab8844ba96c54246d0403a617f199cde09 1678718819000000 1679323619000000 1742395619000000 1837003619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-90 \\xc60c782b1dcf23ef638994a6bbdd2d1715b5c9d8eb88cbd40799af4f174dfbaeb3ab6bbe37728f436227525deb5b3df333ceaa59d50fd51fb54ffbfc4c7d4057 1 0 \\x000000010000000000800003e586b8bb1ddf1893ceca04fe3f17c4508f5188442f2deaa996605cc078365ee6b4817b50b55f6b1baec2ba2ff2a06c12544f07d9ff62a43cdbe6adc65fbc04887c9ebb7ff6e1c50e1a1ab354dbfcfc29222f8f1b39b36deba12b9524e222ea3af9336206f5c1c0b3fe88ad96aa0b71be12d743950a7489d2197158bb30a651c1010001 \\xf2c3e621f971b526af3ff74cd688917bf751b5213458079093644c3566e66ef5211f402206c65ade62dd73f90f356964482c56b321035607a9295b8d84f89501 1668442319000000 1669047119000000 1732119119000000 1826727119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-91 \\xc9b88ac8a90e3d26fc936ba2814f6caf8109d6f0cc68d5579d89d00579b3058171a58804b692aff0f5a1f01471b2845c0d836865b323693b62f8412bb084a77c 1 0 \\x000000010000000000800003de0ebcf2f96f3c44b0774328fb16861fd33d4a7e770821a33dda5ec7b4f38a2380c55b6311354697916b3767fd8ff6f17e28a99e5bb8da678c6da27e7a2f7428e01bb727266abda7e2f4f4229c9d68b14fb826d81dd753e54c044f0f546e0f98a27ad7c94a9c62f003950ef666637574b354662f0384d535b8c7f98583fa5c71010001 \\x9f457add3338b812599b6dd3df47978c338207a51fefc491abfb383b15f9f10d31debc62f04fb4e276b9060872c54abf02dd6612c5b8742aa28fb90890aa8301 1658165819000000 1658770619000000 1721842619000000 1816450619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-92 \\xcabc764044c3e636c58db41258d28c85f82067ab91bb2f0ca276b47b3d49c763397ecd776e0caaf428079c04955e09bd19c6395ea7922f8ab837783e39d758e0 1 0 \\x000000010000000000800003c7ff59f1443d44304ed9667da0eec2358d8d3a2c54c8a9fb75fbc242ee5553e0d029163c6000ed97b63f6164a3aa688504184caacd65320560324b9a4a846563f5de6cb4a0134f0fc320b8f893486e2420928376bac52b5cf4da31909c59eae21f48ab3b479739760287fea9277145616200a26331ee179d6e74d1497ba5cd33010001 \\x96a2b4a7c7a655de0fae9af18ff9df5bc8906f871416991a873e7219968b59123613d9ad2f7cfff4032cce33ca085095aac433cfdcc304690265f427ec0c1c03 1662397319000000 1663002119000000 1726074119000000 1820682119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-93 \\xcbe821f0f575e17655da198a8860c3e1676ced482823401f72dc067f53d4b40579fd15036ece7f03aa1d6a3b26a54b21c172993a9568ed1f2a04a4557bc90503 1 0 \\x000000010000000000800003a36b774042bfcd09230e6b5a5123a455faabe591dcbaf73aa188781d60b0aa4f8c24e2e37a7eb0807a15b29c43f33fbbf35f38421fb5e8d0d566ba086d009fce7ca6f2595a48190b63dc9539f5f0bc685ce798f7f18926ceeab68bf9051d8fa8cf8f58266c846f6d3656588bd0de0e4c173eb70fdf30f6a83bfa7e70e8a137a1010001 \\x71da63658f7371e0097e1b3a32fe8b89ac5de520be58919eb9d5473b941250eaaff5e62f7b069fb8b0cb5076809730c123c70c1dc9a3533250429cf334663203 1665419819000000 1666024619000000 1729096619000000 1823704619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-94 \\xcd1c6adcfb6d9c26cf59d6a3afc395e288d90ec2f801d1196bdc96113647d4368a75718bfe74940f3266a23d4e82a1640e8143cafb30d687f49ff3da7c52e897 1 0 \\x000000010000000000800003c70ab017c8eda3c6d1aeb87ffeb824eb9530e06958be7f1f07e794a4a4401c52b736684c344035f0a7daf14fa3b6e9a8ea922fae0bb7b6088953f10071987bcf7244cfe22889c60af9eb62cc7fbbe8821757ab347e2120d338ab127af65bb01162f7e5377dd0740d939cfbf24370357bbfc8d341aa3eee935a271e3071a21d3b010001 \\x85732ecc022ed4aa1a920d3d8b8702cd4a479e69913aa579f10ddecb6d183117ca411a8eb047e57aed8cadab0db294c1cbaca8ed7c4229e4b030d080980e6307 1670860319000000 1671465119000000 1734537119000000 1829145119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-95 \\xce2ccbf11e62ec06e0686354ef22da753d1b495c296a93dce91609f07aec17ce56e99c8ee00f23c71d9e99f7f77eae961ac8b7ea61c4fb70575d594e679502c6 1 0 \\x000000010000000000800003c5458022271f3242d215e8bb6bf91c0518f8178b621492b740ee488224bc3458c30220aaa2996c61a54539095aab8749f137bbce372966a30f12db09c267b82c67e21d5ffcc4e946af091fc6c81ad2e38d8b9a17f4f2d804c208928546bc8a300be2b9cedd494ea26b09f86d16d98d3948c1ef8252b2edf05c962515fd94d0bb010001 \\xdbdbae755b7bbd44e215275557258bc64be45489e130ded7f25103c05cf79e10d4dc6bb2194ed3b02805e4acfe72bf5b7599b22daef48c70f883b17df339b90f 1681136819000000 1681741619000000 1744813619000000 1839421619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-96 \\xcf44fa23104ca1ebe5ff1f6d719783395d9e40d8fa6314627da9c7a6a01ac5383dde60c54225913d5c046fef82e704e450456eee06d4d6a199e5574be2a20003 1 0 \\x000000010000000000800003c460646879f36929b6f583e2ea46ddc49868ffc578b00c76d79c1beb365f264ba7c6d9a1d79b0f4b2a7c5c3ff6bd8bb9a219edc1cbae81e9e4f0e43c17cd9d539a2a80e0abc93d54bc585306cd192a72cb9eeafde57e38acf10635d169b36c6fddb3d67ef9d3df536d14fb471c5b36031fc1a3a5a5e65115c27fb885135248b5010001 \\x75955e6a079708db40c859da0da1d36c888caf8c1a963813b6954a6f2de1bc50acea54b0a0434c653811404d1f07d35aa3969b8058f1622da53df091960ba105 1669046819000000 1669651619000000 1732723619000000 1827331619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-97 \\xd3fcf48314f7563a6f4716b795cad3349cf8da36d6aac1158da02d9548d83215e04695f9c040107ecffdcea4af9fb7db311eee03c016b3caf5a19e1f33d4871f 1 0 \\x000000010000000000800003ffa241d5c165166886b7b3b48f5104fe1328313ca0b259d0c4a81ed12a3b58cd01578ade5887b9eee525fb0f219a9da0e0e9d0f116505cbde03cf2e3f7b103c2d6d84e5dbf1fd917d7c526bd98e8d80a25f4a18b8dbeefc34057520c264307ddfa16fbd8f234b2125eb38d2973befcb7d53f45540fa4daf368bee773fa1e396d010001 \\x697c0c2c5174c66e09d5068e02c417cb66d69d0173e0aa894b92c2be750706210a0eac8a3831c928598d9f6b5744d464f966685ad2139dbabd5e8bf123e99509 1664815319000000 1665420119000000 1728492119000000 1823100119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-98 \\xd4b8d3448c2efb53a23ab29d7e607dc07e7c2a7118650cf631c8784f2a3fc37f2eeb8af432811276a2064889a3dddefa67527b50281d92fd1622d047959d04c6 1 0 \\x000000010000000000800003ed16a411e6028144595d5731d9cf77ef739238b3611810752a7612658ba7b5d4722bc80fbfd3a1e88e3985a210c216f1ad9d72674f8da57f90cd772564095a426529b0722122ec903dba521952b08ba49f7229e35cfb2e1a5de8c7e83f2876fefdf2164fa87410a1ec98ae690fcb74a8d156d3c95dd6f4e5f901bab2635e0263010001 \\x5bd6d206fd8c3c41207b304abb7f1f9f40662f1d9d3153c3906942344df923b214b8a66b31e59e5c25903599f016faa0504b2bfbe194489df295f799ba3e6004 1652120819000000 1652725619000000 1715797619000000 1810405619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-99 \\xdc0485475f5e74393f7220441e4def6baf43fef710a8a9ef9df4216e9415372c113d051a388a71063160d3394f2d1b46f31e4a87f4bb979ed902a956552f5727 1 0 \\x000000010000000000800003c2631e4db25268a207e31278360902b522929482192c66383d2d7f0550a8d6902c921d5605473ee5371f50aa3f6fceb6721497ba6e56d519e73cbacc5f9638eb28eca64302212d1f4628fd888de53ad444931149013145bfa09c93c75b314da07519987b4f60693cd72cb687b7e62743378477a4bd7354d5abe6fecec516c8a1010001 \\x89a04be5a361a611f9fcb362fb2d230ce118a6c2f94febf8d2a11b5f913cab4acf803d77c0bb0c4bfe5d504d39021ab719bf9e8f3306a60b048a271998150701 1673278319000000 1673883119000000 1736955119000000 1831563119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-100 \\xdc14c43cdfa2861ef7e283bd6b5e5412bc3d856fedbd1565cc89ea8723dcf70cd53ab71578a4d356c6b009d03e6e94c5ce98d890c2f860731e40ac2592dc22d7 1 0 \\x000000010000000000800003c258a0ce005a4bb0124e47f398d6e549c1f498ca5c6222145073690df38ee20df8dc37c1a9e22cd1b2fd2d6d04ef7025d2027441dba975bdab992c66476b9ad5fc24dcfb390057367347569752f5cdc19874985a7e7e7d761d7e89b0b696b24d9b0e9d8ce094248077afde7c3401e84fa93ae0b36f7ccd521d9fcd90b2c781ad010001 \\x01eae28db44ae85ada6751972de86badbb5cd70d276314bdf17d7a5255bd83f462a2aff027f17db17fafcd70d7007fbdafbc2c0a9707074e8be630c62fe94100 1662397319000000 1663002119000000 1726074119000000 1820682119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-101 \\xdd284f0a5da0851c02ed00b066a100699c3bb4218782142df94cccf775cde1aa67ec220ae408877dde1494dba5903af4798653ba9afe4008267c0eff0ca392a2 1 0 \\x000000010000000000800003b9dd33973e7f64c348f15ba391feec058acfaca1f979046e09e6ee4c6729f94c763b88d3172be3abdd344167b9a2991b7f6ba92f14e5e4f065b9b90c4354eabafcaa1a8d2218198132946626dd312e1cf696388fdadbbf266e462aa65874abc9a9c14e5552df6ac8eb2678bddf66f54a09bef67293b6def5d76197e96f6ebf41010001 \\xf8802b9029ace0329771bda3f3cee36c6ce75c79055d4f6eb9caa1d30797f3970ebb304de763382ad38c2931a28388e3e508d36c310f77b636e00ddd9a195604 1677509819000000 1678114619000000 1741186619000000 1835794619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-102 \\xdfe870b7c70e177b8d0f9844fe983404f75d384e334cca2260f07dac4d03790e13353f7a05b9625427c4190117d7b099a52d471b1b6512cb9aa542acb46ddf2f 1 0 \\x000000010000000000800003cbba4040e2e3c30fa242c46560bc8b154d1bc9ca6f7163b2416d22ed235f29df0b5679d1395712b7c62d8cf76e3e04b6e7a50e9302072ba30fb1e173815eb2319f67b2cba4ad39321b1fcb8d1511166c3c80429808aa09cd88c017517922fb84e409b23089db78edc70c3f67d3ed21d7c81f86209c0bd71d8d0acb047806cfa3010001 \\x1430a676a9a215f6b7f8ed611968df7e699557c0afc8509cd0e7d818f8b9628f9509cbc6a03ec51603bf058f6758d2262cd2af8bcd1670ef621d5c192232070b 1670860319000000 1671465119000000 1734537119000000 1829145119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-103 \\xe16854a56853cdc4e475d885a38ebc6ba60c04341e7223303d769ff751ae06810145578667430bec06bdb01e9d439ebd88b064320887b0627b8bee97da7157a9 1 0 \\x000000010000000000800003a8e33bf0585dc51a9bd9bb2915f55c5803bd96be8aaaec107c8bcfac19439461b04ab7b7e9091563e23306ddabece70d345cea1b9b1b652a82a7d0cfd8a6b836b0006cefc6faa100544e40bb4a531c61de0f77fb650b7b9fedb5be7b45e404f8a1eebda2acec1f06bb75fc3032b7a7e7b05156a9ca389d621663ee0bdb8f4acd010001 \\x4720d524413608e164f9e1b8fc705900a3f7b143ada6b2f6ced80ed1c2a2904231d0ca70a4e2635ef4f2a82a8198ca51a88ce4d65e702ce0a987db48a3a2ab00 1653934319000000 1654539119000000 1717611119000000 1812219119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-104 \\xe9bcd3c85ab84ea4688d98a865b6ba2fdd828ba9f2cf0c04508ad84ca8f52d86742d1a555dbd1df2f4f0a39c0621bd649899468bd0310e157eed00135501ce30 1 0 \\x000000010000000000800003d3e613d02195dad0896245083140b5219d59cfbf2c52ab4278a4e41a88d40a786644585fffe5ae44ab3af0c82805b3ceb3c36b022d74565109704cfe53b6f23ccfcc179f71972bae56992368e56584939fe609ab307b17b6d8ffb84ec8f11c01e03a250ae504c5f748b89807825c536fdd5ec5856e60874e3df6cab6074e84d1010001 \\xe84708cebd341df91573ca0fccffd60022ae6e063d135c3dfbba067861c065ffa63befeca952f973976e656690873b58fd1137590ec4ac8053072bb947cfa902 1676300819000000 1676905619000000 1739977619000000 1834585619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-105 \\xecb87419ee474b64e3ab6fd5e2810499d803a63f66a260d2e2c29aede56a696138fd1391b26b7d73ac9556528329d3400c8f43fb9ef8fb47aa62e31026932d94 1 0 \\x000000010000000000800003a207f398534602c5dca2faa157f3ebb93ac1c6a80bb8d8f42aed23d8dfd0ea37f1a84e45d38e1f22327b89a8fb51ad81a64a12c8a06541fb9a5d24dd34e5d56bb2181f11f16aa919e06a294827bdf8f0a8c9e48058d8bf480b075d6ed32cbdf22948d0665cd1ffd92ab84d00f464f130dc1a6c919774a8e303be3a009a21d01f010001 \\x7be1df7783424277af3f8e32d6592f16e37aeb3953faf4a5d6b6cae40fa341f7785040c8ea7a1775dd150374f36cce9208408bbd6f3689da8109d9bcc6334b0a 1663606319000000 1664211119000000 1727283119000000 1821891119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-106 \\xecf0b1efc7e2233d719b481300f8ca79db79173f8459113b528c44bbb4b57a8251b244cff9b9b032fe8278c723c193dba6828130559d7f5451c6870b0e4a39e6 1 0 \\x000000010000000000800003b6ff2234e55cfb7b062e8277b5ea5b2bafe2b51f2521020a975c911af2da435c424833b49fc5b16de5ad81448fe6124b22c5ea7d263cdd1d7219737425c5b81f67f91640288f0509b015ffb9356c79dd4edce719a1a492bc9c73d26258cdcd1a1955f20b32867738c21e57d4a30b86b96cd51eb9ef955d6535afb051d3a6d0e1010001 \\xc4b356e17fd983cfd6bfc40cee76997cb05b82484619e1086313115904201aa9d4aafcca6c7eb6b4123e900744904bb9efddb5480eeea5e49f76c36f654e0009 1663606319000000 1664211119000000 1727283119000000 1821891119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-107 \\xf37c7d39a7462579f8818f1d4309183b66dcc0f7f1b63688b982f28e65fb1d28be970e17756e3d8664ba218a2a66be1aa4aa96f6ef8a1a64899e27ca63a8b475 1 0 \\x000000010000000000800003ce90a364727e2a3bcf20170a9fee4a8edf08a72bfbc907a5efa6f002de974dcf77f77b3a88da04766b329e590aa99968290ebe292c798462ff91361f887487f5bfa165facd34a5e94efefeac993caea9b3b77e7f07d22c29be23417e948a0942815516f0481ab19c54afa45e61e7336f195e0173a16d10761007f9ae8f6f3869010001 \\x681d77759be2ea4875cbf17a028be09b85b7ed89e021e9a11994a8b4ef64dcd16981fcdd1873539f1b414a58a7328fc6db6bd0d4203a05747c9c6e43dcd29c04 1669651319000000 1670256119000000 1733328119000000 1827936119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-108 \\xf564a95f1bbe49fc227acf9d17e6f9062fe6af7b3d94765aa77e263c93f7477630aff00f16ee3fe1b57858e95d835d2e110a8e6bd31573ff251d82d0045de938 1 0 \\x000000010000000000800003d79faee8939208667312a612ae37ca89b28017aaf16e796d508b40cc1f96e3528d2b6aba3293d61937cf5ebcd4be7dd5bba56eed43a0a9fbea4cc53b34fe695e34c6c97abafd4b52bf974110ed45688f75153a6e734410fb2306fe36bc4c38fd1b6d5c5216bb12e60b81b4ddab18657767e7b534f877b785263ae6988987546d010001 \\xc1f4f343c4647e4751ef61f107016a3bd982c8f74e78521474d4f8f75056372f2744f1a69e1cfe01ae32d0177d3a836180c1113ac44b77a41bab04b35876fd02 1660583819000000 1661188619000000 1724260619000000 1818868619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-109 \\xf75c0148088114b89024334faf38b11834395e9359ebea9db84bdaa261e46ee0174cc87be92da8c0409cecd9e2db699f8343f1197a38ea9e2ed05a3ae57815e8 1 0 \\x000000010000000000800003c40b3d0ae69aa1e7ff5d4d6366843e4de46c894e7d0598e730525f08d14afd2c8da70e427c0dd502a2fef35dd02f64f9b54ea296c8058e06af1bda74669796d4a386e6a3c6ffa16b04c5329baa9424661e90e12c311eb388f150ddbb7b2cfd42651497c160a29268b0180395c1372721999f37d913c71a4eef30b71e8fb34d37010001 \\xaa55012fd55704a7009362f1511d1535e924929563f9a1b9c5f835fd1f95cd73c7da644f81e140359b44bf612a801e624497cf8087e65e79f965f6861671d202 1670255819000000 1670860619000000 1733932619000000 1828540619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-110 \\xfea4eaef4db5555295ab5768c1d30e83836542e877df3cafb5f109082112db9f5f05cdc188685ac3f32edd61b5be3bd89e4c0537ec626b19962a54d9aba48423 1 0 \\x000000010000000000800003b855688ed604216f50522b686cd10f01acb026850d13ba8875b6bc955cd12596e6d3e6c9650316df594632955211e15e89e7404dfbc3e11fafdfabd0826ffd2c11b05218914aa99f9560bbd07f5ff9bd0a9b105bfd10137b48e24ff4a9ac4d88bd2a5b85da0aeda2f65e681261648522951c760c060ec3b995b2dace1f003b0d010001 \\x3b9f20a7cdc50e9b341c9dfe636b7f51bea61fa2fb0eb072296e2b6405bff56bbcf5872fcdf907eed6164cb646a7e6dc1018442b0b5dc6b257352fb355b0d309 1652120819000000 1652725619000000 1715797619000000 1810405619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-111 \\x02b1de8fc7a0e7f3a2e8f15cefdf86ecce47f864f53dee70f5e82dfbf12dff881b0352ac82926bbc8a281f54784687cf187f3666025698d08251c06929570f48 1 0 \\x000000010000000000800003b2efe173295c04f34a34bcbdbd7773d5d836d3faa0af241f1ea477508260b5cc1269fef7d0f2981b2b1920b214977fcb7c2ab31f3966b1c607e6c3519d78cdcad1a31f6d8b84b1b87e2fda44ef8928e285b0f72e071dfa1a9385827feeac4bc190173470f3f5d442e6d6a569e88aa792a5fa545fd170da46eecc42d3533eba3b010001 \\xbcfd0ea5c05d831083ef6ed4624ca586c1aa89e25105d1fd3be52be8e5a508b34bdb01df56bbd9e415666d4aba039810909080fad78b46c122957214fddf6f03 1662397319000000 1663002119000000 1726074119000000 1820682119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-112 \\x03399facf81a0018ac1ac27653e0df932aa1f157d025634f21678ed28d54554052405dd7443effcd9e5955ba0fce7a0116420d4d3eb9a56f01f1fea95106bc81 1 0 \\x000000010000000000800003bcd593c2cd6f30d64c24c60480148f54007c855ab592f1beae97d7a9ef1206241e2ab6950a6cb4e075485abe1b3c8b139ff4294ea0100b082051af0b9dde44dab3efcd811fe2be346a5af0542c64e6e94d9972942558b666fc5c82b89bd646c0ddb3be754445bf6f2c051cf2db7f12ef03a6ca4398145f84c3216d51baea6017010001 \\x7805913a3c1f04413a67459386a5bd204c685b0703ed8d25d283cab35806ba84d09ae220e25b7eeb3d0f616eb2dd149cf111f20396acc47c030bb3860762ab0a 1655747819000000 1656352619000000 1719424619000000 1814032619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-113 \\x0f219e29d69a60c105c2e498db500fb5e1f3ba731685dfc719c02f4f1344ccf114a43e6034871f7e4929d7e7aeae8f0f0c411fa68a23cba1b604054550588460 1 0 \\x000000010000000000800003cbd50acc427fa388ab1d1e80d31b2204d90ded98bb519f84d24ada2eba1f170d63c515b096a40442e64a83e3025436a1c4d980cd1cb6c3918432d4033ccffe5c15d075ab7d987068e02eb0e7f435e83fa419d7abfe5795ea19195b1b302b9f55f0961811819516806b65ebc1e891f01a1d99f1c71e12cbae41574841fa421931010001 \\x4ec3dabf1d00aca7ca21d96259524b78f4078cafb6ce71e712d464e93b4d884175fbb8a81667bb57c6e9d47613930c4b342f644a93a7c9f9d66d07221a0be206 1657561319000000 1658166119000000 1721238119000000 1815846119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-114 \\x100d1d4dd2e202238af30238e4c7eee50cdebe4914fd148d153a838eb0f5051a35558bd43f35bc481fe358cfd4782ab05aab5ef5bef8d8bd66b295268819acb7 1 0 \\x000000010000000000800003cd8787f7e63258adfd694ae1b07179b8713c1fbe9abc385a9f1be7b53fb483a48daefd0dd2595fde709baa8f88c854429b02762103a56c6512b497e070867b4e91b5a6926380ea116308309bc7d6958027b27988248a64f5e0388cda9a00e33f89d16988363b5cd0b83a777acf04410af58db82ba5739063ae12a77fe849db3d010001 \\x73571b70f6a96a3a7bb2db7c29617c464fe14a6ce2ee3f6b30e59c3a98bd4db8c9d2482a06ac44b29f62f1268886966e7e5d2159f00fcc883b49ab84b21a7e04 1681741319000000 1682346119000000 1745418119000000 1840026119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-115 \\x12bda53cdaf283e320b2146f23700635a0bf8a8c38532ca5a66e4d72c1a0da750f9b87dcc9ae4309cf1c2ab2cc815057b53c61d0416c8b194ed1f90c6bf6468a 1 0 \\x000000010000000000800003be03a67e926ea972fcb66ab47983d0a755f97fddcc543222a89ca3a6d691bb460190aafcc45fbdbb0ef6ec6bbaa9ddea54cffef385c8df3f000a97857bed77c7f1270573891c2555bff1858f7cb242d3a63c98e9ff30cd0abfaae21230445271c30a76a7a00273ed76faf9030f0f7bf6e035eef8cf3cb189d47cefc251182c9b010001 \\xe3ed18dd3c1e22dcb7bd6ab6af8f5c7e7c02d8643239630639a2804e0a959e5cca321284ab44c77c3c18ae03ee00afa046e25c26963363356208c6e9c3fa050e 1669046819000000 1669651619000000 1732723619000000 1827331619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-116 \\x14b158b5a99d955ab3f0d539978b039f8d7c0b0a3df5fca3c67fbbef28c782aa5c10af58531187465f69077e03503da771383dde8bd97a80d9903fe2e754f1a5 1 0 \\x000000010000000000800003c5dfb010b23bb3d45c6d836bac10854853d5b1470e2a1c32c52de82f52b2fc25860aa8209f4a5dcb4ece9d3bd1e5d9c0948d8b55ce69583514c5bf790edc46f6ec39c79f81fa3c51a339b7c32796660790a5d3a23bd869e3ad74863a4ae5f2f87603d0424f13c5c91ab7537c03c3dea53942a1b20c420d981fb3a043fbd37179010001 \\x4ebc31bc3db3604eff451bc2ac08595bc61dfe80c055c6139300006a236e0d4ba657bb1690afad89475036d9a8d10f3613e3bd74130bb96189cca67c53aa7c00 1665419819000000 1666024619000000 1729096619000000 1823704619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-117 \\x15b12cc1340bbf820ba972b523e46da384a20e1080fd9bfd27efa74725a62ec87182d8fc775545c385340bf2809528e1d1674fac8f9b560546be23e5ffdcd236 1 0 \\x000000010000000000800003df81dd77d1182cfea0746a1896270fd47054e77da7a4f2098dc080538ec8367637db5597f4d75d37332a6e576a3800a777cd4474c2c4111fd3b2fb32d8c10e249cf0c9ad6c4b890ad9259b90ec1328282b4efde8f1704efb27210cf2233a92192a7de90f9803d3e18e72780d95bdaa0e756975fd6739e0fba9dbf7031f46de27010001 \\x3114592e47142ea1b86b09079aec12fc3fd271629163679ea666e96ff42af97db901d5ea8d7023fc3775aa24f57b9eba56d8b7b5c81664b1a6e9fb151bc2f00d 1676300819000000 1676905619000000 1739977619000000 1834585619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-118 \\x194d2356f6566ca1195b726bcf36f4f88eddbee9a4351b166aead8aa58e9255b820b6c72fe5f65966ea65e2e5e1c624587edeaa30e20d7a52f3caadb76980aa6 1 0 \\x000000010000000000800003a64ced86f442b18e4528549ad5a36d13541d9de7e86f89e2d93f58dfde666c1a45899d8fd45c6c1ddb004c4f620a41409bf5d50b32f8accc3d7c53977dfaf5678385bf046eeff4438cfae2f5a33d3d27f0a3feb4dde8ceaeacb76766c9082f075c3d7e2b825312f203aaac002b65efd31724c0dc9435ed8084df4392727bb985010001 \\x8d7c82cae1e48eece5d6ef295f9576080e0cf2f49d11e040c453ca89b1a2d014c9222ea385c62ec4d99494a1d33b7166c18d51eb025f625553474bc1312a1e05 1652120819000000 1652725619000000 1715797619000000 1810405619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-119 \\x1ad9189cbdec2b59a266a070401b38ce5380db399cea21d2f7bbfc0a8f6495129bd0cc812f2c62fd0518c084bd4d1d0142ea1a8074482044e48820887fcf1df6 1 0 \\x000000010000000000800003d450cb0713da08d43b1254910b16177ec43d2b366b5eb49468cc0d4f270694f0e01eecc09dc108721becf3559540fed32b15ca331a04e06a542f8dcd26593af3b8a0915117f9173ee03d697699e37668ebc0e3e8002123fa77cb85f2f18a21e621b3b6563d1c8f11ed12cd07135496f4c237682ac4d37c9399c07baf7ecc824b010001 \\x660da5b84d3f73418804aa44c27ce694a0a2e2f5176c7138fb31aacfa201917692ae1bb1cfd5bb7823fdc9c81f56fd2da9ec51b63192f6bca44201b204b3ea01 1656956819000000 1657561619000000 1720633619000000 1815241619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-120 \\x1cb12b15f5ee7e55615e7d35bfbed6f5b98a2ccadd78cd200fc8d5a2a924e4bd6339189f8e20ff2dde5929d470c1c94122d15451c3de5dcb21121b4e14931698 1 0 \\x000000010000000000800003c33921a8dfa85ccfdde574c61e32f0929c69ab7fc234d976021048a20a8a227670997db8b5340d2aa8da0c7a7cb8be503d91758a1633e7f6581ab6b8592dee679e0d6407006b336283e6a5e046c8995da5a60b8310d7487dd1423002538a2c1c4107b540b3743220876f36e5bf21dd5141085344e4860437e36c715a80579c31010001 \\xed63587944e00d825eb2607c7ed0b99e746f5d1876b75df12cdf94a57f3f91ea4a7f5638f132294d2c24ffccdaac3fe42287b987fad40de0733fe0bbc4b95f01 1680532319000000 1681137119000000 1744209119000000 1838817119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-121 \\x1ebd0fde42ba387e6285ee46807e1bd929bf388e5e25092e07c209ffd0d7054848f6cd7afb6c7e32afb105d314b641825ea3b9fd35e6f295cc69e35200b806c7 1 0 \\x0000000100000000008000039f7d76eea258c21cd7dba3e641b430b22f7144a9c4f051e4eabd23356ff30485f14ca49271fd46b61925b249e0e0e5bf67c81da880516675e16a6e45089fcc69c8d381c94eab2f5ee5754118827513473d43f055f2d447197f3fbba2071778e625825b1968b1ab8032e0bab6ff083aefeb15dbe70c90c656591aee5ef343eea1010001 \\xa0eaf7173febb43c9e7187ffc6940213411be45cbc2d21e09b5a06d13f318552419418ccad63490348e767e346b1d00b40d7aa8404970b68613238df3e19230b 1657561319000000 1658166119000000 1721238119000000 1815846119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-122 \\x20556610808c0a68276c31134f722d0ffa0366b70623930d96b4fa59a5fbde7d22ec647cbfb11810316a123b5286db97757506f27aa96f1947f1b3191f87405b 1 0 \\x000000010000000000800003bbc14de7e93276f19cec4e22c55388cf3342f58e1f850ac2c7f040ee1ab0d48980bb94044f12f4aa0ce1fc3bc820ec9e366340f8991f1a5213fb538d4c365032f95547a234b6d6553acc5d90ccaf8392dbd5b6382bf91feb09825c978f2a998eeeea36ffdee8af719ff38cdcd61339c3dd98ab9e216114db02450f23def14e75010001 \\xa8da1c37cc6d180b14178dda2bffafe13c07e95de29d744b89094b81c6938a3e13a93fbfd91ad9ac10e58e91a0ddd647e48fc50b57ffaeef575d39e586563203 1676905319000000 1677510119000000 1740582119000000 1835190119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-123 \\x21f53fc143da9eaed51b409fd1d3016a3eae9dc4b4a95840b44fb8a4cbfe69a8c72b844d14017d05e9eac556df93c848c77d6e8e393292455e6a1124aad618cb 1 0 \\x000000010000000000800003bbd164dcb8ee8e7ab0c78ca801d4ab2b1539be9ef0e26336ba01d8cf3d9056d92ca1747fd93a360ba96a12b1ab3a22eca3c28e5574347437d90857f25ab6f5856bc70788cb7eb586950b645365d375dfebe72a3a0a8c2adf58c33494762526bf9325bda6a7820af64d1a602fa44a58c4a0dbbe679645a3e7bb32a1a28c02632d010001 \\xfee478406efef7e220d23d5fb8fbe10f3bcb7a1f45c5be4c87ab823992e8bcb423d67c8ff1fe8b3818d75ebbecd63b0ec091fc99e7a7f1420d7b9e040d005c07 1662397319000000 1663002119000000 1726074119000000 1820682119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-124 \\x27dd51e42a748c77169e23834bdc02e1eacc418388671d5f337fe421d2b0b0fe40f05b4fc11c8eb2cfedcecd54a8c86ff291f226478499b2ec78d03f0ece0b98 1 0 \\x000000010000000000800003c8a3affffb48d144f4df4779ebdb2b1075044ba561442b28c53a94dba7e218a84772d514b037266e79ced491b462072c8f545833c0315bd0fd02e6bba6fd7ccfbb3b5582de7e79bc37feeb6235fb25ba9e3813dbfb24416d0e051be25d37fe278ce371f6e5bb8a83de25c18f645da2f212bb45146c31c52c37aa88c3d5544fe3010001 \\x6698c1162afb0097c2d20ca99f2198f4d1a47f1580fabba8168a4dc75083727d62e2071c49fc48ccd7eab52150091b841ca6c8eeb5f27ce701ea0be193002807 1661188319000000 1661793119000000 1724865119000000 1819473119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-125 \\x28a128ca4ef3effd9f1fef6b5de1da71fcf1b51231b1684728e315c6a91c61557468ce88577c2db0f84c7f9d820b463a81125de0e7c0d3aada073177932b522a 1 0 \\x000000010000000000800003a692ae9c9182693ae8f67eedc5c1dbbfdadea62e6b1715e6357ecfaf067bc1ad4cfa0030aa0256938ca093175dc5e9a196f29ab20c34fdae37a92f14b6448c5c6aa64d10217f492a11e6f8d89719f96a90be7b2863fad12fd20896198e7e7d9c03064f08b990f5fd2d9b169f8ceb1cbaa88a22e532bbf8b9b9f65639a7d32dff010001 \\x797a0089145e9906a8221e48802d14d94db784472890798b153209d6799e9c27072b5985e802022c7e715bcc412bb22a645363238c9e5026fb73661cb261aa00 1655747819000000 1656352619000000 1719424619000000 1814032619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-126 \\x2b0903238566749637b829dfed8a650db10f263e9daabf579b78e859a337a5878c3abc413301a7307950d67070bfd5e369344e30105151044f14fbf97def1b81 1 0 \\x000000010000000000800003e8f6aeb6da622ee632eec96b0f28c0cb1b2f752dbea17d2f663a7b8505c9474849af3db22cfd95886fc63902cdb7027b8ed6565a7cc5f5be7295f76cb78ae382f4766787cb1d486e4fdc4985fbda0910d6fe86e0bdb2c73e91cc8649fbd1fd48ab381bbb6cb1bdc6b03176087443f4e607a752f9f73a85b01cb67a83b1c260b9010001 \\xde3b4c3aafee9f3acce610b1f988390325f6f9c8514b7885bfdb1ca1661dcdcc25ad292d73f08fd3ee6614843d0bc079c722f82bbe5e396e2f0328d70cdc7e0d 1668442319000000 1669047119000000 1732119119000000 1826727119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-127 \\x2f890e536e00170cff032ef90852cad6edc9e21ac5ba170aead3c5fc319e98529b19325b53186768ab485cb34dfb84842fd7d70a0e8ef305f7e537c81168a761 1 0 \\x000000010000000000800003c7f978721c713036bbad83c77f80d5341e65469adf13ba584c5c4ff326ca4d331ed79327f2f67b2789b8ecfe616f1185411256289e18d0b9254ebfaaed45801d933e877dffcc7dc175d9ac46733bc09826c5c530fbb37d9ac11ed176c586609a64e41325d24d2453b8564dc96d06b9130f983af308b47a739a255b92cb200c05010001 \\xbc21adf98e50b28a38c39bfb689683155c7eadc8a48e908981e077f12827685ec8b296241d5fd74eb12dc45d159f0e662aa17250d87923bc11c682dccbc8b505 1667837819000000 1668442619000000 1731514619000000 1826122619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-128 \\x30b9c8a65af7dd28bd50f9557ea803aa0b4c952e9a66553da7cba42c8b67e8d627cc177e7368ba9673030ed255f5aedfb60438460c9085d4e2a1e7dc54101b39 1 0 \\x000000010000000000800003ca93be54a5cb1c68478f92e9a19226fb213b63ed02f8466cac62795e9bc2d1f541aaf99acd9a94c7c90ba837725c10c4965459570450e06d7fcb4689caf0c892534529021d606a1c8f9aca4f14b2a3b8686cdd1b10709053f9b884db0d03c64a9f6a6e9e5c57632c4f0a62f3cd9454a9e8f300fa96ec3af4c326f13f4f489b11010001 \\x533f8ba5db602b2ea34f6e707ea6998366f7e48f72c80937e5674da63018f37498b02a59d8e13741c1bbf88f86cef8393fae72dd136781ad8d90b6d614f3c000 1661792819000000 1662397619000000 1725469619000000 1820077619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-129 \\x333d69930bc55bed881aa3ef123197a6eae5e06a1651a354fb762a14b4c4467adf5e47bbc5e4ab2e207ac29528f95c65fa02d302ede6edea56de8dd05772c1d4 1 0 \\x000000010000000000800003bf02f34574101cc462a9f9f6812f1e698fb2825bd6e0277634b9ba9037fff2de63e5526564b9288f2f3e662718269022aef7a79ef16eca7d2dc30df0585f76acd0b2f614a771b980c0fe67a775e6ec1d1c272724bb6bdba90e2e4a6f1a759f2d2ce32c4a77b0d56e9bb045879fcda5383f2f6ce1e86a4ad5d77e9fba12dd5b73010001 \\x044d49be5a336495f812f4474a9230faee51b0dab6841134abf70ce20f6a5faa5c34f6443b5404e1aa1387efb8b17ada6a563c7ad8ad67505144b5d790dcfb00 1670255819000000 1670860619000000 1733932619000000 1828540619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-130 \\x340944b8ab7c662718fa32f0bc0603e4f0cb1cc2f2f272a59932c1a13cd38b4ae7fba6222a4951f273559d5dc7ecd4512b6ddd416e591ae5d3cbbf1a847a243f 1 0 \\x000000010000000000800003c1e18a33d3abc9ae5b9c9a272468fa71cb496422fd2cb4290519b9e2277f6ff5dab1f5c419f09bcac7379745b973b66aa4241cfd75ab8844be3125d5f3199aaef63b9b0c02cb1cba846ef83dc1a0b6d1ba84bd8cbd3e4d43ecc4c40b0566b9415aefa91877aa2728e8b215d6814da3e731e00f59922b1da3c275ae9748e636ab010001 \\x41b48cea09e5babbf237a261cc481d052c5cb9404013f69761ea5694586b22a7d88e87e30d727dfdab73fdb9ed9dff6e74e1b7a85a34d385f104bb72c18a6909 1669046819000000 1669651619000000 1732723619000000 1827331619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-131 \\x36a1eb84524cb6f7338b8a6358d6c0a0a92a14ebe370cc069e28b29601dd5b187e7c9e7c8edcba560d688c151fb040085308b104a32728eab212ad84f62b54f1 1 0 \\x000000010000000000800003b63ceb901488bef44d7d4bc31f1a138be1091851472e3bd27728629ff8cca46c798b076e63d92613b9bae0c021777798974cee46fc0f2f036b85d065fd8c7f17b67b034a3a6aeebaabf863669faa761e4c113d4a8a4b3e6cd037324f284ca12154044a8d9fc1e686108d5ea7ed2116c56a835102d18e2255be7bfc6dace25be7010001 \\xa29913e64aecd463fe05be38c72d8da99380c06a9a3e3275dae87c88b1ff04e51ba6a3f440773447196ce8d53dbfe4972274ed73661d2fcd7bedf995ed21020c 1672673819000000 1673278619000000 1736350619000000 1830958619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-132 \\x3725e9c9daca0ef7d647f1e0f0a0598ca507f176f6298bc6cd3922000ac18a3c9a128335edd5ea8547359d9bf4892aad658900610484b70d2a7ba4be8b6c1252 1 0 \\x000000010000000000800003a2a8c57c7e86f555be0ae4f6d2bfbe950acd02b3598023f2109fb3c0541b337f86a81e5d9ddfbae0b556f8131c3f4d5459de718e8d9ffa4eabbdcf97543db74ce00be7e6d1c9aadca8bcfe4a92ccab1e84a5502d48d3c9fa84611190d2c810091eee8bc71d5e145ba5030af14bfcec110ea104270cd2ce1c65a1bff337e13957010001 \\x2ec1549c6626b1fd5fc37593e95f6baaeeca965bfac1000b8ad44c0e5ac75a33fde3bf7cb83ff568b73536caf50864d2c5dc927e398a6e7ad5b6a31d475de502 1679927819000000 1680532619000000 1743604619000000 1838212619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-133 \\x38a12ff03d061b6adcc2e1a05a773d0af886dd43571e875d01196aca19a74ac1f18407bcf0806fe35b2bc8d3a10330e0cadb96ad0da8f4603eadd7041f59fea4 1 0 \\x000000010000000000800003c94caa6a3c9761bcea48c777892e23b9c7d858b9e67c27b08ca200728e2d07083a6bf5d378ccb2aac686c8b1a56c05d4619775156c6d0f1a42048bcee84adc5936c84faaefe681f57344bd9c513def57bcb8e2c23df3e50c574c1c03da1ca2c8bae2c391f88f56bca8cf7d9a38f2f6406cd070b6a3fcde2aa0a3288ac5b1b0c9010001 \\xf21e5967e6e94d278b6621ab7311bd2a1f60fab9f9f52eeb0b59452090d3138e0cd7c3107c2d4ffa192be45e78cd1291a432132663aabc2a5d1c55e9d006df0f 1669651319000000 1670256119000000 1733328119000000 1827936119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-134 \\x3e61e3dc6c3e52fdd3046ff29d3a038ad19e69d8651930a7d6a7cd32a544bded47f98414a2b8a6c84472df8eba090832359d93c04db0fb789f7c2a364da1f3a0 1 0 \\x000000010000000000800003c5ec29aa0f041d49d23f3e0cca2cce32453d37ff2a267e63e2947ccbef96a55f97e106f59254a212cf39ae4321589a83e9888c9a77912c1d8711229988dba94fdb94c12f5b4f1e9248682bcea8359917b534bce875509c99570e6d9158699d82feeb3eb133af3ebe0543a56279f2c770b4e552d33059490f4ceb86e1674480b3010001 \\x278e1e662d6fcc80341e5ea2e6cafc499d84cde0e52a10357d32327745ee085eda24a05e600767ef7a1712c450dc58c3395417ff102747a8aaaf9e9b47545902 1656956819000000 1657561619000000 1720633619000000 1815241619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-135 \\x3f297e6b775badc64c03679131553e671ae25740d66d18dec4d92d615571b0074f9f9acbb5a88aa285ab711cb62a780b040cd8d23e8ecea4ae93a47e2263e161 1 0 \\x000000010000000000800003cc1539d28bcdfb541c6fda696ff29a50790ebef84257c6c6911a7725db88cb9703cf6096a68da8eb74c2d9c7a47cfc4fa4624b31dc8954f1152828739091cb9454fe440bd0444c88525c1b72daa750c734f7ee2be969fa9fc650aab07670727e7365c6d9c4ca87eea3c95bc7bf1011e82e3478c092df1ea462dec54d113b77bd010001 \\x9f1c978f7ba53e805e1e461533d458b7448ff2bd9cb8714e83dbc5a50768820890387fd3151d76200105487dcbaef5fa7e2fdddac4b5cd9246e416bd5fe6670d 1652725319000000 1653330119000000 1716402119000000 1811010119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-136 \\x4185e84f96d5bfc6fde03c8d93e9741f99dc412183f4c46582df4013de26f761211d69c6c3bb8556d3072bbfa010f0b9ce18a591d7cfab4d0e0900a0c29404a8 1 0 \\x000000010000000000800003df6d285c60a9b12553e8f44307258abd23e5497c38a83e7e5cfb995cca7dd09586f9e9ab42385c01c84121b5e478dc884358513d82d2c05ebbf87fa178ce7aa09553b212668c520f311a6c07e94fc3920d67fb88968320f92dc7f2220fbd63e5b7730d2ff13bcfe521a15bdab1f369c18683c077b24fc804583c52c2c6f9b9a7010001 \\xb85ccfde7ec3207c7e1676aa113d57b3f1922ad56c6e4b76f7758d56d6a54221dae0467192135d34490bcd63b7bfa4441427d7b2d4a34c4615cfbfbcdb2e2d01 1673278319000000 1673883119000000 1736955119000000 1831563119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-137 \\x4479df616a897e9064c389a38b526b8c3edfa0849960876008e3859598852eddd7708d556453cbc85711ba5ebca97705bdbabee83ba66f8b233e82bda7067c06 1 0 \\x000000010000000000800003ea89fd9770cce033bcb13a28392370cff3c34afc774f6067d77e38ef15700d52edeebaf97701c80d442c1cfa3f54efe96f5f7f48f4c1dd777a173ce57230da695fb6bc62cb8fbf75a78533ea21196db0d65446422bb25ada92c16fd9e8ef20f6ce1b737c664ca7dfc734217199479a39f386350c7e51bfaf4d35d7e1b05bc85d010001 \\x9f55da1fdc42a4166ad90c5dc4390dd3671ff4364a70f91e6cac4eecf65bead04e62cdd5c24c8e8276791a57373ee0f461645745eadffcf511f6cf6db554c207 1653329819000000 1653934619000000 1717006619000000 1811614619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-138 \\x47f153d6a7c45d07101914d59de0c5affd2fd8aaaab1261fba49f56bb90fe805c07053a295ec2fe5def0ed166b8ea7d83b95b3caef03ca3627f9f08ee824b927 1 0 \\x000000010000000000800003ba19eaf83b0b93d24e4c0ab936552ca9358936cd0af4f1564b514c66e9ba963a1fad440679d6dd40545ff6de9e4aa8fce7223a8f916fca3eeaf50289e6af4c28a8fa949668d402492a26199fa5d2d86b076d496f90f2c20ba168fbbee447aff58f556105549eebcba922de577088f50b8559ed526820a7958bc3889f38f65f09010001 \\x05b86b5a922506291a77cc454185ebdd52e96956535aa8e45969e90b28838a2a071cbf68618495103fb4f17ebeb86ca1653ab3ff143f48e1fa87bda37e5b950f 1667233319000000 1667838119000000 1730910119000000 1825518119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-139 \\x4aa16132cbebf8446978d3df6e37fa8ca20b552b4c731d23e8146835b7f43a637801472c791a0b253090844fb315283759014372cc32aaf5c8a6303f87d424b9 1 0 \\x000000010000000000800003cc68ddf763c654a0a342126342bbb64c0584c69f2b8ecfd51bbdade377f3c8ab49ed908608cd8f3e0533edc2dc16ef6ffa8ababf157d41bad841535059e4dcf04684bd7b6c8260061a67619b91999d64baa023381d586f7fa0d02eb9aa6ebf4009f62d3f10355ca324d8576ffd7f501dff4dd39719e3b246c10b9bd59fbaca89010001 \\x5c1cf21bdfd714f5d1f86321bd3681f353714ae6077a896699e444c352bb108839f491696938ac2d884a5c1362ad538363c2caf61a44346c9cdf1518a4c8cf0e 1682950319000000 1683555119000000 1746627119000000 1841235119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-140 \\x4cf9703451de94cd7c17963b4bf2bcb56baa3bcd5cccc7d7100888bec0607f66b20718dfbca2305876c962dd21b831c8d1e5f44ae8888642a433069db04b1f80 1 0 \\x000000010000000000800003df46fbb47ba41ddf90f7ecf84c226185ce29b826bbbc089f91e540004c04f039d66ca87b60bd1db6ea296a01cab61e153befbf8c04edfc200957b453f8a2d50fb02c97028964092f10c14bda8ac870e195c2da86df2137fcf91adfda954cf0c6bd1fd0fc0e72bb28febd63183ea6f58cf3b98700395d805673d1078afeeec6c9010001 \\x5e1709c0d2d7220942a89c74697374ffde8a689585d3071d0163cdd42adf4325b095a1aa212469a35f4ef84a004c4dd249d60ec1f106a4b2e0c33a0e585c5309 1667233319000000 1667838119000000 1730910119000000 1825518119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-141 \\x4c618d5e1556883433922a87e2b4302e77d5c6f1185367ba9b420c8929b65bbb1072b73f5385800b0d5b13c235b071103dfec44ba8ac540921c99e1c233fd01b 1 0 \\x000000010000000000800003b0dd9dd67b887905f3d187111b6ec56ef0111c26a0a1fb5d9168d904bb804ef138675a4beb28bf20cbb81e307d89a36ee285b228485715e9f5d04a301253f3f4a4f67a0d4e2a79e6fd5afd7bcb80d5ddf9d012fb8ba87fad3e9f1b98d431e409f17bb808aa8c7e532e520a5c4af03ebbf21096319504efb953e9eb928c5567f5010001 \\xfd7dd4abd3b5705bf8ce444ffe9405b5f296ac0cba651840d462e863289db7f572940e41178cd5a1ba4cf34e0bc633c84aa6ba5279f42bea9a5b114ee70e9604 1671464819000000 1672069619000000 1735141619000000 1829749619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-142 \\x595defeb88f5f049af5815c9116f5ef0f31955c2f2efa799a1b309d7ec8145e81df2b92d55faf0f4c131ac7ef14cb8b4dfdd7dde8b059f2e705146d07470693c 1 0 \\x000000010000000000800003a3fec67edd2efd76abc0e58792a31e4bf5b927fb2561e6e0353ca98681ba49dad3ea25bd5e068629d0278a9b15c890e32a17d1f91b909766b850e9d306e3029ddd0a1a2cf1b3746559a6ce30baf3594031f3e82459b42a8e4b969a3ff755f4fadca0443ad7406b7bf19e588fa1eb8b44262f7e1fd0e046f4107cf08089be3c07010001 \\xcfedd0d3ffbb7dfeaf2674d8bfc650ee007c7f0c3755e29963dd164b979888873f13885ea18513b2a7d8456e0382e5024d4b9728f6f341abc4e43bb48b8de60d 1675091819000000 1675696619000000 1738768619000000 1833376619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-143 \\x5ac5f399a27bc7fe166e39ccd25b35cc3cd1a6647c12f73fc535ecc8723429bd15abdcf81235483fb5039a3ad16b1e0877e2b58cc5ab78e2728c7ef32a0e08d7 1 0 \\x000000010000000000800003bf22b4989143d0d8642233c60c113c5f97f0d345868b0aa24968968ff7467bcca05ade7553ccbcc93d347848ba1652c1ee6aa9209335c7afc0ffd087b1fb2d669e72405815e7b670195a7d2834f3af7d48c7e30da0f774779e8c6150404d5ff17ff64d3fa4123d7ecd52f2254c37a7fce0e8ee08faf8de18886bf072c818d173010001 \\xf2765db9432da3237a85697710700ffbe8a289de60bd50628bee73bc7eb447a087d88345f014299ed165b0adc8d02d33563e6f061d876181bd86c74cc7fb5001 1667837819000000 1668442619000000 1731514619000000 1826122619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-144 \\x5e0d658eb5e40166a5781ba1024301bcc01e02616a26f26c6b969f6f025ab8728e36f8063cc95463aa9faf35688bb5e4fcb888d8f61c69bc76772b0f7194141c 1 0 \\x000000010000000000800003c949a8179947b427e756262aea36c0e6a4fba56085053837c3329dfaf66396584d8ece616164b84cbef897223da3af2d5d1da01e04de6bed22b4bb397648a7ba3a5adef228eb4bbea78b6f14ddbd40a3980f2c653bf09a2c698d8959f19f3133b751aa2ab1313e1dccc42ebc3853e0b7e4972bc29107873bf070d243bd7f155b010001 \\x9922b7001aeb3b9c1cc335684f98d4322ac4406e88e4486c01fd5c3ce31fbe4516d2d7c3c3fe9cecbb2c4423ff1cb6fd2d6d88b06efb89c63f8c4b4a959ce50a 1651516319000000 1652121119000000 1715193119000000 1809801119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-145 \\x6325a2d0e5c74fe9e284f2fd9bc3761b397ca1427da853bed28e944b59da31bef82991db5ba2ef96c4f2a9624eae24033ddec1ee955c14e73b4d14dbef44523f 1 0 \\x000000010000000000800003a9dd1d83b28945724c26ff126eee3f430dc5e58a478fc2ffb317c868b818ce9dcc0f068f0ce768fa581c1263c75fb6f00860d2759b01bf057cced91c5b955c70edeeb34fabef196554bbd170094ad8fc617db997ed35ad3f55c4cc0ec51d4dfa42fb6aee67b77b6eecf46bc3016cc56bcf13060eb0da073bc3d321aeed6a6589010001 \\xfc132372b42cad96c63d3ba17a8c9ecc939f06d010287eee0eebcf5e1f1585abdc627af9c611fac47570cf1906754590e0d0ac3803e6ae46898e1e2c124ee405 1651516319000000 1652121119000000 1715193119000000 1809801119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-146 \\x64e5a57d8ffde81687d99ce2a5787538961ae0d438f6f2fc5dff04ec24eaf2b01d710986c26bd9c6cfd3fb8b45ee64f8e9ff245ff76605532b21e59358517486 1 0 \\x000000010000000000800003bf87cc255e1609ab0d14c86cc551e474d850770d395663e343c5308f4f95f0971790dae9b18d722bf2e2f830cdd6608c42cbb790924df16082d25463bc9206e8692d9fff51196d8923b198e91db46572a74e90a9637c0ec76da14ae2e9671aa1f291864b571a37fc5acf1a436b4b0ec536e8691623210298db5436fce69f88a1010001 \\x260376fb9499d57fd2ea9d8405433ac349499db9e458c4b3dd2573ba3574df5d3476e1fc2c891c4f698ca19afe8412f1db20b7f6ab69a899ff98f4309f8cf503 1680532319000000 1681137119000000 1744209119000000 1838817119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-147 \\x67a95f1054c3da573d0c6d1f13b9c6e0b2daa946ccfd6d1f7e53416e1332581beed1ffea16ef1326b3447fd27973d91b1afb9f1e8cdc9db2dcc813bd72ceeb29 1 0 \\x000000010000000000800003ceba1e5585225f50eb998443b256df2cd3b3876181d856e0d64de7bd06cf3595876821f82ba53026808f931f4a35b66fe985c0f1ea21e21d9db608027fe2f5f869d439519bf1abe20c2f447c43e4235a1ceb29b8921f86a438045f7f48d69c090aebd220425269148d5c2aa8197beaf111c4fa166ee08cc59dcb9f223aa18e5b010001 \\xf16e6bbbbecaac2d69e13778aeffbab312ed6f1b6609a27cd8fb1ca35f07e857dbc44701df36940805e3bfceea9b704591bb20ff7880d878aef153095a412804 1666628819000000 1667233619000000 1730305619000000 1824913619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-148 \\x67d5e0df7046ce05efe646b618e45348cde0112033958c9cfac879968845bf2ce74294f5f79212994b853e747d5cd06b6895a5a014af950bcd0bf2a1904adc05 1 0 \\x000000010000000000800003b8d299535129a376ae3600831894311c20543b92e1496ca8244330a03112d850ba1f7cccf53809026ededb9e87d848800da431a1d52cfbb8aa0bb2f4f3b0f8cb49e6c6800b5dcd4197c380b54a404ed864ce538a8f6e01ca465dfb0f07f9828b71186748e6136f9e8659aa2be35876e6761eff6d92bcac00a5ebfee2a7776831010001 \\x47d4efc1bfd3a373457366812dbfa93e80b69fb744042efafa9c4f69e5ab68e347936dfc65c2b25b914cddb831ce50c63251ef39f2412626bfa8b339cc9c7c0f 1681136819000000 1681741619000000 1744813619000000 1839421619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-149 \\x69fd0473806c855671749625d0756821d35e4da9c2704e0202368986bf47ab0d6f920a05e92ede9b3bf35c1f218677cf6099dbe533f9902bdf840866c471f81a 1 0 \\x000000010000000000800003d6287579dc35015d135eec4b787d89f97ad3254a7fba4ca3939e53a646acda6e74d504b7c09151a2ddca95b678e973c36343dd4a1ed53e9c8f059ce0c5f35cd341e6afd4a9563857867d5d656cbae3f9f1c9db90515d565676529d4d04c97baca7c6c800a66ec5e3af50bac276ef0c01f5ee8a4ff4f7060145f912cbc0b6fdbf010001 \\x2f9f20857be5e3530b46f6903692d670ccaabe70aecd5edeb4f72d890d78568fe6bec7a023cb116aac7a767d91469b867e7fcbe1bdbf0959e442102429c9c701 1674487319000000 1675092119000000 1738164119000000 1832772119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-150 \\x6ea93cdbf1064093d45c4736d442bb0606e752dd377faaa43b90f98347307dcb717fdbc7636d701c371ddfde5b3e6e300cdeb5c072dd902b014e6709922df695 1 0 \\x000000010000000000800003d2fb77afcacebc7f9f5171da2f9c379607567d41e6c01092b4fdaf727688acb61c42b66af9a3f71c6b1d993cb701431f48b1d76acd3ab7ce9161c14640892cb669ebd7c74283c073ebd62767c6768cdbfb19735e1271e31f3082a1f1c3d39f24312046419e92298eeac55fd029e69d865677256827e7df266c5a2228cf3e03e5010001 \\x643fb3452fd940ba88c319574e5b07fde6bd9fd47d80dc432d74a626d7b95085f82c1906b30e55e444f72ba3f0dcbc94af12c3783650d033482fd707689c040a 1675696319000000 1676301119000000 1739373119000000 1833981119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-151 \\x708574a5bf50bb26821b68567cf1db19db42646432cb2adb5a637d0e4d62920c9b1f2b05cc53513107481f21ed6e9941f69f9b08ce8ea92cf8effc30b6f3f46e 1 0 \\x000000010000000000800003b708a4be91c18ecd794127acaa39224388f87f622d97bbfed77d19a03586b59d5cbb94baa8a1688524626b399e48d57c50014637bdfed8fe5fb07efa72953bd4d283e1b35cc475827218ff1601c57a1ddf8c383e54cbcdecbf70befb3e49845fbbc2484874b7b7858444b222fe9d9d75e52a45dd4823cbeafd0c1c2de772cbbd010001 \\x089239f214d32e1978d06ee268c729573c87eb202c6881b09ed81d2cec29f94055174381e9dfc0cadd338ff1ee1aa8e12f748e4fad7c13090da763f82b215a0d 1661188319000000 1661793119000000 1724865119000000 1819473119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-152 \\x77ed778357a0a55fb29c59f7c0b157d6687f13e9f4fcd971f1390cc19faa5dca154f602465c9c12a94020dd11fa4ecf1350c0eb3cf3a8a5b55a0d55dd2416f4a 1 0 \\x000000010000000000800003cd2dd69151e298d6c86e1e16f6cdf25d338b3a8eebe22d169067ebd1d8d2ee0b57723b9bcfccc8730e9acba9a3199664d5304d4aa33525b0b52a4e9c47d131b786765801ee5d1e26bfe7102f0474c80c7182ea339edd6c79d7650fd1716b1579534a36339736b6e1d2b33c51ec3233c851174c77b5489e9af83765633a1ccd5b010001 \\xe0bf403de038974abe2ce63ab329226829e7c32ece9d2eb3c71a7e79cd7bb9cfc3940288356604621dc1b833bc958788ed61d10d265fee1fcff8d09e0ae7e006 1667233319000000 1667838119000000 1730910119000000 1825518119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-153 \\x79adc66a02e5601068ab4d63a978636a182c3fbd51e913f8c01b729e71180877e4eeedc9461ae2215603efa7f91903f2a33d88c37515c8ae618c686e71b4e851 1 0 \\x000000010000000000800003e4fd67449668bfd7bf6899c6aba0f86fc4683f66e857eddafb07e7bfec89ceff1c2244ccb51136eaa02f06bb030a289a5b33b1a08b4675eac57d4b8086d9c627cd2303869b97ac96004f1d7da4510e25786036532b4d1348dc83cfece06331ce70c8e0fc69877dbf93b62e5c3572ea2ffae65989e7d13f31b64cd1264b49cb51010001 \\x20aec60aff078c3bfa627edd29b88633c59adce3205623004bc125b4a3cb4c552f7d320329dcc593ca6fcf9ee9067840ea4cc03dd42fa44606b89f47fad52c08 1678718819000000 1679323619000000 1742395619000000 1837003619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-154 \\x7a896868d3d78b7b3a217a7a2675c8fe008ecf0d45c657953fdcb829d1b822f00ed738dd46b3996924521d77f90a84300a2b2e8c4912ced5012908d514be7eac 1 0 \\x000000010000000000800003c4d0574345795ea7e4bdf0ad3fef0f726942dfb7464ec8d28238c8162e171f4fcb665db12193e56105a740cb323816a0f34e28ba93a3ea7e80eaa6ff692990bdcaee311fd006e2cab10d15116a80266fcb3364b95e0ca8c72e58d9c67cc9e0652b3c3db5c7fc2cb2fad114425b368beb98c88a9e26e03fef26abdbc36a892773010001 \\xcec0461b151d42d823a4bb04f7a7c9ed76c1317d0775ab1c7509a9631f0f270f56bc65b8282834ea64693d3271efc6f470bc97c5a463aacfb9932517c353350e 1652120819000000 1652725619000000 1715797619000000 1810405619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-155 \\x7b295f49abdaefd048844b871e3d2b99f5c09ab03a094cbd52602d0ede694a9430c9a45e9c7b09d0e43e04b6fef4c22b6523adb670cd7d7520bfd85d7427315a 1 0 \\x000000010000000000800003fa641c97c5fddd3514315eaf9fad697a3b6bca187da8024eda2d8988cb01c76b96ee2df6f8c334919467e499ea18904e4afebd377908da7d4a394047d020d6d5fe92384beccaff3188bb4248b839d12bfc518f2545a1f66dbcb7707d4fdfa7939615344376839d7de9609c4561bf3f29d79784b3a97fd3a227406e6d39612151010001 \\xeef3d8f3bafa18609ceb365d4f93f06b2e1d5c8c500b48e5c384fc218cf15773fb043d1a064bcac523f64c5a017b2197f2278b6d06eca34047f09863fb3bb70c 1673882819000000 1674487619000000 1737559619000000 1832167619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-156 \\x7e412264a754b7c7f94f50f5426fb7a579bc2fc7f8412df39b2d92e4e2aadf840c99eea10541ae74cfd8c58acceaeb7aecd16ca95b6945d508eebf8b9b1799f0 1 0 \\x000000010000000000800003c1d07a747cd8a0ee4ea25ef3e1cc643cc87d5c3adf2e1ee6207b286408d286461e23b4ecce6ef7e2de787ca16541199ea7fff9edfb9117c0919bce6eb14b7d212c27b8090795ecec6d880b5a2ef066e1d7d7f7826e6da5d92cc0e1ffa895056d92d496155663556cb558d1e56a7627cc9dc32cfe6dd1a3b1514a29386e131a75010001 \\x45fa3619931a8e185a37c0bcd7a5de10b9cc9399e7e0e457687ea867d6ee0faaa275fa7f99cdc1e16d40ff46a914f812631f77da6d0165e326e4145275823b0d 1656352319000000 1656957119000000 1720029119000000 1814637119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-157 \\x827924cd5084b415e47b0a22bec9f4dc51be09a53ecc5494aa801d0996357b7de32306e6e89eed6ed5ce659c3cef60dd1d7cde8beea7d21db6b8be0991880187 1 0 \\x000000010000000000800003abb02d21770b55c206ef5e9bea7647af25fa282683cc208e52a5404d9bb3d7bf400f89c19ff543d61e5678b22aa7f615de187b3c722bb6d8acf1f9e75fa9bfe367d89f3fa050d9c2f34376b475608887cb4c1a56b0d99ac90bb1a2c896a72a6104f1b46c2ae1745c582ea6ba3562eea90b6594aed5e2201b168f5e21a47eb7ad010001 \\xfcf1615f93d3653b026c9501e8980308fd884e7cc0e13c77898b411e0f707fef56ba688dc99ee3110b6b89157cc835b5b9c8975f9aa6216447e58b5831bf6004 1659979319000000 1660584119000000 1723656119000000 1818264119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-158 \\x828142ffae781b28f02552cd28ff1197947cb15cf48205f631aabb8f91497e6e0f19a6efe7ccc679cf28eeccc25974b45c238c72ffa4eca8b7abac0950b9620d 1 0 \\x000000010000000000800003a6a4ffe6e74d47dfcb022bd6fa48231f3bfb5ceedaef0827bed6abe6208258ceec3e5be273283b2ce863a1c5d593285bb7b3f21352a019754309540df38e91459a5ee6d53574ed056c4ad4cfaca23cbe4a209c770f0787fb63a09ff5098eeb53f4fc260c634a54a0df16fc6f2edf5c4540ba287bbcfc4ff12389092294ed1d6b010001 \\xadf3461fe93046eb3f331c3b0b7ad90919c10ce0198eb1cffdd0c718f5c0dcad4fe4cdac54a28ca9623ae6771be8105772fa014dcad30dc25f2c1472d1b2dc0a 1681136819000000 1681741619000000 1744813619000000 1839421619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-159 \\x84bd1cccb57854d0854a9470b076a250b81885e21927be035d3e02c926db6d026d71c1773e26f7a35dafa1f370ed5ac398d4aa61b949680c45ec55ad100f23ea 1 0 \\x000000010000000000800003cb425560629d8ef2e543a5d7dcbb9f9c7b1ca2a2e47c6023555239845ddb554ad1131f011bf11c06b09a847fe22a8c0400e5234375167ac660f13a5b24e54913696a91a6b0674aecdd110d18b64368fb32790d261957a4649e79a1db87b71b530b6e73e44cda0b5bc3e4e2ca4611d74210eb7181897cdf6630fdf13699b44ac7010001 \\x531a09407725c4b571b07ab5f0d3e97523ec61580c0fd8033bbc2839b343a0f78334ea8adf03c3efbc885546c30bbbd724ce7614a0d7d11919e003eacfbddd04 1669046819000000 1669651619000000 1732723619000000 1827331619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-160 \\x85fda3c7794be933fcc7eb95528c09c678a5729ba40e2e0361a8dc4219291dbc9ed5d4b05bd87a4643dfb0f49d5f963d863eed160d34a5e98dc0d4cca3a173fa 1 0 \\x000000010000000000800003e8b760e529b5a1fd55b4ef816eeca1260e107565516511ec3f48c4d6ff4b97795624e95e571feac6258691b38da2c25ab8a7299ae6aabf0b3f044dec76eb4be4f92f04b5f5733ef92d383e5231c565c77023e72a9049dc014780eb41a82bb283a99571166444e3a26b00db75cb851aabe3a89968cd39497784723f889afa843b010001 \\xe31c1a1f234d9684f52c6ddfd0b6aab27c55454280ad418c5c9b57611d65f3a7c81cc8e23bb7a9f5c26e3c8fdd9477d00ba6856c6f14def3de1d8521b271ba04 1679323319000000 1679928119000000 1743000119000000 1837608119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-161 \\x87796bdccca943fd77cd240c86c346cf75223df569e33fb46eb1fec5a983027f0227cda10c1166a3ae29d3c5b9eee81ed6a1f019132dab3005c51f28962ddb85 1 0 \\x000000010000000000800003a0f2c48e193b2ca788b7fc844525c6ff4e20333a303f3175b382882a5c799626cb9484699ea2b8ee06a1d06b762958dc6955b4ec40266f9ffd9cdddc94bc609b1986c0253de7f6a6500fa94cd9e822bbca48360e35079244450f8c02e409ec93deae2c2e81243ec4e7b0cadb37dc8bff3a76b58a8fc695f0c816e62dfcd7929d010001 \\xfefa1c4cb64212eafdf7b94fca95baf1cdd17a49a9bcaa54bbb84416ee17229169c338f3680ced3b94c1d6ffb9beadfe927ddf4b84a35267f0d762d21b2cd808 1673278319000000 1673883119000000 1736955119000000 1831563119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-162 \\x8bc5e7a366723391a5c14efe2ff0133102c0712b2dfe3d8d91d4233edd62cd863511339771b93596ce6ef6bbb4b490811efac46d49ebc1bdcd54c61421c62d78 1 0 \\x000000010000000000800003d0d5bbc05b5b7dde895b8f48b35feccacc746685790bfebed17e0fc85ace6c9daf9ca41ea312839c4fdd91737adc061a60e926e511feaf72461b827b6195d0d0cc67b1fb7cab1a9f79b4b55d5c519f88d6131010f873a23f7ebbce148eb8d71efe11af2ff7e4677a4f3b9a4eaaa370e0c807b4ecbd8c7089f734aece43b4e1df010001 \\x67b8bcc25ad7fc0cdbb796eed2497121b3599535819c874ea4d37cf79f246ad410c245e3ab19ba73462ae15fc545ac04955894dcc5a94819b91e588daa931601 1659374819000000 1659979619000000 1723051619000000 1817659619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-163 \\x8c3dd4aaaa8b9fb5e1f84fee52ca8011bf0603566c56498ec28a2709e2f3e33f437d83cc224964546d3eb27113f6d1d6d5baffc6ccc6bb9c0d50adc3787a230a 1 0 \\x000000010000000000800003b5f5ef4973fa2ef684263beb1f40d4bb3722a952e2de78114d4b6ff7f06608af18ab96f4ac582e19c7380dac111ac16a30f325cc1ca01b37f96947bda9d76be18d14a38f7cd18e0fbd74573d6186363e77047ae944fa5480c591e075aadbbe5b7600f752c764320634e3d93c1b3d29f361c2c06fc10a9418dc9835abb4fcb97f010001 \\xeb6841a8994af73aee7c214b9883ee67068767e8b9affb0b757a0e9fb9b095946f398719ceed44a31c2f6834f497f73d640df4fa9b43da179b3491c88e0d7305 1678718819000000 1679323619000000 1742395619000000 1837003619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-164 \\x8f91e7315e104be91f02ca4982b2e851cdd8105da1279a20825f0a3ea7818684bb131bb3979f2870938aed5e38e833edad38c772399578681a239867d0b05397 1 0 \\x000000010000000000800003b92891f5417109cfe1f15c002984fdde2e6ca9a49bd1ae2cf9a900d6615eb95207693d3cda9f941dec60ae0a6f632dcfe585a32c855b810a0babda89b14d65e70548045f2e14967d400d9d7ac4dbb7a57ca8693722c3f24d5fb5bd6298ea3b71779f8ffca7b5eab39d5e62a4c8fe699a6b857155ca84028591871cad7a678939010001 \\x8efa19235a8d4fec12f3a25514d52b15eb2807ba1eff203c74e0cae483c4adbc16385d07fa280c623bf5f68a8798d8f1b63cd202a35460b1aad8f2b96a4cdc0c 1661188319000000 1661793119000000 1724865119000000 1819473119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-165 \\x8fed095dafbf09266197a98ee8838edb651bef152bd0824e4c18af7b2ac0aa14fd15d991785175cbe144d0ed8f3b9350d888ae8ba7b29c496315417ead9df06b 1 0 \\x000000010000000000800003a8e3697a9b4efe50c9ed3347d162d1b5669f28b0f62f1a42e190a543ad747004807873e385d12dce697c04c1d425187fef99df42d6e8ad5eb2fbd278fd5c1d77fcb96639c7739df59ef6f66571842dc25935e743d07d73accc58924798e0eae9a96472cec2a0a54b2e450e814c7bad1284e823244841caa5023358600b7aabbd010001 \\x186abba9aa37bbaa8fb5f13b7bf67643083fd0612631e18eca6662ff00c0aec0e471107001d8ca57cbdb972732027b2673778046b00fef2070a99eec4f150902 1655143319000000 1655748119000000 1718820119000000 1813428119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-166 \\x901183fa770d29e2a8e1187c59bdb1f24b5f3b883eac537bd4608da23ae2ff3b67f8e1ee621c1137af25083c8eec26a1560acce4fc7f8f7a1afd385925c794e7 1 0 \\x000000010000000000800003a3cfef651b3c451aa79c357802ea4df30c763cd75ea138cdff3e9c9e2637387f461cf5e6510c32832caf984ea4363d19c856e1092dd21e9334e6ffd5207724af12fb22d9361af709fca39310f0c01cbc61fa806e9f84ea0c5e1d5458ea7d2b569e8bc787e9418f7646e4189d84cf28c959b8caac06988ecf04365a125761e44d010001 \\xb5c5de59d049eeed181dfa09894dbf2763f135f2ff07322fb0f9a1a12f9d8e2dc5ae8c8ebec88af3d791a47f96e2737db0d07763c45ad2d6d8ed95a686cab10e 1655747819000000 1656352619000000 1719424619000000 1814032619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-167 \\x92d505ef6a015d377d733668d7e81d29841469e84a50f888c6acd6b3c7892babb29b2fcc74809b7fd4db29f046223109ecb422bd263358b2f7135b493ad524e4 1 0 \\x000000010000000000800003c2f265946f091df4d9e7d310a8421ec49a3fa88ce1e94121d67c7ad33635290ee7da98f9a30887b7e4c3c5419f6662a40b568bc276949ec64725844cd316670f2688560d5cf72cfa205a6db637c83fa4caf60de077b12a2e2c3f5eb91282d9287d117bac321d7b0b6f531d000732889879660164ebda2d44491e4f9ac1b3d3bb010001 \\xdaeaa9941e4b07073d2b8d419824eeaa6756a5572ba6c482b7ed1c2ea45e8dd8e42abd029f0a79b3ffd2cee13e67202317e04b5d7f5b8ea184790f899f9bcb0f 1675696319000000 1676301119000000 1739373119000000 1833981119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-168 \\x93a990f43330fd8885224399eb1f095061785b465a3795a9edb743664b3301c5d2985ada4cd7e00e9ce1211c36773483ff1279c3f517a7cc80dd3431d15441fa 1 0 \\x000000010000000000800003cc7d88c36c86bba496a93bfa789c3ffc5189f93b368b0a38b68be3c9ec1a0df5c998903143d024efcf5fc54824af07ba6bdad9a11185ad5461e436dd3c742ce4a01d24555d6e4a2533665480d5066de65204465cf802933a5e5764ef1a7d3ba7ff084f4eb12dbfeede606a7b4e816b9e85ab559a4abb674e8c63bca71346a57f010001 \\x7a0c5a1616e050deebe302d2d45356527a1bb7677db8ea48dda66cfaa2a539f4f427117002e18099fde128ca17bd7f5b610b1dc39ac7b9b6e6322af385e74a05 1652120819000000 1652725619000000 1715797619000000 1810405619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-169 \\x940d9111014209b2c13431a59fa590b2e4b5c183a1f372c39038a6133fc9520b371394158e158970cbf084185fee39bbe0da673a01bd3f44b06f2a2faa038029 1 0 \\x000000010000000000800003aa4ee26873001cef5f154efe6aeae74d762c95be1dc1600d99502c553118c7055efd53dcf29f57345db50c3fe6e07815738cf490b5f6e062c1498405a0f19a580ac8c77de7c73b02e21cbe7d71c652c3108ca77149708f0c5879e9c327d80eca0a97be0938d425c9df3b73b01b5bdd4281d75c12e21b57cb4c7ffc90e6881137010001 \\xf6f47b483e933dd9dcd310d3c0ee9b523466f2b0060cb4167d9168ee7562f5837642d635c0464d212e99fb69337a4a7cf005403c8d5ade41504c15edf8459806 1676300819000000 1676905619000000 1739977619000000 1834585619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-170 \\x94699c38aa90e6d618dce6488385c54dc89dd7a47b154ed53268852dbf174ef0d16cc2fa93705bd3a1435369fa1592dbc6d9a6a7e90fa50772aa9ce2b80131f8 1 0 \\x000000010000000000800003c0ddb188c35ca97def81ba25364538b68fe42e6b1cc6f26c15dbf2d68d1f51e1e7ad404d6d42cc3bcd6c41852f485a2d6b5d2df03716affdfcfad96d2d357328d97b0f2dba55e91af718cf1bc08e89ef7bfe6091880bf4fd2b4a83b5a40f4b32d3415049a9dd4dbb0c397db71bf26e82b74de44fb5c90f4ab23609849d6e797f010001 \\x8a7cab2b1754b720eabdfea47edf459740e79e0ba736b8603f9c080c1da5858479612108bbf0438518a275b165b2f289bedf54173973190d945d7708d4f86604 1670255819000000 1670860619000000 1733932619000000 1828540619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-171 \\x94858b32901d6b5bc69c8a57fac1c9dbcae56e7d1dcecf3982199401d7cc29289a6c94db50b1db79f8e6fa29a3d7b89577bc8454c15d53a1a38a96b982bfd76b 1 0 \\x000000010000000000800003c7ec5836d8afb7ac596f55675b1c3840518e9ef3ef1d269f1ad5d52708340f7aaf0b92a52eccfd992d5492a34c5db950606cc449e47e9fd94cb285672ddac37ca2d7839641ec769a8ec05758abfa06c2f82f836e1743cb21f0d362e75a3e5897fc7524d2fe46fb6d9d629a78c35351963c5651bd6317c35185e5bc89927fd671010001 \\x74dff100f6abfe55df6de2ea0f8d2e07b667023a13b63b1915b7b473e316c91c06e3c0e33ee6293ec95cedd2e76a484d8ca3a3ca1ea3f676f1d9c779c316f10b 1655747819000000 1656352619000000 1719424619000000 1814032619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-172 \\x978130647322413b5e47dbe96354dd5c8360e92c2075ea898fe703de2e4dd4c40cd96378994ca9e09e9e401cbc8b98693fd71f6ff825bc444db8e2cc28b3a6db 1 0 \\x000000010000000000800003c5a81906d85f5e821f22e50504b1739e94a4aaea324bb31c4dd5d0f5b49104c01ae3d4c3f89fd5fd19d4831efea6e81d613d384723e0fc69cf61ddbcccc49cab12ed3d2f520f15a9d1098cdf75093c6c8aeed15af92c5c741222a9fbabe7a74865b793c9bc7dd0ec81ffc3f662dc41b94e52c7e08ce5ae26f759e2f8ba46a01b010001 \\xe860388c438ecaa4f5fb2635761e836cf7ba2b827d1673c4225b14d88041b6f2b4f2fab51708b02be9be2fd4bc07b3f96e121af864a00dcbe27b5ce8e97f3e0f 1677509819000000 1678114619000000 1741186619000000 1835794619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-173 \\x9811425b613b4f20bdf65b0ae0dd65e1c8d1934026f043ebac3e7d3f068c224a31c9485f6cadc0423f82e7a90bab53c02302e10b912c81fe41d47f1d596c722b 1 0 \\x000000010000000000800003e4bc445accdcfc837070fcc9da39ff24c131d80c6e3c5cf77d9c05b7c1fc1eca09e0dfb83777157cd98f01c2bbf0a23419a15d5bc2b66cde67643668ff3c6f3496be5d4b500f8df884a383ef0609d07fbf7aa5b85f6b93a8eada4e79ab3c63bbd39125d4acb6a2841564316f538b684a784b47e02c9244a6ffb323e588602797010001 \\x609e39b1e13f2a14a53af2b00cc9ee846a1b22223aafc715071d68dcd740930ca92b4fa6fdf7270068dfad1e47f2fcb6cbb1cd456805a25361b7b81fe14ce901 1664210819000000 1664815619000000 1727887619000000 1822495619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-174 \\x9a811f866ee703028b19662c92e5757945e3e7dd0d044745a2e3d5740c30ef5cd718e2a9741e77966ec643aef3c8f61702aedbecd7bfbe216aa24caa783e2064 1 0 \\x000000010000000000800003cc8dcdf8f6d228970d3121c1f988dda083a8d5c46447dff5bf8a9b8ac4f3967d0b457cf832affe4ec4bc320476b1b9b6256e3420bd69cccb93cd101aad385c1ca8dce1bd4ae1ae43f632ac44d75d2989a39d194b8b725f605bbc8e196b648ce301861f02d7e6b0484e4e6083ed8fc45b60d92634b990287b688ea523b062166d010001 \\x43025a57ce14327922579e0520e28bd62805ce01cf49f4fdd7e7218aa53d8b57d85a66c007d88c01ff42ec1d61eefb6da1a8644f3fc96763938244a1599f8400 1663001819000000 1663606619000000 1726678619000000 1821286619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-175 \\x9b2df8d23591d4bf1b116f92c2154d19bd2819b5fcbb4e461f3bf68b3fe0a95e2bb7a55d8d9675c3ebf72a3d7096764f6a6cef62f95126b308027c9a066dc900 1 0 \\x000000010000000000800003ad4ba4607f5b7a676734c1f3df5281776b9a91077a22effb795c3460657253e2e87340bcef13a6c3af4273af62b309b92781ec98b54282f5f2911bcb98d836a7d55dbf1e3aea4e4244da8c7a7f286b7d31a69b88a6e2eee0fc94745082bb4e11753f0d7ae5974b6a20bc33243bf28c1c4b3068056c2cbb9580e6f74ab536351f010001 \\xdc17a07971e1da1cec63a183238fa6679efd45ac9e16f1a89aea5a5e78df5be6f6b7967f0a6c517353c4af423b5a7df31b26c91afe6d0171e25f0aa5f3685f0f 1672069319000000 1672674119000000 1735746119000000 1830354119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-176 \\x9b7dfe416d16aca35889494ae1b54abd2396e037dba25ea412b3af7419f728a3909da2fbc70ab3227578fe2396b6243a0423d3ee6610152da430a82c7794da69 1 0 \\x000000010000000000800003d7d82377de23a4ca066222529cba6b4a1fd135b2db23977de26eb03967d232b2965ca681a434a7a9bd4b17a56eb101d8490bbc51c1a103773aae8d8495943b39e3c454703c0d335211dcb74ddf9eeb2646bea7c7806a4bb279fac27024dadcbd82fe3224fef31c6cad147d148417a91d45ebe722e98e7b8453865da33d7fe7a5010001 \\x79e318149c5a3adbefd404ac78f316a92f54c0ae70c48498b28986e8eb84f65343e29d741aaefa689c083359dff82b31e9be6ef894efbd0f7453ba095b81c508 1656352319000000 1656957119000000 1720029119000000 1814637119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-177 \\x9b89e75f0b5ae64be87fe740a570b1428a78b4b419b14489f5d7d5768e9c00d65d1d0dfc38cd2efd7183b2f5be78589e1b350a5f01332a3145fd0aae9b755274 1 0 \\x000000010000000000800003d264d4201eadc19d40663617a26bd70b54c2c782a6c339094d85626313eb1b06e342dd60c06b92d6b1eb3b8d05891630c595483eb75ac79909d11f8eec33d21f35b2800c840fa00a2c744599ad01a73b16fe1bc2df5210763bbe0282bee6ef88970b63683c63e9600b37ab301d737b65f5e123930324d975829d2eadd75bed4b010001 \\xe1c9225bd0235ca972447262df7b892b47b918ffa627e2d69931c893190b0166cd3763ac5760b52ddbc9a1db941f1ed96b258794990f635a78e62436d060b104 1663001819000000 1663606619000000 1726678619000000 1821286619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-178 \\x9be157ae0866b824d57bda21b3a1398b06e80daa222279eeb8f299845214b5d134f6dd715c95a7cc822a8177f513fcd643f6d3875b27cc23ec5cfd1689c87ae7 1 0 \\x000000010000000000800003ac1e567b355b11603bcb50292f502a74be45381ff26b82bc543961d919a21bc22a06c4f62bfc5aab0fa782a39575e89b696f95a42db1b957c5ed5474d066aa91d24d98ade9ba87f3272b4f33bc3156ca1f389a5393eeca11f7626ab98b95acd32ef075599d31ee705d151961f4820c2c782606d215797d36761f8b1dd8d5dcf9010001 \\x468361c021707e5c9a3f950d9b6468e56224149e90032cf4cc4663e76d84a42c0ca8b99d2d5d4db40ad36eea3bdc5e0d1706765b3dcb1ab0860353a2f90e750a 1660583819000000 1661188619000000 1724260619000000 1818868619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-179 \\x9d2566e7a475f6c34f5c08c0b1f8318294bae921c6c31c5ea78e10d1008d70deea9e3db34427791f517a988bdc8ff5144e17197bad987a0960fd4fd58771bace 1 0 \\x000000010000000000800003ae8273bcddf1be5fcb39520d3955a6432b23e07e622f17779a15c757d03f2824ff098d610c5c26bfb78ae6ccf1223976cab7a6aa29500b1daa706cdf8a06f9b9d5bcd17227afc8a06d0f272fc5d89dc33f6e7ea854850b613b2d1a13897769826abe01e759b41486d53efaf44c4531c6acc2c1e2b54db2322be6ca91611e121f010001 \\x156e501dd9503ea7728a7e04c9f827680fe997e55a844e7ff7254718a7fbc951a2d73665262e87870d15e9ce1f535f3afbf4040d65a30e4395d3933102581900 1672673819000000 1673278619000000 1736350619000000 1830958619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-180 \\x9f59a8c0d00b36a6b230c44ecb96d4684c4ab4bd56e032a4b34b15075aab0c2e34d46ae3fbe4993618c4aa2d364d46b6b7f23b0f97ef2b80aa33423d9a1a0681 1 0 \\x000000010000000000800003d3483097fc56e74b9a0e340fed48bbb5082787f0d8754b69838cfbf4b1e72e9027b290b1d21b454c9ee7392c17afa94e9d697769a842048d7ced56b14c2632dee2df6bf69421d3d5bb70ab2924ce1a7de7c70bf763d57406d6b14eed868e24dd5f2d0c342bf4a7de292bf3f3153c69ba0e8a36cc043378afa9be46013044515b010001 \\x2e5607ff3a8334734e27768622d5a7c08ffa63efc429c9bac95a667c4952ee7cc0f87775861a1db10d0493d580066570b32f4b8788f2a476c620f17b9802940c 1661188319000000 1661793119000000 1724865119000000 1819473119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-181 \\xa21d20b42e8c047177f8579a9f8eb58fb7766da5d41e99aeae77b39322a245a403e9af0911beb4c9ffdf3aa31aa291e811e76885fd57714eb8c2328f09706af8 1 0 \\x000000010000000000800003c3fd0dbae2f97eda75c313de1f28155fdb5835ba219f48978fad09a23871adff51a0b457b2d7e7e1f43df1e908c653215c9f803e6a6f449198909b61bc6f274c45f1ca01d29d8204ac19331c0bd390bf721c83282de26b35f1dce934f1d4e218cfc62f769e1e5b9ee9899c645dadadd274cab3e43469b00a64ecadc20884d5dd010001 \\xe19689f9b9e50c617e744e0767cf54266a11ef6e023631d9fc685ce95f391c179e63f1e6cb2a175eacabec93ebb10ae7658d579ed5eddc64ec779c6a0e736f07 1673278319000000 1673883119000000 1736955119000000 1831563119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-182 \\xa439e72732c9f8293fce629b29173bd5477514faac1024341be986546b165c3f34eed40a4b4690040b314739bc2dc22caa76993ea399441ff68948c7e3b61c67 1 0 \\x000000010000000000800003ac410c35cfbba717c75dfc052ce366063756e2656f7650aef3587a5547474e783cb19e0d6dd05a1dd0a94f9935ceb0b8191dceca1d166784242ba65f2bf558fdf9deacbdebe87f6ca561dd44a51afb6c92e9eae1566834c72ed5757097fa7bc720a7adb169daa99c1c89f61985034e3588f1d656c707293b537bf94b6704e221010001 \\x42ceedb622b28092bb334727bb7d85e269c20d01fe5954ff0bcbb0bc5d04b633508e4766bed508ebcc16da1a27143ca66c7dbb51a58214eefc92a0d9e0281506 1657561319000000 1658166119000000 1721238119000000 1815846119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-183 \\xa67574c75324e8204b8f6e166c0e29747b00ce04db10c16ac8c0825146402fec27f956afcbe7f0d48c963d7cbc7194a6dbef42a5a718ec8da15b7a32f715788d 1 0 \\x000000010000000000800003d2a6d08f17476e886f7d03e28c053fe31f9e14b72dffa30d92a9f6f58cc4e0096e7502c4b8381c2039f292b3edf458a85079eb80508034b370d51c98e825ddf1e253b4b4459786d99bd67915abdba0cba18fc97e17ab33dc6cc09a9b3979ea885c7c77294f7e052ee287503fe58bf107ec3289b3b70954a22107d5571b537ea3010001 \\x46f76f31bb8fff056fef9dfe3b13d8ab3a0ea6162cf73fc84465c9979b18512bfef52f94c70532a00b11a8c49d695560dba2ed7606b89a17ba3c13361abbc208 1658770319000000 1659375119000000 1722447119000000 1817055119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-184 \\xa80934e30303db2299ecb99df1fb48b356b80ce1d428e441933cb3d521b6bd95c81f4baf5345da9d728ed70462dccd8ffda34df73446ce8fc5f21fa7b64f3f5d 1 0 \\x000000010000000000800003abb8735b193c31213cda67cdfcd72239efefa6f51af5ab77c762f0e11275b0156a2397f5fdad58e3be53451bc9ca5379c5e4cc99a2151f88140f5cc005dd3394fcc1cedd119c3db7ef4ab5cbbc7d2dc47955e822047e4cfedb221e992f0b4091da02dec3f6de8c448300d9967097dfed16a116dc6e3f0a78e28b122958bda257010001 \\x422f6f3fb8eceb5c48adc33154f86e54619d1325307b11e41ad363c5e452db795664153d2931a471c218fd246f8fdcce188a30166f797de26df3d33b223f1f0b 1679323319000000 1679928119000000 1743000119000000 1837608119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-185 \\xa959f09afddc064af297429ca9c0922433bb0a95985fdb461c01fb4405340e6cdc6063aade49379564f1bf12dc47a32cf5d0420c368d57e5b2403d1576bc313f 1 0 \\x000000010000000000800003d50863fddb25f15bd48d951be0db95e852f36af99e8571fc39b76bfec9c73451e5fdc185b6b02cf08d77fc34682a971c0f4e99b9442eee860796403fc7a6cc0ae827354d5b75ed0fd827d441c5b857ac7595369972a48b84cbf815ff1294e1e34edd77fcd86d4bd8f54d39d6a1ff3e6d0e9b923eb7cc57cba047d818ca85c6d9010001 \\x1d636d72c086015cdcda6c2f9f84eae4fbaa1a7f37c260517c7db82d5e45c8a6fbce5cebb28c4f7d9a8a4d34a3165b350323f6492147e7269794595eb12b280c 1678114319000000 1678719119000000 1741791119000000 1836399119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-186 \\xaedddd2c39f441c9c7cacc9c2fa71e8c885e148d86cfcd47b07d8388a4062e948a4f4a254b89ebcaa52af54592581a22d4acc3380570a690f4dd88e6f4c7fa9a 1 0 \\x000000010000000000800003d1c1dec52c7c0c5d71025a19c9113611ab745e24d083406fdcd7517dee697e2225b2cd995eba6700095fb0b9157c6b80a57ac7a42992cab6e9aef6de5de190e2f883c26070ad6ecb8b0e2794653f4bed4780eba1b8e13ad6af612b8223db878303b15edb4c12e796aef6b746d676d2101d7594f7facd9d941d267fa1e198c3d1010001 \\xb4d47d5e123cd9be15c70ce647da9a37afc725e08098bb446e86d412ab1658723e72b7ac593e79dda10d9139a8f0409071302d4db9816997775064866473320e 1652725319000000 1653330119000000 1716402119000000 1811010119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-187 \\xaf6d4033d7cd2b437f66d2084893ad556054a49570ee93f6abdd41731da1c795bbb75e18c582c920cf54abba96c009bc6d226818641a8937572d92682be6f559 1 0 \\x000000010000000000800003d50099439c0e53800d050b85c0be8044810a4628b2324f0f319fdf7e0cfc68c35f3d052f08379dd5f2e8843c7215279151d884e0727282580744375ac297422fab672c523e3f435e7a9a6dcfab775c665cf26ffe57631e301bcf334f69a6a1afcd359bace332d29b7b94a5eef5684080487a1c082568104a90248f9d2a9a85a3010001 \\x30963b50fbd087c53ce568ce2d0fba66bf8c3499cf6d88a3452a7a3fa02107499b569047b09ecdf5a97fbe4a3750cc921ba1db89b32e935b096d7fe194279b00 1665419819000000 1666024619000000 1729096619000000 1823704619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-188 \\xb4a53bf5ae524212799dae76bbb820c3f2ef83f303357408c6eccb72b5264a50e9f65cfdd19d3f0b366738521c540ff7209a8ff132d408d5d8f3da7b041eb9b3 1 0 \\x000000010000000000800003e492344922c92381976aebe3f6e1f9e1e1255cfadce13cee248f634e6526f260bde9069a1c2c0e7b4f160b82831a6dc4a45684ec70f8f215d03056baf859e8fc3bdea4cadc4a896f738de13522ebc0c1461077abbbe974ffaf37183bbab2f4b3e2883d155ca2ef63d4f4522544d416ae0c4e399b2b8667f0780edb1ee85b3ee9010001 \\xcaca07136aeccf11efa65a53cdea03d1cee72c887c53c186701144d1a8d4c15d9e866165c102424a944632ef57486aeb0089d4c1ce55d9fb4d7c70286f6a2809 1655143319000000 1655748119000000 1718820119000000 1813428119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-189 \\xb8f5d9b2504dd36985a66d6d272bdc2d33bc0f4bde0eca000186091106cbe1c5ae5d29386d4299f60deca6cadac246adfd7fbc554e73ae37dc33a07d93781cde 1 0 \\x000000010000000000800003ab350260b7700bb2c8531925ba7718129df162d545c6c1b3a8c5d0b9c10d748fd690a46f126f8bf41f99a6470775715b744a9267d1b52e53caef450e021c46f24a02d91030277816d14b8ab630f1d71a8d609a46e45ce9635bf2c2d4af73524ae35ecc60b6ee2a04e916b63751f28619c0d4c38c20e46712774b7a38187aadf3010001 \\xedcb9f2ecbd5edea80a6e9862862d85bef04fefd0f5f5ccf6b8a937870894df656b0cc88f1d49d33e1150db79a418e7a27b6e4e6a3c54bce0b5020718e965702 1660583819000000 1661188619000000 1724260619000000 1818868619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-190 \\xbbe1bafed9e05939410e3d7326397047de4d4f6c6fa2b27aedfd0423368ca7e6ed5468175f17ed77debc6b25f1f42e8b0fbe488eb2e583a0b3c6a36af1af2b7b 1 0 \\x0000000100000000008000039861d6b17e6b55c759711ccf42ba42f7e7f87346153b1e1b33a6a91a5e156f36f01e27cd5a70d3d0c4c899b439315fbdf1faee3c4f8e0d57afb599fcfe4ed6636c8d188c12895ecfa3fc2032c00ac0a12b14bf06b863fe42296f09fd0c681fc365515939b99fb7b364590d8e11069ccfdafe01d64edd5423b54eb20ce74d6587010001 \\x1487e35ea43e4cc878b4986a9ebe92d8ae168f84c6bc90ca5e8a3237a5ffc2807ab561324d905cb185525481cd34b25a1a27f2c6cda1e7f066a4dc39b4a4dd03 1664815319000000 1665420119000000 1728492119000000 1823100119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-191 \\xbcf519eb0766e61e27d99e8ac535b6761badbb63f4e9d5d64eb964d13e53d953e0f18c974b8b5d9e1d878a2ef4b0c0dadc6b0b37df18418764d923e8237ceece 1 0 \\x000000010000000000800003c70cd683dac4a667c3700b9581bc09f33908d2c024ea8ca9b51f8fc5b5d59c8278b9efa26c71d26b475cec5b4a53e8ef2b6a7a9110233d2d18224083b3bee0de3d8d13aa04640b2af408f5303ea6c2a5f91d2ae9bd0716b9629f2e84114ca26d5fb5a2350bdde92abedf4593059b2226423d77c536e89b93c9c1e13aa2a04735010001 \\x81aee8ebbf7f2a77fe92a1dece4752ffb144f026fa61e4a8d395183dca23df5dc0b8d3624aa47ccea851e7f84b5f137872348bd1e8c26f4efc5765c9c77ef001 1661188319000000 1661793119000000 1724865119000000 1819473119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-192 \\xbd15bbb2bc6ce60cae2e67430229d54ae0f84d081ea4102ee6fb160f5bc0b563419ee5817a15b296b1d9e18784562aac93a960e3c756b7a30a4c033b9bd4eb7f 1 0 \\x000000010000000000800003b7e6711f627ff04acd3bae2e600fc281faf25ded1f138d1bcf2da15ce8b0def8d902a8b1dfc31194f85d230a4536e64faffdf972f0b02c49a2e8fde15e540deae24e8f82cf7320af0f5a4bb522da9f5a475241f95988716af95437063a4758f866ffd41fcad387c0a75ec6f424d306b675e774524265808ad02ed034c478bd83010001 \\xee8f0259189dc4cab9c195b5e761d0c6c4024ccbce6f557a723112d43cfafe4a08febf16ed777fc84685600de727330cd464c13f35e94700cd9063618b4bc10a 1670255819000000 1670860619000000 1733932619000000 1828540619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-193 \\xc03d9831f1bea35c30cf48d79716b13afc815ba1561e608763dcdeaba333deecd42f177bf52288c94198b3d137111d527614422c4881ac4f02234265be27c4a6 1 0 \\x000000010000000000800003d2f1c84ec5123e5a706b1a8c3af31abd444b642282d00c16b22834343ff01de175b0897e0f6ef684af099622900eb0533ecbef05af1aa261dec83a4d693b37c9e3ab4c42924517ac03ea6959b23d90be3edee29667b86c70a7a2eee445bb2ca12dd3e2f246c493fdb5cbbda3e71e814e3b086129688ee0b7727a733d9ca9e51d010001 \\x62c81973551baa1aa9a26b79f3239785ea6179e3d1a56ce342c8c5d41c368ebac7b73b5cc930a742ed7d9759e6409ac48668a704c6a8ba2160c22dfe9a860c05 1680532319000000 1681137119000000 1744209119000000 1838817119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-194 \\xc61568db03eb5cb1b124d57e055bcfc8de46f57bcf0e3f7d6331024f7eee6ba541db38d4174482aa8a5894604eb9dc2031e8be8a59bb3feb3ebf0936da6f59a2 1 0 \\x000000010000000000800003d2d46244b8f78942fb184d508133feac8b846a79da1c3e6642606fdd8182c5549bbf72a66a9cc68b291e652854abac3e1eee70ebc83539aba24f25eec228bb01dfeefdcec8ade6319f6c6ccd1262bf7104d66158cd81e3b49ebf905c280d971b5d51d1efdd9b6d5004d52d59dc47b47f0bfdd2864e9ad19548eebe980cbf263f010001 \\x3e5b13f697e8618c66669c247f6e48ec2bc4863d8c9a18bf862026265ffbdf046069a331cc6e4de6d4ffa0728e9d8ab344dd7644459b455c7e57736cef745f07 1680532319000000 1681137119000000 1744209119000000 1838817119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-195 \\xce0544e53c28980f98d490d24974a14482d909f1e97bde2177e50f1401f627954567f8f541cc9fbdd06a10885994471c7d130c43c3ac4cfb73bd091f8542800f 1 0 \\x000000010000000000800003bf7ea58b8097cba78e834f4b5b65b353c34bd9240b6201653cc6cdba22eed2eaae686b2145ad596a6cbbdb41aa03472543a5833f84c491ba012fb951310d4d459a0a55d33e0e751fe85178b4e3e45616880ed70d5a8aabdeb57f1c9791284d0ab3f2818f9a126a91ca0b31f4516b75bfb2fa03bb3aa04e5ae216012c4540878f010001 \\x85bf56572bf05191c47cbd44e28583e043d906a21ab458195dc4966e15a33cf8908081fcfc46383c4a6789e4d947ac0da9d97aba302e8cce8c7456cda478b40a 1676905319000000 1677510119000000 1740582119000000 1835190119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-196 \\xcfb9dd04a7daec7ae16b45388de1693fa50e6a3875107a01630febc811f2bd595448f6fec9c6accbd0e9ab929e7cad5713579b2cfb943619d7765a766bb30d81 1 0 \\x000000010000000000800003b361cdf38f4bc21ba585281913ce7eef89bd4def25f37dc9d7f688463310419cfa399c61b280b8505dfbbb9a62ac23ecdc1a69b1e990ad2d35095fc6e4716cd27c093b7eb08a81ad48c8122ec0924a39cb77b23d99e2c466da05fa406bdf23ea7b32a0123c0cedad40cb7bccdf829e3b6f38171221f4a4fd8121d9194bfc7009010001 \\x09209888fae6b679bddb10aa56566848b9e86ff0d7b85a483cffbcba38ada112fef893ebd0644f7c9293c791ff10268ce99dbe49743a0f1695b57457f99a970f 1679927819000000 1680532619000000 1743604619000000 1838212619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-197 \\xd125febc65bdce3b63834b1bbbc85bf8f65239345707d0c21dc4c0bdbb13f2001589acfd81cc6b0524a1e8a406713d890b87131ddc323dc7030b99fa0336bfa1 1 0 \\x000000010000000000800003a9872d2cb22b24704a00eea904fffdc7dc6b133039610b1d46be9c706b971b167e9e1dd7f93ce5f713c4544f6a17f98f7482f6542601cfdf6853aed1cf80b465d994cf063588c2c8639538d32d3e577d3902274e524798faa27c44a823446f7f78cc2817389f2570c3c44c364157f260c448b59a4ac2ec44c2470abcb8f3c7f1010001 \\x5ac8260d7a1f2f7ce0dec3ec9ed3291ca88416472e0a9ce1edf30495f3042333ab5ed66861cdc1fcea3bccb210909720d42bb67aff8b4be94bd97d3d56566f05 1667233319000000 1667838119000000 1730910119000000 1825518119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-198 \\xd731cba4d1fa04c6d3150e8d0ef66fe29cba409e150857be3caf4f79aeb387f157e2e1bcf0a225df4701ce51793fc042b8acdaebcbd6865bba4d97dc1ce27536 1 0 \\x000000010000000000800003c1797183e7268f64e485d834531b6c63f99aa618bfaaa1b3df541fed4a1bf565c5e30570b19dba008656148ed723ee303c83683f94f7b00d5776233faec7b421b25dd63e73670be138ab4449cebcf9f14a439ecb62f9876404bbae9fff4249afa6af72d18340629eb36110e1ace60fc9ea09c59dd85d593921d68631e591b341010001 \\xad6f7df7c8e109daeaabc95540c9c03c09099f5ab0a69c9a88fccb47c459d1e0edb0ea8c0f88e9d7989d19b906dd7421ad91996061c507c25284b223aff3200e 1682950319000000 1683555119000000 1746627119000000 1841235119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-199 \\xd7fd3958abdba79c7fdba8efbd92df3a297f867025e769e3675f063d41d48e1c5b7e9cb591fc299e00d1eb4aaffa921e1bd786ebbc0b12adc1ff6c6b5366dcd5 1 0 \\x000000010000000000800003b56fa835ecd8b783a9780ce6ce3ce0c3226ef21b8112105be02911d00bb5f67befd3be04c440fe11d466bb1804fc29fd5a1335c251e10c5e7a48bd2265d41ffcec062092d9d97cda9b25015c599a28ce64735af2004857ffe702d86fb7c31a660c1ce1bc5bb1a85f326b5509428fcd695ebbd2ed988fb65a4774c7e0ac190041010001 \\x659328b1842d00f9fc9d7e7ff3340fbf5cc18f13592b50c42e6e9f447823a6adfed58909eae7a23961dfd76d31401bffa71c8a7677c10e28861212b04fb15301 1651516319000000 1652121119000000 1715193119000000 1809801119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-200 \\xe0f9bac9e7ff4cddd28ac18053266c7cfe51c73874519852d198b807056ce592e977084dfb07d2b719436935cd0cb2b477050be960eb1bf2151bb694a0fd2f9b 1 0 \\x000000010000000000800003babfc5c93df889d2a4fbaa8649d21bb9c13acf49ab82bc209212fe1c46ce04d83ca1fcc905cd50204babcebc31dd0c4bd3e5f9b0b1e1db16f1670fb7bb802a696d62d65af52537da018aeee5de2a268941dbed478028083556eb68124bc84c565af1db0c259af8d5c455786f9f26bea744f8dbd844833a3aa3aa7c1f6b6c413b010001 \\x65cded89dfdbd67ff8788eae017b66447d539713aa9636649e49f2dbf365fd66252fd5f3fd9cd53dd1d1e4619c8901e91744e3d36bd7400df448da967c4e8300 1676905319000000 1677510119000000 1740582119000000 1835190119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-201 \\xe13d42a71cc52f8e19fbd2fa8678ca79988c6fab2451f2ef32d053a1c5333fb6d3c0127bceef89ac7d8c67602e74c0ae65012cbf429c47e8e659d1fc998a3191 1 0 \\x000000010000000000800003c20da1976145b8e4ae6601ca66be40598e2fb11faf678187a2937f2f328bc9a52f83be1acb157bd53f1b5a30928336a24d7f03bbbf534ad2f866082ca520f5e85301c6225a0b0697e908a36e7e562e9df733ce5d9a4015afcabcf1bb570083cf79fa7a545ac88003d6268b06ff23421402bb4b62b0cbd9c3605b339c169a0ff1010001 \\x6440aa7d09d1a89f66a722c9251740ff698d34f004e5364bc2f7dd7c7fa955727c135b1c9e152279b8a3b46eb056bc0630272eed836901d455640b2a9a048703 1658165819000000 1658770619000000 1721842619000000 1816450619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-202 \\xe1fde6e754322a7043454e7bb7fd4142380af61b3a7c79f0f9802fcb3b937013ea709ffe67e1934cbe60c8c21ed71abe395d56f52eb3eb99c929a5056ab3bb8f 1 0 \\x000000010000000000800003c7310e1b06447a2d3b5b4480c92bbc372a9a775c196de2a437869b21f75b12439463dab6b9c58f182ff959dc56920de29c23c7765e31ac4821fd6f2202783f4705a8942af3d346b1bed1b4be5ce8cb9a15d450cdef605543389f0bc0ca63e459f2f4bb03cc0096aedeea7f0f4c8f9df8f22ebeb26d40d28f49bd5559d72649b9010001 \\x4e10c53ca601b56eb7fdb8b053d154d91823c0c9628686cd89cd3437ab545b0eaae75c913cc9078df964fc26744b6c8cabd96de67bc7242a4ee288a181e27708 1665419819000000 1666024619000000 1729096619000000 1823704619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-203 \\xe215ed2eb93675684e52722ca0814ca19870412238ab8ca6f8a477350698df15f067b88df562793e9bf80dc6318282f16cd54aa8f92f09de4039f2bc5ab7f54b 1 0 \\x000000010000000000800003becf2677b8e161da59cd2cc665735c8b56d73f0bb93528db397b256b204afdf528abf526ca6c6d686d980fb8b118bd805afd1142a0417a8baa01509bc7f731b1d02620cc2cb4320b21e69d9773d04b992592eaf075a6654a0deded7b5f403d89ab6f0f7813ef445f4857e57acbf43fb3deeb40e4c4f1b825b62cadd7f624211b010001 \\xec11eecb2c547404831ff60b0e81a81a93dc9b5374fb338f016dfe45889dfb5f2b5de3b532a9de8eafa9a1c0d34cd1160dbe9a63911d03eda99e7dcbbcb94103 1671464819000000 1672069619000000 1735141619000000 1829749619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-204 \\xe3191fe8b735b73fb76ba52d4a4b8342ba86c29f7309cb76501e113f52562acecb35e7e7c73af54e12d2adacb9ecd9a51db5b3556cae2a9e91efa4089424de78 1 0 \\x000000010000000000800003ca48647656b0205d661ceee62d7600c481c3ca8c335971d0a06e6d3647f1466881638a3d03c9d4fa75e9084925790b94359479b209ea04f757ca03bcd80db3e82d6c5c58e1900f3e47d60e0d9bebcda7ae433debe74e1e55b791fc0cf5e5ed67483cf6782fd095ca7f9fcf16c576e1020f255203b7e49c912395921d96af91f3010001 \\xc8ef4ed83ebcbc0e9ed015ebd604d02e5ad606fa4e761f8a3380665c6e10100f9a0df0d737e04555ef012e80e5be6250ae841e307d51c9ef3989ee27022b810f 1659374819000000 1659979619000000 1723051619000000 1817659619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-205 \\xe4c5d99072eec7d68b555f7d9401dbdad53a7ca818fc525792590b0da71720de833c2c631a5f398fa68301f8f33b2629b9203741c3f5f0cb25bed12b77fcd6b9 1 0 \\x000000010000000000800003bdbbaa7e60e1535341e6e3d181ee2afd0e494893e7244604c5cb2df37c638730be8b52052b9034e2489e626f56381493c19f06e8fa8787ba6e7166056d17f16dde0ec76d5dc86b603f068e99d823599b74c133a79783d6a85fc5ac3ca93adaef0cb5129e292c455647d2f781d1ee8715453aa3228995e0c975f9880f34c60dd3010001 \\xa7ca14a3376238713665d4d14786ffed5e6672670a8f4b72ae59292df84a6446129b2c7534b1719f76abce72346d415b4928ca1dbfeb0418fc22c6abfaf94407 1655143319000000 1655748119000000 1718820119000000 1813428119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-206 \\xe73950398742450009997dfcd9d2d853cb75a7e2b0801ba3b57be067101f432b5abcf7c8c74d0fc53099c8ee431b5b52b3dd72aa4228c265cadb4a5c692eace4 1 0 \\x000000010000000000800003ce04eceed09d3d0020f9665fde4922b6551a7507af2465026f7766e7ad9131ccdc3a64dcf4868566ea0d684e83268223c398ac8da8a3abc7518a8de6232c7d36afac90a3ace3f4d8de5d56308a77ddfb9d5efae8f3b826c58c486b528e57a8504039bba24dff912df4f7c65a3d38a68a7b881baad32357c793d06d8e0f1e03ef010001 \\xa4ba0a7691d10eafca8a357d3245fb37b7acd9e2cac09c1954ff789f92147d9e67c3660abc7676a1ded04e73afb7d4172c24ea1e187906b74e28bc66330eaa0f 1666024319000000 1666629119000000 1729701119000000 1824309119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-207 \\xea954e351bff6086caa2d91c9cc819090221357d249d7ba007efa50dac8c32f09a7d6492d213295369fc268410dbe4e397452bfe5ab7b7bf1ca2dbd01b65ac24 1 0 \\x000000010000000000800003a59cca54b02c1cf344a2ee0e88ba4e07a39983393c96a944fdd8862d680d692f06c6d597cb1cd0f7f6e08f0c7454370cd21686b38c9755ddb0f07eb15e892b3ed2c94dd024023856a8a9e6f5f22241ddfd42121a98d915d6af665ee7de6172793219ed54ca5e9b99673bc5c736cffbfbd3505665763fcfec77ebaf91648b0905010001 \\xb9f584857462f5cb47bab143ef1d812a3a7d73dd4d0ff1f27c0e6f82fc1f13c265ef065ba8e8db2ba713104e02c0c8138b4a604c8ddf511fa89f2acfdf80a402 1661792819000000 1662397619000000 1725469619000000 1820077619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-208 \\xed9d2b2b562525c058628195c147685b39560712572c8005cac62e1bfb209e9e7073312adeb1f30b95dff9ede228df8a6aa3393dbc0e14161fa874c93a7a9585 1 0 \\x000000010000000000800003b967adc67fffe5cba9e35ec18da6cc6bf530d884df62f7f1c0f1fad3af992bc2b58abcd0a254f2af4d0a500849c152a445f2ff59129fea4920777757ea80b7c51cfe44efaaea17f69ade1fe9d5dde2b1c0466db8a19f43058d3c9b7e4b021be7b61a397639b005629c2729b6a96fc347e0d021056def70ca960d1d561a00ed81010001 \\x226768ff459e77cdad4f9f5801ca66f27d3bdcc33e8d7ab2466442d3aafc4140c2c0c4da0419fb22783099545da444d58aeb8fa728cab118aefcf66073ab6a04 1655143319000000 1655748119000000 1718820119000000 1813428119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-209 \\xefbd05f613fcdbbacd34e3d72b07175bed44c7ebf49888b7e2c997cecc226a64ef80713ac9a89da2903725b1afd5996fe2b852f6334a4a447f68cb51ea759471 1 0 \\x000000010000000000800003d4031cd7e6a05a0af3e12b30921500e7b68c1a34f67bd9790f9515464e09941cb13da189be24492ce904ca2a1e35b629d53b9d5c6634e2eb21df83ce9c1ee098a1e951e86b7cdbdb7817c97f93d1eaca79b307b6a58b7c3f14b6bc90b87cfd969c1190bd9f3712fd05b952e22599f99e451f683f28b9278a5be41c4cd5220791010001 \\xb8edff375d31407f83e12d7529942cba14f5f6c21e13f0f1a9ed59ee65887db52954954f7118cc5635aaf1d0f62bd39cb49abf9f639464bbf81085cda8282b08 1682950319000000 1683555119000000 1746627119000000 1841235119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-210 \\xf035207663b9309bf3b46db2ab958deab63c8fdb49572b592d558a23f64bafc795d93ac436db61aff191b4416a4b57f426db8909e2ef28c44050f34a4aeb2b71 1 0 \\x000000010000000000800003bc5b013621d640b12bef1c55020fb9a792fd0f68fa0397b9c8ae6ce09627ff4a883e89d418dc66befc94b2d7e9b759a79c7cfa1f4f517ca25129c25a1f2099f6b62c5c41107b55f4ff0428cdcafafa21920de87c3e0a03235a288b55a1dd7c4e866c87f2ed3b5e195fea7cd679bc98751adabb16ccc5e6b9aaa3222e6b803007010001 \\xe2eacfe0cb2b426d86c2bd10899371b22f65feb2892d1c8d3e69698446ff4db48c8bc84ca10b8d7ec70158ee82ca866ec150122422933cd3e504518c29fe3703 1653934319000000 1654539119000000 1717611119000000 1812219119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-211 \\xf5d1143139068b7a965ed9b3b9e2e49031a56596f5aa0ca2fc0695e55145e3a148a60a3e0824563bf1b1bea3fa4c183290431b696fbd544ca912f5ad96b77eb3 1 0 \\x0000000100000000008000039db3e496ef9261f9f5d36325088e49aacc33330a7cff165f50333baa99d78ec0bd55810138c4d4693e58066368bd425cbfbff7974d58b1111743654cccebe8c7033771db08ea2087b57dbb3499bd5324e959936ca7f1dd5efabcef4590d55d3ca692c65c1ea5a68ab7d7281ab8087965a79d6f4d80ff6b420beca7af33062021010001 \\x6b4d13b20701001a01f55f0527e3da9ca59681553b0047a549d88b19306533b1fd66adf6b4957c2a91c0014d61c826364e3c8f3bdd534c02dcd39e3985fc360f 1676905319000000 1677510119000000 1740582119000000 1835190119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-212 \\xf5b5b945c80e0acf715fd8ede8248751189c56ab8573bf2c00cdf4b0de9cc63f58d832aef1f64eef789b7aee5db8932740e8cb6abfd1297da6615b145ee2026f 1 0 \\x000000010000000000800003b7ceed5950f649e79a57dd490cb1278e57b528dc42e8dd28781727e3c48fc050041edbf4a74b25a87a81971884713301e531973722cd38be520f97ce77e574449dd45159b917141a003758ebafe00fde496523c8eae21e6f188b420ed02233307eb5ef483a7afe7c0071c52721ec6173eb5651719b08ddb3e45908de5dbbc5d5010001 \\x1244b1b00030ad5a0e9ad9447b9d382c456047461823359ed7be18c4386487306c010d92e046e88cb9b0431782651bb202aa10466a93b3a97a0ec434729c2a0e 1672069319000000 1672674119000000 1735746119000000 1830354119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-213 \\xf599e624c0587840946478127bddde568b6199f276a7a7287ca042f05440d47b000d85d4eec6fe63e787825af6b9ba8a4e8693aadfda56f3258f8b1f9224bc62 1 0 \\x000000010000000000800003d12f1edeb12409f5669646adba99439105a8653f6e1097e8f429df7a4b582e317d6288ae4d6a2e2d4df475ddf484a2e5f712951f8753e544169414247f3086d287fcdd47a0f29b55119d10b8dff0cd7fae9d6842575da9ec26512e40b935fe75ef08857102ff8648fd3fe14ad90471ad08fb323e7d19e65ff579195b699d64f3010001 \\xfeaa5a587424e762734589cd0675be447e3ed50d755d214dfd4e4bc71333df99238c6c1918a5a1e046dc2756c7034ec71e26ae204c8f2f4872e8b64d65319208 1658165819000000 1658770619000000 1721842619000000 1816450619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-214 \\xf8f5fbba65707da47025496d78cb8290ad6177cedcf428b5041b77de469272a2a15dcab7c5cb3166a9e83eca4ad3d20d1ed96857dd41de4ef39bedb7d7bbe156 1 0 \\x000000010000000000800003e8d336638b0460af03d9146f473e0aaa3fc3aefc093d038edf5aef4d15818acebeb5484b2da11125cc0a369a3e48c58e69983373221046ebe650451911edc7c7c727bbadb67087f50b73360d333ba86fda5ec6f278d8d093c1a6f366ed8602bfa1cdd2d992b15367e8202d363941f898f8aabde058ed6cc9ea6284dc51f8419f010001 \\xb6f279e464bd17fb59dce7e06395ae515c99b6a306afd124232445d5dec43e6d6e9310012896d2bd568a984f6c02a6c5d2a5e8f6bff2832703875d39748b190b 1665419819000000 1666024619000000 1729096619000000 1823704619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-215 \\xf959f8e623e08d890b3b76ba2cd1086e2d48bb99c947a0a8760c76faf6adf1edddbe483461c30fa489ee0455c134332c260061f24d76d52d3cf8299f8d5dd2e4 1 0 \\x000000010000000000800003c0bb1a0b294f8b429974c4dd6a5a56cdc0cbb55e15fc593b2551136c400e329d71f6cd50c97150a3c1278056bf7953423ae258dbf44c075649c0d6532edc3ecfd95af9a3cb33f78700cc7de3623781f1a62d8701529e11b865e6c53903cdf04c434e0dc49c256de908c41ef15aa9359f22d6932cf6ba7ea99ebbcc0f006bf811010001 \\x02c33d7bbca101c37673b10bd8aacb3ca74a922d8664709b6c800fd977b5907d6d317846885a7e531a985fa6589d4b07c9969f82a68c8e341ca151667378210e 1679323319000000 1679928119000000 1743000119000000 1837608119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-216 \\x009e167b68aec7e238496ae949f97c8152dba4b0e50d0c8ee254b160a65daa89294c891a0e81456308734257cd1bfaac9b3105065b791853c30fc517b39f5432 1 0 \\x000000010000000000800003a26c12449211510519dac29f61fe7fda8b709f8b3494a2f52ba0d476fe7c0c2fe6b7def736792213df22014d04eef18fe3abf3ec0961d822d81801439c7dca0b8e2e6a475f1aeab1c595600610a467736cd7fa5710c4823678d849d98da70eab7fd1ecb554e0ddff0c4026d1af0e835b5140b3a4c8ac33ac880b3393e62fc259010001 \\x863d713b752f9c20493a50ea635b6e4ff920cbd3a7463f5f80e1b1742ca9d0b1f4b540838911032306af0e748d3aa66f0abdee3c6a6c52e6bcf6d73be9ba910a 1659374819000000 1659979619000000 1723051619000000 1817659619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-217 \\x04d64ae80a8b09f9c742a5b13134b901ea5241a83c80b238871244a7bc182d0ef689df80227d69ae9eebf5ec0fc79e511912d9bb94e7eac897492e7ce19e1413 1 0 \\x0000000100000000008000039d3622bca177e230826c82086d0bd8d27d5be8267aead9aea4b8abf93e3f77265cd4490ac83f7bcf9751b1069b941c6e1591d0b0d4c1363ac602323eea9580683ad9c90fadb3abce9432af6d6b2997e673d1909a11b191869ec0959f8c3f2928cd9435d03979d154aa74e22b59569229b2c85a5a4e150043452b708cb5240439010001 \\xe11b82792592b16163829a4bdad772cc8c720151a66436a0a818e8f4d02f9b5484ac9a02ff3d2ec4ac00c4fe7cd7fd98c241dbb5a64ceb38f746c4b81b90700c 1652725319000000 1653330119000000 1716402119000000 1811010119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-218 \\x04c64f58090155d46a95329e7ac173252f830227bbd7c0a41d33eedf8fe52dbfb4e6da56d872a4bde455740e5e27c2305cf88cf249bff73af70db5e2d60695d7 1 0 \\x000000010000000000800003cab2f6310c7a6286de548356b64fd3403b2634eda7fcae8ca575964db5ef7329ea0af41c4dcaf4147e15153e25dea64bcf3794ed6d4622f713a77817e13081a410afa877b3ef43b2257a67756a14f74ce9ceddac3163e884939c015318fd00dea5728b66851e694589d2aebde8fe9b11bd7f6dec7cf2f19427199577d77b5d49010001 \\x7180ef19c5621c18a9cee9fdf68e52fdf41f09039532e4ba9a866f7f39aac1c8e282327c41f8b0b99cd0c9cf17ff1d56da13a41e7afb42a0265f38f59e7dbf0f 1653329819000000 1653934619000000 1717006619000000 1811614619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-219 \\x0ae283f96952176dd8d5e8d525912cca2f011a7def9059131fae8f566cfe7ed2439a448dcccacf393bf915beddb89b8c0e47afe5854f2250693cc15ba324fd53 1 0 \\x000000010000000000800003d7d8a34030304eb29ef48f768b7aa5c5792921aa1fb2bc79e4a6b707c168f4d51fdd853c25fc3ae146f48883e11f2a12fc8291b34f610183790ae02e58a292c66b1c3ca82029f7107b93196830c2cb8001c42b223fe1f0cea37bb06bec4a2a1bdd29ace672c234dd351f083ed8885decf39863f22fa2e943f3b6119462f10afb010001 \\xfe03f9cf13d439a4c5f3c207ac944ea34751e13a9deae63a6a30b4dad91c9f40d6f441332b8a50f7d766943dc98c01f21af804445fcb509d12af62f30d275a03 1676300819000000 1676905619000000 1739977619000000 1834585619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-220 \\x0ade18f42352e60df21a991ebede4c7bf0cf8fd1c35c3a4cf47f38c3724be08e63397aeb64e02edd9677fe2cfb64db6fadcf3935efbe796c62e1d97f1238ab8c 1 0 \\x000000010000000000800003a59b2414e47bc8cdf0f52859b28aaf6efa532fa9dc6493db0212df146570d6cfef278c9bfc1d98fb8ab4b85304fd51c38fffda4e4d4a8eb25773488521861c395d9c529be065718c44d8d28f3f207bab6e4cf81f172c6ae274cd9d1533393e9861f8bc6e0fe10795218e3c7791683d564eea2bdd7c972318c6d58eb155ff035d010001 \\x76fd062ee7adc4c0aea56a19a03e5ffe2a5f049537fb3a31720102a56441037c331d5bf18a8e1e792d2718fe92478bfdc69ef22049bbed884f861abd5c8c3f0b 1661792819000000 1662397619000000 1725469619000000 1820077619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-221 \\x107a8f670f2c3b4048a0549c8b9134ff14592bacb690d1a53f6bf592460e85122ffe5624b252ab32f2d9301a2ec61e81ce3cf5624564f3023556292c6897228f 1 0 \\x0000000100000000008000039e4ee697ffa63d4190e665e76b82b07982f3a9795f277721c3f29d3ce1d22cd4e284f858054edb723638cc4412ba3ec70f0cce559de84a851fb96be7fff3a475ff636da4bc0d9e1cae47ee9ef5bde49d1d7d627d54d4ec0ef5a3e1e5a3650dcdc8f431b0594cb0d9f1d3087cb14da0fc37cc8bb0472a079ecbfeb7e578eb6b13010001 \\xadea9476a1a06da1664418d1b975dff43edd6e0aab4ebfe511f0071622b3e6e656000332145ae5e0657e1f2821e7cc18a51f41a820a954c04ff5449ff5956103 1682950319000000 1683555119000000 1746627119000000 1841235119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-222 \\x10ea9bc5f858013812a469efc021971f1a691413ad374eb8252014ea5abc27e41b77efbd3b3e1398bbf4ccb621a80ec307d6e5ab574c1bf903aa2b286a77b368 1 0 \\x000000010000000000800003a7362633f39dfe41460a1dc9e6b63c4f16e66d04276f300c906a1c5bf2c20e4881c3154ded156149f74b68886a43c879e039669bcecdd91b84b9492f7f87561dcc74be198e5481b1e117e1ed9ca2ab421f90c1c874aa40bd570513a8a6c6d907926c1b9f61dda70ee60f441fd60f1544f869a2cbb872179c076b9a0618fa67ab010001 \\xa38287638badfced0c7e91ff088b27c0294700d89c0adc5b51404ee98189273fbe25784e16c1b5c5a4cfd5d86b83a1fd316a3b635519b1788270545252137c0d 1674487319000000 1675092119000000 1738164119000000 1832772119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-223 \\x134efcf758510c0b2e93d9a57b4aa4b1bd3c96ca058dcb3ed2bf13f36ea0b346b0c9f07151d277961e91b69500a3fcd14e5a150e3a7cd57556fe743b5e57b312 1 0 \\x000000010000000000800003bbe891c39c312a62979d2fa3df42fd55537cbefd635f11f1dd1007c806f1c046b6d557385dcfbc214a9fbc8ccf13193ff5a9130a4b4f75bcd63518698adecc1a54039b05dfe0cc04ebaa5c3c1e89c3af6e7c3fe9dd175fce8915cbb61c91b75f9760bd60ee686aaf2485d9769d654009c863e51ff245c39fceeee6feb4fa20d3010001 \\xff25b2c167c88493936b0e4a27d4fafe48963c60d856d05e863b020f1d44f9c3002cb4fabe0fddc4d33aeb7d00364a6068b1266e8c72e61b97ec2fb23016290b 1666024319000000 1666629119000000 1729701119000000 1824309119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-224 \\x141a888e13866ebf05fa8b1b62bf3c3fcdd2dd3ab027477daea17c3ab2793cc6b262026247d4caaea9ab6dfacd3081e1c51ee45956e720858ad93d910bf28837 1 0 \\x000000010000000000800003b10d8f6809d9ffb5befad6d0e1f687a607f81d9c292031b93884942c636a7f0f51d48edd55d14b982cc2e417a9b9b9977381a225fe53130df42ed546f56a34983fcf69177b5b2b8dfab95714b8a533c642f4bae37223d88408b1726154c5534ef1e282d88f50db3f4ec5b6bb323f51a3b8dc30116ef87d018ec23b8d6e80cb0b010001 \\x536b4c5e638d7a69f7cb924e38e360df2c968c11992b06896dc258091f4edf196cae3ce7de88449adc5c68352c463523becdd0dbf3f6132aa60c198e796a320a 1664815319000000 1665420119000000 1728492119000000 1823100119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-225 \\x15f21c1e175b0bc83017fd0904e400f8522f0fba81cc5c2be16f3fff50052209813a9af9b697fd7e1b8b92e7fc5f1679ac94f1e4cf15ee3e8b8161efaff3724c 1 0 \\x000000010000000000800003bbc159484a0adcfb248ee3a60cb85e470cc7ab391e64790f1edb9b07c185074ea54f6f2389f6c20a45d30ff91b96f2d14eee1299d687995c17b474ad84c980417d04b4a4052bbc8a5545b19ccfc7cf41e457e9134119c75adb167067b77a53a711a0324721f8deb8e2ddcf837c8907acef1324e64710cbef9e5a4c25aea28065010001 \\x3d7279b2060919bf606e8832d8c1141e63b300b1e6a8e83a85f9e8503016180fb3376e473f863c69032669630c84b2fb38d6863c15ec5b47af292f477b31060c 1677509819000000 1678114619000000 1741186619000000 1835794619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-226 \\x155e92d7a10cb0bf5fde86d3c27a4b38b735c798dc5a20035c5784a22449b1e0a25415afd3577ec6d392d5111e1d3e445cf579fb5a604bccb9a38dbde7cc3311 1 0 \\x000000010000000000800003bba3e920b3ef168108b9bc447ea6cadeddeb54a34d44cc81f25958365aabd51f7ec8a4a19e9c559498ea4634a3599432bc11f232a2c9c7081c309b26ebe306cc2a394bc1b9970c190bd0e4f7cf544acccd38d2b491983d29bbcfb2c814dfe6e24357115f6129f9f70cf13b5e38f65dfa549bd19b2dc51cbb4de9be56e51d8153010001 \\x8c880f4b8e0708976622f4f541a71b4f953aa33d1dea43ef197a20281eb0b378aced6a4b8894c2c2d406ddb7ceb0941073518540ba6374bfd59b14acae172e04 1676905319000000 1677510119000000 1740582119000000 1835190119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-227 \\x178ac1f118d41775fe9fe5573211e045b828df282900b1f9dafb551f9bf533a86e89139ecd5019f1996c4d2b199c074e9d616d812070d9eed2e2fbb86c39b065 1 0 \\x000000010000000000800003ad03e4aff43bfc77ca97e8850d89db2f7cf38162d8fb2d615258bb1fc0ff9bbea5a91704e3f0bcaa096dd53c98db1f60e1e18b6ff30c61df358915f24b2a9e91852a81fd5f92996b9e213367d793021c4c156198327f0dd57b3af9327cb4892add5214936f8249907a839b9deda6c5a97cf56eb85b8295e6a8f4d35f404f5763010001 \\xaae68e85ca8b25b7cc852b70b9ca0bf39799fe7a1be9c8fb7c3274ca0a9ded3b8cf40f210a05264a3c68dadf2a148811456158688520cac68a1287c38bd90901 1666628819000000 1667233619000000 1730305619000000 1824913619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-228 \\x1bcea27d8050746821a92bb6ecd388c32ff9bc35ae72396ddb6e9bc82226476f7917fd4428fc744aadd9542e939ecb324738765b3f148c7c80149eff8f8ce86a 1 0 \\x000000010000000000800003d32d8fc55cdeb96e4c557b098cd7e0b84fc7a944082d2943dd8301ef2f7dccf358a6f6666415cdd88b2459b3ce665746e7ec4ad59565c89952e44015805ba72b0f616b6fc660d71c3d1495963bb7514c1f12902b41bb704111eb66a5226ceb1a0cf0bdfac6aaf800252b80e7dbde9adb9c38855f9e2536ee68b9a58cc79509d7010001 \\xd4af6c1c01d4f19f8b7536c7802bb550f7e1a1415fe21ed515492ebd13952a7b19a464bfd888b5787dcfcf9d1021fecdda386ee438e473d0afbca86e7fff740b 1673278319000000 1673883119000000 1736955119000000 1831563119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-229 \\x205244ab5283cb5315f6d50e04f8a58961438f721170bf44d1dd52282c9242a4886794be7493f148cc7975fe376ee01a89d2bfc9e7725ec1ba95f2c2fa682799 1 0 \\x000000010000000000800003ba69189b246d648b2903dfd1f61638721faf0b6e91a26b9a754208ca95176d455f888fdee8f7365e70e044373e0fecb397f1c12d2ffe7e5200193f7c7a07c37e469d973a7960304b82e8cc1a9436ae3ffee969ca51303db135ec1df798f234046460669518ef80e70365b9e5a490137c3d4c7871918b06cb1bd8fcd43b7a2945010001 \\x1345ffa45b58b42229dff9c2c32bbe191fdf5d9d12d595a4abc7864625f6446042b6324955a33e756ee2195802f0c474078dbf653882a50475b3f12614b8740a 1670860319000000 1671465119000000 1734537119000000 1829145119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-230 \\x204264964cabf6b1ea00b79f2a9803e38fc1e1cfc8464d9904eced06830eb12a70afd9de64b80e6f6c9e70fd6d18f2b6e4b024e23fcea98dfb5deb3514108e7f 1 0 \\x000000010000000000800003969961bf8f7185b522d0f11f11e537696e9adb99b92cfe0446c0f982c8e1030675c1cabdf765e0321cb5355274777dc1b3efe5f1af19d5317e036cb88e5b78607fe065810278d21814ae5afa500539c78dbb1018a596c08b265d08057fc067271dfe5f649a654cfc58a55ae3b06403ecab31f53b93e04d577947b4919909a09d010001 \\xd47187736b2ccf4a2c6a59dfed3f178dcd5b3513b28cfa7059d534f18bf017b5e7ff92d19347be2cce0c4b058947edc85db75bc2b662518900f7b6c79c2a3708 1652120819000000 1652725619000000 1715797619000000 1810405619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-231 \\x23825e6ecb4d715fbcbda1dbdcde6a8a2c8346de638e9b51818cda6b8d1cd89163a14a5c6d3c3637fd0f4043ed7746e059818edf5276df61f4563a643db3372e 1 0 \\x000000010000000000800003a729d3aebb9ce37fde0ea3d5349fe1660c8a805ff269206354657e4556ec276da22613cafb9ec33cb07232a4891c94f7f493d4ee3662ab04a7a4678a1cc9c8f3fdbebb46e5e24eddc322eb15fda034af1592b437d47b63431d7477c28db5d855ef5a0f142804abe54340a5ae544b5a313171b643c6f7ae8dbc9a0299aeb5eaa9010001 \\xa46bf5b9073ae04e7f7696089a41263849b847ea0270e63defe7da85597643c416ef5f746ee89c0777897eedcbd52a81bb6248f5aa5cb683e1fccf1da49c4800 1675091819000000 1675696619000000 1738768619000000 1833376619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-232 \\x231ae90f595f230cb47d9c7d7c7b3ac9430b04699b093e3caa4a2f4eeef2f6bdf1028dfdb7fed42e74e3ec0772062185d32bee69b109c2064b11658a6a5da98d 1 0 \\x000000010000000000800003c2b9ca9147ed689e15ff924697e18e324e9b558ee82f879a19c86852419ff2f8785fb1636029722609df31844e3ea21d24d7f54456e70b4234bdb0d12ccd051c39d0967c1b3c4ce0a31dad7639a949ee81c8407598f5b9a6b39cdd2d8c9972158627b2d027f8d9999f43fa7efa5860e039bca88fc645d59014294a0b8875b5e9010001 \\x9f2bab17b06afdd5fda38c5e93d74270fdb3653496c7a515e9b61dabafe05394616f8d0a76d2399e683b992c11b9eac4e75dcc229b6b9e574059118c0dfbc607 1653329819000000 1653934619000000 1717006619000000 1811614619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-233 \\x23d2ad2abd7132492a36126ea26d1ade85aa7c32cc2c0e3a8208d136225ac8b3632c80627754257cfd6cb97e0ab84e8f50f3260a01ca5c8b3509db102914aa35 1 0 \\x000000010000000000800003bb43cd7fb0216b5a447b1650e076572108142a8324ef813b7f996ad109f3b1410ffbda9e8abe96328358790fa7eb3ab80297a84e72f9ee2c3fa1c32e5ac4e1f845b4bd58f825eeb9aab61405332fba6f6061805948cb8697ad2f8d5470f1fa400b90f358eb2484fbf347284c481182a28f5a08f690b41922eabfc7b7b10f83ff010001 \\x26aaf3a9b173c4ab5bed54f23a813c61c16901a60192134a1c301990c0395e8437e9f4b2bf2d7abe8d934814001b20d2715d02f4689caba2f2423148d5a8400a 1655747819000000 1656352619000000 1719424619000000 1814032619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-234 \\x240e1cd692eef9e015dd576be6ed782d5b959d7bfd424a23455e7d41469b21d88afcd81209d76f320cc584a19a904a843fdb58f09e011db65291bd626608376e 1 0 \\x000000010000000000800003bf3f2407207bb2404d01d7a10cb875ce84e3ce9db528ded96f03d10d63c1b09f9664e1b98c4c040dcc5b93f5199c3eb6364d2363c10f3558da25ec2d35ac42e632161ea9fd94bfc238f21a8b46bbb4d4ea7398762a7f182561d17502c92bc9ecce0932dbb8fc000f4821737020545c269aa698b06372ca84b0077810235cc2e7010001 \\x71bb4374ecb797627f3208f29fa900fb71933d5f368ec8655cef0e4052a0f4dd9152a888ab1b26a3f2805a09cae7b889fd41e7abc15265fbe505f6bb88263d00 1659979319000000 1660584119000000 1723656119000000 1818264119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-235 \\x24dad0e52af77f9a560c06f329a2e8a2adcf022b833b1bd211d295206b8caa7de46b8d0a94be907c76e705363956671b41a74be147b785155e25a11637e7bca1 1 0 \\x00000001000000000080000396f733b4faa53f1f4edc5754d02ee4ab3571c383106c045065499cb3c8f16d26083a8386fcb530d6e16d89d80a3196d19e7e2d9b68e8d803d5ef9e2d905df15c17069c7e23f624401f8eac203f9cae33530ee6dc0d20bdefcac80f53bfa6893cf5e40e471ca5d4b75e287caf5ea84c835c39bb6e2e283fe6bc5483aa5ed27787010001 \\x2826f98d95a26b36254cc35f5bfd20eb32dc34fb2cbfb93ad326e3c067dad11e67890d8a94afb5e5ec12810603d17648a61e82768b7b1d851219da9598fd5b0d 1651516319000000 1652121119000000 1715193119000000 1809801119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-236 \\x2936e49ec1bd1ae4dc342391cf132d7cefa95bdac9caecbc9ec45b13b74b4701117f237a69faf06142f5365be6d00bef3171bed93c0bb237ac6aa480a7ae0533 1 0 \\x000000010000000000800003ea76691a4163016e501c1aa89e24cfbef571a31a74ce8a95508a02081d3f58477c1b1229a820fa1f51fbf96ac126c14860d772760721e9d2a0cc3ee782209e0367db29174cb1c6f483fd1ade51b9499ac3a759400926bbb71407c87134f8bc1eb077920b7e98de9e828377bee142abf41e421e9c67256552092646936ca09f5f010001 \\xe8f8ead305a8d61258dfee4149e0499f82e9d6bc9e841f1e905d6a72ce438440ba59863dd806fb3cff59a384ed7af4707ad6f63908d2cd3cb0db5921e0936608 1654538819000000 1655143619000000 1718215619000000 1812823619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-237 \\x2bf25c6bf3f4db3a54218f5f71f3397f709842ff2250ad2e69ca92faf5191e392cf86730cd198bcb8e52446091da6293da4a5c2c14de45f2168265e7d4fbd263 1 0 \\x000000010000000000800003c39e3b6be3598806e1697a792a82f0e513b9ad03d402d10231028b5e5d4a0dfe425a7f6fe7e5387d9a28ced872a66adb1892a94038dfd4a9f747bbd4fb99f5099ecc19ea63f435f9e801f85e7abff0108703a2a4c4d7ef4be59caa283ea9c673604fe218eef76a4102cfc380959082ba3409b47b43fa1eb5371e5adb7da8675b010001 \\xb53b7533acd1b4d85965e6d0c85ed8c48b5852917882643f38ca4fc1c24f442c8a44886681b3be8a7acf8bfacf5a97ffe08107a229af9162ed7e7054a17b3000 1659979319000000 1660584119000000 1723656119000000 1818264119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-238 \\x37a2d6b24b98f895a354645aa514d06810b6285079524bde029f997e264a61d74bc7c8de36df83a28462b81a608a75e3199f5dba37c215e15c656251652ac09e 1 0 \\x000000010000000000800003c070ca9fa59f1005f1acf4e1f43c6a7b28414c320758a53a2016720e47dbc67cb8a02d300e9304f594671c863eb9e42a2479163c88d0896c014ace1df9fe6d90ab7807646f5e6b0e004e01b44209a7fceb7e31b9abb34cd6e12b68f3a1b14999aecf0c17e4bbb11f0e1812fd5f2a79b35c7de61c41b837cbce5c71d224a2a4a1010001 \\xadd9dc5b2c5a88b30edb9c7b0301a596df77241c01678e9e1880b63883b24e4cc8a6fed817b90a414b46cc91ac9b4b9f04f14fe9bb38dcb9674f4d6edc7e3302 1673278319000000 1673883119000000 1736955119000000 1831563119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-239 \\x393215cbb6d6609d4c8631edfa3d109300848dd5f93b93517fbd78e6fc4812f7719aa731fe14427ccccaa81b511f28f1a1037862f0a59e22042fd266abdfca15 1 0 \\x000000010000000000800003cbb22b8bac427580cc111ed2056bac62bba6ae03ad0e5cbe58a61b2ba759e07541d4fe6eff43a98f0ad23e94629a66717e9ad6f0adf06dd95554fc01c1218b32cee5bc34511657565dd80030ad6c4657049903a2d52f2e8af14793a670a0bba47b6efbdd5195117dd85867e5bb96191fa661b7865a958fb545fb52d26121634b010001 \\x9408346821f3800151e8b8ad839affaaca5fb830f5839baed0e26b2b3e220552c63cd5fad63c5c4e9d278974cb765cfc77592b9e0392b93be02f145c561d0406 1670860319000000 1671465119000000 1734537119000000 1829145119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-240 \\x3b4ab033e24a655e9e76d8e6d1ce23e195cc999731cce0d0ae26edf66c9ff0e31fbe709e3ecec875d6ff0d3be55de86f08e0c2243250689e876959f3b487a099 1 0 \\x000000010000000000800003ce2ba49cbfabeeb2c8d870919f6173a353fbd39201fbf2338ca1ecdb3bd18620684c150f2ae19d55d6461559e6e69d1d38d24a7de7d2ae8fff4ede937213c9bb495a41c8c922c20cf69eef2cd93f3a1176310870bd5e89fa49e129375e12e899b8ce83da69e92c25c1d223c8321a5c3b78635bf6161426f48053aeaf89930ec9010001 \\xc70dd337929d9f061f607944bc064e02965dec081d9b6f4ee72a8dc5802add98487302c5b55f76699ffba7726a94f581608a56f0806018356dea99bb33d66303 1668442319000000 1669047119000000 1732119119000000 1826727119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-241 \\x3beeb27c3412730f11bc007c2ce796feb611e51f3c0d175a643e6d0bce2f3c182bafd09f83db3743a3b459b073e9d4b76277bf9c23973748001783b95d9b5ed1 1 0 \\x000000010000000000800003b6ace8045de4e7b138700e83de966761942473e31cb1a222408482ed0b7c5fc5d5369f2ee0d610fd8be74926282538e95f268b1b328b3f8cbae17647558bcf00fc36ffc590b259c3a889c133df0f753953adc001c53f42aa9e719c042e14671d4c343150cb47786cf71b181fbf9baf2f20da55af093571a9139e1b29e570b0d3010001 \\xb80105d272abb51689bd29514ffa75b3db128a5d6fdae80aa3be10a3fd1fbda10651dfdcf95e62ea0e34e8ea13dbde657323502b20da7843b8d4623ef870a501 1671464819000000 1672069619000000 1735141619000000 1829749619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-242 \\x40fe018cab8a56b83f58d793de109d16dcb77c7749c5fce3aad90b3e4e2a604984ceec4e7e6a3198139c5b462c9a8c2d7a3cfe3e7d6e9fc66104222d49e3dc02 1 0 \\x000000010000000000800003be14aa28542c84edfe07b7a7cae40c37aaf97224a27612f6161440174366e66f9895959f2b0c126eb4307de0101d0373a29d0e2363324b901f31951b76234427b8ca3f4a35250779ab02f6bd303b64cc29859a7c975c8c640eea923ff1c1e710e96ab6e5ed95c942c4ddeab59023d703b3c79ba2aa49f089f220c3fb17692d6d010001 \\x93bbae45d1c8e6e08eaf119a220b82b49ad50442ed51b9f2baea33f35617eb4f2f78b5cb9a39f51ab296d192c550ea1c1ddbafe30bc548d895016687715a640f 1664210819000000 1664815619000000 1727887619000000 1822495619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-243 \\x41a246d4e73ae6225a93835b0e0e29993b2791b4a4db3b8030f20bc7ca235e0a941a70143fdbe1c1ec34851e75caba774738ba96bdc96dbfe2f183d5b194ef98 1 0 \\x000000010000000000800003e021d6b86959f9d19b6504b102f164b44c5d847c2250e71921e39bedf4518ad9060074b271c3153dcd26cc3c8356bad7c4a70172aa9174e2e529f778e13c89864c5ef7a3448c7988f5e17a539c786b9b8b67ca860e0914f617eec60e6510205ff08e373c80c42641b201479825f8f469f0a2d2ed5476b6d9aa2536c1dc7fcdb1010001 \\x7a7b433d9c2d72b66c8b23798b7d1e2fa0f4af705b99196d0256dfac24c393c10196fb924b85bbbd8672e3cc0d2c5a776c9be11b1604295dfb2d69cf1a8c9602 1656956819000000 1657561619000000 1720633619000000 1815241619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-244 \\x4292604efb8df5dea70d13e5688ccdad63a0c5cb5703c7ee909af1054d3ede2b53eb89dc28e3f992c2206d4a5365384bd244016a273119856108bc3247c4b8d7 1 0 \\x000000010000000000800003a84277e2a2ab6d0eb57315e6aa07972db4dafb9a69940188edce6c83ea6799f2f438478ba216ab14f6569b6d032ab54fa1865a4bde39de40bf682b7b63a3aedc2e9e57f8580bfb9c1314d4c3bd484945a1184c4a9caa4ba68829e7482af28f6f6d3bf6bbafb5a1c1c7ad415a6d81ffab973b5e13cf9a28654a42428659ac22a1010001 \\x258766afda40805328b4c8fd80b5e3460fdcc84301c1be5c5d91f2cca5e59d36f77addf1cb5f9d1e38defc4df92f0d17824feea7c3e09e24aeb3eeb1c06a570f 1676300819000000 1676905619000000 1739977619000000 1834585619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-245 \\x45ae1451c27181d11785058df6ecce9a03684c8834135a8ea0155a3172676c573abeffdc6caa688c6bacadfc907bc3ffc7d55780fb1cbf36c12ca26533113990 1 0 \\x000000010000000000800003ba92b96df06fe6aeecbfa0127996f301f98fbf6cb7cc68b4532440ac55fbfc0836712c27bd3edcd5d4356d9ff92f772d5e63054599908541657a1e267c78aadcbe985480bf32678169aedab32a2284be3153c5ed6da048b667243d8394b2fac9ed5545fd88682eb47268dede32308bf618c47aa2e88a68e35f164aa046720e49010001 \\xbe707964801f9b0cbfd3c61f0babb9bc36f2e27636080a9e309bd50b0cc8f6e2d50bd430f870f1096ce424a08b88b09f84da44ef80c6fe465c5f0e4c7d218f06 1663001819000000 1663606619000000 1726678619000000 1821286619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-246 \\x494a13ec5ab03a057833820e453441acf91bf9525717311680892df42e20246e26af62d25237cf02d35b6647207877c6b72aedd74fe912f1202c3f3fa39dc2f7 1 0 \\x000000010000000000800003d90a028bf2b7c4b1363878249af8277ceae6dc3a0890e5bc6e6e95eaa315bc711c8e92619467b3b1823008424ec1e33c69fe4332fab32e6b50e99782b98eeeed45664cbc7ca38d8d12315c8960a370fe42966c40b29bbaa437610c8772e44d8ff1797b7441404c58344110c8374400d73b2885b80083a10ebd319f4dd8be45e7010001 \\x899f51c5f7508043640b95a7c4057b013c2d5a25d9d0ee69c77f34c13110069bf384f4ddf365ddea55cdd24935e6cf6d9c00af4bf81754345537d06c9094f40d 1669046819000000 1669651619000000 1732723619000000 1827331619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-247 \\x4d76e74d28fd61814fe29a0ff619964950b91e96b015034f4a2cffad4d4b33937bef6e9b59f3e166d43f45fa2c4eaf6c0c7cd8580504058237227e526fc72ee0 1 0 \\x000000010000000000800003dbcecde2d31f8448fd64949137154af0378887ca44a852b06695832a5900e5e64425f129ec36a16b4888336691a7a36d9df478fa6f5257f92452ad1761e8bd033b7981ceb0fbb3ed3135a6ca62adb7e348b2f12250d58f7d7504e071a25410bf60a9f870d90722bfaab456fbff8990e01ee4fa408cac04f3d37a1381d06e8a27010001 \\xfefde5e3a501ac1df83184324e5213d42c4b4f5118e6ba32d0353beddf8d41bf0b73e31424c19c591ffcd3bc9951dc056c2d8cd81232fea9ca09ff6bf926d20e 1672673819000000 1673278619000000 1736350619000000 1830958619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-248 \\x4eae39b413d2b90ea2dc35f06a0bf17708e2f323c67a0077a28a4272cd25c72c9f39ef5152576e64ab249ca9158eee060d36f1d9abcfc030eb106d2fe94ba9b5 1 0 \\x000000010000000000800003afb0bd35964e4b9400742c903a379e64c4c78dd9d9e0bd16a5cf7f48893dc513042353fb6f096d11fffe7473795217d165de5026ad8abc1a8610d26ca2875a86a52b4df55cecd6b5195793fa25d1c982d0ea7a2c7b2a46f79599e5590bada30efa14bae3f5d473f09aca38be110e2f49166c64d224f83f69a12a567e81970d61010001 \\xc1565e30f3ca381b789c04c49c1c30072a97428088f32f3d5ed91ebb5543e00cbdab66830d3f52ede9a8b77809ba137c37fb86e92ab563a802b6a4e01e32e80f 1681136819000000 1681741619000000 1744813619000000 1839421619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-249 \\x50f2810f058fa63735853f897f691d06556cdb862ffbc0491be54377e964f2832f455f69773b7a986b18388a0e18e7b8369f5aeb40e89b1ec11251188baf1a5d 1 0 \\x000000010000000000800003e56b3c153b1e757d15a81a4e22bc203549ccee1e19aa21c8df6a2c10664922558776d1cb76e2bc079b7a8a366def9e42b35ab7c7ad8d2697cc86dd2d98ab2591b7cd8c4c8d691c614e3834d8c4f844ca2fed90c3be97224419b5fda00f7d9c8b7a43b57e0c845278ca72fae964f363702de6ed32d4e2d3aa3645e2640549dee5010001 \\x76d680f4f6c7d8d78dee168a1ecc1a9d3114e17062b22f22bfa28e801735fb92e7614b59e48f78f3da853d07c0ab7226ee2d0a03a530c1672b7d49c2f55bad02 1673882819000000 1674487619000000 1737559619000000 1832167619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-250 \\x52ea9440b6fff496197768c8317e935444a65b3239a944bbfb1c6913c8419d0afa36ae39f54485565e25229304969cf22ef9d35889a07d29b78456f9652fc507 1 0 \\x000000010000000000800003c77081bcbcfaf6e88bbd88b20cd858b23b0e8122a329a977ed469f94a45a76c78c8180ea4a897f0f477625c52ad211ab126fd57faf6dc74d3fc9637af885bbc642b0394124d941ecc934876f928f8cd0362027f077057c5221b8b6951384f596a8006e3729c82a2203ff577fffbc2066ffa8cdb17a81bd5f44e998b52d050c65010001 \\x1f407a3a5377b8cf9fb1423663efc24e51b50702ef186917a91ba192b217157b5fd46edb67577bfe21ef1054c614ca34be55b43ab033fb73816c0c244838230d 1673882819000000 1674487619000000 1737559619000000 1832167619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-251 \\x53727e4a50900b8995b821ead90a3ae84726a8e0e04cdca0534bbab67f8e9f4227e150be5a0281fdf7c863f55812199efa2fd703249142c9ed00bd876969fbd5 1 0 \\x000000010000000000800003bb2d0d789ae95614d1a66da10452eab806ec81d5566097d2afb67ac68b6c468526711a7490b9046635c3a4c445c2e4d0ea6bed7706571a26c71dec054dce103a8aa1c02c9f17c423d09c07bc6e13efa49debffe5eaad8b93af02b29dd1a6ca73739ad51b972e1f41ca2bb0a306c3faef9119a12bd645f42d3f1122a78b42a967010001 \\x2fe4678d03bc7685796fbb42b72854daa6a03164af65937bbcc8d33ec1dbd20c347b44280a7d9c57591a3f64d0566c0618d629b64916719c3d76d4989159ba01 1663606319000000 1664211119000000 1727283119000000 1821891119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-252 \\x5372a62d8900fd201e7ffb46a4edb0bd0242d2609e6f3f494cb99e736d79df56e8ea5df1872e5de129e75b8bf63fd9ecd4cc7cc0080d4bea5e9916fb28e41bf8 1 0 \\x00000001000000000080000399e0daa8f140ff71d93e8807f6134776b41663564f45682fcab85ed3b8b27397cd30e4bc2c87b2c67ea228698cb2cd6a2839086b9f13ed48e683e4c4c37b1616d47b27e68c86da0846db0f5efcd96d4713fc45912f69262f1f32a70dfa4575e964827817901931719d3d136c9055e312144dfbe26b4868020f064d0b61aca49b010001 \\x69ef30319d8e577da66239cdfe0797aa6cb40ee1f677c635e897824ddba0cdd8f8294296a7c62141dcf63a3c1227f50906849ba79e32fc0c634695aa90b4110a 1653934319000000 1654539119000000 1717611119000000 1812219119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-253 \\x55561380ddacb348a0e0be837a41256ab93f5e098a6c1a64852a13ed0027cbefe158c810afc83f7af9ccb8d68a50959b3c8f7e58e21e29548cec45899df5770d 1 0 \\x000000010000000000800003c5da4c68c4d8ba7a439fbc78e7992c3d07bfce562f9480f318b5255054662ef0e7b3dc3bf17906eff4f694e7fecac2b6e1087413e7deb45adbe6df59758388c736d7fb7de33e7c197855a033dd2fd437493788e89791a699392bd4b93f20d75d650f14ecbcaf63f3d907419fd8f4b64cd9aa49c5d2838615fe5b1bc8d20f8189010001 \\x68a43d3d29481275aba05380aaa984e36048b3d43994710326ec345bedadbf0e5bb20eb9c9b66664e1a492acf3cfa3f7a111e36cfd227966402f82a52e321108 1653329819000000 1653934619000000 1717006619000000 1811614619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-254 \\x55ae336cffa28fd128de6c18fe3a49e9c832813fc746e4de5b5feab4e49ed546b81b535305c10b42533dc83a32fedb40e1ebacc85987a74511d70b388d7bdcad 1 0 \\x000000010000000000800003c6191d096d11aecb338cb0d5734f6575ebcd1f376c5db6ff1f235978eb2f0d661b4619f57516a6500f56d5e3f4876ed5784ce0afdc97243e4552330f758e0fcac9fd86cdf6644855302d44731af2ac18819619c9509802e36fe8ec90eb89f75b878766e3556e9d791f4bf311d75f5b31a44b42e9515e8514e27c004d7144ac31010001 \\xe1e142a82228d6afd4047897a043a966e55d6526fc72b9977b82921346f2675b278a7bfa969642b586c7c08894b140bccce288aa0601163715bdeaa537db6603 1666628819000000 1667233619000000 1730305619000000 1824913619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-255 \\x5e36d51460db71dedeef06d1195bbf2f14c04de9d5f63c906095c5180d10b2bd5d85d61c9eb3be19035987a81d5e8b615b1be96f66b206c080172fafde479d7d 1 0 \\x0000000100000000008000039c9a0e8477de03c868382f043ff05522a8bc1ed75794b209692226d3c58fd142055b50c1cae5cea7830b545e102d446bcec7301ea2dd59330d0dafb140fc9585f1b940177b552b8d222bb7103f3ecbc7a83b9bb02b773437764c41510bba8d6c55feb69beb642a5cfc6e9b45fed52927481d8b8a009cdffdf71530423dc8ce7b010001 \\x02f46668d90077808fc607d811d30a9d00d5f0e805456a21ef07b80cbac84cc22fa4d358e0f7294de2ad1cf9717d6c9ca04dfebc486d4cd0c4a6dc86ccf8e60c 1668442319000000 1669047119000000 1732119119000000 1826727119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-256 \\x645e5835d5d0fe948db4b95e9bdf9250c6bcc2a92851693d11382d51874089c5983ff507790de651c781ca23d2173bbf7edd414c7f65a62e43b311b575c93c1b 1 0 \\x000000010000000000800003af91d17302df76629eecc0c542214823798d1aba8fb51b6768dc181043df51675eb6b8770b6be7acfeafcdd68e0c367b0e9f6ed5a0a8b9727e76ca093a4d5fc4fc8d084cc15ea156c29a3a6db18a71eb7323e56cf8056cf3709f020d55b94f3579616f622b39347b9770b2abfddfc9b180f36f4a2ef0a208acb032ab49a8958b010001 \\xefc4fd9e6ebbd355b1d39dae30eeaafeef736c8c9a50626907468d4cb2e18e60441b57d8ad8909a6baac032ca82ba97e83042783df46fdfa450b192d2122520c 1679927819000000 1680532619000000 1743604619000000 1838212619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-257 \\x6b3a5238a850566029e7f808174c0eb5580260b75045e336efaf3be4d35cd084885f942b7fa6beb5b434e81694e96006f7bc32e3a257f6f27050abb41f355c4c 1 0 \\x000000010000000000800003aeb5ae380c56d5ae3f85cd32ad58634e875326c8f9b9275113614a0fd83161e1906dc4009eccb50637f8e91b5ee32b7b27136261e89b42ef4d18fec785ebc5687d5a4156b9d7cd4aac2e549ed4dbf99a2fb55fd8928f9f9fa208d94b55aeb642632207174e8e3c27fd828b9a047f9d2ed0e3f36e1cc5e56e3906b39b2df11e45010001 \\x907da0c5f942026240a7b997e022c8f8ef329436361dece394ebd7e74b6d48ae35147e8b0817098bd91d9c04824a52abdbf6eaaf9c6aaf7d949087d9a4d34407 1663606319000000 1664211119000000 1727283119000000 1821891119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-258 \\x6f028b0ed991ffbe726596b7528650e2da3d08a724c80e72524427a9311a1ae8a8c33015604d901072735264310b4f45f6464aabdcf13adaa935c5775f4b47f1 1 0 \\x000000010000000000800003aa7c639bad6b55a144d13a92165d0ba1ff84f33859d8e27fc0a2a5c45eed2e95f1c74515f3c9b973205392854f96afe799a21143f13e4e18b84fe34858946e1436d30020adba8276a0c235e1995a646f444fca92fa74b47f09cee11725632f85ec57e9c7faa8704579dc516284cc5787ee81895c7813409bf96286d5d2c81e4d010001 \\xb0be471039a1e89ce3e1aa702a9a4a2d69a70ccc3f3c0989c7dee062eb8aa7bcac6ed4f63e1fdfb69acfd1a3bbb81c41808d04500b793ab6c0a1c9497ed2710b 1658770319000000 1659375119000000 1722447119000000 1817055119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-259 \\x70b2ad52632ee2005af5ebc8907b6f1fd784914d7d9499c3210a6e2f5cebabffe37b1da53de1473db1a189283e23d8677c0a06ae634513b897b89abafeafc7ab 1 0 \\x000000010000000000800003ff2d94113336cbc89d8391e15371c21a523778be6efa3ac15b79871a7b38913a59cf264fa62bb538fe737e944f93d657051bc235d320d1792a8a7f63e87563cba7997224485e3cb40475df9a5167cb481a0ebc14c0a6a84d747fa5895d9580d48c96a997dc091a9eef002adf7cb58e77286618f69c1a58be6be5d11e41c2ed47010001 \\xd5f1bbae8b10cb8e2f7659bb4dced03a8dcdd734854e89e99a2408948bb7e1779b5f190ef9984154755d610bf982a9713ac67da5df59814ef61e3ad082be940d 1663606319000000 1664211119000000 1727283119000000 1821891119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-260 \\x728e1b6fc1a2f6df096483bd927fbd27a586c011400633e578cfac1802bbb2994fa168003d3b110e7e5915688776ce1ca62d44c0791ca4589a28630d73995fde 1 0 \\x000000010000000000800003cd0c6127d371b28b7f85cafa127dd9ed5aabb830e7f78e66edf4468deb3af9a9e5459aceee7f0bea57e6f08e2705343d9e85f4a3820432bb894b123676facb2e7cc5a6b2de408709866de2ae397b0f124c9242cae7eef9495a05ebabb3439e8698ca9ab78b88227f01bddb91ce4293707c34bfd6777e6862b4543178ada63f49010001 \\x663ab75eee3fd20d7b26125a54b903a5855aa8fb622780175b94de4120573709dfedac1ec6aa53c6b20ecd00ac7d647038adc5e9d4714ab5fbd3077ba7245909 1677509819000000 1678114619000000 1741186619000000 1835794619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-261 \\x7272ab4c2d8770169764c0cc04c1c6db33d40276bb66636580034f00b2ba64516c26aea677ac7ae58b683b940430092640e4ade005c6c99422a2026a8f9c6eca 1 0 \\x000000010000000000800003b2b3a01d9e5aa192c949198d4bbbf95d2951ed302e9a0f30d35371a325c7e81f9f88adaf059881b666ae876d32395e105af7159250e694de78cf5af465d6820b503bd3293cc021b65e76b0a2c54251cd2ca2a06f389529e0aea72abecf8753da4a6c2aadaf4759c9d36f98af82355251ba93906613ff33a8bc9bc10061b26831010001 \\x5f4d8df5fc4907e0013c248cd8db70d1b06ac32a784fd2dc3e3acb3b706402b790857b852ab101aee153f140aa99c9e3241c3d9a6dc136e29b46c5eac83cb708 1664815319000000 1665420119000000 1728492119000000 1823100119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-262 \\x732a8522a57a402078adc9fda1795668877a26f3b6e8caf870dc15483e33a09d5fcba1d760b8f074b9472ef956f04850c55782ab298aef63eff7f6143a383fb8 1 0 \\x000000010000000000800003b7a15c25f742abda88071607a3f6b992773e333eef3677a0c533bf3cfa651a93b59fe025a7372437800d9ac8eeaa090ce1939be8ad732ca38263d376718bdb629ed2cc27b4dba771521c2407eefb3847ee77cb436d60ab776f5c085ad302e5495d9329e12ea7523c1c35c402f154384d6e4aea563f9cdc2dc0c196c9e0f5b95d010001 \\xccb10994622f7f285b142d13ebef2e63e4254d55f7911a7d7c7f54a0dcbf31cd10f0e24316fe30e6dca4820d0ee10e0e73fa379c81143e6047413c7bc5fd9800 1655143319000000 1655748119000000 1718820119000000 1813428119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-263 \\x740eb551a89cb4a80e1940c034328d402b91d7f206f77fbf1217f171d941434d639f683277899dae36368ab2fce9772ecd1a6260d374ea9be334fad60b18d45f 1 0 \\x00000001000000000080000396a5b794624e2d5f11091a226bc96c78eff8d0fae3e8ca36c72e449e7715632a635ea06191cfe5290071955c2ca3ee362c7bb7164627922fb504fe7eda5f86a4703ba1daf69ce7cb2a098c686fee88c56e476dbb2fa51202b738b00801416a03866c99f716bf2601de58fb8a1ed54c497d4007a7a1f7a0f51e3faecba3e3cf31010001 \\xc7bba6b0ee06a7f77d5a0f1b4fc5fd952592452d3cb137e64addef3f83a3b09c92f18d68afd67737ec35b754a280afb231d3e81edb91ef1d957fb05345865f0f 1659374819000000 1659979619000000 1723051619000000 1817659619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-264 \\x772ec3510be4726d28500a3a4af87d65a94873ada1525381643aa174919777969cec581386d3c546a44327e0bdd412541249af5add55958b0698b9051484fb0c 1 0 \\x000000010000000000800003d41f5448816f7e3bc4ee8d8f064af87c46d00269222b63270394b633a68d65c8b70f5f5dd7d42b42a2c35698e1297f343ce59d3ae86c9b346f73f637666b4ec8d2280fbfe04d701ccefe109f1a8562003497881ca60b281c1ffeed57c4bdb66da4d665c392a0c82ee43fad74e10d4b2f129dc372f1c93b63db6d0fff45618a75010001 \\xedf27edb5a6fe9d0d19bc2c0604cda9588ca7fdafc30f57445bece7873a669484b5d802081007da0f3de6eb384c82617a4fac6f0b32f7b9d333f0478cdf7850c 1663001819000000 1663606619000000 1726678619000000 1821286619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-265 \\x78c26bb00ac632c8c650260f2faaca1c0440245c49ecf774791f0a10c4b22d0f3b4745c8f10049a368480aac84aebc934bc3b02123cd6f52236183a80395488e 1 0 \\x000000010000000000800003add45704b3b4973ec9b7c1b8112f25b34095fc14285c649aeb4262999bba658a5a4f6bae789104982b432b33b4d1efeadd882c187d709cc7bb87f6b85f17c2a8209bf82ab857c983b0bc5ac15b92b804c71764b7ba88656aadcaf9357260c5db31993b0c499eddea950ab325f9e253bb7c76e2e088045374ae4672ab092b1d57010001 \\x959d3f83d82e80166e02a4156241c9e72177689bb141e48e1ba009838e14ca7a68651a09a12519e1a402e5e25f340296c9195f99e7e7ac55c3c5986e03175609 1658165819000000 1658770619000000 1721842619000000 1816450619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-266 \\x7bce6538fd4c7acd4520bdef07c10fb07441d6ada25c53e9d63e71ed06e278a7bdcfdd3a870ee8675a568b455233fa100240a8b496dc64eb82076f398f09a80e 1 0 \\x000000010000000000800003b8e2ad4c964ae03b7f34d7861f55c7596ac341d13cf16479535f6a8b836c15df0addaed7bb83722e06861aaf775335a17ab83bf24b95662e301f2799534a7a063bdc43ea233355b32d57e9e43321c19f040070b9f8d3c7d92137e5105c7b79570b7b84104767d217fb3ff446d6302ac7b6f8425a00e85e8bad82ea71469206c5010001 \\x152763992926c68ffffd3effa0c4ec3da449fdaf2783318b7ae1c10ceedce8892fc2e43bd26005a5a96bf25cde4e2ec8d3f36217671c37dd7e5736ac6f95be01 1669651319000000 1670256119000000 1733328119000000 1827936119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-267 \\x7b2a671f5592e4bd3ea32ff9c4e20a08c4600f3c49c56194b404cd9ddea8d63df3e815baf9b45bcdd6805d8eb7738007f57b6e8ae2c7534ed3fea902b799b4ce 1 0 \\x000000010000000000800003cd11edb656b38fb9e9432a417d4aaf2bc7efcce5ad22970a824157689b2375d694e4d6a0f7cdf2b050ea9dd67ca74b930e91dd8cbd2f8898b239c90106c9f1bbd7b1f3f4be8465ec6b7f8f84073d0f6e00c1f4165cc8b540b233acd6ed3c6127059c4ec4810f6964c06099a3ab997663bad48e1322ce5b029cae786e6b5e4981010001 \\xbb72d1e3ed28ab719f66d89ca660573561e3f76a855c347073fb3034b033b957db79a1f643ef37cf4394669e97ebc4fe05127ca02b1d3380c1e62e0ec0b9fd06 1682345819000000 1682950619000000 1746022619000000 1840630619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-268 \\x7bd230227fea2b75f86cd946dfa1865800e673e1f6275bbc481b5afe0f5b7d9951f8fcf1a0d7b9b2c6a2418be51ac81e28d1690e23ef7aef87379d4420e27923 1 0 \\x000000010000000000800003a07d498bf388f2333e2d0d38dbae680960a4e17606b7fcbd9c27d305421d281da6db03cf9f54e98deaf0d6f0d300e41ddb03cd35e7f0bbbb4dfe649def85cfec80ffff4e3cbb0a3382510849ece74c177560f5defd7e4773e4fd623826c487e23f0c63f131a152ca59c7360163eec49fa218f9070ec3e4effa31bd0234f48f5f010001 \\xc79f2559e451c64ee04d9b9f32f035eb8274ba9b76e363f7b4ffdb70c2e2d25cf5481cb0d2d17159bc86d7ef50baa92cf297fbf596f71940b0b203dd792f7a01 1680532319000000 1681137119000000 1744209119000000 1838817119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-269 \\x7e6605ebdb00ac4643dc73d757c0f8d32fe91a9353ce222b738bceedaea2331afaf05267954eec7f1c4d054fad5c78178a74d74622322e0aab5657eb5c0dac85 1 0 \\x000000010000000000800003e041cfdc50394dccb16faba290fc62f7cd5b81c2c39846bf34c8e41c92a96bf621b6d34906749019dda1e9be40ac64a3bbc50fb7a3b634d973458092380f825472a3f37f1af4f8fe4a29f159f170236107cec8eb3598aef97557421524dfa9a5d6cb79b8aaa20227c5da228176fa3495e9dd2c589c55e14bbeddd2a3c475ffd9010001 \\xdd8384a02fb5d19c19efa6ff7bc7073761387b51fb01bb13fcabda86e6c8df5af23b1f6b98e459ae46c0eef8ed3a784fb92f03b3833c4d97f4027a571dfac606 1659979319000000 1660584119000000 1723656119000000 1818264119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-270 \\x811ab73743081980715a2c174e1495229dc68f7cb0bc7ca6c42fac6275ca3a3dcb11a56dab65a06e05aedfa835156f20cf6e2fde2fd43104e3a96873c9da38d9 1 0 \\x000000010000000000800003c7d27ab188ed63017c458eb88ba670035afd518c88f03ede24d142915bf69be8482981f2a43845a2b41208eed93ee70653583ee2720697784fb0b320053541e49bc2de47da09aceba0ba4b91341b7cb08c8f9b310caae464422f61080249d204cdb13b5cedcce54057d6e4787e06aa05eb64addec4d779e6ccf49153e6193c23010001 \\x8f3836def97e142834739159991478d57e51b7aff9e0ed6f786757a8cfaafc7f153bf5d55cedf274fc7eb7286cf319eb14e97582220478b5834ecf700654f606 1671464819000000 1672069619000000 1735141619000000 1829749619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-271 \\x82763067a5cd27c95fa6825742179c5337f7988269d98b217db2b077f5e81647f9f4afa5a8818eacc0b1b8e768e64bf2b46d20815d3b747fc8e5f212079eb47d 1 0 \\x000000010000000000800003a8de4f5c365adc49431e3e54de6c8781f58d6c17e101fb7d472869b0a0a0ae5f453703925d9f13cc5c5bc4a7e6c33a742f34603c06c290d6a7fec374810460bf605dabceacd0664ffb307f2accb9617acc3b835489fdeb00cf3782850cf7ff3544407779d7b4de44dcf17aba1c6d97dbaf38c7b66e461b71e9a11f679d4c3ddd010001 \\x9b2679d58df03602ec79c421ad8776ca162b0f86fb18259971e4a9b3d29a7571e12cd00575714c092783fcfec42a19cdc68ecde161cd3d5527ee28b14587a401 1670860319000000 1671465119000000 1734537119000000 1829145119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-272 \\x83029eb0e817db6b67b7ba5a87ec3e6b4bce756d696e4f14db993e38fca634263a14c580c39380d9cdc7dcf84a786945330841e1dc8f8086a283822e65ed3aca 1 0 \\x000000010000000000800003cc3471154844231831d7322a1d404bafcca64ebea39b74a60c8f2efb76e556cdb394a664af89784fadffcbe9dcb4d165314a6048744f663d8e8c2e475630f97e7f2500afa9ddc24376e2f57cb450d76038bd29b3cf5b1aa7b008da9395cec156e0ce8a6d791f3f8e13b7ac93278c91a450902a7f1d00a8b38aebd49992dd7b7d010001 \\xe8de27567138bc8f070a50c0e4e0771e8cf580c31dfdd0b59da4a99b52ccc03461020083fc883b065b9b6b14fbc4666df5301fd2f97e1156031b66a74cc0680b 1670860319000000 1671465119000000 1734537119000000 1829145119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-273 \\x86420305f72a51adc124c1caa2e95eb4a17cf174452fac0a07c6a53ebf7befec792d5735a0501db112c9284093f555c9f9a31d532a3f8afbd4200969b3dbd111 1 0 \\x000000010000000000800003a669a97af45dcaa196c996a35c6b04bf3df787c3b306e419a2b7f8549e7c0c8fcb9a3e54c3e22aca4e00c672966d4ee6b1b3db1525d0fa856b51868b7d5edde7634491baa4c22d8865843b52289e2fe7b350f31e7af84a6c3531cc51c37e58721e8cc8104422c00ed51b6ece450d25d86943c0454bdc885585319a45ae95eb39010001 \\x9ff107063b9326ee44a73a22a248d3ad6b541deb02f6a50f6a1d6377e9d69b3791033a148a46fd53c16d23193bb87ac8086ebf4e586e64ffc2ade137b38eda08 1671464819000000 1672069619000000 1735141619000000 1829749619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-274 \\x89f62eb7d0be3e4ab1c12e950e919a505ad833fc2f3cf29505a1ab81df480ff7699e0e36f03f8f2d055052e90c8bc37961419d7c67dbc64e9eb04bd135447517 1 0 \\x000000010000000000800003b37a2897ee001b5f5e171314c1e299a49bad021d665bc8f032c339bf5d1510aff891f42775696be635acadc33e2319b157f26b4ba6f368a5af362abb9407df09f787106de759838f092da3d7d9bc796dce3542d6d4b3e4c06cf6e11c250fc9bdf4c7aaee840656856c314e1c3a4d03993337047228c4573ddda7048b84e24403010001 \\xffff62c30b2e2da6a1c932e1a1a93c7b2ab54bdbdf7e7bb1a7713c5732435d7c49052d3525cc40061fdd1d45c2885559a7655224ffb1503b4c90da12e9eacc09 1661188319000000 1661793119000000 1724865119000000 1819473119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-275 \\x8d12ec8b4df50216918adeb65829ab300d3d1b78287d9d5bb974dffdd57a2189e7ecfe42507ac7004c02469f22857f3c8049a45256e201b572ae8f8c5e8d4412 1 0 \\x000000010000000000800003eb29762f0f8767f3f7302a30228d953b00fd6d8ef3491b27b8ff96952ea2edb1d32548b74ee140da16b6d7f4c5b4deb78397ae42a51b6db30f9b4744c3fa5880717557ab67a262bb8692f3247eda4f224d6ccf424ba622796f656338c3ffc96071cf4525d57fbfbd8833734377eb0b89bff38607926519ec0143f53227afb4e3010001 \\x5a5d95acc298650091753c804ad6202100a585fc0c073063ee2cd84d5de9a3424a37d79e284bbba8dcb76ebab6196121a96a6102625fd7f14f22af2ebb5b9f0d 1653329819000000 1653934619000000 1717006619000000 1811614619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-276 \\x906e737a17bb00070883e93d9b930923d9b2410771059e148309d9219c59ee9dc8050f7fdb6f8ca10e35e759095a920bc8a60108e182bb52be993c7e7916fafe 1 0 \\x000000010000000000800003a25ab88b502f52887222f521d0af0098c582536f862b2027e59fb850eab39a7a5ffd16b6f90ff14929ba5b4424aec489db164d6f2557b031c65c606a2127ddc50fb45ac43e2d7ca6887f15a8a4d4d069b202652d6f8700b49df452ff94f2e0bc829c3d205ecae6681545cd2f7fefcd69699302a080980d58a46b1b7d2c5599fb010001 \\xf7b9ec5bed26d81df1e51c12424bba9c32b840c325a6b5e8dc9a6c575a8e660cc19061356af1725546016f3e6b386ad56ef271c7b1b415556ba029b2dbf59a04 1656352319000000 1656957119000000 1720029119000000 1814637119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-277 \\x9092ed6124283ad2cf6a55bfb6bcb95d7e5f21cd0a594920bcc13d35e81968e9f8a660adc3443c837470e343b6a0b52d1c279d616c4b9e04c2cc428787b08b56 1 0 \\x000000010000000000800003aa593482fc7d1774c79da0917df9be30a802aec3406f7fe549321d3979fa683f0f814fc70d5069706f9607beb7cedb6e69360dfcc8db30c0227efcd90d47e2a4bf0219086e12d93758da6c1a955ae528383ff791dfe75aefa987974cc8e4301976ab5f90b69bc27582642661debc22f75ab68550795fe7e4979cc20e05bb3f8f010001 \\x0f052c98fd989fdfb72e2ddda1b892a3d53ba9b913ee9ebae3c307903a26163277cc5c4e4da37d74d413a8d2dab761b78e88ad39c7b44cdece57a5044d60320e 1673882819000000 1674487619000000 1737559619000000 1832167619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-278 \\x906ac74e77c6ca47f7795d1bf2edeb30e754cb2c5875cddc8e1883ba7d2127e24f811e4aaaf17f17244d1d8b63bc17801352dc83d767ae71a5f48717396e08bc 1 0 \\x000000010000000000800003c1949e6c7e569e0d603a8baaea8027b395d6b88cc77bc750d6ce3cd50141171bb6503d454b1dc270ebbb5be326ad9c2d15e832f3e3cfd785f3cf482fe621a6337d926e769ad6acf0b359fbc1537a0782863faab7edb424e5c66f2ed749be6b3037d0a7dcb152a90e8732b883e022ce3b3decb74e5abd0bd07e12b34f21b4e7bb010001 \\x2523293739352ae8b7e76e9c856759f49ed2a5818f45ca3e79ac9a34cdab3d5b9650c719e3d6d04ae62e9a332472c4fefa47abdeb046370bf52be36fb3452f0b 1652725319000000 1653330119000000 1716402119000000 1811010119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-279 \\x975e563a02c98637141696e1da08c7f58a2f88958e0f5f0c864dc1738a7143993f6cf280b793e6b5846a5cee93c7ec6917b2211fb1f1033234006f54deba39f5 1 0 \\x000000010000000000800003c0bf2397007d8559b90deccf0ab7edc416dcc749b4f63fc8b3a82a4aa82412f933c6edb5b12a8bff11dbd51f936ee63fc1d99ea9c0425977fde4f17c92611118c03db427f361df02f1a6f8409a0c495d3fec363f70dfaede441f643e48c0e34a4ee894a8558ea9d9ba34f5c705e22ea7a989fc52ef0bde1ca104d8cc10e1fc23010001 \\xb2e80e4ef2b9b6dbef6a62e35d1b12f4adc521261729fce82eff8b19d776a2cb39dfff7fa866bac2361ad78da8aa23733c68cc958add49be1838a3b584970103 1658165819000000 1658770619000000 1721842619000000 1816450619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-280 \\x9cbae90bb10c119eee793bd5974ab9348e513e7ce9ae512c4bbeac6e7cf22a4edc7a458cf5e440332dae3784e8f2370326c4edeff073033fdbaea77ff488ee69 1 0 \\x000000010000000000800003eea27e17f64771cc6641703af31ec7cc00b6d06cda340d9d5160c18dff2c814291977b3b5deac9c3f668e9a9b4903d3116ca779553fb9ccf1d8402149f378ff24ec074c0e7fb6f8f6188865f321a47f95519ebbe270db77837bd889886b9d3eeb6b29a9fb277cdd8e42aa540ad1dbd7bbbc3d41fc841266af12048ec8be2f0f3010001 \\x1c6245b90730f37407dd7f71e478e1a8b6845b2b3259c9b6835d2342603ce21fea76e0457f1b02c6841cead7b552b188fc7704a52343eaeb06314772995c330b 1665419819000000 1666024619000000 1729096619000000 1823704619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-281 \\x9ef2f85a66c581e30001612a4274358b8c59f6039ec4119a9c944aeda404abdd1e011f501c7e2eb1606cd424f6c365813cf0432d55b1ba6c52021eac324f1360 1 0 \\x0000000100000000008000039e04d2f27cccd6fa69090487559dacfbb1206fc801c6963784f1271478d4034a9b137c6598e9f7e914d27efa8c615fe652faa8e44325ad52de248e50ee527a29ac3d400cec43d17c49a32f45e28db801f0ff7579afe993f10c11bc7bc7a66063824931e13e45fa6c5c2c30eef4b5b7b099ea8b534d5f91f1a1545343c03cdb21010001 \\x172886aa642160d02c48415a29bb50c91a44a833946e3ee98553151b5bc88c8fc025e3aef9f57aaf28b60f6084d6b757fce36d02e5d560da81899e118a5aee06 1675696319000000 1676301119000000 1739373119000000 1833981119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-282 \\x9e7a0dfb952bf2ec7cd80db2e2805aa74edcb58484638de487aa2c0177adb61110cb81e342ac40d2a02aaf6ed95103068b14e1beffda0ddf8370a99a1fbebaff 1 0 \\x000000010000000000800003d4033b8bc5ac912fcf899e6087973cb23806bcbace325f5fe22cc8e8606e6ab624afe737fefe06f29bccf1ab4e6148b684433b50e7a819f6eeb130eb0eed9fec51eccf2fc9896b9552a4ac8f5f73aea801f2718cee219c830bd10ee1a1dac939dcba3558aad910f91971bd1550a25014f9c0431e368fd8b4afe6af5bf4f71cf1010001 \\xb172e0f7b1632c27a6f76bdf5900a1de7e57fabbafa4b6213aa519aafd43e6923307eeffcd614e3740bb7eea18671595aeb6b9bd4f739977e5f7710aa212610c 1653329819000000 1653934619000000 1717006619000000 1811614619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-283 \\xa10ea782893e8c9a836da5e48ad198f30c7ac10102a914fb2d265f1f831e5942a9fb2d466e3cb805a180157a7aedd03f2d1d7944c31aae5d4f9a8df5330156bc 1 0 \\x000000010000000000800003df9b215cd11fdc01711f1c48ff370613ff687b9e9de4c40fcbfeb7efc46b6808af7cfcd6f699650a864f031b1fde01b64cbcb3af7fea03da74f44fb2c2bd79808ab00e8859fff85907fd91dc4f8af273813ad68b5ee87a0dcd29914b944fa009af808529b9719f8eb6f1412c206517139ec1be9a39dbdd60641a94372e54d035010001 \\xc16e1c3a47b9e0eaa6540a7eb2191d83d92d7706362e61266dc8715a6bab87a0b2e13c058ac46e81a76a16cedf7ce7f884d40306b024d2a50c02e3fa6bbf1508 1656956819000000 1657561619000000 1720633619000000 1815241619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-284 \\xa5a6e2e4ba9cbe33aa1a844fa5cbdb07a4990eed80c3ce254d084414f751aebbbe02b66a797bfc54ea11cb35b17527846963f574655a46f1af6ba9643dc15877 1 0 \\x000000010000000000800003c483aa21f4fb79e4ebe3f8d94c6e2db3c12f326fbf0a27231a04b008cf935ba3fa65d053485d031c201a8ca9a656fcb8738782de608514eed8aded790baadae8f7637230a33764c61fe974138061cf4a367890d0587822251df707d614fdf315ffd6f352627f2c03ab8342251e89f0e0e8233e43f1951ba0c792608d8cc2f2c7010001 \\x619f005ef1f9e945a19c938650a8cd63d44b10ac6670acef235cc463936e317fced22cac6d984195c0d815f1caaa680b9bd25e859eac3b0f6c033a21738adc0c 1673882819000000 1674487619000000 1737559619000000 1832167619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-285 \\xa67a4160a6738113ce5915d0eeda79498dde1cb50b0e408ad2a66a464b70fe01adb54232d6e92ee12db9d04505ab7cbf3802da598643bec7865188d60c9e13db 1 0 \\x000000010000000000800003acac20385ab28c5c4eeed27b64874593281ff423a93d4e989b8dea1ce3bdc50cece487a5d574f47ae5d1fa900eb66d7fa37fb265b6cc733ccbbc2ea8249067db88411794fc42b83f5ecef56464379bbf383da63b9d117519d376cb603d7f32725249521f1632d3af90fa3e58afb240740a7a86c0de19e6a646adfbcf5ec6943f010001 \\xf779ab0647eb17b7acc6fd592fa2eea724c5d3606fdfe0d80905b58a37211dfab8c29e29dc3e0425402a81af06a07a8564290ed0e8515df86794efaa04c30409 1657561319000000 1658166119000000 1721238119000000 1815846119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-286 \\xa9fe1d7bc8362335b4fd79c55a5a718448e71b2091cda2632f8dece212d51c5632a1c307081ecbc67fe0f560062f5db450016fd34242b2b9a6920ccbd49c7fcf 1 0 \\x000000010000000000800003cf1ff98a13e11f39beb578940c81caeb9ddd4ea407d6dca9ca3545138366e42cdef31db0aa683feff91ab9a54d96222fe550d6253acf493a2d70dc6407374364c2820b9c95982915860742181fd9c2f418f4ebe1fb7733d923188cc54a5a9834cd3ef5bbe8ff56147068961673f89bfb055e1df84bf401547317ed46b608cbc9010001 \\xf121ec84c120110e3b6e872e664d197def50972873f09ffb1a0700468f2ab14faf30a8a5a0b85ac0f829d36b20218d99af919d3ca22699cf441f3dac8fb67c0e 1673882819000000 1674487619000000 1737559619000000 1832167619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-287 \\xa9b6d1337e775ed9bf413514f21eac8484f1930fad9956c5b64d5b05c24a1a7e7b9311d1b1168081f227a5752c6c33ae1caf9d57067426811c147119f2b8958e 1 0 \\x000000010000000000800003ce3992c4248647ab6829f9f5c08411a134961467c72ea148a03ee25aa2f2b7128437ad3ed081998fa412f404fd895d7230e254781c3ab0bc22611306e2d07d9e12b80a4a90db734df10a274e9911feab69935922a29a0e39ec4f2554a43651616bf63a7140ce1f9e1ad350f94d5d00822c339a80b3fc19e2d5a73a1d337c44b3010001 \\x084ed50a637959765b65ab23f85d1233fb68d935a37cf2cb786e3268dcb020f736e6539e9b1297578bd0b1ef57ac2a713240be83d9a1cd62f0fdc771dbd1b203 1681741319000000 1682346119000000 1745418119000000 1840026119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-288 \\xb4b23d8a20d571f8c9a52755ef188494dbb7b0b0730317275424a8e258076ef56e7cb24ffed147a68f2a8a9dc9a1b20ac8b2f6d965c86d86a105460dd0dfe858 1 0 \\x000000010000000000800003abb4961c7af9a130a77f7a2a7c09a1960550994cb59fe9e6359b54c1346811e5f3cf8775e884849561f1a5318d462130f1531afa801c778193a303baa654ef7ecb3834bd2a7d95b5b2580bde258075c279261a5797e9fc55cf5b391b021c56b81612f4520a47ea8dc4ac98f6f869afe43613c11329a917dd1b839a2e830e1a51010001 \\x56c1bdb60761dd671623e8783ae6ba0d12bfc8c37263b28c79c54dc38ebfc6a11d474e3ef038f9fe49c50787fdc47d9be0e763ac5c207e741555c627c98dec0f 1672673819000000 1673278619000000 1736350619000000 1830958619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-289 \\xb5c6d0db9338070947d9b8bc96b7ecbf7524d291093612881649386a925010cf62172e2c2c24fe8ddaa30e019b127e10aab2f537bf4d17b1dc69308d2a688a7f 1 0 \\x000000010000000000800003c20f891a0280fe995c202d85cda6d182ece2ef9f563ba8520bfadcf5f335075e730e4839c4cff78898de5820e9ce421dc9526e859570d090d15657392f832728a72ae2a25994d9c488efe203d70697cff86335bc844dea3be5abd1e6c1eb49037f3ac0ad2d7254fb94c9db569cc48fa28b672d2c05d3ba076a0fec26a0e8d003010001 \\xad0c21661808b0c9227cb5d7e92051843210d511edcbbfd0244ca75250a55f2550d568f83a8a01590f6a7e2553c014eea530050326646f874108924fb8121509 1656956819000000 1657561619000000 1720633619000000 1815241619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-290 \\xb602dddb76b600aa7bb595fc20cc118b39b1391bfa51cb3e16d130d99f0472631efb43744977bc29db41f326791da85a1a84522cafb03f277be15556a7ccffd8 1 0 \\x000000010000000000800003cb19187fcb8eb92019e003f3e59236a2fde7b0564ffdb32ac030de36f20f8a9d01cd1d109d48198546224cdd094c1fd1dad70228043bfd06dc389245662c0267ab82725aa2db74ac5e856cfbe8957f7f6128c5d698ce4957a61fd003c44ddf61f16d61a35e2b9c7b304581ee03f8021da6bffcc304a6fce3b6f141e982e039bf010001 \\x74e6891e9b625d40f9444a6ffe24c30a0451d053774f54d849843c3496ef01f97fa3a8a628219081c5f5d9ba4f8a978f6ae40f3972a2dd380a969b519d91940d 1652725319000000 1653330119000000 1716402119000000 1811010119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-291 \\xbb1e94d85915b9ed183d70750b80f359892f6d18da95571684a9aa96a043ba2744630e4f1779d50e945532db30d4316db1c55af0b3eb551d6fd10d4301900e05 1 0 \\x000000010000000000800003b06033dad310e338e1150dcfb851eb3d5e9af87aa7492f5ca4ceaae7417515beaf668582db33068041983568b51dcb17111c5969fa40b4965644f7a848b7b46602049510768ae8b5b9cddee513e9709683aa04e0d841aa0b98e6a34c7c5659b2942a36419ced034cc06b475db9d3ee2404872b7152f48c879949b53f64d66af1010001 \\xb134dfea1e47b92c5fbb3063c6bc60d851a2d5899e8b126ae4a7d5b9e626d492f3cbfe78f50d489da76173288fae23b2be1dfa381edad6d2f23521c6eb46d702 1667837819000000 1668442619000000 1731514619000000 1826122619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-292 \\xbc323a446bd8a7c9c05af46ee5abbb5a75525f0b5273f7c825f27c4f9b1935f4f29fcc77729db3df93f5f377f4b890e96a3bd6e6d78dfe7022ebd00dd0ac221e 1 0 \\x000000010000000000800003bd5ffa9b852571c795fa49d8412eb415c03e8c32b0be9bee376538450bb9a79af577de68b3df6be8247b13b5de3a6320025c66e6f655f95aeda4c5e7e91fc70131604ee50cd2ce4c78a8c74fdc27bab3404f1a53431a145cbf34d4fccfe086f0fecbfaf589f7987a6b45c6f883562acd9d861fc0c75e8000c7013b9d8496a3b1010001 \\x172b924d5f51827126f112cebfc578b99a6f071dbf8c8bc2b0052eca7decef144b670d4fc2c5fb6575e21f757d94d3ec5f0f0462eaf9756354f686dd6bf77d07 1664210819000000 1664815619000000 1727887619000000 1822495619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-293 \\xc30a75fe356987ff4e9ab2e654fd8251005650c6238f449489f1c861b61fbc4247e88eb7e3e666cd8117ec7ae1021c58033b85f287eded8a5160758d987f4c40 1 0 \\x000000010000000000800003cbea8d22744aab152bbc6f2149e401febb3eca1222a6af061692c2f939d75bed535b9167f81a1f28cf4a7bc2211bb666d31b1d83936069044e68b4b174dad9ea7bf7061dedb09f71293b554f39e5fbb779a3d92fffb2b52c4e9f107509a5b80eacefb957f9e1c9905d91ad8437af73b8e36146cc9264156c0755bafc7da79bc9010001 \\x052cef04ca365b64ce51e97907f52473adbf7df25ae40f037cdcea90950ee4aff6b460cb77f86375d31f104b9eb6c2c686a9e10401f5b826c2f1a8956b3ded08 1666024319000000 1666629119000000 1729701119000000 1824309119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-294 \\xc5dac36ddc6a632025439b1d7a4b96a929a17380b563b9ab1ae786978a750f9c818279c7422350c2c7028e9aee937a54999ca7bf3be07b75ccb93325d9b1848e 1 0 \\x000000010000000000800003e015202bd8480d261656449cea08b34691e9c9a92e520b5b4f95727b589e16c241fc8b85f52f8126029edf2e4265a0965ad8c6654990d5c10fc8ad10618212ae6c323149de5a68a1ff1c60afe529a45a0d60104e1fab841e3cfbace554e124239ce640e2d07742f3a04e9090656c594e1ec3877e82596e71e7d156a5a25cb8b1010001 \\x9173393b3fedfaaa586edf42a0e83ef22bcf2cb678b2b832f45b3bf3b8ea48709694cc4e882af825c52fa915897754c6ba53d0946781d68a4b9f28c9271e040f 1653329819000000 1653934619000000 1717006619000000 1811614619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-295 \\xc55e31a616233e3eb13bcbb1ae14e5d3f3dec802bde0f49d4a281ae540cbbc974a1459e411efcc342a618281a5dc655f00fbf606082e268854a39e8fceba2d86 1 0 \\x000000010000000000800003c24d1371531f798ca545732d79e970eaaa930e7a574a3d9bac1b5682b8808fcb1cc87dc598be91530b132169375a901d2bc2b9bc01b76bf0dae0ed06566e3b65d76c4e11bb63bc0e07f346073e6867f3dca75dc83592fd5032b4b857f2d4474d5a8c358f2a251f1f8e9fb6b674d928f7c80df76a5da88b449cb6e8d829fb82c7010001 \\xf69b8fd1d17f86853e231bd5878c854b6c6372d05e9b4ffa0d470b665dd30bdce0a5febda8bdabc2536b9cba2e65f2106a67b36334852fc78ea5a1b527141900 1679927819000000 1680532619000000 1743604619000000 1838212619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-296 \\xc6f63c0b3d510ab9f464adad852859308e99b22fe1842ee070262c6a173272f2cd7bd0221d639bdf516e18846a6e380a3cb9d8f8d70302781b4e9ba19dac1eee 1 0 \\x000000010000000000800003ad20d4e099d5b66c0c5eb33c9ae9a06ab3e9ef3cbfecffe056929d07eb6b020a7edae68cb4581fded4f4e64d039b6621df3ddc26e8fcc079a07852292e6c7a5c5d35666a4e2244933928fd5ac658f21b08887e95c5f06dfd37a8cc262116aa19c3814d9d3fb69a4db555dfc47d6d2987e259f1afc1586373d8dca436eccb5e11010001 \\xceb7d3705a347c1462686e2c405196593466b14a64a35dee8a50bec7c4452336236749fedd58ba07d9d36011a3eb7adaf347aff6d20c2693a752a15b78ad5a05 1674487319000000 1675092119000000 1738164119000000 1832772119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-297 \\xc73e7b00b3b81e2ebfc3a74a4102fec10f9ddbb298e5786179f3a57b7102b28396ddb77bfd42f31c9bf9506c070d3b6566f8518afcba641d5340b188011c457d 1 0 \\x000000010000000000800003de59652f486c48a0c3e15f3bee1a009b1a8d73c9bfaa7f20f23d1097f7970fb5f796c0aa4a2eb17597d5b36173c9010bb99ef46c8511fb4bf3c9c02e5b423c857dc344339be2dd0cf8d12a6c36815670256e9955c5c2739058c8747858ea2daf12c8b1f0ad407530fb4b79bdeaea70f9895c5aae3e22069105cb80e5aa7e64e9010001 \\x07fbb8a715d4cd959ff9d1fdf9ba35a050464cb11668e52d18690c802d07610864ae7c58023a69fd670a09eef5a4a74c6ab6c44698be1956feb7b395e3e1df0c 1664210819000000 1664815619000000 1727887619000000 1822495619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-298 \\xc79e42ee5ba9aa1d7d4b533b0d92d7dae70690ac70185b17b8b27c73dccf1b68c4d5d06f6a6b61e326aaee5619c45ae57b9f7b5052767a96f2c755712033c226 1 0 \\x000000010000000000800003bcfe8be21cabcf147b155a8864043fdbcae7f45ff8a5eb00326d302a1eddaaa6f66b4ae3b3ce0309d56f2e8f11b4368b7087eb00747c54c3e46e1dd2830c180dddda62fd8965f2cd79807b66caeb2e3aabfd4caa84d01612993f525396363155f88b5181a64be22864c3e4e2b4ddbf9735de13c56382263ff03566afcf816b75010001 \\xb2bf2f11d0cfb689a1929c8e6eb6dab4d60186d9f72f365da67992b87cdad336b95c3d6c32dccb9780997cece6b4f7af81cc1ea326dfbe005a9fef95aa2e3f01 1672069319000000 1672674119000000 1735746119000000 1830354119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-299 \\xc91679e38d93b0c980f4b9c4170e8d003a062c2d3aef7318d39d536d9f51ea584e69f0a786bf4962e01e51761543c3fd09bb1e08a7b6d55d6566f5119876915c 1 0 \\x00000001000000000080000394168a7c5bfb14ba39a66ea050b0b17375bce5e2df2ad1900773617d57c3c39759ca13e2aef7ec6105c760932d1cf7adce0b9904958ad1b19418bf968fa1884b68e12e555582a0481eb5903e894613f700ca14aa2c4e6a204d825afe08d1fdd8a0a0741f02113f6d6f5df53249bed1f357fc2302f7eb3240238f0fa543e7a9d7010001 \\xaeb02f7b9f80f1c6e88161a1904e5b8afdc4905ad76d33a575d05e092bc01db4cd078ea63686b8583d67ea3b03b75589f5caf763cfa7c0754e85f2e26dd95f05 1682345819000000 1682950619000000 1746022619000000 1840630619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-300 \\xca42ffed5e93e816ceda5f61f730ba0fe16e5515f3ac23b395c0e6e2c19cbcb57c14f026bc7535f9b0c685c3cfc55a1466675499fe15a7064657a5b1cf207147 1 0 \\x000000010000000000800003ed3d962d37f4ca7898a0fa3ec66a352d21b6544c66f96d6ae7a5b7cbc4d13976f211c3244b6d27e3b0bac7cae566b66b35ddd36e81b1f4c50650958d85163e39daf8c031a5824dd28645c090a5802c357a057e1318d27474cbe02a5a26ec57bda09617289f1f9dbdb082b5411e0d06899ba15800c0f71d5f1ace1aa90543f45b010001 \\x7bbd528308464e587bde3201ddb7633e18553130b7f08d5f5a1c987d522bb035f61988ce122f7ce5b4d4b04ce27600bbcc16dc0426e5a1fc377269e5fe314d0b 1672069319000000 1672674119000000 1735746119000000 1830354119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-301 \\xccce63f0671e01d75db2a08da9bb5362dae3532b3d10ed90beedea3b3bc5438c250f583026675f37707de28c05377f48e7f9322e02c4876afc51cc89a1f488ba 1 0 \\x000000010000000000800003a864f161f70b56b6fd8a34fffe7fba0b6c920eacee20771a3a17e15ea236cc659e79cb56e4ca02400a458b834d49d80aecb3d0f5be031eac054e76e040605f3489eb18d7d1739dfdf4c2d63df3ea8ff0244cce1b1cd914ee83d6ee887d81cc5407d906bdf5c3f5be289a3f06c287abbdd994bbd93525de1450b96e3564137b0f010001 \\x7fdfddbe5b93cf907ed37ab860ef1e7c82bc83dcbe0ceb00170399d1b195c85d7eed98308971570e4e3ceef7175b1a721f47ede2a190a5ca3e51c30a34def606 1658770319000000 1659375119000000 1722447119000000 1817055119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-302 \\xd0f6902a6cea07fcc57e78dfe1c1ee7294274af10262602f2f5e11595c7f345e02b9ffa1e30fc28f25d0ea9d076f21eca601966a0e2ee26f47712db1207b9136 1 0 \\x0000000100000000008000039b64fdccefc3f56676d0af98a8e12881870b5b44184fe42b50b18367f99d911cab201593f5d81944682994239f36a300222bd229156a854c953cce522b8902fd6f002f9eb50c176d34d9f64a33cf73b1ff46e20ed70d3d8b4931c396797982189fcecfc9605dd394aa092199ecf59090b306404f92dbeb8c8b883817a5498079010001 \\x43df8c5d993eaaee32325559beabc8982c9048da3e7b7bffb51b04f713f15cb164c39ebbbac96eec40fd8e37da8e4d6a3e087030185d952e082f921ece79be0b 1660583819000000 1661188619000000 1724260619000000 1818868619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-303 \\xd016f8fb205ebb2fe1a996864828efc74ce59e0ca8e862706f2ebc3e188ae94ed1ea2d34cdc77e151d66d428e167e5e4cfa15120861345ac447a0452dd01dccf 1 0 \\x000000010000000000800003a99ac3cdb9494ebdf2cc7c20e301991144e2486a4c1dda4aaedda79e4c44ef04d969bda4c1c31e2f47a2c71b3592b5544b567b54cfb3db5086508dd7577c4775daefa383e8b87b47f6c2cccf26c7076d3da7f85839776bf6b4fb752c0d3712945b7f35a15605ec617913bb3f8c9efe44c06b595bb9c5b1319edc34430720e983010001 \\x38b3b599392f39ee958e323e2ae4c60bda170c2a26c193b0f14a76f2da94f12d217af807984a36b87e9c4a35bab9eb16bf74375a09b0f43426994513bacffb0c 1672069319000000 1672674119000000 1735746119000000 1830354119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-304 \\xd25e8c3830e4089bde3423b3eae5e57accf438886c4cb93576f2178fe4e98183605cbc58881571e824762f4478747acdc13797e6383c8e9c9426f107edc13f45 1 0 \\x000000010000000000800003c4e62149340fe58f7c62b61450cb413a199bb9d7f4bc76eb77bd906b54cd6f7d19bd34b53ef2a1319c5b74e8908884dd48f5490657d7fc1fef1b8fe7dc773656f8d0b034b59e34a90dd3a44cf7f0b7a49d463646412ba27185985f647b74f1fed78243e4050b477a87b13f19a0b13409ec25c72b8bb872021f4568dac2c920d1010001 \\x334e020764e17fa80b3e6eedce531fbe42b668a438e21803aacf2aa99d97f0e159b452539ddbdabebc0929f966cce873d3cfd2faa0b06ad9ed6ad9a457839901 1658770319000000 1659375119000000 1722447119000000 1817055119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-305 \\xd83a336a4270f770fdcec90af9d609b06dd0b00520c36d403400b0a4db994fd594d4140830bce477f2334fd97c226521f4e87f69395ed843c07415a0cb5ad30d 1 0 \\x000000010000000000800003adc41944963e1a29ff810023aa2f8bad05dba596c936ff752e82b67228bca574fdb554f2b19bbbe3a12b7a6e7fce61bdda09568c8c67c9ab54f761b83970b4a1a44743fef3419622570ec2f8312f3a62d581697dc66fb4785a914ebcb1439759bb4041ec5c098cc82a755a0c2c7eb9873da1e40dd5625ed945666f711632e8a7010001 \\x2bcd86f16a27be5f99752e2a58db48e599038ce6809eecaa615c2cbb57b59b968ad9eb70e8519d3837ab1b3635c8e291ea6ace81dfdcd967c4a25e198b12e50a 1670255819000000 1670860619000000 1733932619000000 1828540619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-306 \\xda16bff8c0283942163464d324816260b55de0cdb3e1e58286c55fa20a4546389166d6f5ad382caa9c078a33ace3888969b1d1fae465298b61399551a1489fd9 1 0 \\x000000010000000000800003cf5d5410d81ffbba526f11946e1c65495c83fa1dfbccfc9983d5ce3754dd50a4553630f542c14125c909dc34f21f5916ff9b370012bc3145c130d1ce7d09ff83c232f30952da458a999811a65b9ebf594af0193cdb416b2871116e38590557a8fb24d237d3b8d4cf8e50bf149edb80bb9d2798778a18f27e44eec9bcbb134113010001 \\x2b621713b32740fcd96704116ad17aab88abee832c92c4642f525ffd596431d6ba6c08bcadc75ed9eca31a21d21b668371026c416c6b80a4d045e2b975fc2b09 1661792819000000 1662397619000000 1725469619000000 1820077619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-307 \\xdc4aea9eaf38aebed2e2d479392b62f54ca29fe0e8e30840eea6887e776cd6a0c065754b4eb85e65074e71fe32297c1f3378251b2a93353e62344c65f4dc3a6e 1 0 \\x000000010000000000800003b9a959390f0a6ea9ac831772cd8f77a567ae5ec5c3097f59532ef67be96a4c7ea5ca68b28ff870230b771d1aee4e7902f1d030dc7d205f9b28bb6fafac56dc65ecc49097bb9696570f7196c3e2acd720e50417380bd5fc9f3984084ee3d87b97092b46cdfefe22114cb5d6d3f4930fdbbc02a68649e8a0bdbf1f3c47813ec713010001 \\xb190a33bbf499aebc2dadb0419458d61b60e7996671fed580c0c9f5de715c197c097f8eb4600929c5bd26102ad67fc4a472c113edb9bf122751c67feea25100e 1667837819000000 1668442619000000 1731514619000000 1826122619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-308 \\xdefa16491d00b2fd8d5749e9f707ba5572ce22becf24f6d281cb421e098a53dfc06b05111e685e4e5ec454040189d020d8048a5c050a443dc1bcac1a0eb3f383 1 0 \\x000000010000000000800003df1f99102e80884b5079429a20c7c887ccdd0a147947ca3c2028ae9d031ad4601c5bc9da3762ee99241137fdbd09783c3455f7e37687bdfe5811b35017bb250b029ae9f42d346924cc1f91dbbfa511586d83e1ccdf9d0d2434fd6b9bcecc7b48f010421d58a09fe0b9a155c053d9d5d35f6354772f212ceb56e29f4c735c4385010001 \\x0c44a2c8b3bf7f9f78802e39ba094ec3b39efb7200979dc3e4006d248d8c046cb62e686fc322220842521aa969dda5c5cfbc757ac2189c38d6a8ba15437b540d 1665419819000000 1666024619000000 1729096619000000 1823704619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-309 \\xdfcee49d03108993d27b72ec87f1fa4c86e9355b4bd17d659fa0dcfe80e1a7f24a1075059e75d2a6bc5a35283cbf132cb827efa8015aceded7ebe65f49b6883f 1 0 \\x000000010000000000800003bfb37e852826bcd27a1db4419e0ae2efa5f26e4a211d1b4d66cb99c129e4f2ae2428da907b3aa5d6a4a4ede9b02c08ce724d8711fcd60f08a77dca58a5a7ef37b8ba459159b5d4dc7f98035dca6c6ce8f4bfc0b1e2a8960ed8cdcb588539d81a9ce6a17284b6d803523f182549a127110b24b5326650a7441349afd20761b6bd010001 \\x7ee4c1cb3a7d2ea412811561763198d8daa48a128ad8a501e4788f22d3a858e04481991e7686aa98b6f825571bd3bc4d966f7d689ff536b97a03f9ff5eb05709 1675696319000000 1676301119000000 1739373119000000 1833981119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-310 \\xe0ae8045db5fee329e26dc10d9bd7b51ced3e756837e60a7964c53def68110a5026f12f1c24cd5f8f6dbcaf5744fd97d1d662dd14c227978a7891fca6a8c3d42 1 0 \\x000000010000000000800003aaef47f46e033c235e23199958fc54ce168a89a9376d3903629b49af4cc15550c7c737a0e3f18e84c367b79d5978fc87750b752170bd102574642c621db1f79d0f7340ad4dd76a428aedb5ec8fde4ea5e391b7b93d7b77ac9d3fec6f60c2281ce3db7d648fba247596542aba1371b4bc780195390381dd19bfd8efa17fc94b43010001 \\x54a08fd12d70dfbc000d4cd0580a0fa3bd994e5c44367f0d8edb1af40d0d4b5cfdaf011d67dec954b4f013483c9dab5488047f25816892cc60aee11733132c01 1669651319000000 1670256119000000 1733328119000000 1827936119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-311 \\xe1b641206e38d07238d70a48cd2d2da84ff1714cb6b567af7dc84674cbc81dd7ba932bb4581aff433377e1b0c8040bad1ce1c35436e2ca571da0de731fa1f9bc 1 0 \\x000000010000000000800003df400f9bb9ae8183993fbbd4e3f9cb5476733a070423eb61c6b0aedc1662c3320375d1aa5a7cf00795ab9891fba94bd37c3cec179c03a433ebd15947ce77535cc7940c61d17f1de0b9283c7bba43372074c886585cbb988cff0c26ee3b92ee6b04433ada451bf3e592be36c7893e278f6dc1a92ffdc64abe6986a1f8c3e87059010001 \\x8bbd201fdc093846fbf09792b53ff48224e9688858b9c76728e7b410ecddc4d5329a1777a784fb9761c0fcd90bb4954a4ec043d29c2e36519e48f86f14693105 1675091819000000 1675696619000000 1738768619000000 1833376619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-312 \\xe25aa621b50d6c0a92eb58908bbeef6a600128bf41af6454198d057df8feced2d41e740a3b386e5bcbb1367d497d5903c8d47498e6f9bc8bf65fde49c7846d9c 1 0 \\x000000010000000000800003b2b3af39488da837bc45ca9d996c45ec25aa05efb54a2f204c21600a8e00e69bcc894f18144861833fcf60f213d0b4ebe23832eb4ad7fd53f32e0f29b075a6ed17253e5ad747d7ece442312074423e27d7e3a5b165a355ec1684f0f00ddb21998a57d11b9abe7c2a842c7b806847aa1f420f8a6d4f705715438a6b5fd2a8ef21010001 \\xf701c27fe524332325dc5eb52d890060384956870705a7f85b58d885e3947eeb2aa9f5109b7a02e373e8efeaac1b16d4eda07e9c27494c7590812758e68b680f 1682345819000000 1682950619000000 1746022619000000 1840630619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-313 \\xe9826842488b0e14a74a5de84d9a013efc0f18e1e4992a96c12fa7d4422cd2e417ca7c5315d744e75426106411d19909893f75df699df22d117719498e634723 1 0 \\x000000010000000000800003e1c27e8d030d5d109d6bc27709cd4bc0ed05adb8bc64a50bfa37d69a457e927484fb9065e1eee4f140b12f0633aed7b660ac9aff0ac2e4c7a5c8ecb388cda47f4d043ae6b01ba43505cbedb76efda274666bf8e28f3ecb1d5a30dbd994bc48ca668d2cb4329ba047108e6daeb52e137be06c568090f7b83ae1cc6469fa059079010001 \\x9f918c9cf3f88898d583fccd2b3aad40296ce75c7a70f1d5cef626629f9cf2ab22abd92bc258486874006c5623f23306e59a11042716493164485fe1e6133d03 1669046819000000 1669651619000000 1732723619000000 1827331619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-314 \\xeb620dc7f0fad4be77ee8daac4bef8519bf3232f82d04d0009404b44132bf9cda8651a5c8a87e33c8c06b1181706053ea360536662b66bafee68a28c8cb134c2 1 0 \\x000000010000000000800003c415069241d013a9ae37155ece69e5347ab2f4f85c97338cea1f99c9448e5a1a5220229087a9dc42ace5716c4d99c977d6f4d9adbc8a700a07ffbeac1c28ee5a4d66be3e53232e9edd546c9491d87a5a148cabf522832386ef45977fd050e58cc6381412d815f842f6f66e7761eda58f762cd2fa9f67f34d6302b5bfad4d817f010001 \\x09539a98017a5435fdda257c738193c83ae69fcda6280dbf1f5d553eb121964d4b868e2a8e98711509bca35860b497364ff5d67534eb42838d52c29e7f951302 1673278319000000 1673883119000000 1736955119000000 1831563119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-315 \\xebd6330ab260849cfdfac777989b5936de69ec25cb2d27560210d0872aee87dcce263792da29f1a649e72216bed324f85fa30e3612f1e6ce3d9652050bbcd858 1 0 \\x000000010000000000800003b3e034294baa150178565ac9cebece0450320de80f6f45219a0c0dd7cde6d46eedc38b4430c8a1b1d3c2e7ab0ca55382a77af3a329d334b42cc5f937968c1aba1cc4143b1a28d23ac44d4a58dbb0b1833b40b2dc2d2ba2daea113cf954a4c0f42772f56a856fcc0c2927dfce9c7e8503e1d37c965fa3971bff9d0d113093a26f010001 \\xcb4365663ac0215a23afed4acb829d0763e94029d226fc0db8523e307b547051c6a30d81af1083029edefe7cc3b589deeeb9840b6390341c4877a41ef767ab05 1672069319000000 1672674119000000 1735746119000000 1830354119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-316 \\xecee5eb0766a33614a550915d6c443986f4059e92ce5100caf9488eca0eefbffde261fe078b2c06d35fc72dc9f42a9e36c988ce8dca461dd23b21cffe0812dc9 1 0 \\x000000010000000000800003c77808d2e0e55aff4805aeda24acbb9c7690bfc46e52cc82d6b68886d3b3718ef81b67aaeba4c75412018ddb777319981461fb34e0cab54d5f8caa72793c249422d5dbb37544b8e641afb1e5fb38c9508eaefa40933dd34d27f1fe96e02ab657843ac1646ffd0cf1fe86ee2320c9b5c33cedb8d4b9cb0d9734c22bd631ba45c3010001 \\x4e96be1ce571aad53dead5b8545b16b3a04098a6321e2c262fc176e1877d9f1ac481831acb42facf308596e1140d51cad7ec973db78bed227228423a9e02e803 1679323319000000 1679928119000000 1743000119000000 1837608119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-317 \\xef0accdd206d342d2ada1cd09a7e9a18c60a5cece41428855c0e8390837bdbf277ce5df3a7226973e87f270b6dcf2876086f1417133d48b2b0662ab3b3a091d4 1 0 \\x000000010000000000800003ca07357d5a7e90490082bec7d1511def81eeabbd94b1e2dfaa4496f01b4f216ee3bd2446e445af292f7f402da70bda19b1f76cfa4bf3f922183d024504e554dec32ff59a88c9d274942fbc68d9641af313a3879b3571ee03d9b4a11e1aa76e525ce14dd434eb55b004083062f01001ab02885fa81b0c39e94dea7923cd197137010001 \\x418f8b0b371891ad1d0fc00a5d9449d20c4a6fd43b826a69a20ea33dc6ab9ee7979e53deccb62ca4a012f09f8c17afa0d9c462d91d7c795e90eb97ff416d7e0f 1666024319000000 1666629119000000 1729701119000000 1824309119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-318 \\xf2aac63ffb6426719842cfcc52b07603742eecee74e0dfc459519dfac8af14093007ed7df5362fd8ee75eecdd4bb1fa4e741cdce47a159093375c974d1aa2462 1 0 \\x0000000100000000008000039afeefea234e8d08d6417d868cff8ee4a591bc775a78ad4e1627b812ca0cf6896dc71ce74e2f924422d2282d7da19120fca5fb89944de4dadd92dba079a63835c9359dea90a2bbfb8d6855b61d55feb85482ca05ac8f5f248f2bfceb7ac9245ca2f88930c8c1a55cb31cc39add06a45f72380c86f0f506c93a8cc040c284c191010001 \\xf027e4493b9e0c4408e9ef9c7272588cdea24ac0c5a7098bc43db33609c87da5ad2d059eea8dcbd5600dfd3fae862ab5eec9fb039ba38e0142db11234395fa02 1682345819000000 1682950619000000 1746022619000000 1840630619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-319 \\xf2a264c9d35a81218202774b0a32df9dc024f6acef60ac70d97babdff79a86ceec72819d2502bfc82690ce1babc0af884139e2305684a4c7a0a275b2ca85dc09 1 0 \\x000000010000000000800003b60f6115fe811c31f382e8f445f6238fd9ba902ab88b31453ee49a69db88639b2b89c2589d11d3183df5535e06c85184b23ed8cdfb4d7c1419e8dd0c33e8eb35ac2bc98a2a255231b9c3036795666e02683d4fad1726d2be896fef2df1ad84e29e11108b1b365e6fff047de9afb23bdb26ed98a6d5019c578a7c80a7b22a24ad010001 \\x0507daf7abf6180e7c29e3943bd732590ef9f96582daee138712f8430869c56d7db86704a88cc59b6a9f9598a88a355b15737333a6cdae2f690beae0eb1f4b02 1667837819000000 1668442619000000 1731514619000000 1826122619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-320 \\xf2fabfe849cb8dd16a3eed085dc72d9bde8d6635c09eab3801303116a7a053364e58daadf8763cdb98019a377ea483c7ef454775ee46b8e22624ba1224e1d902 1 0 \\x000000010000000000800003a3eec4fd1328ae6b50477e9d229d93a3bb15231afafcc583d953862769bd80f1e3f915ada1395c68fb6264c25832837cad44a32eafe071312283cb8fecef7f9d76779b8eefc5ac516004792625ee9a7b84e1df096de7c52abb0899471b4e61c60d7db9fb1d089be5fdce70deb8f16f50efcc143b92231d665750587189bb0081010001 \\x03e3c2d3d3f76ce5b38a7f02cb3664fa031dc53ff0e96e24e92a0c07b5390160177f638ff8d7b16a7599dab71cd696c40c7d2ee5cf2a7db6fe1cac337915bb0d 1673882819000000 1674487619000000 1737559619000000 1832167619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-321 \\xf9169b68e69183209db4b36582fa7c11580b9fcb2c6e7da4ca6da22e6d9068cc2f1ea30961f9fcb5c1db0899aa1099bff69b76ac7ef2b5bf6fffd82823c7a428 1 0 \\x000000010000000000800003c3f64966b6bbf4eb0821c5398ea3ce6b839536993254b9a15f24b4032c2350a166232563e65bd11e74910630867ddd463c90620adcde7689a02932e20fc69df49bdf59934724480afb0ff558e74159d93a44b7d7c3c4f1364b5aa3466c77648e5de88d1ba93fa570fcda1c2705ad625ad06530d69ef030495f48e5ca03bc6ec9010001 \\x98328d3edd84c0fe14c1ac2b70af6e4e307d8b2a55c26b4fc900773e2500a606b894ae9ce96608ab3fe20afc0239717b93a510d2379719ca0b5fa5e88d38e90e 1667837819000000 1668442619000000 1731514619000000 1826122619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-322 \\xfbeaa79e63398b1f907379dfb576a95eaaef3f58aa97c2327fbae5a3b14a3e2cdb6006a96a93bab5980d01c2c0aa1cb9a1e97f1a4d1d762e570041a169210d89 1 0 \\x000000010000000000800003a514374670a4a69a66fa433176ea5b9dc832e0d32bfba691dabdb277fffd67b31fbe50717a1f345bd6433038a44bfd70f5d3f10534cbbf04d03f7f6487ad88d34f2d4fc1d2f1b087e6e95ac822afbd354ee95c88428f694bec5b837b705b8e653a0040ed799195ec819fa2e9c3fe65aab5b591719fe88b4d540d1ab114f21287010001 \\xed8d3a6d3185588c00832a06102525ce2ad58c4521800afb91bc4298aaaf686990aeda94561ba1878eaa42017b59e39a4a1951e6616a17ae7596b143da200b03 1668442319000000 1669047119000000 1732119119000000 1826727119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-323 \\xfd567e8073169ef94149a62a211afeebb3637561a8323362683cff3d3869c020aa30ec07fab06e1825bfbbde7b8e81e6e8b587e15da081bc43c68d3902527ef2 1 0 \\x000000010000000000800003c05f73ce2e092f5a7930c2e9104e01404f973742028082cbf82ec4b02df1603e306e5a7eaa272303da2040944a525e0a4e901c0ef9ca4a4f9beda2c57be6f1a9aaf8514543133f2f2311112e7eabf8a6167af2bb9f90b8a3cb3c07fdd5175cec322bb47dbde3d605f572ccfa5482fd7362ae9cce202e8e8fd92d6a0a8190fb4b010001 \\x0ec0f0d734066e62d51fb6ae2b6b051964f66f7869ac98d06800ceb0ff0ddecbf6c053debcf69f1e2ae7e36e77bd5f2fa1ab2c8a4f5ee87dbc032e3b1a66270a 1653934319000000 1654539119000000 1717611119000000 1812219119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-324 \\xfe6e894bc1b603c7b8fa44204c8facf7a084973779d0bfc643759550bc9f7611c706991fb1b1c0361f6b12270b273c50a2248712991d449184acfa6fd08806b4 1 0 \\x000000010000000000800003d2e299b5245ba6a89468142bf3566d8c855881157dae14f0b6a91caeb8f2907fbe2a51a31a1d173e0639f443d9e2cbfcaf25bd12e1494cd30edaaf8708084a789421680490006ee8c1fb49d783bd1c3ed4a120e479677a86536bcaea73dd795118ea8cd2da786608fc39d26f4345f6af9c2f71bd6cf71d5e9d2e880b63781f2d010001 \\xab57a605ecc44c028e927b33503a0c40c75c63e5e96b096f5263cb5237f0f483ee9c8c28d35d1c3fbcece2a50526a37a9c3b1321946b80b6df4c9b3c5f215a0e 1672673819000000 1673278619000000 1736350619000000 1830958619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-325 \\xff661c7df8f7d08ae80b7867d1de5b1584cdc95db0e1164c5f370524e0dc4b16efe122e3843adb69fc5995863b6439cce4cb0f060ffc2c6e5f23576acec8a44d 1 0 \\x000000010000000000800003bccbab6980339fd54c42a94bf1a090980808a32a30cc0e64363e89ddd43ef2e4e45d3a45fa0cf5ea364a05c253a65848b4eb67fc8763715d9307b5cef4fe25326d97a77f5354a8a32e55e16738eca5b79d027103ac339aa487b675ad2f4c1a67c5296bf13da0c867092b094ecf9ea2f1637f3ae3e4f98671806e372fb852652f010001 \\x9c4eb9a5a2dfd1ee573e8c2e3295353be92ba7d69fd8d122806293e6e6aada75919f87a2ea599a9af66c748896555b1262f6b3e450acf853328a6426893a3608 1667233319000000 1667838119000000 1730910119000000 1825518119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-326 \\xff0a6a8bce010f1590fe04929e9ff14c6f28ef65ba34882d43db2d99e0b96c16d4b7e39793081ed4f4cb4d217dd8db92332924f72033c7d6ce42183392205b63 1 0 \\x000000010000000000800003cf494d4f70ab0e830a16d7ac0fff2f3504cf833a51322df36f9bef61d2ab53d63a742397cb8a6c6a6f94f5d6aba896a21109d2fa9f65a5a029b92b65dedbaf7c617c9f084c2b5d53e0b5303bfcfa7046bcfb901fd67ad9d1200161541342565b98bf4161904a9e2e646598c3c06ad28cc857211f9953ae3edee4ce821cb58ed5010001 \\xa3153be029f1715bbbb70c69f69bf346aeb06d051f8168a46c0d77dbfec9028ccc9a39b3b30a27f1a8650aedcd5d4228395508733eab0c7f239a24128069ca0c 1652120819000000 1652725619000000 1715797619000000 1810405619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-327 \\x004f5438fdfdb96647c3e3a8f73e921c139dd76aec08cfac950a42915e72cb44435d33677f6c45e269441dcf818495d61f8c47b76459d05535fbba9a9eeecb1b 1 0 \\x000000010000000000800003cd146b6a78ca28dc93c360cc9395086375b379bbdde052baddc70b96b3b0810d8170c780f93fd120a81926ccaca462b2fc78c26ed6b4159f81968ed663500e18810e01c4e666b93c9c8c2ece35175259a7fa617a90664fc55294b5992c04c9e241395f51fcf2562f66c937fc39dbebd4517d094a8d42cceacfb75a2baa040ee5010001 \\xdcc1ec7c894ba1103876cd45f97947415f74b424922b09a0c6ed5dfb7aee5a9501fa2b43e9aa7c6ecff07d1f26e3c37bd39bdb6355c3e409e8394dd554bbb009 1676905319000000 1677510119000000 1740582119000000 1835190119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-328 \\x0517bb95b448fc3bce9d65aa441a33f9edf06bcc074a44780e8d68051310013d23becc5a30a17327a9f3e3d063a7f26547e33de5330ec624fd07b39aa5d0a2df 1 0 \\x000000010000000000800003e2870ea61ae660d75fa7bafe3fcfdd6fc4e659ec15f76beaa207b8b9714e6b8b8f1ee69ea2af2bb7fc7cfb00e3e4a9950cfea035033bc720a30540d5208bb90f450bd2d3b95daf11694d56356b2340ba2a693ce8d8462ac5a1f519e4c1323897a5fd965212288fb62213b17e68eb5b554485f55f81186552f24b1d5bb183a581010001 \\xe2dc8116fe67a6378323783fc4ec55c3bcd1fbeb0a220689a7f987228789a7b8c896656bcf00ec24e8ef53b0653600307199bb6f9059c926a7d13f9add92d801 1659374819000000 1659979619000000 1723051619000000 1817659619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-329 \\x06abd5184f07a2886f95cfe46a18860ff98789114c6ddfbc6c798c818afac8d8ba712cf941049e103308f14cb1a9f71fa53edb5fe6587ec4fdd0ffb21bac8a60 1 0 \\x000000010000000000800003cdd17a399ce51c8553661d1ed2002a37138d87d7372df312184f33067cf0ae09e285ebb68b2dcd59f37954732d73c2b3fe2b7457b81c0b3c1ba146c77284f5e32778c1d2846a8cbef468586a63af46041bceee1a2809361da66e109eac9a9e70a20da3eb968b5153f38b3826a44cf9c115712d6348fb4d0b940583151fe6480f010001 \\x9052d729f14aec93d3e6610218bbd48ca52807c0eb7ae720facd4ebc45236690ba09f2431101e5d480838ba00e5c58f0c70b34049819cb5069ba83f0f0551c02 1661792819000000 1662397619000000 1725469619000000 1820077619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-330 \\x0693d4d65dfbf7c64f11acec3d735072fd8aae7fc27eee088dd4417ada668207ce04f257172d58ff834d613a195a61265caa9d90c192d81405357622c0b549d0 1 0 \\x000000010000000000800003c520b9915c54f4418359f46bd144d1c4d6fcb4a5c4260943872df62f8c0b4c3036f948ef7177e109b8475c8441995e6aff9f36e7d4375362f8ce9c21ea9f77c08d3ce17b38e561cf21512c91b5f83b43a96dce36fa434e58ae9d7e03019a9d4e06217d08535ed4910a43f3e7b42a372a2fea821d5cd6310c7a08abe028e903e1010001 \\x726918bdecea8642f7d6966b775976a5eda276fbbc24376106eec77746be7106fea21eb59e66c0b9ff63dc8503671b02bb538839acc7fcfedc703958f8029d0d 1664210819000000 1664815619000000 1727887619000000 1822495619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-331 \\x07f72dfd048e4d1c17ad4b6b03e25736aceb3d9e140822e2c0162871a418c857cddbc854dfa705d58df8e84989ca76eedaacf94879ba06cd25faa7a8e3343f81 1 0 \\x000000010000000000800003d5c0fb1ef348e892643f145080637c3df23be746e90233fe03b41fcbba66c1a0bf1ed8c44ebb74ba267978d0dabd06aff5986dc0fa86e88e61a1376f8157193837804ca1770c2aa6cbcbad84330a81505736adeda8bbfa0f9919a8f98a7f4991717e43208aa41ed22d092f446ee801f614b4f48d89938ab164c7a8ba32cddf6f010001 \\x20da8d06845901aab6882f3ba26cc7a29e8d29a031395d86b078253d8cd236d53b7ba1372898773cf6a4e7068f8a22145bca58dd492a3264698d3672e3d0140b 1659979319000000 1660584119000000 1723656119000000 1818264119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-332 \\x07338f495d6f6405ad06b9e30012f376676956e921078c4342f7125a321ff49cde51c234dba8a7475f17bade420860506a06d928bf6678242ff674ea967c5067 1 0 \\x000000010000000000800003ddd35bcee34426de809d037515c82a7fee817082d61498af1546de56335ced2384260bca8801320f40b7b237a1a8fb986cc223126b46a684d42f553a0af7b4eba57dec4a34c5bafb0e67e69b8c102e9e3bb254ced5cebef30d009dc265e23d1b05a4c63d9a54fa33d79a9fc4810b18594d625d9155e51222747486440e4fa6df010001 \\xa2803d3074bc2b8dac4382cceef1798fbd625b69820c4c115abbc03e76f80cadb543d2d58bad5cf5939bc63ae352a856414267fd0dc0fe086a14ccb423926b07 1679323319000000 1679928119000000 1743000119000000 1837608119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-333 \\x085722428e87df5d693b357677a6379cf66853416b002d435cca34866754f5e6a19b2a848e98cc4138c017c33c227ffd01eb5230ff32463f8e728a7a8dc5acba 1 0 \\x000000010000000000800003b811e8a2f71d185aff315f6ad70986fa7abbc9970a8e2e7118095258a421202358ca6fa0c732809ef78c99b39c407ce453878ef857335730ab581bf07c9127b4defafb3c303a14be7df7e2db3ad1220bace50bf6b7305253de77c64c39ce2a8fb640064be25c5694a5ef57c5fbdeb27841f6b8da11855e24c523bbd135a41715010001 \\x446536cbc0d999e41fdbeae4f5204ec63e0c6f9947bc2658f2480749d33c8151154d185425dd355803cbd43097969e8394f13e1d0887a9fbd089e2a55fd6bf0e 1662397319000000 1663002119000000 1726074119000000 1820682119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-334 \\x0bf33f0672bccc8718a12bbdc98e7ca3c5bda8598c9467fe9263b1ef4949991df4f4c172cf6d1b55319cb432cae14b479a5225c817830b2ce54f4c257963a4cf 1 0 \\x000000010000000000800003e8b05b105cb144229128d45c33d2bc253d9f5177c40f2570495f2ce0f7ef649838229b1857685b927972078993dd6ed21693d4d63f5b7de9338074519b8e5c18a4e24ce64c43fa8c7e87ee20f476e567f07caa2c690eea12aa709506f2dbc8e8ae012709edf2dbfd5b7c021d437078294b6e9c169ea48adf20ff97ef9ac311bb010001 \\xe8e32d15c099a93504ba5560d89ede884dd6baa3267a216d38dc003ad4bbebc2a8504cda787f0f138e674cea3270523b43a8efdb270f3d37b53d30f658761d0f 1681136819000000 1681741619000000 1744813619000000 1839421619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-335 \\x0eb799dc73be225ed9942a0a532cb59d9fe3c5d88af660cf6a57d4271d13dec0c04700b03ecac6a213761d435f3571e7729f3b28076d6c06e2b5c3eda693c893 1 0 \\x000000010000000000800003d99fd9b3401086f5223dfa5979e027f60a3203d33bd327b610fe9ef607d7e70bbdb8469dcc11b72c8e993e20264f547f09525cd3ed3d456e602bacac277ff2c5ccf66f221b9a6681d9be8afabe9b8dedfcc6748cfb98a4e3ca2f421dd93d97bd198aecf029124a84b7a723ec8364b9545328520a199871b0be44d00985e1cd23010001 \\xc291b57145816a19ba7f3a4add326ee769323ab38f675066f0f344682fbea795dba79e88f5dfab4ea344910b70f39b8ec8bb78f28b94f90e8a6c912b11fe7d0f 1681136819000000 1681741619000000 1744813619000000 1839421619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-336 \\x0f43ad248e7460eb6228e887cbec70f48381d8252638a384a34383f40d7b0d5ea1614b78ab3b4822cf32ba7cd5de052d3c73e0d66cafb802888dff9cabf29510 1 0 \\x000000010000000000800003b9f5202b423e434e7468b49aaa234a5a375571504094f991d464b58afcc1110ebc0384903adfd76d01099aefc1a05662be7f39921aec4afdac52a94bd8cf4242d65e5b7d6919493c762c40040a67417b9c5c62fdf80a50d8dd65ca3fafa292fa47ac988ed30ff1c4fceca71d4a47dcb65252552f9b12a6f375214dd67bbd45d3010001 \\x4fb94d02ebc5c0cbe66e1aa52683d5c175e1d5a320953a69f66c82b012b52977f583e8ceb553294db51b7cf039eb186def4eb9c0ed305c67797165e19275d50f 1653934319000000 1654539119000000 1717611119000000 1812219119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-337 \\x0f4fb2115855ce441054018a0a4c35c19b798f6c55c326caae17171721827d159f22f7288916bb24f0f638299c176c4db3ee596a83567497cf6f20023e6f7c12 1 0 \\x000000010000000000800003cce31f67f1df36b73859dd7d8dab592edcc53ec1d074d10118ae4defb1efc48cb1c0d78d3f67c1f06e46b7ec86e5ec357ec6a66b029a5a2f6e0a7b505eeac9819e11e383fb622cfbfb70149c4476e343366785a829a6b6754dbdb4c94c7261f8c10f81e91867199df332d97f4ca707cae6b1c95bcf140dc7d8c44dc8f784d683010001 \\x5ee1e33702940e4ff7ab97a9ef89c1be033d91f63dc54386cf63f2724c30ff8f4e5ff1b0a854275a41d23b45d20015827451ed316f31e28a306c13db71312f0e 1679323319000000 1679928119000000 1743000119000000 1837608119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-338 \\x0f238369fd0de904c21fb6086b946b62e4bb9e10aff8bfea09895f9440f3bc3b3a0afc08a8b659f6079d5a99da6ef114553951c841db53adf9fe0155b12efd95 1 0 \\x000000010000000000800003a3db42915b75a0d2a90b46064bbd172e4afda48ca9aa2e556896f084e67a34d7dcc63c059210c65effff2310fe2c5f1e8bd8332373cf69f6819cc34bc7ffaba82779386feb388853b61221af48378ca148c2ef1f70112ae38f5b53f831b123f5828a2694c2a78a30a855541ce2b3d14e05c1565a32738b92980a556e67aaa819010001 \\x90819eded0ead98b362cb2bd97c6aba98a86cc7f253836e7412f44e2e3054f22aae61b3dc8fc03baf5f9a56e48c8f0deaaabec4cdf4bae5d4f9c14abb268db0c 1660583819000000 1661188619000000 1724260619000000 1818868619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-339 \\x14e770d1df2cdfe7739dd1029ab9e8f58de17118a98c936545a8784c10dc2aca8dff89ef950340837bf0e5378620e9c9e55a059327be9f15670c2c715e6d5bab 1 0 \\x000000010000000000800003d86fcf33a5de91c9900186e06708e9345dada0ff3ed8bdeb08e253c075ed7e7d50bc77823f6938c6b55951f17aa6d159048841101ed5724bd64664213de55d980f5e55b350894278997f9d3b0d4ad70fca8deca54b8d557b0fa45b36b1c91542ec1c56ca417724063e138969a9ca14022c66688b060045d9db9546dc661d1e79010001 \\x61796c9a8a0032c0b6d1d3f9f6cfc28cae59963ff48bfb31bb019328d5107cf107607bf14450ebe3fdad9087a7d23393cdaf4b3e2e1c9710f4b4da08daaae909 1662397319000000 1663002119000000 1726074119000000 1820682119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-340 \\x1887ce8365c03ec11a1a80d4b5cf16cf5620b7447661e3d6043dbc644184ae440a78b6eada51d2e0938181f5d8d207372cebabce3e74a906f53af710848161a1 1 0 \\x000000010000000000800003e2c69c837f9f350bd4f0effc6e8d1ed34deeb4c2665de3de258ee36356433418d8a42cf6c77844614f29ad9885c75b86a9157769d8ddec398f55f133afc7d338932f892b8d539e6b9bfa62a3f4681caa780c465b0ab8692d3acea966602a1d5eb1da3463c02e96bcd759067a8e56026e86ae56cf24ebdcc219cb105944ef757d010001 \\x8a9ac57df6bfc0196719fcb87032287689ab39aabe136dbc2d4789526721494411cde7aec2c2e86fba627ab0d32fbd2d060b858e379ae01e5036f577b3b33a02 1652120819000000 1652725619000000 1715797619000000 1810405619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-341 \\x19af3529d839a25b76367e2de040efc55564a9786073fecc17a50f2092e5099391ec83afb34abc8e4c75673c85a61e834b1af8de90e3c0bbf391000b76a96937 1 0 \\x000000010000000000800003bc8d9efbbd2a7388431488a5d723898fb4bf22243da1cefdae888d82cf61a299ea375be471e485b92e318cad0211d3d45bda03e3f67bb700542391a7ea6d3816db3d2921bebfbf909d83105e2decfe7494fbe572898ff6777fde968812321a9b7b1884358dafb9db6e8adf59ecaa260f41c8f72941efa8406285ab5e0b352cf7010001 \\x0a1a5f3b3ad42fed6ffd01957ada44f02a11d7dfe10c0bff5a305ccdf251c3f12bf010408d33222dfdc11af573297642c8e23d5877e2665d8dde3fd9a13e8709 1676300819000000 1676905619000000 1739977619000000 1834585619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-342 \\x195f4d5c753d107d9f3b4f6fd44066e6c08a12c850e52d677054f99467069fd23bad0c4943c824e7d0f426f4616146622caba38362dc0ded4c0a0c87b6d44a30 1 0 \\x000000010000000000800003e027a44fd75a888b37de4239882ccdc3846265648ce66118fffde7f85ad3c8d0097163fc1ac2f2ef63a0db76d58d06fa4c7721f1522eabf6249b561ea814d43da12697073cab65d351e0e128a9a6e04410b89bc99bc97ba0c9d9b5fa8107012d5570f12754c50b93bf9dfecd5d8fa3dd6e2d6b6ae21250a8b868fba85079451d010001 \\xd59df3db4498d86c279621b99ed1bce54e6a385ed55fce6ca3be9bb21b34b18ac5b3418c5b18dfd9062e6662c3f21f4693fd113b5510fe63dde7aecf1301c408 1678114319000000 1678719119000000 1741791119000000 1836399119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-343 \\x1a07a3b82991c27db73e21996b73fa680237892bbb92cbcdcba5cdbb83ce1df2884adfb9da33b1bfd61822c11d4d22416bc20846f0c02c1d9a2275e417d78972 1 0 \\x000000010000000000800003d042c769325c87d09449ca094aa51f59ce80b08302ddce3d5130824f112bc9c78cf5a250c95aee5e044587d6955ef62c657af1efb96060d35a1868ed6be93c43a30ac815f5571351ca05e93352c63bfac6c005e58c43427e1b56cfff4481fa13cf1b6b6819c6a3119bad38d214d5da9a156aac8472c57d6daf45ddd404a83485010001 \\x49fab92ab492cd42341657ec353d926fa59d1232a15e313b364a418ca00b54ac9c26825bffa3a6840e5549a2dfea82530550b9a602e32cff263566987e41c90d 1682345819000000 1682950619000000 1746022619000000 1840630619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-344 \\x27df0a9c6483aa9bfdc151c86c44d66622479af1d181a578a8274344ba6c8a5f07946025caadeb891838f16cc7ae583e4fb6568f2603fd18cc5999eda335e640 1 0 \\x000000010000000000800003d872a99a33c4b484e196b0aa2f133f2f2a952623dfaae4596a29f10b05b0dc8f7e9d9dc3b48db2ad74ae31dfa1ec249053905343c1877a951a8a1768dbfb8e11cfe7ce589eeec2f1bf4a996227482ed72c0cdc8411afbf4e1bc015fcb1148cf32ee6952dfdb6827478d807eb7572c328a3c271e033a4990225e596113178849f010001 \\x445d84c22c2b040b1a4fe36bfb0e72a0edf211a7c1265936097c16d39ae1fd155d9d2fd7594b1eaac1b26deb83d4879f484de0574d45d37a8317e12d30f08508 1672069319000000 1672674119000000 1735746119000000 1830354119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-345 \\x27b3b6aac7fdd70606ad1dccc9a91a12c091d8fb4844b5154cfe35cb08fadb5d773053c714058303331e2b4cbf1c179b734862729e485c690c7c5b5d409fe26b 1 0 \\x000000010000000000800003c82f6f03375775722fa525465f61a24279652bb51d8944a6377dd6ef78ae49020c4b4f068128ab8c28d64e1137f8238a64260e5f031fb99d770a7a132dc4522087fe13df0868dc9076a69e7bedc590ae9a65862af6007d64011fe9d9e373aa0f91b36516f6fbf8ab1e889d140079bb6bc9f8176046352a459b32fb5cd6c34f4d010001 \\x60ed05afc65142b2d6703c22ffa23695903083bc793fd82feb327cf94bc68f0b91165f015fe6a5f8114415cafdd1e009c4bdd3d469a1b7808ccd19f636520f02 1652725319000000 1653330119000000 1716402119000000 1811010119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-346 \\x294f139ebbeecf724286d46031a300c74dc91190d953bd9312ca2b102a024b106b3cfb9b3fc8cae153c29266ac6043c92eecd028ad8b5f260b9fdf842df26b6d 1 0 \\x000000010000000000800003b1422061071a7e30822997864a42b72d045ef405cce0f58b6a5b8c3973db3c48dd8576e46cd5bad7d6514c869866528840366aefb98122a632c2a80d8134d4e5037c0212c70552c72b5de1cb412bc5a95d21eb5c7eab94aeba01c2c956f3d3a10e2a71085e7735d458b750f0b534200369a22469c5872a3622478359f7e2f611010001 \\xa347bd294d4c16d5080e2e7a04744644e6d10316d20b9f0a60104bf1d3c0870e0a5ea3ff7b7c32648f2cf3fa516cc6aceb5aaabfe3eca50f73e00530743c2c0b 1681136819000000 1681741619000000 1744813619000000 1839421619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-347 \\x2caf2550784b7c2f4e86b86dbb478c1c9a136e4a64e6fce88ef0edd5774d08ebe5088743168f045ec1f849d56d0cf86e72f751fa8d5f040e77583862076c7c2b 1 0 \\x000000010000000000800003b6068f0452e74717ecafbb9fd7c17628ed69d64c524052164380ba1ecdbbbcb47c189bb2d6eca31b2fe0527f1d9c910bb9b25e34a72359429dec0fa1a02f80ae69b408dc3d05c4ed6880b26e77d3bd797b25471f5dd7b1bb9e8e32b6e61b100034c2df866474ab0c274af60af2d455e8c3436c15d153c3720930986cb62b6013010001 \\x945a1faecda718430d9fcf81b4852d715ad3e961e43c83a5b6063f99b692609bb3ffe60e674acdb319ec96f86b8bb3f6fead7692132c7134ac3be6d6a14d0d03 1674487319000000 1675092119000000 1738164119000000 1832772119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-348 \\x2e5f298d1e69fce99d8cdb30db0cd1c119825f45d0424e10dddb7eacf5c6d0e572dcb302578be156f1255614f11e2b611afbff48fc23ec77da8267bad4033314 1 0 \\x000000010000000000800003a2e728bae16725e0290ab6e447155e159b8397fb1806a682ab0c8ef70761b6299e13fa8a96996c3d995066574cd4c1335706513084e44a2b4f444908ea3c89691eba3d82f51d29f8c670f8b6b51effcfbf7a9ae4dd008be9275ebed59cc768c59ce893c2fd28ceafc873d6214e129e21daf0ce7c0261231cc018fa02a5d879d3010001 \\xc4ef455a982b0a31348133a18c3088631d33ec6c49ddd8c71edab272601cb93eda552ec7213d3d7996d1e6b22f6cc283db3b5ea64b7c488a08c3e68408d41401 1681741319000000 1682346119000000 1745418119000000 1840026119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-349 \\x2f776ecd0d0fe1c0634f72ac0271a8e13845b4103ff67c758e50e1e9be360733db0bf6d0d6cbff9265a40a1ce191ba782b05abc9c17e97459a4b0c4385b8ca99 1 0 \\x000000010000000000800003d33abf4f7af24f9ae70559f51fcbd7838fc3f5b0a773551e183c544e69bc476ef2b3f6dc26a295204632d79b98b64fa20f50c890bcac40e0808cad3c7f7cb6e95b2c7fc33d4ef0f0f6759ab607442e8d3a74c5835b0fb2e1a92619c03df8c3d80a221a0898c67f46646e3c9e018198265fc2323e06c30b376ac40919bddc25cb010001 \\x823ea0eb8a8a55eda7c070b9721817ad28781b41476e6222e57e1368851b01cdc1e93a956da0821f5562d3446125bd0c589ca476f3af4b891d035228cef82207 1662397319000000 1663002119000000 1726074119000000 1820682119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-350 \\x321b20678b0938e66f1eb3de3f33c7af6c2fd898a2d0d319199039c44d52630045964df08469a25eb2f646f3c4d13fa44a3dd5d9bddb7c31e19ff0e6200ca735 1 0 \\x000000010000000000800003bdadc67e2b7d934d5339a720903cbb0f153bb9049daff59afa7592a2342cabcc71fdd731d8916c2b12ba603fdd1162156015fb242a21ed4028ab6da0b7b8f773048d2b34e99167dcb9862f22449a6a9528ade55bbddd900791703a72ab5c97f80db02a9e6de0ac119ba4688a560538f1f7bc6b1f9717e6404a5b128b8ae87373010001 \\xc5f6f7e32c39be78044ce5ee014efa6404b99cf47bd5db5f34201d1264919fb96e69bfa28908cd5ebff87d8347cab0e7cfb9f50cda4b7434876d91d6b3d41f03 1654538819000000 1655143619000000 1718215619000000 1812823619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-351 \\x3433f04e29b5cbe68501103449a80d6b4f5681b9d60ff41835459f636272b1d513f7f732931f7abe763c8b4e691790130a2ff0a1b18511c16b5990de6a949e58 1 0 \\x000000010000000000800003bab0fb380d7c9f7fdbe049ed0c5306aa3281fbe0fa5bcace1741f264be591dd170f1fad3f36cc484b86669616f6eec6c165fa1b878df701addb5e983a1b07bf6dd059a331ec74f82778478f17f76cfd127235b2b0d8ac0ae6a32d87694104211ac4db9f0a927433d2529391d8269a2791fc8e8f69fe5f433fa127ded0e8985bb010001 \\x4bf30c1efd8839a8dfa00897b73a52721f00c00492f33eb68d9169304eb00d974666b0b823b7efc5a8faceff3af2f592b49a859962849a4f8e82d1ce92eac104 1674487319000000 1675092119000000 1738164119000000 1832772119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-352 \\x347323943138960f7a38a7b0d76b018aa883123a3443e26978c8e55f4c848a0af5c964ce69b9c7ca32cd8a7e5398a26a856c28cf2e78fe94480d5ec79cf3cb26 1 0 \\x000000010000000000800003ae34b5722efdd3c571ac56e3f2c7681a54e7ee49ba60a2f7797a523066c3df7fd3693a3a2af6cfced2272127fe42c4364d8421a5c16bbaace6e639ad225a998a1f9fbf58b172d20118dc1009b16d8899f0200eb5b88184eedec2f2036d59013661af57dd8d9639af6b706e4158289dbca564b0f61faec55bbe96ec1433263075010001 \\xf47f73d4a6e61d6beb9bb107d24359086201125a4515970891bfae9b0e75e6475f4d20a6e45b3ac8919f01c07e92bf681fc0e77ee7edf0891aa70af72de24906 1663606319000000 1664211119000000 1727283119000000 1821891119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-353 \\x3cab7aea0eef8006af114685e7fe229fe5cffb6b79bc22dc336dbc116f6db64bb6de20b84622eaae7d23a722c8f613b8f08515c493b7042fb24e7030561e7aa0 1 0 \\x000000010000000000800003c3c28b5355c5fd451664d0337851efa6fd41b8698f31e081437288404f50ba6c394dfd2788d4ae5dc1f60f04b4367f7b415661e7357b17cc96525d18d07a612b4243de69159d1b454b9490470b62690bcef8bfe37f45f1871b5e6145ff6a60ca5d03b6b26d10bd4e312ad509bf48273a43f6ded7a3784a9a79425a02b60d952d010001 \\x106b6ed0abd282a7f40c964143111b0f99aa1dc855d61cc7ed21e238fcd4d412879022fa06efe3f5a2e6681dcb8fb8ecfab6a2bc817f4c54892e7eb208edad09 1678114319000000 1678719119000000 1741791119000000 1836399119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-354 \\x3d5b46babb62f54a0318c7ff8a889ecf3ee27a6ff7d5969d034c0990b3b7cf032ab9d7c8bfe93dfadce19b980116acd5a790b72d148c75b52ebc0d5ccf45635c 1 0 \\x000000010000000000800003e33c8ce4dd0b0a80cfa44c83b3a899037a115f4706e0bcaa345c313233b26522223d4bdbd03403451f89f759884c10c5231ada3724ad8a448904142e9722cba179cd23c98e8157fb73227ccff37dec5e21a4404796aeda5d95d231dedf1109f106d4a5a6096edc91b048830b87430c8238b003c545eb5cbccfa6b9d0be26d36f010001 \\x23b38443865524e6a2338d649f12ca9d349fc5d8491adcbee39cde9029103bb7df694a021de0aa36ce61305250de536a12f6f19034df3156ff86a09c6ed08608 1655747819000000 1656352619000000 1719424619000000 1814032619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-355 \\x3ddb7eb0bcb629350b7734bf84a4bc92ef18c33a441cea27af75989df33aba401bb67947ddc9f969b1bdd01f3b09fc85ea79482d9ffdd63685935d750c46afd4 1 0 \\x000000010000000000800003b8fd58b523d06715979da9574b6eb36bea020563c761da5e2c01d02458258d1240ab46657fe58977d043ef25cfe1ba6312a43abb3325e5fcad58f99061553551d084f525f906212b8018412bc873bcbdc4564427e0f0f7f75da41d260b8dc42ffdb0b39102558ab74f092cd8d9840c9e7f7ed81d8c0543a201adaaff5b719dcf010001 \\xcfd81cb0d06bb7ae64e9d5ce75f6387a6193de41ec8631ea89127d9dcc2662e4ede413794c41beec0913205e0c4ae3dc050e51e85d90bf5ca3547f6444e8ba0f 1674487319000000 1675092119000000 1738164119000000 1832772119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-356 \\x43137115566c2da93ee9b35772d722073565904abf58600cef6c10e83b433e3991128b48be4cae9395b426d1d8957a1fd0784c1233bbe14650ecd6ed9a2d6e4c 1 0 \\x000000010000000000800003c0977c6db35674a56526716914cfb92583ccb85d56b5ab033b1eadb03d648da8afcb2d0b92470efc8bcffa36d8835efeb2949767a55e8ed2f6ae38fea878c65497106b8abdec99d203addddc9e446fe9ea3a4c25f5cbf1f4d0c425dddcf86ad3fb09598216c2db44e088e8e4abff3e0cb83c7a82a5580b3b9865209e1f1dd7ab010001 \\xaa7b87df66e065fdd32d028f3c9396932444dbbd93d1a2d863404c509e2f82b58cd66cac86d292a1654825d19e25c78f2e2d229e18104c69ce46b9b7cf5fef0a 1655747819000000 1656352619000000 1719424619000000 1814032619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-357 \\x4bcffdd83aebef5ecae8f9db9f8dc642f77df7e958e428984056cfd7d979edf61bc8e2dddcaaea6e13f79f71bb92e44db971a89c91e2d661b0f52d1ead2e743a 1 0 \\x000000010000000000800003cdda954072b485b407d819809a768a3ec40bc818430874afa6685c96e6928504ce8edcad762196f1115a866323d0c9d4ef7ddea83b8fa9f24c9735dc4b11d98276f02d762480c24e802b6127cac956f2093f906df0f26c06721a3cfa660743d27348a917ed78ad27c17b01a39f3a7765228a86c3f229c5a0b4af779af8086eab010001 \\xacd41ceb53fd8ee35075b00848ae1a84d6c59a64ebe9e687789628fbb1cc52658cc32b897a7812cfad2c5c788cf4a3599423fc8b595b5e0fb913d1c38892c003 1679927819000000 1680532619000000 1743604619000000 1838212619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-358 \\x4b97c5aa95a9c79ac4d6bb971c53afebd1632697f57b31e0a3d394e1dab7fafaa1b452d9fdf8e3cca65636f76847b39eecb51cc63ff97594eea5e64001d097fa 1 0 \\x000000010000000000800003d27d236c7e52f92cc623a28cbb6cae42f5db9a4a9ebd9e06d0e74c1052e26f315274b42aa597301ecd464e39e5f06bf88b6156b8129e2f0198f37184fd693b9c484f1f5f0332fdbe97d64898b0f156495e2128b79d0135452e0f51af536affa4157b0108ce3070934607b5246c790f7bf9770918a303a58dcf38b412eb1cc52f010001 \\x5534d32b22d65ea4249b859700db8876750047b0f75ad5e405623684e280d299395ed321e8481961655b6e7c01c33de00aa76d95759e03e7d936d66bbacccc0c 1651516319000000 1652121119000000 1715193119000000 1809801119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-359 \\x4c87b1b8969f545db1ecff6cb5a7a3ffec9f55543e12b9950721f1d77bcfa652c6a8d18fa360ad73c0f2c45fd7a609c614315e5a6d26c280f7375e4ef7587147 1 0 \\x000000010000000000800003de80956cbe2df40cb61900f58c4bec889610b6dca8f06df84d94d6dbc5cd272a55e15b8618b0abaa91a1319580e923dc7d920c2c2e5dd51cd6658898288b0336c5ec4f8c8f9a62185ce125422b90b76f277d4c253f0e9dac2a90e56c449bba58e6b890572b859287167964cc43e6ee223ffbb08a957ba03f08753fc569ee7a2b010001 \\x88ee6ab96f0b66563929da93c1d7cd579f793a0ce2aa8e52652612f21ab4e8b5b5141b71eec9953977f49ce0bf82dc73d36b158840bd5d135872ea05ca2bf309 1675696319000000 1676301119000000 1739373119000000 1833981119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-360 \\x517789a03a92f740823902ce92c8a75085b9ae58f6404106bb716a47d4fcb5ae3d40cf671a7be1d36093c04429aa0f8b529e42ecde672c0df02d15dd0f8fc7cc 1 0 \\x000000010000000000800003ce9a450e05c185c06d1be5df11ee4265798cf9c3e3273156570d8667fbab86b5147aa3b3bb8c22db67a3ff29c9997531628ba6ccc2facb548b059c28e87216bdef86f25e7a2aaa0518e7ab8bf88ad1fee49ef33f73e98647f242790c1d8fbeed2fdd2e94aacb3ffb0ce07921d5f4470118dc54c1a6a6e6a6bf0f220660bbfb65010001 \\x848294453dc9e8aa75163b9b9e3e47df7fafb4f1823e720a5aee1b504d6c98e1300d3f5336617e0edd57b7014d191fa59c4fe070d841c00040d4c3016d614f0d 1681741319000000 1682346119000000 1745418119000000 1840026119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-361 \\x578780dd89f876e6d78a62011361ebecc7e69dd3514f1e5018449e1ee981d20e458138d21b4acf239ef93bd14b1b7e1e8388f92f26b2794a5260b250c7fe9e4c 1 0 \\x000000010000000000800003c5c2c5726194cdabf436759d512e37060c41d2dbc9d72d0fc4be93e801b045ae9ee698b174f3ed31da97a18a60362440a010ead02d28498db8c4e3c2938df3aa4a59133b9cf323d6cd4008ebd1d072e1a370cda8d85d96597ff5096d5d1aa89e85eaf81d535ca3d8ad513fc51e84dd43eec25fe70118afaa0908c1dc8346b6d3010001 \\xb3c5ff6090c1b58a9ee0577103a46533c5d5fed0862388c5cfe29c80e03401af6d71de0807fa6f15492bfeca7698c6eb2c2c62f591baa41d464c4f3a30f1ea00 1666024319000000 1666629119000000 1729701119000000 1824309119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-362 \\x5a23330f3e6089e9492b22fd431953c65ecb0eb1a5cd49705047376f21e10430909e1b585b532d9938b96facf7125400dd17b4ee3d8c2a8599f25b3fa6dd7dc7 1 0 \\x000000010000000000800003eeffd5706d8c828f0227174b74569a1b53db79493cc33e0ca78b3b7f75f16a5c4501f2882e0eb5d8000159f3d075f81163b1bdada716696919ffa755f1d27a1b1dc623393daf9458143301280efc9b5fb41e085670f2de549084675cfc641f326d40e187cc4b4cde812fd0bd16418e0c5cbefaa389cdd997f3895c2fe6e89a5b010001 \\x1fbbca7d3ca158ab2b69623eac099d358f9f4fdd8ca456c466413bef560ef7886c64e9c4b644ff325ce7c1b857e277d49ceee148c8b2908a3dee3fd6d3b71d0b 1654538819000000 1655143619000000 1718215619000000 1812823619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-363 \\x5ccf5283619f5da0d1c30ac43936069f299a3c1ad2de5c2d858828cc59d435f56f0062dffc1a3cf133e35eb44800076ecb00012a06ee735876761b80fea08735 1 0 \\x000000010000000000800003c46e16869fe62393655fd558011fe2df7364136bd4d2c79be0103a99e7ebe38292be10d00e96634bf04ca964c59967c1eb51d62bee2a35faaae8dd0e70b8420bfb43690d51c09896f9d5396de8ca8fea290cb10063b7b9da27c0dcafd2a1e367ce893b7d59c101aad13bdd7cdfa2756c46d68801b2722419a8120b575362f6cf010001 \\x8313f309cd56df90b4d212800b6d85de27f4e15ce54f9cb31328ca8290300018029b163df37759fdb0f6ee39787d20eef1775210b0d553ad4ca7b28926093407 1654538819000000 1655143619000000 1718215619000000 1812823619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-364 \\x5d17eba01451148cb26443b299eaeebe6f0bb4edeaae02b9d5f707988b2600587f1a2e8c53e91331d96f4b04abb7062227236bd28d16cb3262eb7ebbffad10ec 1 0 \\x000000010000000000800003d0cec5f1a048c4d495674267430886f0d7dc107a92cb9faad2316d0da722941eafb3ea8b6f9b2a93f244c003f45892975935d102cd0b083ff225f1c5a2bf22a889a4f06080a4e153d5abdb2cb3127e7378989b9e992c5a64d5c518cbc8a19991f93a410b61248095f4cd2f5db533163254c61ff63ad629cfbb9afae671abd8f1010001 \\xee9a3ff59207c56bd4680e9d0173b753960dd4e44a27cdfe8d12acfba0afd3bf0d25406e718766cc3ef4e8c31d12398ddcef8c8b7d17e839f21b99055031c400 1677509819000000 1678114619000000 1741186619000000 1835794619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-365 \\x5f8311cc4f698edf67033a83265f9ce11e14236537e24222b4c906e9c929ded128a78d5c3d3502040249abe2b37d49ac010bd6ae350f991eb365519cd58ca0e3 1 0 \\x000000010000000000800003beddfe6cb8e3da408a107430dcf0fb5a860f90b4ec88772b6f891e9dbfef8d3949ef649cbe58cdbf4dd8e51c2c4165be72df6c0158bf6f349d0178054284282714479b10596658a40c2e545097f20da76dc2fa67001bbf7449d2353f5729fab755cd95d177315d073c6cac0a354d225dcc5cacbd51387c40f2d56bcf7b7d9475010001 \\x81f289be919e55f37a4e48a1102fa0468c4ba01d4539c6d9dffea52309b117902f74df4231b8ac7cbb2c77b2013b467f66f26eeb127f75aab6cefd20e8117100 1653934319000000 1654539119000000 1717611119000000 1812219119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-366 \\x619fe6229bcba505aedb8beef1773c86d861ca4abe73a11266e824bd42c8a5c80a55903128c793add11a2756990531a2f8d9c5a0a6476cdc99733fec4e8a1a56 1 0 \\x000000010000000000800003d78c9fa61e40a757bbfe7650626ab31e32547383b1df970bb2a36a96aee104b7a7b039621a3c1f1fd64c0d9150f3c562347fe731e04de0f07ef933131ae2ea6aa747e57b754aaef51f2d9dd83ecc03fa69d913fbb84b2cbc1b95cdc39bf2b60b68620bb4c894cb1b74063c5a24f490a75f5f09efb34f56e84086fef4d16e1513010001 \\x856c06af1dc9a8a93ffd59343e68860c810d7f6418ed0fb92cef7be36b8888e238eeb17be3f264e869c77e1dd218ae39b25fb4b884397933fd3fd8610c9d4202 1659979319000000 1660584119000000 1723656119000000 1818264119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-367 \\x62a727bb708eff70f1969fdb43822ee5c61647487aec3eab3bacfa9fcc87c288d566f7623869719fd30239fdaed76f6f5707cce562f2f702f449ce5fba0d576f 1 0 \\x000000010000000000800003bdacd2909ce6791ee3a9531b756a293b7daecd2ab3a15ad3ef89bfd149590951cec0d8a03d4542c62a5c07d637f59538d645415b80be6056f5c6e4f670e8994734a3cf4c213ba06ad098452c0d46a4124a4677943c5e30ba6c0b7603a67c7c7696efd8ac0b892247616352466cea227fc0764418b73465d97da30e82f536aec1010001 \\xfdfbd86cee7e98376e0bbb0b6a24835d3fcec15ad34e20930436ee85cc81f04b3fcd6007a8bff9d80213a996c198179b50357b920d7afc74e93e0da9c5bc0e0c 1679927819000000 1680532619000000 1743604619000000 1838212619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-368 \\x63cf053cb43ab6c26b1eb882197ac866ef7c9ba7c369e7549187f008e6ae79b9873475190bd8da3e67ef79ff828ac8cb504c1f3a922f000c38600b6cff00b85d 1 0 \\x000000010000000000800003b6417197c9fdd816a01a1e69ad11772f7014fa435183ff8196b2be50c271a37d53bebd555ac239c7f8cdb29af13029a62c5249b9e4dee1f444ae5555a56091147d7c1b476e8ab22031a4004ed07f4511590c46adc06acbd48459ce0c9152fc1dbd8a7856e1533f07b75c131b73ebad1e03ccfc616ac867f1201f1cbc8db16ceb010001 \\x1eebcb446eb37472f06fec059b509fccffb866086094dd2052684b8d2d2ddaa31b37e82d7b65d67d0de1024fede00368e3f6b0fb03588fa3deea3bbe51a0a101 1655143319000000 1655748119000000 1718820119000000 1813428119000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-369 \\x661f92670dc7d3f978152e53bf3e2dfa882a3859c073d1a44fb5585871b381915904421c668223afb6dec18ad17024b0759892a6ec2ed919c0458901058b5409 1 0 \\x000000010000000000800003c2ca17850f1b50f66496dafd3cd2afbdb3cecf9fd248567b930de921c813d799518e384f0d33b9c5bdccf9cd4b09caa76077de942fd1e84335314f51029c0b89b96303e69f534ce7c10e21dab4aede67c8a7acd2e50d23c4fc466b63bcafc64e07dc89c4b58fe9cf0c7fef03f7469c902ddd73259f18a8704d5e90c58b61ab1f010001 \\xf34e06ceaf59e0cf18b3a5b68a3061bd3b17332d268ee9082ffb84465e7fff13dd50d70ce7fe28469ba75fb9ca40529f57b8a3aa5070d362c8c0c017185a7401 1668442319000000 1669047119000000 1732119119000000 1826727119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-370 \\x674f34b2d2c09ef130900885272c4e1b7f82d13d4573e8850d97ec6fe6019f2946ada3f148fb654be5ffb07149b13e10a0eeb2a7a1684bd29a802d4816e296a0 1 0 \\x000000010000000000800003b1366e82e88f86d7349011ee90fe35b919ae574f18448455bb6df950b5a8cacdfcb22ff5d33a58ae4fdc23deed32ec7df88592266955e74164f03af141c9a0b4317bfa4170f07368f5ffc5473bb5f36f961e3fe8a6270a2f29dca7212341caee135f7e64734b9e75df84dd0e27f4a27cb6540c3bb6edfaad5b244c1b50364c97010001 \\x67f73ae644d7a19166391d42bffca4e12da22ae17583f4a7df41ba17836166c2316e44d7f12cfab9397176cbec0a70c22f6896ca873dbf370d510fb26715180d 1672673819000000 1673278619000000 1736350619000000 1830958619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-371 \\x67e3f513de5c749cd4faa11ac2962f1d1c0f66573f476180ca90453311a7fd7fec6809d0940b7151cd83e491bc35375d0d6406bc59b7d777d740c9c351940e0b 1 0 \\x000000010000000000800003ccc5f8c54ba1f07c1808f752a64a1f90fe898ca43742d8753b6781b9daa20d1ac7621539ac70cf365e1965cce3898d222fe8dc762ee3ebd2f2cc73ce1d8b6fda3464537bd78129595f58b986d0bda27b2c925a483010ed05120394badcfc02feb1b87b8bef5d485b6b9cb06a0c06626570323c36e1680031187741069c25ca85010001 \\xc4ca9663474dc8338b85ba335ea1559977d4bd56dfbfb740ae2fac44c97e2f79d34d12cf1e4df903c8cabaa458806e4623c2a5621716ca36d1232c8b6c620708 1653329819000000 1653934619000000 1717006619000000 1811614619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-372 \\x6b533ce2ab7bbd27fc15511d4964e0da1c2d5403f7a80c446baac0f2bb58a07cfbdec55ec90ccad297e5657abf850c3461df6e22b48d8a3e5a74935d7ca50a5a 1 0 \\x000000010000000000800003e5c9c1d03abc73180f6041b3aafd6e67c204c16e86a363808a03c38f336c85c5ba22ee9580ff576c2a128f0893e700cb88500384a248ff09de6adc2ca4b9ae08349c92ba4f2823b3e2d8bb4963d2c4440aafe85fb32282821f0a63a148376338d00ea1c409487bc2e338de529b2cff65f616403bffff93c2363a16a4fe112ba3010001 \\x8ef064ce8150f8f61b6a5199cdff3b839727cd3754fc3d875d9e6db7c8cfc2683bdce4c138cbf2894f5dc54192f97743e7286166c7b125195f29fc1c7802fc0b 1682950319000000 1683555119000000 1746627119000000 1841235119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-373 \\x6b4fd03a3a662f2add8a89a4a9aceb37fa19df5f00ed79447dde5f03284ae75a5724bcc286250057ad414159492cadb4c595b22c37f68f2e21c87f876b305dc3 1 0 \\x000000010000000000800003beb403c48ded75be497a91a37b023cef1122f16ed72e749365f65e6d54f51def5e57068763cd51c60f246a87a317989a06c2c8d4b1b68961737c4eeb49a56ddb52c24f3152a58b7d657f8c5e37389de8f8bc7ca0cb0972a4cb671501c96ed866cc7a84f7ae043db30bbb44db861701a87d88f93b1db140c0862b8b72befcc7dd010001 \\x7e0141f7de7affab79da118a694f2df2050bb7688bf467bc88154631bc0143ab6e0d6bdd96e977a7c93dc0db48323dcbaa43c18249e9e73d502ed33681040e05 1678718819000000 1679323619000000 1742395619000000 1837003619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-374 \\x70db47d3d01dac54ccde3e7ccce4a48c2aa891283d7a76311b37c9e489ab8e03ecf7eff557243940a97f0f5c968519fdd1e332b3eff21badb1513c1827031cc2 1 0 \\x000000010000000000800003e16f096faeb5586453bc4e423186476f9676c6d3e167b72e53eb4a266c0fc712bc4035236f6863fe4af920910f97974c93b838ed293093dc56c817439788dce12799a63e2ab9dec83f3bf748e09117784de71c0fb5b3d725c6b59927d1120c84e0e08cb1ddec1de1968c39cee65f43c2f9340d520927856aa9f223057198787b010001 \\x33e175f0a35f386f8065934343685b027365d0e1ec486d504ee8a45d75fe3af32f69ce98cf0f1a01540a13f851fbf40797be130d2e82bfd87fc2e8310bcf810d 1655143319000000 1655748119000000 1718820119000000 1813428119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-375 \\x722bf4a17fffd7de277beeb6b52dff450451af618d749ab7492ecb398d150dcb136b9c6a621f212920cb89ca4e79da57ece62ea87ac14045223b5bcaea8388cb 1 0 \\x000000010000000000800003fc69b7c514089292567a255e2670eb19981a030802fa841c89886837393d4c07d61bbd2a6d163e869e34a0a38997f67cd5382a009c0fadda54775b8abdfe6163e917960af347c32d4f86cdeae195a8257a5e8a1be5e69d03203839f7786e171796595dc24e72468698660eeffec5a92f14b4264a73e2c8b253aa65954499db8f010001 \\x2c48fa99602778409c0f5119453a3d241d064243a590bedb4941ce765ddb5cd21adf380fd57e3956c808adc8c559acdd9bf5133e26316963d897a814cffabb02 1664210819000000 1664815619000000 1727887619000000 1822495619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-376 \\x763fe6ffdba87d57dbf687ab8a1a79d919ac168ed1adf2eaa4b8cee04b89bcb57e10c432ae950ebd7688535ff84fc031422e86b57176ff3c0df7f37c850105d3 1 0 \\x000000010000000000800003c551db857c069614add78947eba0c49b7e354c8a77db4c232547669686751e0669e3f78fcf2c3c22472e8f06f225536c3aa490f4cfa301ac9b3a33969cdfdcbceaeb848a2b7dd67c77f5e91b69fe7083f75a927427d955da36810f457bfd98c2bc24d2835a1f82baaaf833ce7edac49eb1ab6470bf9a8ecbeb33e86a91b5e897010001 \\x1141bbea43b01dd777bb8590d15264ff3c2f10c9bbc14860cc9f4aabed1eafcb32cf5e92be3e036cf24e6912fe831c7a80452ca889c1711885637516caef8102 1656352319000000 1656957119000000 1720029119000000 1814637119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-377 \\x778ff9173d9168eda313ffad0e36aa2f6ee7c249295cd4c22c118195d6e51c42f969f967320b62e470ae854ebe626a8d5d4aff359be73c8961ab99a58ee5ecce 1 0 \\x000000010000000000800003c20e8f94f125866f843307389084be9b6c9f572b35dab74a7146ceba6af71d238a8923d7545d65697cca1f1337c30e22fbfe1d493e78a24b87f1ee7f712819d52f271860587045327fa5d04801598a457535e51778d894a32f63d44cd7fc0e072880e4c9d0b0b317a428ccea3577d46a1abd554ffc53dad0ca3e40d3ce31d603010001 \\x7e88a4852d7232107bf309c444c640b9f582c27c0e2f3db7ce09c22f6573beef916f50c2fb3f94a9b0b305a8bc88245d49cfc00eb1012cf8a9451421c9f00503 1655747819000000 1656352619000000 1719424619000000 1814032619000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-378 \\x78df07556f806cade02ecd557af3c505c38c229d79687ebb8e8cd075a92b59a531b0fae1de43b9fd0ba304caccb95d8479f88332813291d832a20aaf9a24a41f 1 0 \\x0000000100000000008000039b5b27cc584dab33a1fa9aa511de94371caa0b8d1baab6ba8d26110a05bcebdbd8736b7176f37ad58a607897e224d5f8c8b60df213849726460763cdd99e68e0068973772e884430948b7da233346a3a52bd82f771141e710071157959a5b67bcf7a174a5aa4cf3701523766d48bcb129e9cf3aeea2ebe47d6022e164f7544b3010001 \\x8e20659cb383d3c499b8cf7a09698594553b086d6e3ad9306bbb40ad617a15f2502b6c2f2ff79bcc840ace86484ce48eaeb5f19632c3a6290dd7c7c7285dd705 1671464819000000 1672069619000000 1735141619000000 1829749619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-379 \\x78d34bb81bdce758579e595f7de621faa9bcb73b04408b492b0251551339e3b2a4cb8b623eb89660293bdaef01cef15bc30c06c930a86fbd74859d3d277fe413 1 0 \\x000000010000000000800003bf5c1c38a979665a6e57079dd593b33298cce886363f11bfdf9266bbf4e3c50ae31cdbff3efa42bb7fe423a72f0661c60d80d1433146b8b3159487df1022530a8d214226207baaed7e6b3e2d678b9ca99aecb31c40f32f6f0ca76531d2060cf12931d029dea1f114a5d05a6997db3615b6dd07355ec5aeba0ce5c0d7efe2f9ef010001 \\x541a6e0d0df44acf0b11604a719924697c5b58c43dc1bfdfb66b60ec0eca9507c58483b7e37a342f224be8c58a7fdca89847c1e7d91fe491fb8ffd4d322e2f05 1658165819000000 1658770619000000 1721842619000000 1816450619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-380 \\x7b0f72f767015e044594e5c7f6c8040955d83a945301d1cb2f4c884d3aae940ba665ce9bf8cbb9175d08436a40bf793fb1421882bcd1fddf292c128962a1e3d0 1 0 \\x000000010000000000800003e288d0b9b12f846e0d62d6c832c75e47dd0a947ca556e1588e050e53a16d37e91ba3596f2018a45537d24f1bd5c7af355d8d89399814f5cb1bcfff9b52a52d2d5cb50ab9ab47f93ae1bec5afe9379974a7361bcc8d1ed33d84e47dc464130b13c38070fe6a68b43691a2062c8d9a51a9294105628528198d62efedb6e2a24173010001 \\x3ce49b50eaa74505ff1607fafdd7ba06f36a12c654105fb959618b243e9620bab637884816a12f933d170f51e41d14eb36736e3863bb6c6c5229796a6ef9430e 1656956819000000 1657561619000000 1720633619000000 1815241619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-381 \\x7fcbed857749bac2ce429b2b46fe5f0cb650e30e3fc30673fa1cab77be7aaccc680d2ad15f70b738add61c3ddaf9d0d195e5fd00aa2f95d631940c8ce05c533c 1 0 \\x000000010000000000800003f69cc10c43fbac4846582c8e47e92d78b36f2ad2e2468e7ec7df07e3f2e7531ca9749083cb58584486bf4e146119c44227863eb8e4f181ea4301d0158464ed97b0e1891d0f3b319c1cfbe0210d60e95d8d8eb7520edbd374e61ef767aaea68ab1c9ea63768b5acf02086733b28e8a10519598bba455ee317d8ff596c72304c9d010001 \\x7cfe670b1a16b6ca6dcdcbbba667a2593c8dc2ae823b32922571ef13ea6dd6521bf5f620befd32120ba9f4cdbfef3afea18da76df0ac07f9da5e1d2ffd067e0b 1651516319000000 1652121119000000 1715193119000000 1809801119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-382 \\x879f43ca67daae093ed6d511fc882538e685c8254602136ca651061d9da895fdee5033f2d1c3534d475b58c3bd6838aed3ddea04088101e1cd4920567164f001 1 0 \\x000000010000000000800003c17012c307d84915d2b252abeb84b5ad882b14a258cea498d7de19e9c7b4c01c6bc568e1d7a28a5bf0cfb3e816a3b32d1efb7785b71921a2476d94a56bd165ceb748de418c3e7fefbe7f1f6ca96bb85ac04bf57dd9cd0317a5b3fd5c793050bec3c6eb099b2cd30cdfe2147e3dd5cec11ab3a754a0db2c617c6e4976ece6e703010001 \\x31f75a5c1a0b1ecc2fe59154fcb5c644dbb0282b6dd74576ecda0f4715e200395e8475a3abe5164ad5c0210d12bc41b3782a2a15aec78b1f27bba9b752e5f302 1664815319000000 1665420119000000 1728492119000000 1823100119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-383 \\x8847f75db5ff369b6565d62d9bf4136ee36179313269d58339c420be91dcae5c6959bc9a7292dc70dd7fefd0211e53307bee53899cc08793a16ea190f8306929 1 0 \\x000000010000000000800003d31d58c00fc030feee5ef2ec7628226e4526fe58f8a811b76b3bd853700a164eeb5b50847a800576ac62ec2fa7eeb7537c7e7227976596057177f30ac27bde21145142d8bb3d5ea120c6cacaf70cb3acfbe3337b1f80d1694427847c75572c59a16bd55e355aaea07e4e021402ae8bbd5a7b53251655ab5b7f8eb21ae201d0f9010001 \\x8b7b4984cd67e85f4be49bb051cf8fcc9da94fd8dd01311d5924e74fe52de73ea66e1fe0281a271a8127be430f716b13cf071a3638de96bdd659a9289a92e60a 1671464819000000 1672069619000000 1735141619000000 1829749619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-384 \\x8ea3cc8356142809c258faf6c4cddde87be310dbba511d36b4db10c0ce7090082ebfb0a30bc0ec201b06a819ae476591d5bdc1164cadcda90e6c7079a8906486 1 0 \\x000000010000000000800003b42b72a3a8f9745fef9379677721c2e5988330d12d590d3179f4799518a32c100a21292c78d1c48efef139774a43272847342e9bd3b4d5de68bd8760c4874f7ab6c05ef408412a05a1cd78e6a63554093ae1f16fa4e9fca8e8e80440547cd47a9ae5aa52220b2ce9ac929323c176b43ed7679e587bd44d0eacf10a6f966d7cbb010001 \\x526599a27cd8b1b4f08dd15534c346cfa9546e4d5972d9f6bae4e1a788f1d95c5c89691f9f927bdcf8d940316e4d24431c7120340f05876963310e28e4d8c406 1659979319000000 1660584119000000 1723656119000000 1818264119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-385 \\x955379247a813688aacac648b6ad9484de3f4b9784fc0a22597d7a4d7bb3945e785f114eb781e61648fb787e7cb58a53485cf6e9a495ffa109f7347ece30efa6 1 0 \\x000000010000000000800003bc745ba725dc1cb36cde73a6d2423c1f35599ff13343b87771878f91bd2154f2549d69c3e9641734deea5c020641bf48d0a6477bb4e1c0adce933aafb6927d9372bc61d3a2ed097adbc1c453b28d6dfba0c1b1b453072d6d339cac47f0f8506f76a89016ee67ae11e623201e3e25cbccdeea855afc0a6bfc00d217417738d66f010001 \\x370f072f0c5deeee21e871380bf7c36c5872cd868b7cc161fc4ac019690e7bfe1ac1146ff07ea6474de9405cd4f02ad144b2b89f579d1b4708f53653a7a73802 1677509819000000 1678114619000000 1741186619000000 1835794619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-386 \\x989f25c593354433b69f2b8c796bdb2cdbbe9f28d590741812b21e35c2394d5ee7509bef10ca7596d1f4fe48203e4ed3cf99831953cf49278ef1aa3b2220865b 1 0 \\x000000010000000000800003bc32b088392c287da9e9560ec132d508754d5ee7ca47ddf66ec41c63965727a7d1c3dd161b2b9481b386882419cfb4b49176edeb5ba9857db5a65062d2bff8294d768bf0ed3112ca7dc9b89389ec9e16d8372eb2bf00d664ab3f1bc61e90f3fcd225bd344efe363023c560c87df1cdd59f8656e2c5f05bfa9b0951ad7bb10999010001 \\x896339705e2cef02a3bf90c039566362ef9a6c75bec52042f6745ff4722258eb63b42e9ce105200f3e8f729fd86ac8b1e223a9e10fcaa3215f71a05b7329b80a 1653934319000000 1654539119000000 1717611119000000 1812219119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-387 \\x9aff313ecb926a147f3ccbdbfe0a916ae46102aa1fc6edbfcd119d5a69cce5f52f5a677374ac02a8518d88140de9d62320b0c407b719386d25044432e4a0f8ff 1 0 \\x0000000100000000008000039e7de269c18acb11910d9dc83e2b219424728fd8388cfc0e112561ab9c6530264529b3609444e44fbfab0360587e48b387293f2df7cad6126dba9dae6ef36f94ecbda1734a20d371ef700877ac0af11004a9e8479d99d6fc37c178c52edce048a1fcd5113c07a563f4232c17cfb2d24a90e3921354eda3ff00984ad06d98806d010001 \\xac12036b77e761b82968bd5334d4569670bb865ab4f6877fb26e8737d3a318412ae917495c862522b8bfc45224c6955ca9a72b926f509a4eb45e3460641bff08 1680532319000000 1681137119000000 1744209119000000 1838817119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-388 \\x9ceba87a34700224dbccc5c8a0e7e57b4fd35c20c6f5131c214d4e3b90ebdedbb7d186796d40a94ea60a2747d8651512eedc3a3165821f39e42d62327ba34428 1 0 \\x000000010000000000800003a41a64e56717c1506e94640b2b766cc26512ee6e08306263d13c1643ba153fb63d6398a81d2e4be3e0aca560f44b85b4b1faf705a3cc78e23703c45d7a0144f7cfbdcfa90b1a7ddacc82ca83a953314f0f7887b54342c584dbd6addf086959cd620c8add757757e9beef3821e875f919c365d224c1d2c6da0f5b65a554e2e5d1010001 \\xd515757ded3a8547640f7dfa4d1829b4d254b116a50ff2d401efae5219d066610db0c885139927e67520b5482c212cb385f8508d9dc65d4bb6a20b47323deb04 1682950319000000 1683555119000000 1746627119000000 1841235119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-389 \\x9f539164d2ff15f396a0395c9ab0e78d9cfb0699e8435c2906b4b1095949e2ca81aef467bed7cb12068fe22d2c3d62bbfa166600277121ac6789a3e1d86f7fed 1 0 \\x000000010000000000800003d7a8a8b986cbe815ab4ab13eb2cf85075d44b26b1ffa701cb83a2b2eeb2549fcf6089bb4a038dc93644dea43196ab5da9e585f7bfec1a665e06916f98a121c12e52dd03b61a520726d121c3650249f3c25f054578e9f3806b643d63486f25a1c33fa8c6a66631fe0ad1b2580c8bfc885c8931c3ca7d674a3ebb02f4668385c83010001 \\x829ca8a2e10bd86f8d62695c1ea58834ffa8f157545bb50ca27b6ed11deb9cd969788ceca42d4e57ff8936de9c765f5c8213581558b5cc76024ddca0dfad2e09 1668442319000000 1669047119000000 1732119119000000 1826727119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-390 \\x9f133cf0ca6c2198affef5fdb7e3c46642b322fece173236c66ea264572ba1ccd6523825b0528ded876cc9e4937bcded09ff2e74bd49a6016afbad27e323e475 1 0 \\x000000010000000000800003af923a43d3d91344a033ad97da33d7a8bc231e7df4906ccbe975cf876ba5f653033eba786d823d9af3ac779643aabbab4caa557d1b40e3cf25a3cc93de56a0d14419a8862ee4fbb28c190335884a04637829b7a0aae843af128d36b92f759fd8143e81d70704d614a5d322a28d0d20376d745c3bf63277b9819fb63897ccd789010001 \\xb882f855b7f8b105d1b9e158d90c3dec7422345a279a69ca52d7cd6bd77aed2a790ecef43c932cfb9f96038e0c7ece46781cb54c5d81cc7ac5c6b0ac02a3b00b 1669046819000000 1669651619000000 1732723619000000 1827331619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-391 \\xa5bf5309528f55e82af238645d48ea930f06bf3e676fb44a380a200dbde5d2c04b4732a182a4c85675052bbe54aeb16ddab59b4c1bc9328f69c811eee3960171 1 0 \\x000000010000000000800003dd1bd8827516961b80c6c75f3daaa3397196d2940a7429a3e62a32008cd019e447723a640013f91e8636ddf9ab2d59851bc006b593f1a169a4a9e8d78e107e38f28d8710433ea5812a63a5a0c6ad97c41024ab11eb8f581b9cb6c5204a52c0cb79563b22833181e183cf373d880791fce5afb245d4b923ca608d7b9314aa692b010001 \\x1a8f773ddf85dc14cc9bc93b53b14a6a283a8502db96e14603e5bcb74453338c3537882f75fd135dc3ea024a89647a5796c0a9bb9607667f5e92119bdc515900 1681741319000000 1682346119000000 1745418119000000 1840026119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-392 \\xa71ff03d59de8833a046543c020ba3f235091c23b43fdb28e1b8f8738c8d478c2adb676b4fe8708a9e21bcd6b2bdaa6e829fa7d310f904c70c9f053df3fd9b12 1 0 \\x000000010000000000800003d3cf53ccaae4296773464f2c4d5697fa916af6938b72ae866a75d43234af0f75f82e011edf34f11b706204778d8b3a580a1c4e644957141e00d380b756b99825fe36c3f4f9662d2eadc8a3d5edaa09609226269b0852942e5dd793059120856acf8590c93f6b7f65ba35233290a29d60e8eb198ef384dc06e770dc4862f96dcf010001 \\xf0b6e2d4d9f25af8788f6bdf278d001211cb5cdf32a2d582a2e7ac8b615b8e3ba7f6b4f9223fceb94cff7e1509e769cc82b75aff2ece1af6dcd7801224fd9a0b 1653934319000000 1654539119000000 1717611119000000 1812219119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-393 \\xa90b0cc9839a2fc90103f9f5e3b477ad87e896fe0e4b9bbf2f07920884ea8144b4173b02bfbdebd61b00e044339e7c0a4c87b69a87f2bf2bebb37d247b6d4f94 1 0 \\x000000010000000000800003d779d56b9cad2dd38d6301b9548a49588088a9033a16b4be68584a85c2f44eac32a5aae58eb003d4badfa955a6fb8feb3cbe900d165736ed75ca55c3d00c5e8a17dd39ba73af2ca612f7db5aca96c1d580084414f0523bde1db4cc8d7a0d4d535872e85c11a5b3cf50622dccee76b7275164f9f95e6cde670eb9da084a66e7e7010001 \\xd920cbc587d9fcb94d80095fdbcaaaa6df6108ce204c9bb902878a019283ef6e71e7791d07891f26fd28c9f7d066527aea51a0c47fd2dbcaf3d28e86ad0dc30f 1651516319000000 1652121119000000 1715193119000000 1809801119000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-394 \\xaabf1ca890fbf40d200c410e18f148a45b1da8d397bb72236119b61f003385763a460d9ecf3541ce02abe2b5651eaacc5fd39f5e78ef4d4e41f961ebbc7c970f 1 0 \\x000000010000000000800003c7d804fe44cc9051a0681697a0ec6df420cadd113725f307a12e9b4f833ef4cdca308e22b6d419e7a6c3b284b638a8beebfa0c71753453547a227d7ebdb45776585c72bc7e937afb306164428204408730e6408c44b96d52be4de8568db0a8b9de31b445830aaff64426a77fa1d78824356d24127b8e8ff051340efaa9d36ea7010001 \\x1972ac36b7db34ef147fcd71f298c2024c8e19f6ee12497c5664d741521bd99a95f05c23964c67f02fccabbac11a7c817bc4fd5dca39a1cfbdb550f977d67a05 1680532319000000 1681137119000000 1744209119000000 1838817119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-395 \\xb69b12681ed05e2d76c6014363cb87ff9a67e48cea50693f27f69f17429a4b03ae9dd5d7ba58c6c9b4732888afbb40b22a9f5e02a848416601a7263f72051280 1 0 \\x000000010000000000800003b54f866be5b9fbaccdce8b7200ac718ebd70aede488aba9e99792d9af99e0d486eeac1db42da9617634ff8dd5f1003b5b0737456d16bf9d26aa4a035a37dba78d3b98b26c32fc0b638807023e5fa9263af24d6fb9f7a6765dad256b4b972b00b90099bcf477da8a8d82f9bd8bd60d437dbd2a95134d8c36c565d1524fd4c387b010001 \\x2661476207a79325ac5130861717ad59bc162c1376465e18b6e860f50294908848b2e78f0d681b2e319930f1fa69e5458c1c08398befece06ae53046b3962801 1672673819000000 1673278619000000 1736350619000000 1830958619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-396 \\xbaa380ad0351c3d4bc8e4bc840a6f848936b6227d099bcbda7db80d8fdaa0b60fa2e2c8395a03e0112a50b3168fe5ee899efc151e1c534f00aff3e0b02c3df40 1 0 \\x000000010000000000800003ba846fe2444e6c58641446e468e204702541bf7c4137ca97d816d2d60f5b9be58695d4fd0e552205165993b8c7575f09db2b7de3ce1d50166c2e279b2ba2d9b506ad2a84a6d4ae943025cdb27adecaa597aafbc2b2b5b44b6ec5f9609f9b640354b0f9b17857be0e60558e7fb03c5df2270a90a77531027491b4068e3e987eef010001 \\xef380caddbdb1ea0e34b05a8c69ed587c00cd2ebd16db01c62cfc978a90e2da6c4156bb7197c192ce6b446f21c0c3d2462528012c8fa06ffe9fa97a266466900 1666024319000000 1666629119000000 1729701119000000 1824309119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-397 \\xbb736cf2f899e3edc3f9d155bda2c8e84ece5f7a1bf106bf5297a933d5a46ce4f8573a2f6cd1f71cfcf79ed39d98ec5c5fcead8fc30843214257cfb099dfc4dc 1 0 \\x000000010000000000800003c29e161d4734c7d147278768900f96e8193dce681af4eb94d4061fb725197bf63e2dd7cf15891916c72f6c70cf81c318896ace4a153ab32c97ad8a5b6ea1e94794a57dd027b67f2a519d4ac0961ad8755e96cfa45b1e85c704cb9e8d3f15762c95533fa941647b2420befaeeafbaf247baa23eee518c0d92ca224101f0e4c11b010001 \\xaf659576be323447e8eca27b79cb6d889b8aae7af2e161aeaec901d82c4dbb94b4892a385228bd94a258b93c9632b5fb44f77985abf00e5a992365eeec5b4b08 1664815319000000 1665420119000000 1728492119000000 1823100119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-398 \\xbcab7325912c7c1736ddd629415e1b15c15964a4e901ddaa8277e2346fed1933bac0df3f250665e883c2b950c8a6cc86631aa6328827f18fb3c90deca41a7277 1 0 \\x000000010000000000800003a5d2b1d5040b6d4fe5685ad3ec03c7a18d272d3aac9df780cd462d51be1932177b477b029248686bcd1056b29b25f7a3dd3ad122063933ffa6a690beddaadd08bc8302f6d43d31c16c2788cd809207d9f5c4ebd9ad6b63a0c36bcf2060e7b309421112ea8283bc821a1ea4c8272fc0ccaa1e8f6384b37435d2dd6c9d3294eebd010001 \\xa19097dfb9c7ad4c595d87ee312807b7a5889f690d03d45777e3aad6b31f92e8089a1650e7e25a3e12c676ceb781f3cd52a15384194ebe8b8043235f477c2202 1661792819000000 1662397619000000 1725469619000000 1820077619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-399 \\xbc133eb71f1221a1369cdfec727c701d2075c80cbf4c1a96eba5b9b0355c479417aa1214ee89bbd315fda8141abd3fe0a368db0507c4b242af2695531ac09c7c 1 0 \\x000000010000000000800003c00ab2f4d6eb8c9d0f29f900b5f24fc0e6cb528bb0f470fa22e6d33654025eee5efa77c6ba04fb7733f3932edc042800d4eb2776b317c74ef6cab63f130ee8a6832ffdac3dfeae153b9a57a5b83b68e13d1f33ea0bae000d65472c48185778f73d5df2531362e16d34ab522aaffaab7d57f52ffdf87a8574dc71c26f0046863d010001 \\x92ba45838dad6e7e561ab6cea94d41c61a2f9501f3fe9391d9c40deef4855eb81fcc1c4477860d54817054f74295d5d6c1718bfe6ce3076d7dd1edb18be4bc08 1677509819000000 1678114619000000 1741186619000000 1835794619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-400 \\xbd1bf51bffaf6b8c4fc38dd903cfb92b5a3308fc53d6b5956bbb53a8fe4bb94171e6c62fc8c066e941f3be2e3e9cd6e69cdb9f554577a0a8474297cec7a74dce 1 0 \\x000000010000000000800003c816fd778d1346bd1134d4ee5bccf3c59abf03a1935736a7d59537203eab5b8c1f2f135bf8eaab2fdcf31f5b090ac91083b4c82e87d836e1e43f69efefc7652cdced7e5f597f7ec3b3bc241a30c60597759d6b3fe61d424f955b7d0585d8767b135aa0511527d1dc5b8b0b5fc80a0a26d2161b1ca9614374693b8cd37e35bd59010001 \\x9d5ca8348200a4198f2bbf702488c6495eb897e60c2536af632cfdc27ff77b35ced82339b9f64e380e3975ddb287a867ff99981d8fe8ab82e295e2c7d7c9da0e 1668442319000000 1669047119000000 1732119119000000 1826727119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-401 \\xbe13e6acb0e938292417f0fb01dcc7ee75e7b88409d9f43a7d237c6032ce962b283cb5f3b07c4fceef1186abf1929069143eb2fdb12094a50cc4a86e062d99d6 1 0 \\x000000010000000000800003acf35f3c49bc3a70f369922baf12d4d5461baebbe14f6ea0000e4e91524719913848833ee301d29450d077d08cceed3612b94dc0948a4092820fcf87ca865ab9df15b3b0d0948958e9855a06f44ffde39cbcd71fb6723dc5df9c17a14a7bd14703017f294ebd3f1d3102b7a74b8ec74416637892359e2fd0a635153c0afa8e49010001 \\x836c3a818e641864e9aa094472c6c5ac7a6df5bc8d5dfe2f0e7ac4041ecdd3feb87b4184e960c716d1f1f41142b2e5fae5af82d544d851d35b6ef0a0c1b66e00 1654538819000000 1655143619000000 1718215619000000 1812823619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-402 \\xbe87280864bc1479a5e40278a1f3380fee04ac269ec8f9d595a2236da2e0595b09053f4b56d48701c6d6f1ea85c0f6b3c944c61927359c3ec2adb2a13354ddf7 1 0 \\x000000010000000000800003bd22092459507844eaa0becb4a921bc6dfce7a53ba46b86419aea4d3ecda646a8b9a8fd4728ed75ebec045819111e6e1f657787512698b2a6bec02f16442da65980c5d06c0eee8a774871d8f563923223d2d8330dc9067615ef90da0a64bd1910421fb9dd5245cd3b602b816f7a8aae0672cc1c8d28786b5520856a8aae1affb010001 \\x70c621901fb6c9308fb5c9886df96f6218bea5a30168854ec7064e11bbaf8e9b884e80487f7c7478c5367a579f7138fd03cd84753c89522fe93faec10f9a5d04 1681741319000000 1682346119000000 1745418119000000 1840026119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-403 \\xc54f85f5afbef17ee2dc9db005aef52ccb3dd0917ce7028426d22622779b59ab40c4ede096d162581f047ac29264518b0e84410339d14b57a6d03b623db8025b 1 0 \\x000000010000000000800003d860274396b4521fea693c836833fad6c8a02ec88627b1222cebb1d67b2579ef43971ad41608ad1176f11a3f1d46b7b2bb374b815bb1f221ea0ff85829c71373cb326b79b84acb4f164c5c2b063bf3840983aee0c6a0f5c1bae8c982f7b45d18111be0371c64107669dc57b53809cd2f409b5484598f9e28e6fd318de9e99dc5010001 \\xfc56982e40ad690dc776a1483761a3645b8594f6ccb3adf3cd49e6a027c3546a0f0131c03bab1c8ef686512c1060e4471e7508df615cb7b5608dc39b3195f109 1660583819000000 1661188619000000 1724260619000000 1818868619000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-404 \\xc5db5428a51c88c63e327fb09fee2107f7c525b9259348aed7797b7ea0a75bebdfbe36d59c512a7a03faeb03943ba48d9f3a62126925d1c3d45fecb22b17f659 1 0 \\x000000010000000000800003c199ff3498b9aec4242b5f23fc05b516cd0517d1a1423f7b4d07ee9b583ddb034a83ce501cfe265f12e5b3d07d7dd5732025c20222df966ed544edb86ccc3f0e283299e4ad88e867f51f64cc91ac6090c90b0fc942706c8e9874a06ca12eecd78f684128333a64faaeadec0d7cd6f2112406fc9bc3bb4d5899633fca2a93ab23010001 \\xc40a4488ecff7ebf8236952693ab9163df5cbab68caa7b92932e4523e8e313dd4351da4971453217c06df1e0a80f5f6fe33739bb50ed3cb921b9d1a0c4324e01 1666024319000000 1666629119000000 1729701119000000 1824309119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-405 \\xc71fb650efa6c6288d033506f7c2312f36e19f003bb49836fc64e3bc7c54e04a12928803ab3f14e9de605a087b5359caecf31f5ad0bf9720ccb4a447d6a51e20 1 0 \\x000000010000000000800003c1ce16b49bea299eb145abba772dff79dc13fbdba414f6f7ca854d6dfc471672b6d4fbee630c13c138c476829a9b2266eb985b38e48134434f2a0f95044f8faa14d18daea398872374f34c545cfb48f1e10b0375551fecb2f8c9bbcb8b6527e70bffdae9b8c8c7d14906b4cbd099d892aa9baf8cfcfad92b2699c1b5bd84e7f1010001 \\xece18dbf33cd399126859b59d0df5752432cb88d0dd06c0ef144acb1bacf5f808ea093326500742667c4d3c2f22f452b37acda2e8f443014595ce15bcc06a90f 1659979319000000 1660584119000000 1723656119000000 1818264119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-406 \\xc9d7ba944ea92c67af91c4103f239e903b218976183933c6bd998d8ad4862aef8b88e3c75a5b3cf8e31333fa804884f196f51fa748ebf047198649a12b9e8157 1 0 \\x000000010000000000800003c6c6f48c12a7d752e293eb6cd7a9b31fc426c6c89fd13a472bb9551d30a671fda0763d7102aca0800b260acfee423a9e002568298547f75b068b6377b4656e5496e19926e78fb76fbb88ba59d03b444866ed1fd5bcaeb5a008787e45fa2a295e0f36d6bba2baf1c5c47eeac83197f4f5fa400bc273f522a5a37b33ff902fd85b010001 \\x193b414486090e411c4f4cd34275cf0ea7977f1f6c9237d6350cfbbc3c80a72edb383892fb8aa7a019087c87bda26d51d1cdfe8d67f7d297473767e0eb96e00d 1669651319000000 1670256119000000 1733328119000000 1827936119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-407 \\xccb7a4a314a8ba5b2a147ceab7824771f7beea35df1b345c1248d614eb53df7923107be4546e4ab9af435e30541929bf285ffc8efd34d69ea098779b68b1620a 1 0 \\x000000010000000000800003ddf09b9aa0f1a10fee9ae5da8e481b3f7d8f10b6ec02567786c249445c438965ab202eeb518cb1b0bf32823c2f0c75f1ac1d7c68238f3e5107914cc96d2a5c14369867de040e03133169c5e24fd10127d3b3599ca3e49fb545e1b03496830d2dae7196d13ca232359f6ce5edfd11c994aa33772c5e68a937019f1ce50908313d010001 \\x793173e2cfe3b52c9b64d08610807ccea9c818d99bac949e562c94342f4e01cd47d33da3aee2cb984a47c1e2b2761ab1f37f4aba7cb725b3510137e7b4a55907 1675091819000000 1675696619000000 1738768619000000 1833376619000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-408 \\xd327741dcb8647d3d9402d020803ec4776a9433d11832056dd4bf7b2cc2a5771da9e6afc6464f1c9d65b48783dd2f1d44792fa5f2ce0288e6ae6b63001d2bbc1 1 0 \\x000000010000000000800003b945e46fcec5934c24e3d88dceb38cd56a34078316a46969ea6c949525e36872c5b6bd7f3c4d8d31e642d1c3fa793ad05d43754ca8e6d95594bc7fffaf0477fc03201b8175e8ce9d051ec2483f65e6646d29ed5771c20f3cf444bd45e18794ded6370b7c304b3f6f9145d4ff3cbde0f82d2514caa0899ea208c67c4aebb24737010001 \\x2f669c3574b465c6d40dd5479166eb13946f838dfe949088ae45d045bdd6a3227b3ea3ffdef712ecdd475603326b889988e5266c8b5e0b97f7e5c339a60abf06 1670860319000000 1671465119000000 1734537119000000 1829145119000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-409 \\xd6438032010051e1b57726b1545a53a4bd8179974f94212ca9230ca09e68e4981c2836557fc6a7160f50129cb95b7bec0dba7052b56c26c0ad436183b804828a 1 0 \\x0000000100000000008000039c1320362a5ddb2667293244fdb275dc9322a465ea8f4657fa201ec19d8acd8b554c1c4c6ed5bda1eb6722755da67099b6ee51a3884065ec0737b8bd4f9be669a87c97248f4edb9f35f60586d06d1e59a8b17d8daeec8364e31e5cb4a55be1cfe25dc14a30c6ce5e847a1e1d3b28b33752333fb9b954bff1f2f351d24fa03b8b010001 \\xd6335e7c82b0cbec2837fd6467e77c8eb4d84f59c2500b1f0bee3c4eb542568f4d11f348ad9fa5d7f62bd9017bbd4cc531b907399173cb699166669954faa10b 1667233319000000 1667838119000000 1730910119000000 1825518119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-410 \\xdbcf668bf93b2237072bc432a6c42cfe0bf20dbf287e1ded42ba2df4ce74e802f37ed1c6f82d1c9d4c0453123b8bfe2e8c37d2eb1d646f848d9f55d170885317 1 0 \\x000000010000000000800003cf5f49674483538588832dec1fb0e2811eee36baf08d667bf457cf3da8b97f1d349ef19cc90e0ee144f28bae8ca867fb10f9e872cd17df1743a2be9eff935858cdb4d833636d582401daf526dbaf384ce6263675ee25e51390cd6ee2f2b81924a1fd8f2826faf2aa5284a7ac4012b10c5c84db5e218deedac40613bc141fe125010001 \\x7e1cfebcf3c60f9c315f6b1c7b6e496693dd979dec0cd7e7c83238e49f3446974b93c57ce659398d5a2ae400a09e93bcb8eb04d8862c3605ad473972ae7c6b01 1675091819000000 1675696619000000 1738768619000000 1833376619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-411 \\xdb570337d29cf1c8c47fc0114d5c63a8e90f86a7ff205dbac3a487878043e375074687720075201579cfd8ad85ba15ce9a60f672335404098106c10e0614f0aa 1 0 \\x000000010000000000800003cde684df95dfdb6103e211f74dc2b568f3fac8a12c25ca5da080d9a6d8c3f8196d32205f7017c467269badd63b1f44888f5d33556fa029b22b27b12ccb3977146af95b7634eb9fe4571a170f440aaa595252308c5b4b659deaa563b7e6bc77dbbe40a8b394359e1f52983a5e03c4f9ad64bd57017be1c6d5677329d561552bc5010001 \\x570ccfb19a5ba80d2a8b76a0816b512049bb000f78d20e1016b3d5070d6f9ac31968d2137f921fd4f276161539920105790a7f07b6dda884f7c8a653c89b5e02 1682345819000000 1682950619000000 1746022619000000 1840630619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-412 \\xdd9b8acc5647f73a25a0c3edff218a068d866f8cb8c1042b848f1251f5a39274ec11d3c308975f42aab21f59d0f137418d883ba424145f32a7f653570827f1f6 1 0 \\x000000010000000000800003a3690bbd56921e04774cd9321930808d35b736b6fc138e77ab71d3171e73a246d47a2426be09853353f7031bffaf5889ee9cdeeb69c8ea41913fd3095c8e6dd9fa870128c3f33ec7c897fb8870c2f1b034877b3818840f888a5125583edce3866cf2b4e1b8d942f240f7b54111d737a797da80c64d065be0ed97fefd9f710ecd010001 \\x9341d3bb7a34e94b5679052cfd56b3c6247f362325f8d800f1a07facd66480bd21d5315bbeea6ed073d2ec3d1bb2991c600cc5aae167eb5fb832e05988262a07 1667233319000000 1667838119000000 1730910119000000 1825518119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-413 \\xe25b9e3c47541611c962c2aecb23c65b5484cf2118290524f4b3ece271ae3011029ce8a2db1eb02643cf3f2d715f5f385e7ea604e49756ffcee8b0e94245eb62 1 0 \\x000000010000000000800003cbdabda4dad32af2cf8e638094b7e01290e3c7f192c3dec72b10029250260fd7745dfd1ef469ac42f29875f92fdf97d4a6ca3dc588b3eceb21e347d7cd9160ac26ccbb1ff42fd1ce982f8891b69746911bb8c0fb3279c8508a1898c8c0e3a10b4d7cb03646017c8ac5ff661a60b0f18ce4cf6d19e3c525a5eb136cd283cc835f010001 \\x6091f1d030d2f978c06a9b25844b9b514223765bddd038f3cc937b2a2501cd52e1eee64d35bbbe257f9a540b246dc8e675a9c4503a3307ba2d70214cc44db400 1681741319000000 1682346119000000 1745418119000000 1840026119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-414 \\xe34b19e979f097b82f935212c0faca9b5ed6103aa0abcf8d1db9480103b0681604999b903e67f837a34d58a75dcd20bf29fc9e54e72610da7698f8e4ea39fdee 1 0 \\x0000000100000000008000039abf717193a6341faa29a9d78e901f564f0f3006094df7fea9899a8d1df5db7ff223047cf8bce1b144520ee344c71d72109c6acd93c169af05a5c2ad7aee12711857992605fb40eb8d9123a8125e27beeb82420118bf10959caaef341889093cd0d2b781ace9b90f5a561170ce46498063cb2d3b79dfbf3f51b6c600cbd84e53010001 \\xd5185246c4dfb88f925964c33e7f56b084a18aa2472d170463ab84955cdbf460350cc2b8beefb0bc24c58fec2c16f466a7683b28a24a8ebec9201e8cd597d309 1663001819000000 1663606619000000 1726678619000000 1821286619000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-415 \\xe4573c7cd65f460e6f985204cb31428b6360050b198680a47142e2b8c655a051a153f31672308f429b1ae7c1fa0a3302094c469938db82002b8786b31e9695f7 1 0 \\x000000010000000000800003afa7c1ccede7397f75a90c63ac5097392eae9af374d6241bbd14899fe90093704ac5961eb35a00517f83eecc3bf2bcae6c26839802c1e273518f29ae6d76b963ba6326b0892b2605998ea05709b822aca806dfcac5153cbb6ae5e32e35a31c158ecaad00ee2e9012ec89f4efc1c30a835974750183e82f63f212d9746788415f010001 \\xb0a799b4b800e045a8bb5e62aad7435dc7216a4bc27b5b76214a6dfa8228345c04015ac70f39e7c48c4a71773a177316c38e2132cea96af168d7a668fd921c0e 1654538819000000 1655143619000000 1718215619000000 1812823619000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-416 \\xe5bf306e54c3844d3c5dbff359fc75b4feb65dbd0c64a5984142e6f235965ab5e8c33a0b4f31d77b21db151103c7d3fe0d9ee171c37cb26ac1461b3a5503d529 1 0 \\x000000010000000000800003bc181b4c98a92cf00e5ffe674f84acb3bfb7977f316ca160acecd3e2e1297c3e5e17457fae131960e8112d5d12b2717545ce3a1f0c751f14189478b8938fb43d4e794c137eeb376b953d393ef5bbc21aea67fc12074a5de30b71ca049740f72c6ed4518afcc71d64dc024923c2c2f5040e473b5e1d4a1cba03a410cfa909d479010001 \\xc69d13cfa2f6d0e0afee4c459210ad2f695d75276c78629853fcacf5f194163162b14bfcdd5127f87a201fb5cce9ff1bfcbb283b3d0e7d2139000b98d9c2710e 1678718819000000 1679323619000000 1742395619000000 1837003619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-417 \\xe6879a6a58c8bbf31d06afce331f378d77f3c476ee7f01c0fd47d2f2b5602d42f2471e9314a0625416556f6f305eaac845490087699f5d4dcaaddd392e773a08 1 0 \\x000000010000000000800003c2579622ac5a3ac0ffd847dcd4fadc076220202f2b679b9f29ae5bfde5a0a66af2244aa1608216aba900239592bfd74877c3fe37f96ca18041574294e40bf68127d84ae3bcb9e3b9cb77f3e5db9910df939dbc91ea8c257268aa21e3b33fb0ebac10dcfa4318d08ddbbafbeead47b2238477c06311f73a7ea7f41ce5a63fc56d010001 \\xa03e56f50265531bef2fa3b675099208a68f18a7f3e63f2d29c879ed8b41a243a43f8156d5db6ce85d42d8afb86dbe94bb901118dbf87bcab529a697ece20d07 1669651319000000 1670256119000000 1733328119000000 1827936119000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-418 \\xe6a3150e045163f533655de68c1918a19d8bd043fa03735af3ae3682791def2ab699c92ca0b656ea3d18b1dc6f8a05d3d5ec0d86f100d69d1ccc33b15997e97a 1 0 \\x000000010000000000800003c7e69450c0d9961cab98b2f6aaebc1f45fa1b76cb64cbc388fe6739f04ef804c572be83af61322e4f48932a2ba382d5a37976eba17e97a2418c624ed87f7a29d49ec6cc31c3069e206ba05f2553a1aadc6ea5809e0f466eb12b22aff044c61d49950f3ff91908e841b4b55a59b8170c87e6c525bc760c489c6f115679f1f426f010001 \\x2831685eaf3c106f4f2fb0366cba1aca37320d21f5a663319c18b3907c00e25f94e95550fef0b2bad2b08072a4ed8e83b029567cc038311b810f37c0f4cedf04 1656352319000000 1656957119000000 1720029119000000 1814637119000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-419 \\xed1bfd68c15f6868810c7ccc13979fa7ee21b726eabfd44c93fd241abd387e53c6b6c46a05fbc110940263b49ea5b447a8ee6d28c4ce49e8408f0c11cb5deccb 1 0 \\x000000010000000000800003dabc465fd2d234e2d3f63bf87742da95f8cba4d59373bd017b290b21b822c0c767fa4690281ca6717c7889259b513fc1dcd98b069d1d2dc7e25beb158e46f7a8df8233bdb58600c59e6bdea4dae001775b91ae673c98e01a2cb7b49801d893e6166b46d6b394c0c0f1e9a26b6be5cbec648142e4a213157e68ca698a9d493c17010001 \\x589944f8939bd09740cb9a7ba4d632b52f44f2d8cf63e282433f2ce3a7b86ead45de93e48dd6914488a653e3e098bdf89ddacb09a2fe97b657b6d4454aae5808 1664815319000000 1665420119000000 1728492119000000 1823100119000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-420 \\xed73b0be6225b6456e46050a6d5b46ba38b24d8b35d8503c46f7a0cd0d42d0b0d2955d7f85b10a3c9a2cdc92c7905cf802535a11b73f185589eff89030f70717 1 0 \\x000000010000000000800003cb917c524684bf78cdc23648a748e8c94c289c4ebe720ff4c131e4638f4f694844013eb6b3e2298c27de93b6297924e818b3d1f0e1bb49d3b2d34ed16bcd486050b5ba2c1a83e9fdaf54da202a03aae10ea349f01920447b8800929fff30eebe55203b715f4ed9315f8889eaff43a00b91e6bdc013fc1c843f795ba6596c11bf010001 \\x76cbee857cc1cbb1ccab9b4f0e83ff6a597185f893736d0ee14d85d99479b1ccd0eac498682d47e3a1965b2113b99d4d3ce0ac963fa68e566dad42b529b9a802 1673882819000000 1674487619000000 1737559619000000 1832167619000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-421 \\xf03f3147acf0afb477e5f44bcdb3544206a9641d5ae1d815d71e5fead6adff7f5fffc67ea84d16846005abc380455980b255f4bb410f8c945a50b2a60e9f5ee5 1 0 \\x000000010000000000800003d5fcf779c25b97ad26a8ab64d7d7193a88e147f25d256196a24dffa935294f26cc2bb07206a8fc1ccbab0b594c62841ab731d1b8a7bb8eec631a433ce2ab8b5c49f89d0d77848229480017df8ae18e8b039ae2f378e6bae4ad42040494401b1621ffc67d9846f291003eff8c8aa94ac18322f8d5d64ae8eb8ae2a9db825b882f010001 \\x32e281a5ff9f5e958d321205e5416f0fc763b377d91a31393b50c29e155e94f91bd8584d353f7691f330f2ffa0c64319ee68ed7d049a74118726ede3abf21b0e 1656352319000000 1656957119000000 1720029119000000 1814637119000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-422 \\xf24343054e70202aa0b780d7384aacdc9635e4853bfff5306f5d045b75c0b67b86fa69b42dd86eebdf33fa959fe1dc52c62e233680545256dba111a22e330f62 1 0 \\x000000010000000000800003c29885052737bf99b2bb1ba4aceff1180f2ed36c2ef8b627c960334aeb53951ff5e33c861acbe2df36feadc8080fbef30d1e4a8f8041c5c32b41f1cb3cb09b63b71e2077ffaf10097acf748a8f3535d0bd6c1c44204262e5caa733971cdbcbb1c407c4210a0c160be298e4f7d214f60cf531c5fd0d9235c30d4972a7aee432fb010001 \\xa273d7895cbc42881ee4477f0b37013b4e5d8270a68b684f6cb6bf7ad32c6675debaf975b7be1cb36723b6e28296afa028f3d6593c15c30fea8481ddb5f8950f 1682950319000000 1683555119000000 1746627119000000 1841235119000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-423 \\xf833adfa93d0513688e25d5cfed36a62cc180ed76a24584d984726bb8117b2fec2a531a074aea0f3a3cb1a6397a3186938e6a16f2f0ee0d255a73c1b866ee3a2 1 0 \\x000000010000000000800003b5cb5a1e3db9d683075bd66ecc14573c775da86c6242afcd8afb927d9a08b105fb7a716439afc5061e41db8743bb143d63d2a5583ceb024631d34fa295f7cd2934a13c1d5c6242be1388a5dd2317c99de9a2db07e9505b3069ac66dd7a9a5b92053551c930b84e8623c1f42bac96d85db6cf552aa624d8c0a57ab1082fb7420b010001 \\xda824eca221459d58c541b678765cb1942d0d6947ef20014b138294d3d3ca09b1b9ed3f8b65435f07699b020d67b4f2f28635809247c14b417ef260bc858d703 1676300819000000 1676905619000000 1739977619000000 1834585619000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-424 \\xfd0bb032cce4a9417b9e4d90dc8290cdb4bc2fed8dd67968d3e38d317d1b40eee682c4463f07c2e07e8680289cece042486fc968d0b011a5468ef361eccd4a50 1 0 \\x000000010000000000800003d12a7651a432d3070268d3ed6880ad0b3258bb3947ee556b9bfefba53675e2d0e21a94875afba104fb82c81049fedf4105228f379ff95dc1e10f7082049ab40559ea80da61d356d893c517435dfe7d29d4acfc4db63ff2f5766d023db0fe75722143bd76e536da265cf2578033499a2f451c742ba5f4dfebd318e27e31a90af7010001 \\x8b7b629b130b983123641b19879f706df9a99daff46f49867eb5452a4ce3784d05765754f791f1736053df44f382663d70d20b84e9994c3c4a63c9bef17e0f01 1658165819000000 1658770619000000 1721842619000000 1816450619000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-\.
-
-
---
--- Data for Name: deposit_confirmations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposit_confirmations (master_pub, serial_id, h_contract_terms, h_extensions, h_wire, exchange_timestamp, refund_deadline, wire_deadline, amount_without_fee_val, amount_without_fee_frac, coin_pub, merchant_pub, exchange_sig, exchange_pub, master_sig) FROM stdin;
-\\xaf96eb56a9f9586fce845e9a7d730d4b96e369c2f3822ce94684a2bb123bbb3d 1 \\x25d7f52fd910d1ef5a2e3d936c450c9802cf5f4dd2fe153c3794fbc34eae04751da8a895fc50193264ac71b56f6d3a863120f249a0e41f95d7d46a78c7696e8f \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\x4332a939dc3c977675db40b1afba3bec4eb37cbd6653599edc4718aac09183f78265ba0c2db1376163e0a548ab2b268085043b7b8cbb636fc5477071bfb9226e 1651516337000000 1651517235000000 1651517235000000 3 98000000 \\x1fa895a49dcc46823e6e3b57dcd9c0a30cae46c2908715be2a4b2acea3a3f58b \\xb971c55b70c6961519118972895c3afd1611aae9bc4391ed24d7ca229795a778 \\x62f1b06e5afe9ed971811988139c7cb1b59050ccc394173a67a7990e5d08bdee7b0a00105dfa0124bbe467b5fd9b110c021c50b82a909e731c982ff83c2ed404 \\x47ad02a8c69cd47f05a8dd35e227ff48bb5129bcb55b44a4d8626335492424dd \\x20ecf7cffe7f00001db969dde55500001d2b47dee55500007a2a47dee5550000602a47dee5550000642a47dee555000070ae46dee55500000000000000000000
-\\xaf96eb56a9f9586fce845e9a7d730d4b96e369c2f3822ce94684a2bb123bbb3d 2 \\xdd4c0b8289d0b85eca07dbb7f15d9c16142e19c48fb9894a312cf3fba12caf823a428ecc7d3f60a54af21de0d6b2902dbf9c34e3510ab6e85a38c15a3b4fd5db \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\x4332a939dc3c977675db40b1afba3bec4eb37cbd6653599edc4718aac09183f78265ba0c2db1376163e0a548ab2b268085043b7b8cbb636fc5477071bfb9226e 1651516344000000 1651517242000000 1651517242000000 6 99000000 \\xdb47c6822d70335b30607ee22ac80c825b054b2810efdd1ca952ffcd93e4867e \\xb971c55b70c6961519118972895c3afd1611aae9bc4391ed24d7ca229795a778 \\x5b65de867efb08b0fb67bcb0cc1d778d346a09ad83ff0baf7a3418d59027e85561a888c1d0109d2bd57000b163512ebf247fc05d872dc78d23a40b5d343fc200 \\x47ad02a8c69cd47f05a8dd35e227ff48bb5129bcb55b44a4d8626335492424dd \\x20ecf7cffe7f00001db969dde55500003deb47dee55500009aea47dee555000080ea47dee555000084ea47dee5550000c00e47dee55500000000000000000000
-\\xaf96eb56a9f9586fce845e9a7d730d4b96e369c2f3822ce94684a2bb123bbb3d 3 \\x28711c7451f416cdfd3150c1f25209a3ea14a953cddf777e2e5a5159b494e3168e4e4b68c3dbf7f7e2b15bec4ee516f7dcd8a83b230cb8928e6ec404405786f3 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\x4332a939dc3c977675db40b1afba3bec4eb37cbd6653599edc4718aac09183f78265ba0c2db1376163e0a548ab2b268085043b7b8cbb636fc5477071bfb9226e 1651516350000000 1651517247000000 1651517247000000 2 99000000 \\x26216aadcbbc75f182255f28b581cbf635fab229c76ca40c7979cfea50415459 \\xb971c55b70c6961519118972895c3afd1611aae9bc4391ed24d7ca229795a778 \\x5935ae539e2a1f0f593408241674c31cde642b9536af69c357aba5fbf99728605d45552ce86eb1e90feb41b6a385b6ab75f00f4627dbf9619c6ceb02bd3c3902 \\x47ad02a8c69cd47f05a8dd35e227ff48bb5129bcb55b44a4d8626335492424dd \\x20ecf7cffe7f00001db969dde55500001d2b47dee55500007a2a47dee5550000602a47dee5550000642a47dee5550000801247dee55500000000000000000000
-\.
-
-
---
--- Data for Name: deposits_by_ready_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposits_by_ready_default (wire_deadline, shard, coin_pub, deposit_serial_id) FROM stdin;
-1651517235000000 912124204 \\x1fa895a49dcc46823e6e3b57dcd9c0a30cae46c2908715be2a4b2acea3a3f58b 1
-1651517242000000 912124204 \\xdb47c6822d70335b30607ee22ac80c825b054b2810efdd1ca952ffcd93e4867e 2
-1651517247000000 912124204 \\x26216aadcbbc75f182255f28b581cbf635fab229c76ca40c7979cfea50415459 3
-\.
-
-
---
--- Data for Name: deposits_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposits_default (deposit_serial_id, shard, coin_pub, known_coin_id, amount_with_fee_val, amount_with_fee_frac, wallet_timestamp, exchange_timestamp, refund_deadline, wire_deadline, merchant_pub, h_contract_terms, coin_sig, wire_salt, wire_target_h_payto, done, extension_blocked, extension_details_serial_id) FROM stdin;
-1 912124204 \\x1fa895a49dcc46823e6e3b57dcd9c0a30cae46c2908715be2a4b2acea3a3f58b 1 4 0 1651516335000000 1651516337000000 1651517235000000 1651517235000000 \\xb971c55b70c6961519118972895c3afd1611aae9bc4391ed24d7ca229795a778 \\x25d7f52fd910d1ef5a2e3d936c450c9802cf5f4dd2fe153c3794fbc34eae04751da8a895fc50193264ac71b56f6d3a863120f249a0e41f95d7d46a78c7696e8f \\x78edb02fdfb2961c8276cd5177678bd352554bb589b6490c0ee09f585e52b77f4aa90db589e4c6217f33e13bb15692ea975e4e03a081cbf9ca8068bbc5088d03 \\xeb64a059017e25c81ca2a5719169a1ca \\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660c f f \N
-2 912124204 \\xdb47c6822d70335b30607ee22ac80c825b054b2810efdd1ca952ffcd93e4867e 3 7 0 1651516342000000 1651516344000000 1651517242000000 1651517242000000 \\xb971c55b70c6961519118972895c3afd1611aae9bc4391ed24d7ca229795a778 \\xdd4c0b8289d0b85eca07dbb7f15d9c16142e19c48fb9894a312cf3fba12caf823a428ecc7d3f60a54af21de0d6b2902dbf9c34e3510ab6e85a38c15a3b4fd5db \\x1f72829c6d6edb253a18c312bf5bddfde6f690081d420bea48d3402b89ec3a343e7960a380af1a8ec4843c63af89ca2527fc18fa7d9d1d6cf68ab56ac780790f \\xeb64a059017e25c81ca2a5719169a1ca \\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660c f f \N
-3 912124204 \\x26216aadcbbc75f182255f28b581cbf635fab229c76ca40c7979cfea50415459 6 3 0 1651516347000000 1651516350000000 1651517247000000 1651517247000000 \\xb971c55b70c6961519118972895c3afd1611aae9bc4391ed24d7ca229795a778 \\x28711c7451f416cdfd3150c1f25209a3ea14a953cddf777e2e5a5159b494e3168e4e4b68c3dbf7f7e2b15bec4ee516f7dcd8a83b230cb8928e6ec404405786f3 \\x87fe0d4963f19fa12858ad923fc980390ff0fb8973a4448cc8f7c62dc4639bbd83d602c6776d057f546a05d4e55d39534342622bc84736c321b44305b3a04f03 \\xeb64a059017e25c81ca2a5719169a1ca \\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660c f f \N
-\.
-
-
---
--- Data for Name: deposits_for_matching_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposits_for_matching_default (refund_deadline, merchant_pub, coin_pub, deposit_serial_id) FROM stdin;
-1651517235000000 \\xb971c55b70c6961519118972895c3afd1611aae9bc4391ed24d7ca229795a778 \\x1fa895a49dcc46823e6e3b57dcd9c0a30cae46c2908715be2a4b2acea3a3f58b 1
-1651517242000000 \\xb971c55b70c6961519118972895c3afd1611aae9bc4391ed24d7ca229795a778 \\xdb47c6822d70335b30607ee22ac80c825b054b2810efdd1ca952ffcd93e4867e 2
-1651517247000000 \\xb971c55b70c6961519118972895c3afd1611aae9bc4391ed24d7ca229795a778 \\x26216aadcbbc75f182255f28b581cbf635fab229c76ca40c7979cfea50415459 3
-\.
-
-
---
--- Data for Name: django_content_type; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_content_type (id, app_label, model) FROM stdin;
-1 auth permission
-2 auth group
-3 auth user
-4 contenttypes contenttype
-5 sessions session
-6 app bankaccount
-7 app talerwithdrawoperation
-8 app banktransaction
-\.
-
-
---
--- Data for Name: django_migrations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_migrations (id, app, name, applied) FROM stdin;
-1 contenttypes 0001_initial 2022-05-02 20:31:59.617606+02
-2 auth 0001_initial 2022-05-02 20:31:59.746932+02
-3 app 0001_initial 2022-05-02 20:31:59.840833+02
-4 contenttypes 0002_remove_content_type_name 2022-05-02 20:31:59.859241+02
-5 auth 0002_alter_permission_name_max_length 2022-05-02 20:31:59.871255+02
-6 auth 0003_alter_user_email_max_length 2022-05-02 20:31:59.883052+02
-7 auth 0004_alter_user_username_opts 2022-05-02 20:31:59.892723+02
-8 auth 0005_alter_user_last_login_null 2022-05-02 20:31:59.902632+02
-9 auth 0006_require_contenttypes_0002 2022-05-02 20:31:59.905595+02
-10 auth 0007_alter_validators_add_error_messages 2022-05-02 20:31:59.91523+02
-11 auth 0008_alter_user_username_max_length 2022-05-02 20:31:59.930698+02
-12 auth 0009_alter_user_last_name_max_length 2022-05-02 20:31:59.941114+02
-13 auth 0010_alter_group_name_max_length 2022-05-02 20:31:59.954007+02
-14 auth 0011_update_proxy_permissions 2022-05-02 20:31:59.965557+02
-15 auth 0012_alter_user_first_name_max_length 2022-05-02 20:31:59.977777+02
-16 sessions 0001_initial 2022-05-02 20:32:00.000481+02
-\.
-
-
---
--- Data for Name: django_session; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_session (session_key, session_data, expire_date) FROM stdin;
-\.
-
-
---
--- Data for Name: exchange_sign_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.exchange_sign_keys (esk_serial, exchange_pub, master_sig, valid_from, expire_sign, expire_legal) FROM stdin;
-1 \\xc68f16bb4ac6c8328a43ea2059b4faec49131d177d490d4af31d62af42e78a23 \\x6f485a1a085fe97f446b66451adca1f6ff55b931eb487ee6e64ee8f7cbb7afb5ca4d3acee20c5c38f7cfa10ace8f8b1feea1a736c0cf521c3226053df066990e 1666030919000000 1673288519000000 1675707719000000
-2 \\x47ad02a8c69cd47f05a8dd35e227ff48bb5129bcb55b44a4d8626335492424dd \\x5c46764aef393066362dc49bbaa54d15ce826c6929709cf64f3061f1526d2df5f8b895379451ef9e678bc5213e4aea5900dd69d1ec66ab21aabccaa1b49ffa0b 1651516319000000 1658773919000000 1661193119000000
-3 \\xe8acf0f257771e5fd777911bddf36d880c1893dc3af07164d5ad0c81924b508c \\x0964874b19b615a99696dc1a5bbfb4196d65896b7b6d97529ae0c99eea5ccc2e13c80c3c5b572df9ce46078c98d0889da127e37d9fba9fac89e06abff42ef50b 1680545519000000 1687803119000000 1690222319000000
-4 \\x726368b9bde90c5fec7b3d3770084db2c736c3ef3aa3bf94aca2e83bf4c00e3c \\xe0e1638ffa4803861c580a8dc5ee5aa9967bbd77885ba8e4ddf4c49aea87a88b9a80e0fe29b9a80843768c68a7b568694efb9edd2955ba455ec295d0837f1e0d 1673288219000000 1680545819000000 1682965019000000
-5 \\x99b3417a4235576dd96fc1ecf625c8c02f839f14b3214bd7dd5d2a8a1f7e3e13 \\xea914120053a83a129e12dda4097d5c94423bd1a55cb93327c7921fe1b396b8834b18697868c2897175cbeb54b5c587b7a8d87f71de89ee7a2f2d92ca372dd08 1658773619000000 1666031219000000 1668450419000000
-\.
-
-
---
--- Data for Name: extension_details_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.extension_details_default (extension_details_serial_id, extension_options) FROM stdin;
-\.
-
-
---
--- Data for Name: extensions; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.extensions (extension_id, name, config) FROM stdin;
-\.
-
-
---
--- Data for Name: global_fee; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.global_fee (global_fee_serial, start_date, end_date, history_fee_val, history_fee_frac, kyc_fee_val, kyc_fee_frac, account_fee_val, account_fee_frac, purse_fee_val, purse_fee_frac, purse_timeout, kyc_timeout, history_expiration, purse_account_limit, master_sig) FROM stdin;
-1 1640995200000000 1672531200000000 0 1000000 0 1000000 0 1000000 0 1000000 3600000000 3600000000 31536000000000 5 \\xbd8816912276876ab311c7f654d1bb74eac2bf74739438ebcfa860e079e42e0bcfed965fc527ec83a0b2e8f48eddf1c14bbce174f63bf4799491dec78e060905
-\.
-
-
---
--- Data for Name: history_requests_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.history_requests_default (reserve_pub, request_timestamp, reserve_sig, history_fee_val, history_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: known_coins_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.known_coins_default (known_coin_id, denominations_serial, coin_pub, age_commitment_hash, denom_sig, remaining_val, remaining_frac) FROM stdin;
-1 199 \\x1fa895a49dcc46823e6e3b57dcd9c0a30cae46c2908715be2a4b2acea3a3f58b \\x0000000000000000000000000000000000000000000000000000000000000000 \\x00000001000000008f166bbf0fc39ac6b1d46f80ad6d09e9271397df3f33a24a87e00b5e2a1815ebdf340a2021038f2bc8d855cb87a5910acc528314fc45b339c3016e442fd1b26a20444aa06c4b52d5982695574cec15f3fd7fa287a0a18c80a06ae16a1862528df2d5b9d7442e5ebaed2a74a26fb0a95288ba4395c75b75a3ea4cf05d0079b11b 0 0
-3 358 \\xdb47c6822d70335b30607ee22ac80c825b054b2810efdd1ca952ffcd93e4867e \\x0000000000000000000000000000000000000000000000000000000000000000 \\x0000000100000000c0138a42a6556b8fd388b98133ba0452ffa9c907e3fecfe3dc167a1323ed10a4048e2e22a43ff98ae7556aaec426cc2e175a22f0435700cda98a1de99a8fcda7fc7f3079cea83ad1acbac160422dba9416618e3a058b6a83def23c7f99519b241ac69ad1aba5369359188be6387a3573eac4a86f8123756d18bfd8413d5c4a4d 0 1000000
-6 393 \\x26216aadcbbc75f182255f28b581cbf635fab229c76ca40c7979cfea50415459 \\x0000000000000000000000000000000000000000000000000000000000000000 \\x00000001000000009b01f3106d1c2eb08b376fab79baf9bad4ca66fe720217f2201a6fc09cf5e4fa2d4fc3e45a0add7164004d5d50e22fc86c0c1cd2e780e9827f61ea70a0e93eda64b567f1cbf87e75a35060d5389e55d116ea3a8e8f61046d658692e561dee7e62f7bcd81d24e3800e87409ba9019826cfcabc7edeb1ee87d35b4df4c68033a1d 0 1000000
-\.
-
-
---
--- Data for Name: merchant_accounts; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_accounts (account_serial, merchant_serial, h_wire, salt, payto_uri, active) FROM stdin;
-1 1 \\x4332a939dc3c977675db40b1afba3bec4eb37cbd6653599edc4718aac09183f78265ba0c2db1376163e0a548ab2b268085043b7b8cbb636fc5477071bfb9226e \\xeb64a059017e25c81ca2a5719169a1ca payto://x-taler-bank/localhost/43 t
-\.
-
-
---
--- Data for Name: merchant_contract_terms; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_contract_terms (order_serial, merchant_serial, order_id, contract_terms, h_contract_terms, creation_time, pay_deadline, refund_deadline, paid, wired, fulfillment_url, session_id, claim_token) FROM stdin;
-1 1 2022.122-034EM9RCCKTH6 \\x7b22616d6f756e74223a22544553544b55444f533a34222c2273756d6d617279223a2268656c6c6f20776f726c64222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f746878222c22726566756e645f646561646c696e65223a7b22745f73223a313635313531373233357d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f73223a313635313531373233357d2c2270726f6475637473223a5b5d2c22685f77697265223a22384353414a454557374a425143584556383252545a45485658483742365a35584353394e4b375057385743414e4734484746565234534454314750563244563143464741414a354235434b38313138343744585253455633445a324d455733485159574a345647222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032322e3132322d303334454d395243434b544836222c2274696d657374616d70223a7b22745f73223a313635313531363333352c22745f6d73223a313635313531363333353030307d2c227061795f646561646c696e65223a7b22745f73223a313635313531393933352c22745f6d73223a313635313531393933353030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a224e594245504e4e395a3543365a4b4d34425444375457524439454245365445325945313253544136474a48425034485651435947227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a2251355257415056475254423141363848483553384a5131545a4d4231334151395148315333563934545a35323535574e4d585730222c226e6f6e6365223a224a4836315331304441324535345757584e374243384b56524e464d513734304e5248523435303442515043483357584552535747227d \\x25d7f52fd910d1ef5a2e3d936c450c9802cf5f4dd2fe153c3794fbc34eae04751da8a895fc50193264ac71b56f6d3a863120f249a0e41f95d7d46a78c7696e8f 1651516335000000 1651519935000000 1651517235000000 t f taler://fulfillment-success/thx \\xca90915eed155dc220a34a7cc4a88c78
-2 1 2022.122-0205YGEYQYQJ0 \\x7b22616d6f756e74223a22544553544b55444f533a37222c2273756d6d617279223a226f7264657220746861742077696c6c20626520726566756e646564222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f746878222c22726566756e645f646561646c696e65223a7b22745f73223a313635313531373234327d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f73223a313635313531373234327d2c2270726f6475637473223a5b5d2c22685f77697265223a22384353414a454557374a425143584556383252545a45485658483742365a35584353394e4b375057385743414e4734484746565234534454314750563244563143464741414a354235434b38313138343744585253455633445a324d455733485159574a345647222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032322e3132322d30323035594745595159514a30222c2274696d657374616d70223a7b22745f73223a313635313531363334322c22745f6d73223a313635313531363334323030307d2c227061795f646561646c696e65223a7b22745f73223a313635313531393934322c22745f6d73223a313635313531393934323030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a224e594245504e4e395a3543365a4b4d34425444375457524439454245365445325945313253544136474a48425034485651435947227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a2251355257415056475254423141363848483553384a5131545a4d4231334151395148315333563934545a35323535574e4d585730222c226e6f6e6365223a224d435a313631435456354e5456433837514d4332364843443531415839383733424d4756585154475a5a46533452465846584147227d \\xdd4c0b8289d0b85eca07dbb7f15d9c16142e19c48fb9894a312cf3fba12caf823a428ecc7d3f60a54af21de0d6b2902dbf9c34e3510ab6e85a38c15a3b4fd5db 1651516342000000 1651519942000000 1651517242000000 t f taler://fulfillment-success/thx \\x9535e79c9b91f66d98453f5f7d27509b
-3 1 2022.122-0129HBSR4765E \\x7b22616d6f756e74223a22544553544b55444f533a33222c2273756d6d617279223a227061796d656e7420616674657220726566756e64222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f746878222c22726566756e645f646561646c696e65223a7b22745f73223a313635313531373234377d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f73223a313635313531373234377d2c2270726f6475637473223a5b5d2c22685f77697265223a22384353414a454557374a425143584556383252545a45485658483742365a35584353394e4b375057385743414e4734484746565234534454314750563244563143464741414a354235434b38313138343744585253455633445a324d455733485159574a345647222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032322e3132322d30313239484253523437363545222c2274696d657374616d70223a7b22745f73223a313635313531363334372c22745f6d73223a313635313531363334373030307d2c227061795f646561646c696e65223a7b22745f73223a313635313531393934372c22745f6d73223a313635313531393934373030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a224e594245504e4e395a3543365a4b4d34425444375457524439454245365445325945313253544136474a48425034485651435947227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a2251355257415056475254423141363848483553384a5131545a4d4231334151395148315333563934545a35323535574e4d585730222c226e6f6e6365223a2235303743303032354d355458365a57334b5037344e583839514a57413453315a5646574130455046574a364a4547384351505030227d \\x28711c7451f416cdfd3150c1f25209a3ea14a953cddf777e2e5a5159b494e3168e4e4b68c3dbf7f7e2b15bec4ee516f7dcd8a83b230cb8928e6ec404405786f3 1651516347000000 1651519947000000 1651517247000000 t f taler://fulfillment-success/thx \\x5f62d7deb35f75c84d74f9f23d594584
-\.
-
-
---
--- Data for Name: merchant_deposit_to_transfer; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_deposit_to_transfer (deposit_serial, coin_contribution_value_val, coin_contribution_value_frac, credit_serial, execution_time, signkey_serial, exchange_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_deposits; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_deposits (deposit_serial, order_serial, deposit_timestamp, coin_pub, exchange_url, amount_with_fee_val, amount_with_fee_frac, deposit_fee_val, deposit_fee_frac, refund_fee_val, refund_fee_frac, wire_fee_val, wire_fee_frac, signkey_serial, exchange_sig, account_serial) FROM stdin;
-1 1 1651516337000000 \\x1fa895a49dcc46823e6e3b57dcd9c0a30cae46c2908715be2a4b2acea3a3f58b http://localhost:8081/ 4 0 0 2000000 0 4000000 0 1000000 2 \\x62f1b06e5afe9ed971811988139c7cb1b59050ccc394173a67a7990e5d08bdee7b0a00105dfa0124bbe467b5fd9b110c021c50b82a909e731c982ff83c2ed404 1
-2 2 1651516344000000 \\xdb47c6822d70335b30607ee22ac80c825b054b2810efdd1ca952ffcd93e4867e http://localhost:8081/ 7 0 0 1000000 0 1000000 0 1000000 2 \\x5b65de867efb08b0fb67bcb0cc1d778d346a09ad83ff0baf7a3418d59027e85561a888c1d0109d2bd57000b163512ebf247fc05d872dc78d23a40b5d343fc200 1
-3 3 1651516350000000 \\x26216aadcbbc75f182255f28b581cbf635fab229c76ca40c7979cfea50415459 http://localhost:8081/ 3 0 0 1000000 0 1000000 0 1000000 2 \\x5935ae539e2a1f0f593408241674c31cde642b9536af69c357aba5fbf99728605d45552ce86eb1e90feb41b6a385b6ab75f00f4627dbf9619c6ceb02bd3c3902 1
-\.
-
-
---
--- Data for Name: merchant_exchange_signing_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_exchange_signing_keys (signkey_serial, master_pub, exchange_pub, start_date, expire_date, end_date, master_sig) FROM stdin;
-1 \\xaf96eb56a9f9586fce845e9a7d730d4b96e369c2f3822ce94684a2bb123bbb3d \\xc68f16bb4ac6c8328a43ea2059b4faec49131d177d490d4af31d62af42e78a23 1666030919000000 1673288519000000 1675707719000000 \\x6f485a1a085fe97f446b66451adca1f6ff55b931eb487ee6e64ee8f7cbb7afb5ca4d3acee20c5c38f7cfa10ace8f8b1feea1a736c0cf521c3226053df066990e
-2 \\xaf96eb56a9f9586fce845e9a7d730d4b96e369c2f3822ce94684a2bb123bbb3d \\x47ad02a8c69cd47f05a8dd35e227ff48bb5129bcb55b44a4d8626335492424dd 1651516319000000 1658773919000000 1661193119000000 \\x5c46764aef393066362dc49bbaa54d15ce826c6929709cf64f3061f1526d2df5f8b895379451ef9e678bc5213e4aea5900dd69d1ec66ab21aabccaa1b49ffa0b
-3 \\xaf96eb56a9f9586fce845e9a7d730d4b96e369c2f3822ce94684a2bb123bbb3d \\xe8acf0f257771e5fd777911bddf36d880c1893dc3af07164d5ad0c81924b508c 1680545519000000 1687803119000000 1690222319000000 \\x0964874b19b615a99696dc1a5bbfb4196d65896b7b6d97529ae0c99eea5ccc2e13c80c3c5b572df9ce46078c98d0889da127e37d9fba9fac89e06abff42ef50b
-4 \\xaf96eb56a9f9586fce845e9a7d730d4b96e369c2f3822ce94684a2bb123bbb3d \\x726368b9bde90c5fec7b3d3770084db2c736c3ef3aa3bf94aca2e83bf4c00e3c 1673288219000000 1680545819000000 1682965019000000 \\xe0e1638ffa4803861c580a8dc5ee5aa9967bbd77885ba8e4ddf4c49aea87a88b9a80e0fe29b9a80843768c68a7b568694efb9edd2955ba455ec295d0837f1e0d
-5 \\xaf96eb56a9f9586fce845e9a7d730d4b96e369c2f3822ce94684a2bb123bbb3d \\x99b3417a4235576dd96fc1ecf625c8c02f839f14b3214bd7dd5d2a8a1f7e3e13 1658773619000000 1666031219000000 1668450419000000 \\xea914120053a83a129e12dda4097d5c94423bd1a55cb93327c7921fe1b396b8834b18697868c2897175cbeb54b5c587b7a8d87f71de89ee7a2f2d92ca372dd08
-\.
-
-
---
--- Data for Name: merchant_exchange_wire_fees; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_exchange_wire_fees (wirefee_serial, master_pub, h_wire_method, start_date, end_date, wire_fee_val, wire_fee_frac, closing_fee_val, closing_fee_frac, wad_fee_val, wad_fee_frac, master_sig) FROM stdin;
-1 \\xaf96eb56a9f9586fce845e9a7d730d4b96e369c2f3822ce94684a2bb123bbb3d \\xf9099467bd884e86871559a62a7f23b6e876bf084a30371891b5129ce4440d3cbe27afe387d39b2ce8d9625abd388517c81bfc8da9f2e0f8c9471bff65a802b2 1640995200000000 1672531200000000 0 1000000 0 1000000 0 1000000 \\xc4bc53a23028f8d21026f07e7e7176f581de0cafb26d3f73087e9507301db0a31e88659125340f8340fd433118c0fdca78cfb42eb9920f50ed8a9926cab95a03
-\.
-
-
---
--- Data for Name: merchant_instances; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_instances (merchant_serial, merchant_pub, auth_hash, auth_salt, merchant_id, merchant_name, address, jurisdiction, default_max_deposit_fee_val, default_max_deposit_fee_frac, default_max_wire_fee_val, default_max_wire_fee_frac, default_wire_fee_amortization, default_wire_transfer_delay, default_pay_delay) FROM stdin;
-1 \\xb971c55b70c6961519118972895c3afd1611aae9bc4391ed24d7ca229795a778 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\x0000000000000000000000000000000000000000000000000000000000000000 default default \\x7b7d \\x7b7d 1 0 1 0 1 3600000000 3600000000
-\.
-
-
---
--- Data for Name: merchant_inventory; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_inventory (product_serial, merchant_serial, product_id, description, description_i18n, unit, image, taxes, price_val, price_frac, total_stock, total_sold, total_lost, address, next_restock, minimum_age) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_inventory_locks; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_inventory_locks (product_serial, lock_uuid, total_locked, expiration) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_keys (merchant_priv, merchant_serial) FROM stdin;
-\\x057f4ad21723346862205c2817a77ca37e36521585bcd12c1781358426935bfa 1
-\.
-
-
---
--- Data for Name: merchant_kyc; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_kyc (kyc_serial_id, kyc_timestamp, kyc_ok, exchange_sig, exchange_pub, exchange_kyc_serial, account_serial, exchange_url) FROM stdin;
-1 1651516337000000 f \N \N 2 1 http://localhost:8081/
-\.
-
-
---
--- Data for Name: merchant_order_locks; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_order_locks (product_serial, total_locked, order_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_orders; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_orders (order_serial, merchant_serial, order_id, claim_token, h_post_data, pay_deadline, creation_time, contract_terms) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_refund_proofs; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_refund_proofs (refund_serial, exchange_sig, signkey_serial) FROM stdin;
-1 \\x497919a7c8bfa0b1d83cc8328af737efbc2fc8304e2f94d01be746dfc2db2810da251f97fbb8da539098576b9511ffbb46066b1002555a6838fd1b976987b801 2
-\.
-
-
---
--- Data for Name: merchant_refunds; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_refunds (refund_serial, order_serial, rtransaction_id, refund_timestamp, coin_pub, reason, refund_amount_val, refund_amount_frac) FROM stdin;
-1 2 1 1651516344000000 \\xdb47c6822d70335b30607ee22ac80c825b054b2810efdd1ca952ffcd93e4867e test refund 6 0
-\.
-
-
---
--- Data for Name: merchant_tip_pickup_signatures; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_pickup_signatures (pickup_serial, coin_offset, blind_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_pickups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_pickups (pickup_serial, tip_serial, pickup_id, amount_val, amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_reserve_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_reserve_keys (reserve_serial, reserve_priv, exchange_url, payto_uri) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_reserves (reserve_serial, reserve_pub, merchant_serial, creation_time, expiration, merchant_initial_balance_val, merchant_initial_balance_frac, exchange_initial_balance_val, exchange_initial_balance_frac, tips_committed_val, tips_committed_frac, tips_picked_up_val, tips_picked_up_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tips; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tips (tip_serial, reserve_serial, tip_id, justification, next_url, expiration, amount_val, amount_frac, picked_up_val, picked_up_frac, was_picked_up) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfer_signatures; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfer_signatures (credit_serial, signkey_serial, wire_fee_val, wire_fee_frac, credit_amount_val, credit_amount_frac, execution_time, exchange_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfer_to_coin; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfer_to_coin (deposit_serial, credit_serial, offset_in_exchange_list, exchange_deposit_value_val, exchange_deposit_value_frac, exchange_deposit_fee_val, exchange_deposit_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfers; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfers (credit_serial, exchange_url, wtid, credit_amount_val, credit_amount_frac, account_serial, verified, confirmed) FROM stdin;
-\.
-
-
---
--- Data for Name: partner_accounts; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.partner_accounts (payto_uri, partner_serial_id, partner_master_sig, last_seen) FROM stdin;
-\.
-
-
---
--- Data for Name: partners; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.partners (partner_serial_id, partner_master_pub, start_date, end_date, wad_frequency, wad_fee_val, wad_fee_frac, master_sig, partner_base_url) FROM stdin;
-\.
-
-
---
--- Data for Name: prewire_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.prewire_default (prewire_uuid, wire_method, finished, failed, buf) FROM stdin;
-\.
-
-
---
--- Data for Name: purse_deposits_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.purse_deposits_default (purse_deposit_serial_id, partner_serial_id, purse_pub, coin_pub, amount_with_fee_val, amount_with_fee_frac, coin_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: purse_merges_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.purse_merges_default (purse_merge_request_serial_id, partner_serial_id, reserve_pub, purse_pub, merge_sig, merge_timestamp) FROM stdin;
-\.
-
-
---
--- Data for Name: purse_requests_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.purse_requests_default (purse_requests_serial_id, purse_pub, merge_pub, purse_expiration, h_contract_terms, age_limit, amount_with_fee_val, amount_with_fee_frac, balance_val, balance_frac, purse_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: recoup_by_reserve_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup_by_reserve_default (reserve_out_serial_id, coin_pub) FROM stdin;
-\.
-
-
---
--- Data for Name: recoup_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup_default (recoup_uuid, coin_pub, coin_sig, coin_blind, amount_val, amount_frac, recoup_timestamp, reserve_out_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: recoup_refresh_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup_refresh_default (recoup_refresh_uuid, coin_pub, known_coin_id, coin_sig, coin_blind, amount_val, amount_frac, recoup_timestamp, rrc_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: refresh_commitments_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_commitments_default (melt_serial_id, rc, old_coin_pub, old_coin_sig, amount_with_fee_val, amount_with_fee_frac, noreveal_index) FROM stdin;
-1 \\xaab4fd264c15497ca138ec28c6ba767f22ce0da5769fd18a9f3ebebcee75bbe7b375f8c52717817f76ef899d34fbf6c17e5c1b3830e0e955919a8b2603e4c806 \\x1fa895a49dcc46823e6e3b57dcd9c0a30cae46c2908715be2a4b2acea3a3f58b \\x4955b9ccbda1d7a7a98d6978026a908f0afecac448e82211a92556cdeca50a2ad25baef67fa3b64c519393cb0ef77c8df63cb6b12f6a883d90ddf43c2a663e0b 4 0 1
-2 \\x37fb5d0d5327304768fc15c6926e1c8d3b921b8ea3b2fc4a09d8179a1c0e411771db0e4743a108a8f02297e1f84b31f16ca264bb510f67e60624b7b6bd7563b9 \\xdb47c6822d70335b30607ee22ac80c825b054b2810efdd1ca952ffcd93e4867e \\x1722003d502a1dd7f10f144ec49dd1ca0390f2b6250c56eb85e0203d62441126f261bc3e8b5ced7489c35271bc7e988e36169261b57074910c683225af7fd703 3 0 2
-3 \\x3156cf11f4fa1c0da8c454278c3c57b07253d2c9bcde786f20b18cc2f40c0992888ee851d9a6d713be96600d30e0cce0b9e170153b9f1b1c277ff6080d95f7ef \\xdb47c6822d70335b30607ee22ac80c825b054b2810efdd1ca952ffcd93e4867e \\x50cff39180dff75da02cb442a27c4b17764be652da18726146601bf6c8febab47e01fd0ad28c0fd8f184ac3a90bc61d4f23cb127ba71fe255b4207f30479190d 5 98000000 1
-4 \\x8ea1a3dcd194d512f6773776d51bad77b3b8d446343ea7a90ad5479cf76548fa3f2b0f372057008a14fc222db6f16ea62ad041f32eddbcf856d461a7dfa237ee \\x26216aadcbbc75f182255f28b581cbf635fab229c76ca40c7979cfea50415459 \\x536f114a8324b5442e11430169d79e1a49707d9ef9e1176fa05da3e2b076ccf9112ce18d6ff84ddb7a17367de9e1a424e01b5ad7ddfd919cc5a8245b02307d01 1 99000000 1
-\.
-
-
---
--- Data for Name: refresh_revealed_coins_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_revealed_coins_default (rrc_serial, melt_serial_id, freshcoin_index, link_sig, denominations_serial, coin_ev, h_coin_ev, ev_sig, ewv) FROM stdin;
-1 1 0 \\x75cb05c730d63449fc328f8a5ae1dd7d03991706e2aff9b0274acdadc2d1ada63b6d512726c72f6fa3997a55a7dede937e937c554321cf774e4454e1d79c3402 235 \\x000000010000010077936878b2a5b403179a585328cb694aa08b1563df9ec05ceac2852397179aeb83aa19711df2867eac34fbb4e14cd56c02de9f547476b9856d27be45b422fd1154669e0b2f91e8d50fb4e4c474528cbc49200711f6cc2e79f65a34c1ab0e9ef89626b2a6244a3719b944941a2c04f4cdac89cf0ea15ce5f0ba9d1f2ba525a995 \\x7622e94d0d0de53e90564576f4e1009228ed704a176f2a6c9cc616a2f7902c5a8a104190e35cb4c7a62723a36c1b2aba1b5e980ef7be6487967cd4c8d8ddf9a8 \\x00000001000000010d8db232ac6e422541401c4bc585d48bcf510e46d9ba8ae494ebbf107293b5c857f5d3dc02a9e68744fec47648c9dfaf86a73edc320505ed39f83ba92c311f5cd4a0aa8ee4deba6aaedb375c55e0341856110a1193c4676999ca464ed4f5b31a954a4d687927031ff30f8c8c50a7ca64b01f60f490f6f5684e2005f76446902f \\x0000000100010000
-2 1 1 \\xb00d66dbac9c1ddc4236f05f7c54d04790701630a6f4412692b6a7a597c230752d87641b89f01b14b8841a1f2c9adb084a30ed96de6ce89dd89ef535fd5e4403 144 \\x000000010000010024843e9ed3691d8a4fbff82d95f33041968d2504ec483088ea954f16dc738a7f62e5b4f7f73eb3e131d252292d5856148bbf60e8548f567867f232ebc61a01f1d3326746b500ec2a7473e3ca7322b0d2d4b6dc9c11ba171a60f68d59ad7002aaac907909aadf7a5f85e355300a8df21691b52b35a119247b7b88b0ac279baad8 \\xc2f95d47b7945f80a783d0260577abac3ef38bef15c8c346aad07119d7d742117d7880c423aae3822910ef18847116bc480ff93ea16cd0bf8494ab55ab99335c \\x0000000100000001c4c107d403aecdbb7ef392ec734b80f6b88ecaa785deef6819d2d92681fcd4674e82908f7ab9a75acf9a08037db0abd54a1e821e969d7728978078721cd4740d67d9991b73d9df0cbac0cc1ec975eccd5c4f239d98b59c89d65aa8c53531a55518b5c44652a12cd9aaf39a19ce841018af6ebb705764815f9cb74cee98adfb0c \\x0000000100010000
-3 1 2 \\x3e1127896ba0fc0094b89db3326b654109420eb1c69f640c5176af6c8b20746206c4df3a98efb7c468728047214bd6141088c9422c96071f4b218af4fa4e8e06 45 \\x0000000100000100506c4317b956c1fe017ed4a6264ac57529f090714dcd64e50bfe6b5b41316292d95b992e38bc952f09b46c8b6542b8c3e8d0dc6a855923960e2dde2f0d9b6793aec50be272176a302a4483778019386b07a9e05bad61cf8f561568f01f4f0327c5e1b997c671d49158e4cb4290c837b5b264718bee6ccbfbdb2d3e87a516ee51 \\x769b5e7d681845ff40539f81e160543b0930772863695c022839117bb282adc58ac919620f08eecca482723e77bac1d8761305e73ddedb772983195fe2f8ea35 \\x00000001000000019095b9cd48360f37ef664479835795bdcd8eb03aceca94ff1425a9dbd02b5da491a73a72ccf3138dbfde17710d3b492c9544c0cc5b8c5c57ed5b3f0f07ea4e7d454111c67008a4c4031ba7a63a50cf98e1f1c2235222329ceb5613359b6bc2d29c6791723d786a702c53e7af9eb3e506f035822f48604aa5d168d754cf4ecfb0 \\x0000000100010000
-4 1 3 \\xd7d460835db827709de6d340a2fcf259005fac83272356592ed217deb1523c5447f9efda053c4563b7f5173e5b693b5f8452854090018f78f4af7d654884790a 45 \\x0000000100000100807e7b459e5f7dfde8e02658edb9a8be1d7cf8bceaed76a0376c14167ddc03a15585439c309a39202b048c156804fa004e70299b9d504dd4854bc85852296ab6578c19d0f186ab4a5e96ebce5406b4dac94950ab18e7a7b364a7f520da1e66e642c2a39bc20e5d270cbcd9cf66eb23aab912058d84ed39984e9e1fb2b34bb4fa \\xb57e800bb30753a52e22503d9a147f1a7916327342dc4e8626ce24a0b08fed684aa8fef55439ee0d2b0362a4dac2011c53b527af99783ce3a8f3d09d142e3cfa \\x000000010000000158787649b1466bf537e9f24a7f592c7a6138784ca3413f3eee69e8eef311d3e2cd34a5c9a04aeaeeb9d59f9a175a6bd53029f6bf036f8f740d580072e34acc249219cf4465a5c28a19b87be25329bd49ecb18f0743e62c5bf9ac6b9a2b551359758800f89ab595985c0b272dd74a0551ff6738b9b5c50aacd340e4fdb65a20bb \\x0000000100010000
-5 1 4 \\x12a9648cd80ee62fa0bb1bb94f8c5f574b68118e59a4ca70ddd35135507dd2fcde994141eeb9ab50518e916f944d38ccb81ef4c70d458aaef85f66fd378f0009 45 \\x00000001000001001329722f0432d5ab1eb3e1cce2a37e3af9ccfc92d5b795e18f532a7893ccd0e50b6f6dc77f17e8f71a9ef3a9b356f6ab7626cad37025e9899a400b87e3b556bd8d70bdee050ac252ac67c720139cc30684e5e704ec93fe5280bfe918db9b39031d67868c7d22197ac8a545d885961f65d1c027705c68ddf6cf0fdcb3899519e4 \\xa44577805b3ab2fc0545766b36cb48ba6434b8e12a0151e378b0a0bb8ca686183fd426069b5a9eaf57e2b4ef35f13a6f4f3a3153fbc0d185d8e3b53cfee9f4d3 \\x0000000100000001616a4a5a3e309c8bd23654db70f6da4a11d77f488043a5442482446840bc99012696fa1e60094ca10a3887b44d85568c4f096e3e973b09d056b91377d3e63ea152fed78283b33a2ad1f208c0684bbfa83979b5e042861256848c845ca61ab3d8c3e92024319b0d8a4568773cdaab389b8b59da1991911018b67bf6317c2d01bb \\x0000000100010000
-6 1 5 \\x8029661fd2ec7f47b8cc28a9bd08fda5e874643a8af215aae67da4e45a974aa51944b3b91cf8dc574db3f7e507f0d0f41dbc49093a49fc3e5720081c69e64f0a 45 \\x00000001000001008fd135282614113528016ae2d5c79ed43f8e4d51c376d2265ebd67b22e1764a92a3d7f81c08775c2ce0a7268e6679d8ae2ba5b01548174a79403dcb9455eee5870c4bdc2031bd2c246e00dbe85c09cdfd88a98d8461bdbea22355d477ad2fc769c3902dad49b637239f0798a56e67d53c4041dffe4027da609527daf5bcaeab0 \\x38f1703770edb3c59f454434371e8a0f409b89fc06e7dc611cbffbc2e1ffa3f2c0b2363bc5d394bca58f4bd72173d818417b93605bfff65397bef011ea846edd \\x0000000100000001a861b77bf19f26d453496f5954624369861ae5b8c802d289c402c2b280d5f45b00f9491913c3448ad851a0e3010c3777d46401cb1bd6e38b8a6033e558a4da4fec445f6db0053fdd440aeb4691c4ef8e671dc1503b4bc558ec641fd20077d4db51d78cbf3303f8286740f3dd6234643ff7b5ad2fcc451eb9f4cf5e1c86054817 \\x0000000100010000
-7 1 6 \\xa62c28412aecd93405fa41d8f71181974f7adf4fd65e1d3330215433449ce5de4de505e44fd113232332271d6f98c7e5d97e53a42060e87566f9137384c8590e 45 \\x00000001000001008283286c35075709835d943cdff8b4ccaad18dd098e7aa50c7ac0df27dbef274cf61bc5ec5bac68b49cc0d6956eecaafd44ba6338b97f970f286df2b6a6a0964824c5bdea7f8bc84fb58e66c3adf81182f36561222c6d0110766a923ec8c6af9227830b27da4f7d5adf21ea7443c055a718150bb80b4585b8beea7f1e460b811 \\xac5330b3a561540d59f64b2f990502fbdb40e5b4664da3d46ccf01b0890881b0f05f34f1c347a74c6121442a131c4394e32465a60baaee258ed46cf7c9a62469 \\x00000001000000011d532d0efd4983a8be9d74b30adf08441ad00cf0a5fc410e2c4ab3be4e93c90dd12b54c1d5ea092dadfcf640508b83534497345049a79f3eac087a630699ffb3076620980e900f4c6932235bd0469b7ae477bbc15ebcf886830cfa9dcec199267d43d694ce674e69b4fb7aa6e4d9eaf4ba497e46d1c0cf61f7de03df48a63712 \\x0000000100010000
-8 1 7 \\x23068705ee025b3bc7937a65175e3a0bb811a3cafca67479cad8fdc70b724a5ec230b61da668bca7457bc8fb2b32978025192569a985c15813e99100cb18580c 45 \\x00000001000001007a5ecaac18c5cd9d5fc357239b33e10e72835014486ad2ead05b1f760b4d91d4ea91ca5867a0d67e0372db9d380a5248df1fdc95c7a42f146b46e2e14e1999d073775ff0272fa1e30a64d129ee0e5a8d99460ec7902bfda595e36a4d74db7dbcb8d7ec8ddb70157b5703f735a2237d7c564cc5ab733ad772c4df6b32d33f23f1 \\x2c0cceb1d435a03efdd368cb998e5a798a5dca23764d4fa07aa50bdf57bb722b104857142403422f2a4439b9cd2d660127234ca123200604a80bd8070570a588 \\x00000001000000017123a15853e086e535e56c137232bb6032e8e6d5d63e7f27a2177b0888be88598350aa046c046199f285050835f6555b9b0dc46888e2d4450b2d878eb01cf366b879f61999280c3d933bd13469227abcb687b0725713ec41ad71c080c8724934be04a201fcd58683a41048719194384aa0c994e407a054624718cc312bd28424 \\x0000000100010000
-9 1 8 \\x25455a9dbc8e8d250293cbc0479cfe4791fbb3b0eafe7704fac5650fbfb2bd80408f090cab2b6de48d37646b7eaa5ea4fd83efd6e9193f2c8596f6c4a8e1cf07 45 \\x00000001000001001802dd4f17cbb1c3b0e55ca8b1dd218605f4fbdf27e9797e9f8e27cd62c2d07f14a0a516fc7127d8b408cdbfb25af8817384afcde755ef99b4d7ed2ed323eb104839ea924c2e10a888f3c1b10d6b239808be26b27b6f7cfd8373328455db502446d4a8b950e787f35b4ab16676883d61e65c30417dac787ea39348581e764850 \\x85f0e0be1240cba1983cc543506c6bb8735a2d0853f7082daacf7bf5b9cba3f972a2a665a2f69accf1802df568db30e82323deaccf02056262bf82451d2cf449 \\x0000000100000001a7e7663fc189befd11522d6ee5da0e492fd34c0c1b6fe23ef68446a12cccc48c09d0d10422b7f7ecd5c96bd62ad57771ac0d844f98be2f0dd698c2b505b197597c76c3655a95dbef4be4803125e76830bbcdb6f5f8b0e9e71c621f461eaa92cbb0d74dac3fdf5a2716a77d3bfba7d0dc35b55debfc5256aa87a025235ccd138e \\x0000000100010000
-10 1 9 \\x26da52a57863b47861a18f3b0edb93ff578d9cb706381c6fe0bed79321f84af252eec3f609a624d89fe5bd6e73a127dcacce12384528963459f1d2ae03a2fe0a 45 \\x00000001000001000aa9c01793cc1b5067eebc0c6110fd319bd970eea3581e16ff5dca9c0efdd1f9476427d6d914f4ad32b9a60e1376df174ff4f8eb640d70b390ea6536a74aa1010d0119f1323b93a66e2762fc4f8f1ee99be7631664b786a9c708d6c6e5bc5a77731aa8995ae46ded1ad061476e3ff7d7a09f95c50ee46cc675898ae8da0336b5 \\x5c151a8cadf4b3df2b7fb54fbd4085ba6ff4abee8f3426bd0d6dc95bd945024737f454dff91517d13c95f7094506626bd1cb9055da1fbd6b6254f5603a6cb52d \\x00000001000000013f98a4e41f9a5e29d74d13413933328e02145ddc1a6213af8a7b92cc0ad4de95cc36aa760c77dc7aba850e21a3eee8f47a2842ecff105bae8fc298e0f5ffd4474e77401b3bca73b59c47a3b49917066db0d434ca48f0472c6199193b2af46fed6c56082962a6e21d75be568f9b0ff4312cff4952bbbd82164d2eda60debf8e82 \\x0000000100010000
-11 1 10 \\xc8277985c82f99b513465c0d4e83e87f84ffa56408b929cbca41e1930ca2fe397656457c883af065f677bdf8a7e3c2f0dcf5dc023703f2f4f2218259ab9fd30c 145 \\x0000000100000100992d4ff543651c5983e7cb2920b25b51a7e79b2738953fe39e2459b0b45e73f88a56a9aa6d7e94ab8763920844c567346aa72dfb72b431a2adc212b9230cd3d7b87d1275d131787df9a7f230b94ef4a098d446a9e88fc34b3a6d4549d8faa7a3f09a16f394ea4983d945618d9f9c962aa3636962bdcf767d0fc9054aee85c1bc \\x365383b9bbe8f9230308e91dccadc22ec7c1a998baffee9a76276307e48166394cd69e33a74b62d0cfbf448ad0558da3be19d295d3c480c2f191b9db460de119 \\x00000001000000015ddeaf04595538428df596cefaca747ef3b16a534c733c3d2823de08e0a037a8f26e0563dea847d293750748832b22e26d3190148737e0ae1ecb73d91bb4e5275dae8477c87d61be53de523ea50e421bf527279ff0831813330ad960fa4f9cd177dc6e92bd8473fbd0f82cb3dd10c9fb338dd9a52566d7b29cfb61401d937ff6 \\x0000000100010000
-12 1 11 \\x2e58072126c0cfd10df2de1a6415bf56d7d97f2b16e1c459e18a07afb73b05b95b042954e43d1de64201f0f6ee69ae9846c5368790773131111734e5a16d1500 145 \\x00000001000001009498ec0025dd357781d6019b5ff1b411742109ee0f2b9698a3d0c24a89fd563346f67d05d49be420ac3dbba8ef3cab59d3d3b23d2e078e8a24448aee27cd4cb9365d674f18ba50c2cef16108d3483744165f7d95a1e68fa5db3eb14af930dcd42a1efcc8586be5bf17fe896e6e2047b17405b264dd99ff95212a89542e0c8c1b \\x37bc5098a08c9efef3b6cc15fad91a7d5a2c34759db45c0f70e67980f2d2882608e00c91fe1827e8455f2e72a0b0edcc1adf7c10587d3b581294eb72e25fba0f \\x000000010000000159d5d07084a86c7fa3a52daff4848c450317e6150ca0042ac9578cd89e22c5e19bbaba6ae76db7ca0d0813267fc026073b50f0ea0213eac38155ef65b7b9c159344433155539d522302768a4485e2d12d0d742cc649d82581519f6bd55bbe1ec34bab2a2005c48c01de3fd9d93737fc62a4db1393fd530bbfa1fab3bf5432a00 \\x0000000100010000
-13 2 0 \\xdfe4a845f5126062c35bde1c68a90d794f0b7590db0af03f8eba987835ccd00c81caafa2ffe80ca7bbf0300d10b94f0866e3c5db92ab6540365d1575b7025e07 235 \\x000000010000010015db3f4b8e13611204a7f00d09a5d610ec21fb57b67dfb0d6fb00bfdb378440078de5c138e48afb6da7862e4c24ffd4a05ff07f30da1af486497cb8f7ab38e7e6011a9b73aba51d665cd2baa76ceff3ca8fd4c73bc06463110c67b320cddf88bb9746c79fdff78cb675e43aa176b4047e13ff1c9b80a40d85899c5251293d1d2 \\x7baa3fd9fc40a860ce43b0caf89aa555756ad263968eefc6b13bba95f7c8ff514dff12dbdba3bcf69cd9783fd8144eb0d24cb6785813e56975c89d476b598eb5 \\x0000000100000001117a585e5aff929bbfd69af3747c54694ce321f5ec4299a6f38af5f058ad7f95c92af156c567b1c16264d00d9f5934d08d8ecfe8ffdfbb4d21888fadc39c6c799143017ca374441ae9f6dc8d1557b2336e1a00188a44e7ebf16834c075347a98ef34e2d49c839baadacd24d006664788dbb57e64789c937ea8c0d47b38ccac15 \\x0000000100010000
-14 2 1 \\x7ee45b4b5ab9827df44079d14409b403437a7c3baeea6aeeb68675b8a76e4069c9420d4ecc1695e0c1c98815d7169a09df25d049caa504710ebeee08781a6308 45 \\x0000000100000100a4dd31e73376c49d7ce0532ab1fe7a0b24384a761b51e05aa89da0305553727d762cfff81ff4e71a1a685d61a49231ead41d552f53c5521ea04a828d836466006391f7bf337b107394767c4698f704625e08acbbf13fa5a24d6ab5e506bdc667c0b08b5f81553fc7ba91f8a67e54de69971947405db3dd1888bc219cfcd86ce8 \\x7e83790578a7ed662bbe005f4e451a22d60b92457a9f17bb46d639bedcf50bea7e7419a6959cbf26fba3d985d735dc2b9f39e0f1b81e4f37acde471b84d92989 \\x00000001000000018bc20f8b32e0ad9485e082e05a9b33efae371678de0e670903aef555a60a0d0c3547a0a4ae1feb7b9e7bf7efd7be07c327e65e854790d0d6881f3666d0de98723e873873639f22c4b9e7a77fd3eb492c88492246ec43e6e02879e8aa421b32492f1781efe2b258711e8133295f1f381ba607461d3d0b8e9a09f1cfed0495cb63 \\x0000000100010000
-15 2 2 \\x096ef8aff103081ac04c9368779f95898f99221b989d4677469c2ca2f2251b9f6092c05a90ae20fd4b648f0a8a7db1699f883e622e12da667da8b6475b1f2302 45 \\x0000000100000100b10016edf7f7a0e8043b8ef08dc6dbacdb30bd13e6d742603f511ea08f093f84fb1ef8d65bf3527a9a778d7ba9b352d9156e0e60742ea5e2a8d27015343dc505dbcbc8792cc96362af814ce5f8cd82ce641dbeede32f46a1e2c9e21100c825282d534bfe0450cb4624213c504242a2beaf3633f52234ed6933372886bf980f3c \\x167cd17265f812552104d7da51b714b5b7d437e1fed09e3e24e65cd59eb04cdad391f4f3e838c6ea6ea419eae503ab4a3fa326bd6bdf3add0118371521521dc6 \\x0000000100000001ab21e2136eeac67f359fba5580cd00d37d72f107250fefc8d5a6e425686d8c69b1ac8131af58bdad9ca1f6295fba34e1088a124e0c8cdff1cba9259eef9fec23e93ff30b68ad17b1d9a429abf21d7e8c3c86d485277b1e06544660008a40554350b8848ab90b7be32aee52a0a1fa2273be72a56d9ed1a6d48d20c840e014b890 \\x0000000100010000
-16 2 3 \\xc1568703de609c71596b5c9f31e3763488ef7cdc16d657678efbeb1b30c7b65122e56c00a4b7971897a642aa542d8b2ef0166604be61259008f5f0e2cf439207 45 \\x000000010000010052a5067cba4f4f17d751497a0217d16284f184af5172138d6e9f80342fd2ca0a5f0b7fee074a32db6ac4d565a7fa26c057651bf05a3db8989a290f407a81c3737047e19869bbf8da6f4510602a75a47ea6955365c978bf95d8c5d3b537dead42914f5cdd288b3875586fdfde27c9e4ffb5389ecc48064caad3177c9e2b0ae8b4 \\x293f76951fe21f9fb7fcdbdcab9524a4707ebf10ff3cb20dea1103f9cad1c627768a6ba8afb4ac67a32c3cf0fa312257c74f6f8924ecd1e30dc76efccf6dfa96 \\x00000001000000017bf33709ab38945790ecf8fd4007eb618f2c219ce3638508d16e139b38f99576567af6f4845076343074dd5659ecf846952dc5a2673c218412314509ccb057f36066450f7764498a65b50691c5ce0b166de462e717b1ce661080f307fc8b18e571a3fbed4b0eaac41b57c783083b1f212d629162c66293b59dfe46d2b71ec307 \\x0000000100010000
-17 2 4 \\xfdfe84da6f6aeb9d1d6ab5fa38937105b5da3d3bf14262ba2095c470c625e116c83d5f032f01110800118c799d48577598c17420aadf9e2ac12d410bb37b1f02 45 \\x00000001000001003199ec5895c65c5a896fb5096fa7903bd681dc856979e18ae7db08c9461bc9b35446ae958f32e3709b53aa94b14a7128f8e43759e14189524f6422c26744aa4ed97ec6e2b9a49df494e338d7da7ee7b73b9486f55218eb330c36757c2bce51046db4c25ba9f0a352836c8f7918f26fb9175bd4e5d81fb21e93e3887ce4577e66 \\xfc9df5d159a3854dcf5793a3799b3ef7f515d5acd1a31e492575ad72c6814f3ed0d5f0e453c75a75219462eef6504e35b819979d58b0ed51e0f0221f8b6e7ab9 \\x00000001000000017d36e2b112980afef2ba690a14b4debe6a9b4caa6a861ef8e65e8f26dd0d8058a385e45505ac85c6c1225dd8546b8429b20220a692336de10cb94e050d36951bc86169122b1b3a08edcdb58ea147bfa7e3fef3111008a2d510d59f2db2a6523e44d20dde569cd1fd2bd670d7864e484edc3889a42c6b1b9a3bd6980ba0b67616 \\x0000000100010000
-18 2 5 \\x1b7b60bffda96681f49ac35297fe4f046e907b6ab6ee23e092a1a8794ecd9ce048cf9b02655e7493a4fd1c491e01568a8d4106d9027b1def6a25545bceb25003 45 \\x0000000100000100748fd0756093a0be093e1ec8cb438dff0b1ee26db2fe7885c75dfa4d466915b35ed50a50200c7674cb734cb774962b6908b44909f513f4a3f180bd49368084a56ee4e0263ac93af654440aee912c92c558631d3bfb16e18aee3e4a109d5888b920c1bd4b80731e1dd21e404c96b28cd02eb60d87817743ae70f52bc7260d0c5f \\x1a9d27050f9508a1a1410f32f54f3eec83aa7e874262b60b8e3deceab1cee46ab80245efa2e06095040faf2f3ddaa4a20daf460c1373eadcd3054d511ce0ba25 \\x00000001000000011f817425456ed2444c2c39fb15a58947d212edcf05b31a0a7d6c9ea11949d34407bb43c77be83faf5ce3254e49541180fd71cd2200cbc265b86e381687022ce0794809f498271488f356cc70dc87af80ff4ec6cba4056e40ce9f4c9a81ee172e4950e8e74c9e0f70dd949d0a005dc781905f0bbf46ca794deb89bfe6cb57c3d4 \\x0000000100010000
-19 2 6 \\xe8d2a9d8ea6b40cb08a5b581fc72a2615ad93e712e45f2934839d7b9d4fb800431edaab8c87ce7fdb7690958ce93222193be44bd7cb8bd977db72ef0fab83505 45 \\x0000000100000100515b6dc148d24930d47ddd772be06c6db7a497bca21d997fcb75003791db1f0618ab3c0b9f7d80b92536541f25a805f2796c151d3c26707a8811070762388de235bb412c034c6568d95c82b94c9f9517fcc4fb7ebf94ec42fb2d0c626ef109ef6f7e3276e5b8982f0ebb27fac7ec82d0d091ad7a1b8fd9f570928fc36f48f141 \\xd45b7dd2d9681123fc3f86f3698478436d19d4f4d598e1acab938536e8bae968d2aa8a61a75d72d0d86697ce089af18c5cc087457a7c16d87006fe7e9510b997 \\x000000010000000196e540a858c244c70c2ee72afe8966d929a2cd5f2f3c2c61c2f4a5695b57461b17cef39e047ed276be85eb0654efe7a4ca34e877f9850f6290732b8e916d728854e4aee3af8de2b26e2e59e173285fdf0a6c391e3334a6eba94075dbe73638e9fb867da833beebb46a94829554e55a8aacd5175117e3f13647ba516ffa828524 \\x0000000100010000
-20 2 7 \\x5762745f3cf8b882a8c0fa11ca609f35b01a319f08d36223c85ed4de483dd86dc17d53c13b1528ac65178147e0a63f23ba2a93e5b8875d17bc7736233ea5230d 45 \\x000000010000010046cb6534af59af4a40c182679635aa5f362ed0ae015482fe6521c71c52673d530b23afbf3bf27a4291d4ea6ff8a1664934200af5a4628e89826a08db3da7a533e113ae7317e9a8afaee4ef26146cdda5de090a93488c41a18284156dd545258b80877bfc16cf66bcbd67fd075743b4dae5d55406f71ef7343620953cb61e3915 \\x13cbef26c16ad683a07dca5d22f65b16c0d8b526bb14107b21d58858cd8d62188ddfa54400d0967456f845e306df7d50952c0dd361eec91d6958bf5a5de5160f \\x000000010000000189c5d9eaac94878f16291e5320307e6f69b2e29d3a8aba244436e4920097bb502aa086c8f8e666169c80b76188ec57a87d3aa20ca1c312cda82520fca9de33d2b181a4686439bc2a869dd2b907d9d8536fabb5563d1911b83d03aeaf86b05fd5947965fd79e12c856d37dee92ac94f00cce5161f49e36f27b1640387fb339e9a \\x0000000100010000
-21 2 8 \\xb3dc3b4829bb480e3763c02f07f53ab2b10f532b8cb7361a8889ec1425203403895020a698cc68efde2b651d9fb6ce5292c0b281c73178b70887c48e9b59e90b 45 \\x00000001000001008159b5b09a06da283c431e503b520f62896aa91820199bdc83bb2b63bfd757aee2dc0519abaeef14fff9defe71461bbf118e778952304a68bcd20395e71935df7eec7ba15d87cfe0751ae945efbf1981de3fdb88f7aecb0dcd5ddd1a18bcc01ff8c3f7999900c42621e126bd1576b40e42396f3f9f135058686f9aba239fcdda \\xa04a741196a194ef279696c037fea9da87746331f50d656e98f3382423b2d22b51cbeaabac5151a7a725bd4acea5002941b917a026afbdd0a3be45097bde9098 \\x00000001000000012e147738e56debdc65a3cc4dbde25cdfc3c7fb61060557d96275a6634f0b07b3834e344e1ae4a1afa3a9cc2e631073a2f34e5cc21a154e61cc426f934120614b2de15b18b959e4ce3d5efdda7fc700a6f0f10e9944e6fdc6fa4269e511f830c1fdbcecd5530d174e7b1266e8cae5030b4ffa371b5a552bbed8acf27307ad38 \\x0000000100010000
-22 2 9 \\x299e50501e120ab617fb066c5a1f7af406cf7b662ffde992450365ece92ad65319780a1a46dffe33afd9b11fc11151bd13eb909ecfc3c4a8798d5182a5fc9d0a 145 \\x00000001000001007c74f7499d6a6f2a492f08b533f9440c37b1b848521dd65d0b3f90ba9b0e3e8b27a541f1efcebf25f0f22305945db3485ff4f5dafad506bbe36c42afe251acdd827a166db82ad1af84422be1ea21edc96643c06d210bd001f3676eb7c1b7816270ac173519dd752d523ee906021058ba811e04be3526cece8b750dd265b28061 \\x84071be50887a3281f4b504a3bd959341c2320ed1b74e75be8c543f8905e4da1e2e2abe71b94a5df8ba005849836c11acf8dee0bda86afd89392cae97014020b \\x0000000100000001385337621e9f1aec2c4934e314e86d0589a4e2fcb8a80b5d41dc81264e6d7a972fd348022c64e6dad22a107e7c9ed6303953fb1abd0c6feafeefa774ca077b641a16818164758ef4b33edb68d2db5e169191e672d9c9de9bd5e1779a59090223f2912de7284b03a5f4f0d4cae315f3ea5f9d4edaf4cc924e40ac5bc1fe1f410e \\x0000000100010000
-23 2 10 \\x3c8e85a7b59937ebea0843a80ccb9fe4def3591708edf9310cfb8f4621b06eb2febe478135f731060704ba767d2dcabb2bd170df68ad813fa367ab95cfc38b0e 145 \\x0000000100000100a97ce5d9c17dae9ce74b18c16b95a1b87bcc133e399d985c527244b4f5a0b7d0b7fee626f6ec01f4d8f11570f5e8ed86a526bc3a426357abc32fce46a7b2a9a5195ea979798237122fb636e16292fa1a8dbad003898b571815a26d4bace8960950f5898b941d4cf455ea8c8efa6f8f5fc233beb4679068edfeb33d187fe6b299 \\xf5a0846c05597c409f4eb72d0a84f8756823899ba1038e945022c98b81034dbabadfbe1d3f09b6e059d1098f22baf358bc09b29c48664c87aed31ff9bfeff162 \\x00000001000000018c6bc8de17e1604cdfde5ea652a6cf82faaf0f43a100d785510d235e1a6c2b83269513e9c4e2dea22195f8c44de3bbf8c30611846c00ec9abc343a393ad062f210a2e5718dd0c4d8bca735b1e59f21163e32bdc8eb830c42d854cad77a5d85943abec6ec5880403a02bcaa90b11e1c46b60fed91427fa967e847753af8ae15f9 \\x0000000100010000
-24 2 11 \\xa112af33f7de699f63675c578358a72b5ba355e91a5bb981b1278b2f63c152fa51f1d2f85d24da11d210817ac74d8aeae32395637a8a23962ef0e538fd44330f 145 \\x000000010000010001833b95e8091d32d39d85469b5f84339614bed029537f0ba2b3cb016a10bf40da9b4767ad0367c6610ddfac6a12b9a34772217704f5b9c586522231c78cb28053ca2f7b00a3f841c2a7ef1a23b1552c2eb98570c67bbe96031f50e0f2941bbb7fcc60cf326f02e67f4c81b28e14a773fe8ec0bb48e6e5589d62cb14ab03d5b8 \\xf7306226b8bcd17d048e0694e3d8730a5166d43daa52b1e2afcd44f627d5232a92e618d9984b02cc7d96f9e6e76941808ea6a87dd3e4237c394746b2b82e6341 \\x000000010000000155dd77fb900fa7378e26e93be69d1fac7a8328497a8b7c9086bc8d8cf228c1f299d00ce1c3169738b66eb850813b4a717aba58e83bcb86669c55efc17e7a1687607bfad0f983511d7b072914b6c8a0246a5a7efc48c786f2f53257ca9e8eacfe40014a00913c743c9e4f027032d474e30466263e5f987b68fce1ccfe915a0aa0 \\x0000000100010000
-25 3 0 \\x4287d29c4563c8d732470d8354440e40c936d0ffbee517d9aa76c914cfeab563c63c8133da9e4dbfd69b19d6f77c1ce018add66a94b1408e1576a3d02d551501 393 \\x0000000100000100c91d509f553a25187f87e227d416a02497870dbee0a3d54fac838bad3fa52f005beae495cf7330084c5fd824dae61c3a234f196d3c2632bbfa7592b88b0f6d08cec916794b8aee0abd4af9bcf6e19b751c29af733a42488e9fae99726739d9ca1e24d0347b52e6de67d427c4d3919cc2303afdce48c6e5df173792bed9872847 \\x90f459c526f21530364a828f0deb9fda7d6559d1bde17927139723538116572d7c6436968317a73e9dc79f4ddf5d81faa5d93cd56f9b8d6b138aa3edc3be36f6 \\x00000001000000017cd2ca97eb075bd39c3cdee8624134b6415d1053e8a1f56ef4f3d8d35ea278cebe93b79be50d3596cce622c194b6b12136ee88ff7d99706ff5d95e86e9d4af298536ea44bb1ec96274329628b2e569551170117423243e99b9f94009321d716713e452bf000a59213a33e922f7334dcbbc7a1addf539afb8f394a7c0c05021dc \\x0000000100010000
-26 3 1 \\xffc85349aae5dfa0befea5ec60edd0e8e5a21a40aa1a95bdf7701f09f7281383c9ad037ff925bc044732f3f952d35da806e3acf53a97357bd41d145390ee590a 45 \\x0000000100000100ab8a025dcef1c598aa21739a49b0be005297214d2e7e832c719f7f54e3076104e35a58aa85bbe267a122a37251eb4743e0dcdf22a3ded81c885af04fd95720f2d3b9ffb31fd8a3418b88816173b0855feccc266b5d3f1102c07410c83b4fe716999ca181abd577f92794816d7ec89cf912fb12cc59887516373021ffe5516b3e \\xbd7df3b54d992492068623db872786edc9541f1dcb3c73800da8071e0b8553df9608db99d517f4bf1359e263033528248436b8cc29a7a4975e975b6ef09cfcff \\x000000010000000140116c1b6005ac1e492d0c67ab76767a2bbc600f3f95a74a7923c2760fa30d7cac00e8a67568dbfa8a40bd9e66a116b943a9a4b9e7078427bf1be73cbb1e8cffbec8a080187eb5c32882e5cd7fec8e023899bd0e9f5704008853ffef0bdbae4eae5c0675197989e581a882f699c3c0d8c295751cc9e310746e3b4d41382ac10e \\x0000000100010000
-27 3 2 \\x98ebfaccecef5609ee754b6fe38c27fb131d8e70c056e35e99d0a94aaac6fb18c7a7fb13d428e9a3230e341048c93f08891b579fe63c38ff7446ec314a729409 45 \\x000000010000010023dc57aae00d04f2d6e7c7a8ae18651eb8b7aa8de9502832069566ca78665d82e675f376837d4e71ccb74af1b8737bbe5d5690be924e87a25fe87ae92b873ca7a9fe050564588155b012961e70dc5968d72660b5dd738bf918282addcd7f95fd7b281b901540a19020a36e180593b3dbf4f4ba90cb4ffe39f4c874bb85f55f04 \\xc676c05522b1fa1ac49f618ea4f4c65abf82b1d77bcdea664904122a38a68e3d838bb35d009ee024902c8f558406a71605366f800b6f383fb5fe811e74934fdc \\x0000000100000001358cb01bd11cc275fd4ca67f6df4bc400dc1d932d2b61dccd8347b6efe079ec6380e0279c14923350bdd4fb8e32a8cbeb0f224dd3608e3e14f40e59b2a31fc7f2039769e22ccaf524f5cbfb5ac82f18e955b4d99b52321e35c3a49efcf264a48793f112717199ce03bff4b0732d61baf6d1a20c388bfe1337a5fdac1cde7a2c6 \\x0000000100010000
-28 3 3 \\xa6c4ad8a55f0faa049b02b1af027bb915ca63318c726ccb3e5702efcc03a36e8849213674077183c92ba044276fd98041eefdb25cbfe619089b014c96777de0a 45 \\x000000010000010097fd09dfe1f96b505ef708b74c3ac5388db4b9246b1abfa279109eae4439279c523ebe49aa1305678862a53f790f91cbec6862877acbd2865a9182624d87450ffbf8f4a3d8146d003ddc0bbaf9183124361bc73c256d53edacb0cb23f46752fc0456ec8c175367e5a47fb5e14426f693e120c632174526e0a263df0f794666b3 \\xce7b2b1c04bf293e8ac9b5feadcb2e275397ffc54f17a2c64b139ed3a2bd18fbeeaba75646842de3ab381f5a92bedbe497d2daaab98b949798c9bbea513d705d \\x0000000100000001aad43ae985f804fa607e0990f1193eb1ae75fc5623197a8038bda7e2dc19285825722844369d3e3c5784ef76d628010d411f4782122bcca33f78d2f948f13cea196736688c71ef76f28e6b2708b3fa678b8aa5bade83b0292c8881d8a1bf196cbc48d4d32bed799107fa6353d14be5e7f8b4a7278c937012f590e76a46eccae6 \\x0000000100010000
-29 3 4 \\xce09c5a53ed43215de3e09a3ee39b3e3835ac3d1c31719086158fdea7046f4805d2a4206d0a62bba50bbef3035aa69d2d22e27aedceec61660d223c9271aa403 45 \\x00000001000001002d129a0717ce98c376bcf978211b17c9153371344eb21d94d214e257572adca8a4e015d8a07dca7bc4df99ccc0ab8996a5e1914b7cec0a397cfced5fbbe08fa692cefb1f8f7c9329adecf0a85131887f266803eb35b7871b9fb0945ee3148653e691e82c8fb71f417d9e5ce11c305ad5f4ddcfa03e4491a5cdf08256e9caad05 \\xedbc3c5f54a916877963ed1ac20283c5073851503dd050e8c6f99bfad603d21a2cd39d895b2fdece001c56b2829e01782778d2c6024a2009ddcd5b35d09586c2 \\x00000001000000018ae2b2f74b85406a6645ed3a4c5231984a72b1ccf39d281b32594460f4f86baf3296951cdd401bcd59611478996916adbd057a03ca3295c2c95aab1b832c9816450a309c2bae1e772a81fda6a1f04449276456f3dd13b2abc86ac765653e0412b317370ccbbb7892c95158767f253a75b881aeac75f2603bd203807e235d7ff9 \\x0000000100010000
-30 3 5 \\x28f882118955ab2684f63c3c2f359be94c7a4917ff7142f9382a261aeda3972de9d5c997c1b11a7238c197aa961f97f79ef3898705400463bb2a349f9e8b9206 45 \\x000000010000010065bb0d760b22264a4c44b7229ba5e457f186f7c7b041b3977607e7151d74c93043be6aac0b5a0249d295c8f9783cf8a2e2ac791d58a86b23cb6d3412b1ea6b76d529eb2b6b8f5f7fc02d074eb5c99e34bc4af399a76e60626c575e54447c4486947328a2f1184ed304cf589907611c795e9dcdc047536c85831e9d4a49d977c8 \\x3437f776358692b5cefe1eb04e99d47677ad0f36c9c31bde9c367fca9c9df5bb42c0c584175671a55b8214fa529d99d93074247112c5f1c863e4aba10a941a69 \\x000000010000000138a0dbcce423e5097ca41290401e106051ed40d48c0718b9a1413aa37eb07be09d5e1b79f641d64970210782271891193301393aba544428f0f74822ee2e5e4db577b9784408b347cf3ebc7432a00fd280871a16a986b8e444412aecee3501c41a49443c0f5fd6615b988e66f158cad65fa5d16cccf606b9d707ba87e28cb635 \\x0000000100010000
-31 3 6 \\x028a863ca7c7647e7d67727415768337e5954cde2fa9abdfd8cd42677d14d7ae18870283a0074c526c5aa488e2be27c41692c36888a523bc6291116be563520c 45 \\x0000000100000100379eeb247f3550d807c554c3116d47135b536f03a55c6ab8402c339d6e43a42155a1800ed6e8da2e0931f6991ecde0459baa9b1c486765c481302a5415769ddaedba6dc57b050d8fd8883b2f302368cbe7e39e4e7a31dd813c56b2cdc1b916dc5d6bf29af1542ce8ca4dc351e00b1a98762679934a9b28531da4f8e3c1d85895 \\x8bf391b76706df44b2114617335d6ef3431224b7fba09076e7773482cb25451528782c3bc612c10c0c969f6e92a531475893e6d53dbe654fa8e2d05867639a6e \\x0000000100000001782d6aad7045cf31f3bbfdddd7f3b232b6c91f8ef8d5839ef4ad280bf88f57eb344ed7c64da5f9a8d1728f5708a7224dcf8389433ce6e03705c89fc3feaccbba24b2b912ab73ef0e2ef38b03110e2b748d32eb5f058a971f80fb9574f671f593b8e6ac2e66efc09f7415e0b2662c29a6e53a527a204963e144e15618f320b8dc \\x0000000100010000
-32 3 7 \\xc4b724d126ee14b16358e8ab61030d8bdc631fd90472ea6c1538ae37577f2203b3f8451e29c40473a1a6fadd9b8021023a0796912f0abcfa9ff48f2eede85e05 45 \\x00000001000001002746bd111be97bd8e30a1a75b79e400b31e8aee2b51b977ecbdd407f3dc9b69660742278006044e6e5778c0cd4f1a3ab1223f2acc6bbb930bd426bee7c505402eff070ceb6936ff52a4629a1488fbad9d3aaa9a59eb3e0ad45cf1b102e4c0ca9cd76368669d49c6984445544264f8ce45fbd2aea6230632e39913216e87f3db2 \\x07ada5b209f3284ee6c0e1f79e9125c29bc1b6389bf7c8d0331e9bed35922230cd7aec9cd97ad7191a5ee95f9c2405926fbff71460972890ca9f0b82c9defd8d \\x000000010000000107eba992e6996cfc3d9494cfa0572bf1c212f31da76933ad66f9f88204052c902cf51fbb42cb8928177c024f67623c3961f314a2ee1c44064e61570b862e7bb560f624b51fa337f36a27a66db4c3fd5f04b0b331565d5ae081c9808a138efb6affc50615a2100c858f6c5a574acc897a980c6fbdc41167833a823b27a2e30292 \\x0000000100010000
-33 3 8 \\xef0e97afdca65aa3f81ebb98abeab6e3e36e2a6acc13714171df76384dcccbfb884974e14154fdc60c2674845a3291af6ee50511851b90007fbddd21bcf8820e 45 \\x00000001000001000369e7f810a23c61d43ee90d24d2efab238ee6716e29a0affe4d35b4378a16bb40c36de10bd1d48bc4f88427755564d3a32d1e4d6a8abceb003b8625658d77e60162c0a19f12669e5695d08dec7e98b419e8a4eec47320189191127b05dc8e067ebc4494ee37f19810763fdfc5dd4405fdaa19abe644cc9a0cdad9b51da3fc52 \\xb39cd051fc3cb77aadd701cebdfb4744b7b242baf365f13468e0a27ecd04d494ccaf16a62d962f4e85ce46f839e2c243f59cb638253dffe9f34be564ecd36222 \\x00000001000000017954fecb0de70aecde26d0d53878ac864a09a3f145ad926c3e29f1c9bfc575270125620067f0bc72a4e74fa7f9d1275aa349cc0a68a97ce31a1dab52288fc53a898b83961992b40da8f382c60ff0ce2fb885c5af29f9d4a80d54fd5eb7ccf09122066aa6b918836ef8693d25c64503ba5443570f66464677eb581ec1a847f5bf \\x0000000100010000
-34 3 9 \\xa0028e8c119575fc94c740c3ecdc3f0948211ecf4eb03363d5b504061d4cc00eb9f1711472f526ec8eb39ca7403748a4066b8639a34c8394a6ea42506b70ad00 145 \\x0000000100000100599aa7d96bdbe86c449f51eb1f700e2d61980d52d46f68874d3bd1662755cb16400d59341a6e89e73777e7b072bf052d34f7f69cf3b9fa11dfe91d6b52cf9ee332bcd962ddb9fae11d7843d4a72df80f666c8013354f46e92de1a2cc569f185f42cf1f2415d0f4052e21e0c761e76578a611356524b4b87d2dc9fe1920748a42 \\x69a3288985851e578ff43e91ae6d007dd980a4e80bb5e4716c047cb30bde50b0d0884960c3de347efee4a1f638734e04397f79e3e5d6409fd191f065f35de3b9 \\x00000001000000016fe4a757035f9f375816804c4e8b7336ec72fe2ef43fd46d6f2fa3cb8c8d9401a5409869fc204e01bfc3b244d86f4308155608568128d87fa43337a5574127c83ee85d04fa1ae23f248b24f1463631ba7a2e526b1ddd8be748adfca9d0ce198127d258bbb08e5bf72b5cc1b3a3671fd7acf7a2a0e0aa5af1ac3836cd51e823ea \\x0000000100010000
-35 3 10 \\x42d5c337e59875eb2999e45c739f3ee7985a89dd1d27271aad6eb3fb76ff560ab36d1a22aac648f6fcef3c54b85c9d8537592dda9a30aaad67c396e15b7a9405 145 \\x00000001000001007a02d60ad8735a90015925c03a1520c44b8be454c804ff223a2151f82ee359fed86b3d6d144434cbc1e47e3572a403f238775eed5fb85ec0c941109351bc91ada922edc3a16a593879591df2c3ec1af02dc92d72c9db4a02a964f1e16383b2f1bb3d578c4d9f6048221b8db3cfcfe86ea6f90cf9acbce77531c788113088ee53 \\xeb0fce5b693f6f726d140ef972ec80919db3923d61a71df6d261bfecb9aaa127e97af6d59f07c44adf9d4c7d370c39fdeb707f031143a216e3e9978450325a89 \\x00000001000000015e2424156b227bb1aa5d9177b6b0f1e68963bd7de701c340f312912bbea33661b6fa49f356b17d90c8d514d8ffe0fc0968d9e5ea5954bd0022c529c8738a786b2ad19e51b21cff76b76ae5bc8f38508ba70b309c7899e8a0fe7982d0c10a4bee958ab9d1e0eb27d6c00cf2c79939dd138f66a37971e6569fa735be3ad3745c72 \\x0000000100010000
-36 3 11 \\x06e33c6067b450b3767b5b3a14a0f61df17b20a6a7f0bbb29438b388949efa50a92d77accadb474fef6b5988f8ddea59f6ad0fb661d13a84761731a2a14ec203 145 \\x000000010000010050caabc22ab330307d95d3135d22bd8913b30fe6c7d2d21822f616ab31720f1cd28e6e69f79f3bbba95d867943fa70c1b8a52fba30755ea0019707a9464b266fb7d9319a0b5e0f6f0875f4ec7d65cc56491d73cad860fc418859f41ea538fee65f61d1a31609191cc3458a2c227264585f00d3104a5d338328a2b8e7c3f2f041 \\xeeb4f593236cab2483f82489a0c0c8764610ccddfcaf303acca0b2ce1aadbbe99a40f66a53754936a60785bb7e603dcbf69fcc6b6e11a59a2c6e635611f61aba \\x00000001000000015d5eed8c5e29acd2c677cec2dc8c734aa901c09152ea89e289db3fd83811fc5fdb8f79816bf7f17de46dcba2b2075012727a15d114bc67cd53e06798aded17ae5c724c5c3852732568403c4f59e58d0b57f3f9faf93785500b07cd0b099ca2aa8a67020b9b36fc0aa4659dd2a6e1396d21992d31cc2e8e1fe1db513bec567bb4 \\x0000000100010000
-37 4 0 \\x752a0cd258e5c8a49ee9dc8867adad72af9ea9e58806e24ba21ab21c701f5bc421cd4e8127f594de72dd844e22da072ad8e7d4f3e51372205f8e45c493b8c40e 144 \\x0000000100000100ad42e15fb6c6d6646aa618005a5df1926df8b1f4e8e2fb2fab50e34f9669c442bdd5a029299cb0d33327fbc1b55f56f4df1f2c5e0645196c4476a0d20df7e6645a0ac49589f5173169a838453021966b3cf96a81281a92a4b9956980e5443f314b166743aff832d7c89214719f71bc53f1c594d30b83c3a076fb3d65216d9746 \\xcb90901d624bfed1814294abcf2606ee5813e0e81347aff5dd5eda0109018c8f4f1c57606f5532bf3bdbc47e0b152aca78518485741315cabb44158e5fafcaca \\x0000000100000001b9f82726cb9c463b385cf9ebd9cf77cb87c6c41ff5c1b3121062880a210e25d4d97aa08226c3ae2c80ea309ff1b1f51c3402a334e881828306ca2287edd79e8bf285f0f27116a15ad381670af741821bd4f9fc930eb6251814a08e1004be74907ec0bc1ec6b5e83a6396b36fb6384f93f2309119c55c6403476125fc2909ca15 \\x0000000100010000
-38 4 1 \\x8938736262e1d4fc15c949352c17989c3dd840684045c20aecb6f50b4ff35b586c63a63390181a915b9334404363c84d3eaaae4517933946dff623d7f88f4202 45 \\x00000001000001002108e5f5969b63fc20adc326676db8cb984d206779bd8a3a376b1513062f92e2ac85cd289df0dbaebdc69f5b4e385e41d1aeeb1a4f1318b474c98c6d100ad6c69b54ed01ec905f02c1b3a8b59fef8a492547441a1b1cf9e0e71fa9921f32abf2115c23654461473f64e76b2b8f07f9d4b18caa03bd1f8a0fa13c420446a97a9f \\xf5509fe82f59fc1283eff93fee560c4dd5ba6a7fdb931f8c48065b457af6df95fa8495122111272ee06d0a5b361feaaa240e57f753c7f0c6d2a99a469c0dd67d \\x0000000100000001704509d91ddd3e1547a307c2c8813a09d8f464159752b5e87c72c35229a0aa9f6a841fa1e0bb3a3ec664c1f7cd3d2f6e962bf5ee4138ba87b79e40368734576ad824a08a9bb887686055859c68f4db253770f74379f86a1e43147c650f549707e82a0740ce775ebb551f0d13730e2b1707e9c7974d3b878a480773d6a45ca163 \\x0000000100010000
-39 4 2 \\x140d227aed535230cda868439b79b947af2b2a109b0fc658b36a7cc58ba70cfa0fa6e4eefe585c9a0163ae7874a6b626b2be875cb36596a9ec5287b554781f04 45 \\x000000010000010075cc4e93b7da1cfb6bd4392804b8e10e23640aa4a07e2769eb33954d80db672d6a9e1812ebe9abc7a2be57d62464c24c190f4757216e8c60b06d4887c55d626a33f48f7c5175fb11ffca24f8f9b31c70513bdd7260194392db983304048fd97a55fde7dcaa0cebc87c6bd0229b51fb7358b53b0e73395a2af26379f6a6296d90 \\xdbd1f7041b177363aa89d819116b72ac05314950a1f95440b0427d8322385649a49a9b575c2e06a148be8f04fb94fc72015f94c43c6ef89c0fa0f209cb777bc3 \\x0000000100000001a4480ac3185889176d5cf33086e293ac3326579aef6f7504e855d1980175f7e9e80f44770ec78503e6052e380669016a30b359768886bd928a946718dacce660c5a03d435da37a1ec407095451e8320c1d8f53a6023ea6f346abd0d9766f8c45de8632f7f5a59df3ed73f250161f5167a7d33e0e8e5cd795200731f4ea4f3f0c \\x0000000100010000
-40 4 3 \\x03bf49e7f11e9b032aa459a3361f202b41c88b17e3fa9cae3e64b5c5c3c688550532d39ba9d41afdd2014edf5e73135069f744b3b15d93d77eb95285ca034f08 45 \\x00000001000001001f93797958a0eb3b7dcbcc57b0af41a21424ac3749e0a555d67fa34e994f556fb19feee32576049209b2781c126cd04b997fc862605f6bac76564842a4e8e18d51c216a1b946428aacae5eaff8f6dd7cc3a10b4fec3eb6882fb8af557777e2f3624c9e2dc7b0ffe6258cfc20f872a4a613aa7915077e7a7423e502852aa57401 \\xa6131b57b688815566fdc5f01f67f73f3d8483eeed255bfbfb72fdc436a3db2c4282554e0f7377d4500d489052f0f219c3c5d83de10cfb02d6a11e675a74161f \\x0000000100000001b9a419c30f01bfd198a6edd7432e4568daa39ca08ef3ef61b9aad813a86511cd5116f7332a806c0cbea5dc06960477ee5abf318aedee4166c86ea82857088c9ef21ddd252bc468ea19802cd5337c561a42efd1906dd1c41b7f729cfe70500575ea771b8f254a42cf1e5e210aa87fce8c7887c5ac77f615cf0f66bbe73b75c5ec \\x0000000100010000
-41 4 4 \\x699c8d9e30167738525d5ad7ed0929d0ec9d3fb40d3181289a79ca5073920b2405cd87f75201acaeabec594c43ae6fa9953a7eca45d41f68619515b836c3bc06 45 \\x00000001000001006d23d5c7199953773402012eea1808b974bd226160d10082105816df7f8ab41fe1d3fdcb1aa1abe94fb5a0f26f4bacef9d9e7b180ed5c06daeb0d3880f8de9575a48fc6e16548be07b05a85ee0e216980a2cb90f9c6819d15705353c96378c8a642d13630056e1b2342418138a61a3a27f83db70ef115d60a35e1a7ebae29de9 \\xa02248ff8116745859f71b13d1730a864468dc95d35966c9f0357485cb8c9e3f66e04f03a4717deee94faa8e31e11fa691a86b5e99ee5a4fbc374fa6d971c65b \\x00000001000000018fc010f27b780f77a8f9f1508d3f35a7068553c4b8101ae49416fda1a684cf6330732340d96bb627e9526f90c56750082ec71c841684a5061ebcedb8ec7e0708e8186b06f529b9aa5dfde1c0916cc8b49915161f1e09bcc34764a79ad76541ede4d328ad787108c48552f88adb4373ee2143118e24f48c1a7e19e7f4468d90bb \\x0000000100010000
-42 4 5 \\xe65eba65abd753daf428bda7cf6e1a6184fbe132a819f6d80eea1a9d888f6a26ffe07a6b7dbef37b02ebfbb37be723419ee42474a076d687ed058ac67dd0010b 45 \\x0000000100000100735a910178eb783a5bb08032eef0bf4bf5aaea9029e2dd7fb2598e8a85ac1f537b5569041efe4a116854a4a6dcd6d8affe29d085e0a7c68e115adb8a9bbd9ef2d7b3b7632825102f221ebc779d89cb4432452a6115b4d0a729cf308da10fc6f8fd512e124190608f5cdcff61bf8d2d01a96caa66447f23121eaf7608ff26e2 \\xce7fb3c06db04316750e1deff45383863481ad2855736487f8d5863ca6330c39c8745b4afecc3759f60192693fe8ef763cc0e039246e7080b434e893a14e3ba1 \\x0000000100000001370f91d72ab43d488c5b13d32b2b4167e5037f0a588a19816476ca50791391aed98953b0f614e3c2fddb50a763a6836cd10ac19934be1695c1f6c636b45f8bbfcfdc5b7cfa9ae66cb8b7fe577ff3d16693d68b25986987e9c31da0266d34cdf660bb0603efe0164f722ca5981b710e26d1ac96686ef53ace0d8c4e39bce5c512 \\x0000000100010000
-43 4 6 \\x8467c0736162821eec350fb4c3494f38bbced73e62288b9b4e714af0d3e713ba6cfe69a437d1f82030d5f6c68c7d04c07555fca18453552db191345c713ff706 45 \\x0000000100000100718699a1b083f5b6d481665b957575ff763dcf52ac3b1b638dbb3b744406ad418726726b40ac270053be9187f65e1c1ec09e515ddd0aebe047a64c39e7f44d1b2fe3bdd9307ea95ad9ba5868ba6e0552ec0958f7705bd271d3be4f2e3539fb826e5462abb059d4107735829b1616a69b79aec2936c64daac155a8c1aaa2a1156 \\x8c9d0853cf022c2a8956ffb4304f54cf19b8b9cf22ee818818b8f214bea699e7758a8c816b095c093445865c10162b735390f24b152e3e7b8e510606b1abe002 \\x00000001000000017472e94cb109043175dddab7e53ed88a06a2b0257079f3ee091aa6f3705d54daa5772b14d757a220f9ffa8c75279d2eec753f0e02b08666f46e96e2e8ce0f0bb2eb3fba50b96fad31d9831637e528187d4e7499453e001f226e3ce7bcd86395df3571eaac887a49f6a2c3ad15c8dc039a533207bd41680d8ac2133a83d5e9ffc \\x0000000100010000
-44 4 7 \\x627751089df0be8fa4e2bc4f10a09dcb60ed478ee0515eea4c7268885fb11f06484f3314c694fb58a5187c56b27a3688f6c8cb8533c1ec8a53cf6ff8f2c20c0d 45 \\x00000001000001000f1a45c34179c344652637dc61aa48dc58b57bbfb5722445dca2bf228ee0c6c46e2cec44584b533d08cd472e3601d2d3aac4e53e4dcebde7a7e09286585732992e6edb51974eb74df6b5340e8a4ba8d3bd080bb332984cf888f9cce5525fb6af29d7460a99a6990fe175f0aa4fe357cd3c5af74c9b708a591fceb181632b71e0 \\xbeeaa5fbccdfdadd119481ead443c7d585a706db92f11b0c585622b2204fca34292ec0bc3a2c724e0cb005499116135e0bbe15e86b76da7a84f034c9dadf067f \\x00000001000000015fd6d47c6c97ca07fdfc6f9bcbd36d12a18562e3d3962c835ab24325c1ca3b50f7f9556ae213c08142d38b70d11ba1732cbfa9411963ae04b04ed5955f1a3460801e1be25777b49cf8c766460501c24508e7a6ec947b599da4b335f2590a7dc7504ec977c0f068bb735c2531ac050a9f967e6405336fe698215fea98fee26719 \\x0000000100010000
-45 4 8 \\xf6a26abd6871f3ebf05f37c5002a15564013f7d538ad5b35b6ec162d9193cee232c7144683eae5786aa7ffca7fc4d54877b8c3ec9821c527c6c031ed21dea809 45 \\x0000000100000100b2f056f2a077d8213af80f217b43f94b5ec4c2307a304a77bcdc7499f651b36deeb7729950c8233da6d46b3efca5fcfe4e69e20e4cb858beb2ec2512bb5cb2c74e0c8cb6a466c9da79d7469ad049009d98169e13cd9f90d93eaa33af52b5608ee6149b8b11863445b0868cc8751e090ae132d4e819f32ade8a3ef43c365c38e8 \\x17009db653541773beb2fa841b3924776c01d63effc526ad50d392c125133d08daeda866d5710f982e67473c15aaf74dfe6c40e123897f780364d4e9ae2650ac \\x00000001000000017f0fa53a181fc27e01005f8abe7739c6b03b425357543c64081fee4e96609242d9fa0234f9557efa5a1ee6bae5c9704497f0b537f0d9c253506583675f01af17520ef482c3d93f723ac405850ff0c4346ccff0e2a589ed396e4e6c6ecd3a995fd63311550469bfef3ad7788f3f28b82e1ede28b3b481decd1ecfbe93d6ac24bc \\x0000000100010000
-46 4 9 \\x0446993279402c721a6400cfe65554406b9295bf7ffcc472213009fe480cdd595b49a38beb45e231e40d9fae38bc3892c53b624300cf8c40f01b9c301804170f 145 \\x00000001000001004da8fe6396de7399f41d3363df31cb2229ca630004f2fd1355dc12093433bc17a04f0c287eb4b734358855a24a77f77a6b76bca7f02ee247c6e452b7341139a535c9c677c2da55f30fd5fc91a16f003ab612154b2d5708495c0a478aed4ecb4ea7fcef09ea0b5d0aa6428525b18a5414a8f9ea2fa6d2820cceb5932507c723ba \\x7c42603fafcba7d1cfa3b327e043147e9ca5f9b2ff1c3cb7c1f5fa2738013049839ee09703cf26a5651c718ac1842f69de37f68b3a632cf4efd3a2941eb37d75 \\x000000010000000182f1515d78f1741e807b1396cfe0fd1826b0ad431f38812c13f110e45f26529d79da12facaa2beaefaa871282cd61bb2a88b08a4e68c02480757b04c6fc32379adda9a7f28a37e7db10f367034ea1d6e1d1f527a03ec0cc23c9af3a002f8a368c0c5ebb782be77a4a491fb9b7d6ae13ac89d1e98379e76dcd338d50aee186235 \\x0000000100010000
-47 4 10 \\x481b24d847e41fec5510427f8e8eff0b9f5ccb79dfa174ac9f953683675c0acbf1dd7a8b7707bcfc756ce226ae82587716ee5e9829ac77044f67bdd9e07eed09 145 \\x00000001000001008336ea10d18f5f1c2f2660bf89e9eef1356bdfa827b0458f718ae8fc68563ab7d28f723e24388b4ef8e3238e2ece8dcf47c117d543121470fa90f0d13d29563295bf8907cafba4eab575cbea8f5f8cf4f585a3af9cbcb8754d82669b85bcbe049f834283319af4b6fbf29ffd4bdfd25fa3080b6e7676cb1f2dd6f697c874c715 \\x32bba803399ec99606fdcc1d554c0fecc4493f73b20cb53e4abd3c031d50f6d878dc9bac7f427745755c89a5fe752f30bb36a8e7472e68e22487eab7487e26db \\x000000010000000199b5eb8a96d8ef3e411bcf94978338329b09c49ffb360f408af395cadb9ee4f071a9c714e239a7a1e6fb935ce7b79b5b402f7cc0264878ae1d447234692dbea34483675df4d31e9da2a7e43e82d6926167ccee1959fd314bc4946884885cc361be2027be169002cbbd8b67888e6b862066bf9d84775340048714e51661189db4 \\x0000000100010000
-48 4 11 \\xde94687a485b21c1c554ada5b4da299e32b66e377ba929dcb523d727b8c8ef675fbecb54b0754cdc96d61eab5adfe5f8fc483cdad062c816c2ff23797ef72b07 145 \\x00000001000001009fa4a7b3f71b80edea2d86b600a89dd557260c3e4965bd2902d05c89f6062348348eb5c3792f272c60703272d533e8d574b3271c7bd137d8351c4fe6e0f8489636f0557a6556349adce19272e61be00996707bb3306596e37d23b1d406a6fafc66bfcfd734c3b6672862844feb0a4e42a056db771e9ad79244a0f20f66f879a9 \\xe04d19dc64ac4b3a3403789d2b424ee30c2c7359c40906178cd7753db399a7569358b74baabd2de71b24c9b700eed31b292351e194910496a01c4de0081e9cd8 \\x0000000100000001702eeac39beba0ffbafc0a4cf307452fabaa05fd4c65b68e83e544a8faf946e4a932b5caf506eeb25dacd17cda5cd5dc8e918ce5c9b77bc4f45b839caed5a7b6e250d43650a6d648dd87aa756e74a6797a865ae68a813d78a44cd676c529f4997673bec08e1c32f895bda10495d65fb2e0e1e3ee163876c30303a0d1cf2a0a41 \\x0000000100010000
-\.
-
-
---
--- Data for Name: refresh_transfer_keys_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_transfer_keys_default (rtc_serial, melt_serial_id, transfer_pub, transfer_privs) FROM stdin;
-1 1 \\xfb802fc9b82eb301e6668ae850513755e256b007bc746a3f9679f7381291ab77 \\x647e509f4c9ecf6d1506dc52d6a40c5b714560728e85a0e65f49e4fc7ea89e61197507db0ba10a6546bcb90279bc885a2e9355514efe14fb86cd244731110835
-2 2 \\x5839f8558f140814707e9d583045ac36837d69c5ade616c2e74c35a73b195645 \\x596f7530efdaeae6d354a4ec53f6050654cf763ddbb067c408b80bcd83dbbfc94f72ea1043f715254b5d1e70d711649043d62f63a47a84314956d848fa87d9dc
-3 3 \\x3676ef42e4cf7227b5c6ff1ce1841fca3fc5dbc3e77ea004161cec082f6f317c \\xd8ad3e83026472ae359216bad5538961fa7410de6d0bbc688ea0301a412570eb0c761850a586201ec1caf3b735116a2ada4205e448bd14b927b6ebb4457fb83d
-4 4 \\x77ce177474ec1691c5c9093656e08dd59ee9efbd542497774c29618e52bb594b \\x910e1dd63ce3bd617527f029420c07af564c8cef85029eb0d86213178341f006e7738b76b7e52907789ee2708bf1cc3196540aba21aaaecdef0ccd995281db77
-\.
-
-
---
--- Data for Name: refunds_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refunds_default (refund_serial_id, coin_pub, deposit_serial_id, merchant_sig, rtransaction_id, amount_with_fee_val, amount_with_fee_frac) FROM stdin;
-1 \\xdb47c6822d70335b30607ee22ac80c825b054b2810efdd1ca952ffcd93e4867e 2 \\x679ef7235a470bb8442d5ccb7a9c61861867e4e21306ec618197ae517647f2072707ca5ae91857d5328d3ebc5921edb985bbfae74720f71fbc150094bf83a109 1 6 0
-\.
-
-
---
--- Data for Name: reserves_close_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_close_default (close_uuid, reserve_pub, execution_date, wtid, wire_target_h_payto, amount_val, amount_frac, closing_fee_val, closing_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: reserves_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_default (reserve_uuid, reserve_pub, current_balance_val, current_balance_frac, purses_active, purses_allowed, kyc_required, kyc_passed, expiration_date, gc_date) FROM stdin;
-1 \\x8bfc3ecb05ec429d2e7210bf4845bb65da1fa1496db0d4e5ba59ad86a67d49b5 0 1000000 0 0 f f 1653935532000000 1872268335000000
-2 \\x69155d4eb15492974d51f2d3b9be93c9d7863df31f54630bd6d397044cbcdf8e 0 1000000 0 0 f f 1653935539000000 1872268341000000
-\.
-
-
---
--- Data for Name: reserves_in_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_in_default (reserve_in_serial_id, reserve_pub, wire_reference, credit_val, credit_frac, wire_source_h_payto, exchange_account_section, execution_date) FROM stdin;
-1 \\x8bfc3ecb05ec429d2e7210bf4845bb65da1fa1496db0d4e5ba59ad86a67d49b5 2 10 0 \\x9fdccd6e7dcee5d5170f969c3ff68fe716445016e622f0bd2beb7cab7de6589a exchange-account-1 1651516332000000
-2 \\x69155d4eb15492974d51f2d3b9be93c9d7863df31f54630bd6d397044cbcdf8e 4 18 0 \\xdcd64d0315f126bffea43abc7779ad044bee42a64ba4c827d4005d1d0eac966d exchange-account-1 1651516339000000
-\.
-
-
---
--- Data for Name: reserves_out_by_reserve_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_out_by_reserve_default (reserve_uuid, h_blind_ev) FROM stdin;
-1 \\x01ed3cde21d0382981f65901d84f68ffa4f083909a0e7ef9849a872aba5c3cbcd725fcde088d64ca6cfdec3be17bab3201982b7a45bae5539dade0f788d4b7d4
-1 \\x6456eba14a64896eb30254d149fc9939813b57d872eb688f4dba7cac28429125c8e02da4621ced840f3a9f8eeaad50131d3f680b549b1bff4d55bfd0938440e3
-1 \\x02c0d9bb52a6143fde9f441c14ef2687398b9e840b1971ab5caf209d7a7f1f63d8808c13f6c20a6b5fff0c1d70701259c9b2d1e5a09d01edb9bdb291d9199b9f
-1 \\xaac9050d3975156b1da4d502bdde854562276d22101e97083ec1e991443809f657fc9a25e3d6acfcf4530ad84b0e1c9131d0838a581958ae258e87b5ab8af283
-1 \\xf5c7b601a005e95f2ee9c3987d73e5ec7bd6c01a26a330266a662a0323ecb126c664e8de4ce5133cd07655ab895555e07169afc718593723b45fdd41ea37a90a
-1 \\xf36811355187ffb5c030f0ac504325d0fc9c8693348a74c390ed33128b94bd3b17d99e09f52b0ad27e87d64b2550b5b4ba0fda97c9db10dab182c2aebf017df1
-1 \\x13a01a8fbde97dc0bb363e2f9c45a81709e17ac0d9f8b89db44365123cf9043a1134d589d9ea5497dcec8cd40a464d4df0f2f1eb8b025deb30a0da23fd50ac93
-1 \\xebddd3a606bc8c84e63a272a150b89457e82d5265d4e20a4fa374625e8d310ef68d538c28ecad5c9cff7cc20c1beade09fa6560870f37cca176a5c30b442ce40
-1 \\x5897d679a6235b154fd33ac94c8d8c3974e66988ca66c3687f47d98e635be9fc0d957547abd3b7c2a09be62f96371a3b69b1e4e61f9bd0400e99e10532f5b4fe
-1 \\x378c1a1d31bf2108a6d5400ad5f1e3af2f6e77a376c7e2470f7764b49a10ee00e3a230c6405e1faf47f781c18a10d3b31714d83976b51ceb286910b2c5c836d3
-1 \\x298d3e1c5d96b27854c6617abc07c15759fa8ab8d9be34b3e6adb8a174e2bfaa873a6c323429ecde54c7c1227d2ea48238166377b1f828f6fdddaa081a222080
-1 \\x7dfbb946bdbbfd51a04142f100eefa0489c7cd257fdceb104a6d972695c9f7215fa1991036ca727acfe47488d763c006c3091d08aea30d63751d175471950316
-2 \\xafea2551572c9dd021c82e15b6ae68d96948cca99296d1c5c125d5f358fec29d32a5f8422d8c516767f79d8af214c0c33491daef9b306f457a2fba00b6fab800
-2 \\x9b40a1dcdb68eafca2559dcf2db8b766aa416f747a47334671f72f1188e58a06563eefa15d9dba3516d5c864e2ddd3d1c2aaec8b4758fda48a20882155824352
-2 \\x29095c3964a596bb78a06ca9f3adec3ff1aa1520840e4a3544fbff139e4f71505431826c47ac60135acaed42caf00a591d8f6ee97323befb0b8346963a72fe82
-2 \\xff4e506199cefe53db3d7fe6957fe8ece8355df93bce75deeccb31c568f675e37e9170cee3857754ecbd39203261cdb202ceeed9d8a1bb5643be04bff2d342d0
-2 \\x7d4a2872c2f31703683f5cbe1606430ad9d7f92e834d8a8683cda0c0d12b7ed3f512594d11e03f35da6da7c7d2d244b681c32d690402d15879eb6f070a904c23
-2 \\x2e5bef5ba80a3e779fb9c83538dcfe88b3f756e3b3c3bf86c43848bcc82cfdd6531e14566a5c6dec2078f68a7ffd4f1a8459096b8759adf5705fb4e527838276
-2 \\x6d34dd310dc7ba84cfe621cb8921374d30362918a4d36bcbfe441bd9bab4c4f8ec6e7a24f2b89971f7067b240ca40063521c77f60e7acdff5589e2c95e5f9b57
-2 \\xd18b5384a3841b46935c3f62aa33d2e7eb12ecd85e7622cccfd3881d88b96fd2c193fdbea90bf22f3e61ed7c8c2a4862bce810832455d6b4a7a3b7d0f28173da
-2 \\x89129e1959b4257a11c689d9a05d245f84c345ad3d4c585b3b9e49d956bf58a2c934eaddbab7d59057092bf344f48920b3df866586ee80d97b70ec99d65a3eda
-2 \\x410f2098735a8a8d6f1b080354001c1fd0823ec3fc1bb6d81afb1044b26d94154625d2a665f5aaf081e5a4b0ffaebf2afadfb1d40f29c77d5fd1a90a9ce1f2c8
-2 \\x64664ab99dd598ad76475bedf0f833da271efd85606159a62d4c447a9bac72ff838d547ed369a09e27e46cd429d530c4a349e35b7fca8919e1f766f16b3e69d7
-2 \\x90cea31f56472a2a10ee60e65a36cd396ced1635518fda48865a01c73b8a2573f222f4ee16cf3af259d4a97d05d8fcc65951a7d38b4f5efdd57b2b3d3e059326
-2 \\xa70f22cc7c33d2fb4a75683771f4b1afa075083b8eaad3512415af94c54f4ffa71e54bf02cc36cd85314a14222e1513312b763af77475bed82980b1b6ad79fdb
-2 \\xeec9da07dad2e0ea1ef02c9efdd229043e5fe6ae3df5d3a93219d99010746291b883996f020b5ffde76934b2ab609b9fbe7daa09441558cc5433087f3b330bbd
-\.
-
-
---
--- Data for Name: reserves_out_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_out_default (reserve_out_serial_id, h_blind_ev, denominations_serial, denom_sig, reserve_uuid, reserve_sig, execution_date, amount_with_fee_val, amount_with_fee_frac) FROM stdin;
-1 \\x01ed3cde21d0382981f65901d84f68ffa4f083909a0e7ef9849a872aba5c3cbcd725fcde088d64ca6cfdec3be17bab3201982b7a45bae5539dade0f788d4b7d4 199 \\x0000000100000001318151ddd422237644bc194d193cb7ff651469ac7ab3752121be619aaeb516b0b8761f4c0d5551b74979cd07eb8edaa85b1aa3432cf8ee11701afe0ca44776498a0a0ce0947421e18b09844fd20f6e465f67b4052cc5341970bfda6e8df9cc073aee8fb5ab8c472e9dad432527bf32880a6a21ec267fbcf05bd8d2f7c0e845d7 1 \\xbcef026a8567bfe41648844ca1c9a7e110b036f6995c110e7c771fc36cd33769c619a94c101c7bc77c7475089a7b709422c92c71f4e3d9c028fc2e6d75e94e0f 1651516334000000 8 5000000
-2 \\x6456eba14a64896eb30254d149fc9939813b57d872eb688f4dba7cac28429125c8e02da4621ced840f3a9f8eeaad50131d3f680b549b1bff4d55bfd0938440e3 144 \\x000000010000000176b71917490543e136de968c405c430815a6bd6e99088d09982812590e035ccfdae1ac56f5ad089ad896d513cafade7814144e9f95aad20ffa2e9e0ee821a2454e52d804beff0d925b7cb7ce972efd6a77bae73b371c6d476338fa25037bcd60b80669d8a52c83c0da3e30690481953d47a3872051dd848518a3a1c51fe0d626 1 \\x15decaf2a067433bc177b958fc1a06e0f73c3abe5ff2bf001b3aa7f5695a78111e0615c34bc900bea8bae60afbe0e2d99247683cc869d6b016503035886be80e 1651516334000000 1 2000000
-3 \\x02c0d9bb52a6143fde9f441c14ef2687398b9e840b1971ab5caf209d7a7f1f63d8808c13f6c20a6b5fff0c1d70701259c9b2d1e5a09d01edb9bdb291d9199b9f 45 \\x000000010000000156aa8afabfa5815281d28a3394ec371c89d388f3d67cff2857bc62d69aae639fa782ad05065ad50ff75794aca4e269003a3b64db5cfa74d68bfc2fd917f9f9642cb9f7310eb978cdf064ff99627eef54fe27cdaa40de16bd73856543ca571087f65233aa480e4a7f026826214650466186e135918707c238b17493a17398da81 1 \\xeef4524c6e89fa70313aa2e867f85ddef25f1052b70f21b782d5b414d528a99feb98737ee149de9dc1e3c96eb46527c5a108e80531da06396483f582d0f7b008 1651516334000000 0 11000000
-4 \\xaac9050d3975156b1da4d502bdde854562276d22101e97083ec1e991443809f657fc9a25e3d6acfcf4530ad84b0e1c9131d0838a581958ae258e87b5ab8af283 45 \\x00000001000000013fcc4d44c75cfe8aef2fb34db32bca8a0e883a41cfc7b0bcf945b4363d5509c4e38ec2206b755ba8c8a370da3e23135739a2f8a3cd883f9576d1e7ffc3881fc04bd09ce9f6372561997c7db4ddf385e447882d9a0870ef7c9199ab1e79b8d60389ec45c54aa4f2d25a2bdfef820c02ea19a1c405e7c90ce887873a6ee2d70fb4 1 \\x6c1926ac1a731726b917fc26a9b37d40ff1d9a0a13521dfc216933a41b5165c692fa6dcb99c291c85de25a0b4ace4636eb4cdc80259da0dcf00350a687eb9406 1651516334000000 0 11000000
-5 \\xf5c7b601a005e95f2ee9c3987d73e5ec7bd6c01a26a330266a662a0323ecb126c664e8de4ce5133cd07655ab895555e07169afc718593723b45fdd41ea37a90a 45 \\x00000001000000019246c997a9c06edb153fca0f90a36aaf51e013dc83f51095711a769e975eb67f29c69abee2615bac160283090bd5499a6942633de2d56fa949e1a317136d6c1f57d2c859d36a5c49f5931e383e9564a1e4758064a2d60bc7d451a9c10ac0d3f09b3982f8d159a3ccd7f08e9460d968c9e046cb768bc6bf5c39c99b4a76991119 1 \\x558187c68a2192f7e7d52c1ed0e4bd2c2e0fc15069926537f05ff19eb41fe707f07069940595d731c62b74b4f2ed37d890d17395795f13f2b2db4afc1a868908 1651516334000000 0 11000000
-6 \\xf36811355187ffb5c030f0ac504325d0fc9c8693348a74c390ed33128b94bd3b17d99e09f52b0ad27e87d64b2550b5b4ba0fda97c9db10dab182c2aebf017df1 45 \\x0000000100000001595d39858a0d8e62484b2596378198d13150f6f52337bd0f5b657ca85589a7fca0c7fda93c99e72b9a736003ca8ac097169530083799e505afe7375cafd1fe209f1235f2543a2b274154fe3369c9a57c085a0093f4eae1401b163d0fc55e620c440e5b45d3ff019fcf87687f151e3ed973ab4f61fe87ae049c571b4bb2581186 1 \\x3fd1e90d6902fbbee79d296d1fce0d100b15d625434d73478af7fa1f248a6c896031b8dcd598b9a531bab7073b545034aa1ea79b7244f748ef787d5565b97006 1651516335000000 0 11000000
-7 \\x13a01a8fbde97dc0bb363e2f9c45a81709e17ac0d9f8b89db44365123cf9043a1134d589d9ea5497dcec8cd40a464d4df0f2f1eb8b025deb30a0da23fd50ac93 45 \\x0000000100000001692d9faced981b8bfefd4381ef60b51ddff021bb02778e4d461052465ba7ac06eb42f6848dbc8d46ed2c9d1b77a11a6dccbe806436c2025ba2dd2ed04211cfa984abe04aa32a68537851022777c4a80ed76a13f186cc02bdc628a3268c3153741a18f027df86c9d93c460cbd1c34ea12e9c2ed9b92277e5ad6b933f1a1e83723 1 \\x184b891d32c2a047a7cfc10d55ccc5c36e5fe6135445c138a58c907e4de4c3d5d5b519a7b765bcc456b1f67dc3ba60269e6b288d973c7ec89b34c49db6d48c01 1651516335000000 0 11000000
-8 \\xebddd3a606bc8c84e63a272a150b89457e82d5265d4e20a4fa374625e8d310ef68d538c28ecad5c9cff7cc20c1beade09fa6560870f37cca176a5c30b442ce40 45 \\x00000001000000012e4ed97ab2558c3eb6175e691fe22cbf3063c0d676ba38d04e84ba50538884276df9fa5b16cf257a7c44a9e643b8022a9ed001d4a3e64ea7ebf768a5fade80ba1a5b2b502b66e0004c050192039753c9154fbd4c578e498472d2c12b8a7607bd243b14dcd4fa5c569bbb5015d783edab672722781b3358723406b345548b7d20 1 \\x3b4547f794a1942bc62091b62b46118173a85e3bc5ed56f26471a00ba9d512ac38592d886f2df89caff6b6e571cbd77708671bfeb9b5a1baab7de6dd3a86200a 1651516335000000 0 11000000
-9 \\x5897d679a6235b154fd33ac94c8d8c3974e66988ca66c3687f47d98e635be9fc0d957547abd3b7c2a09be62f96371a3b69b1e4e61f9bd0400e99e10532f5b4fe 45 \\x0000000100000001419110bafd89a827b60282826036e1ab03525237af4b22bad6907dc9cf8743e19ff802607c4e8e317e9d2876e6090331230f636fe24428a4bd93dbfb90a641254807c47ffa31abe9f3324d117eefe9ce80dd5ceffb68a1cfe6a7bd62ede0ef8256da065b5e957aef96cda4f833addfe7e1f512e3d90084890f83f7887c4f3832 1 \\xdaf04a5064ae7a6e4d76789c80694ca1f6e65fd9546eece5fc4113c0ea75d94fedbb9b34d6cece49fae43b66c05175ed6bdee1945723182d5098179fb521a10d 1651516335000000 0 11000000
-10 \\x378c1a1d31bf2108a6d5400ad5f1e3af2f6e77a376c7e2470f7764b49a10ee00e3a230c6405e1faf47f781c18a10d3b31714d83976b51ceb286910b2c5c836d3 45 \\x00000001000000013120fbb952281f6ecf628a978ef9cd1267eabf768aa639151a9972e1c0e07f34670b7c55979196e3120af95202038e6d9820e92489fb8b396cd0149973dc350e86a2e39d6f6dcca1fb60ea891dd1ba05cc7053e39946d263214d1be22e97ca609cbe339998d4f54905c0ac2ed807657921a9889372dcd237fa894cd98f516a92 1 \\x01e553d6b18895530945f400ecdaf6bb6d3dbfb7b0ce49cb47d11fc975f9dd214c035b89c7c7928a0d0f6ef029a58dcf29ef88850e199c94c7f9bb46a40d360b 1651516335000000 0 11000000
-11 \\x298d3e1c5d96b27854c6617abc07c15759fa8ab8d9be34b3e6adb8a174e2bfaa873a6c323429ecde54c7c1227d2ea48238166377b1f828f6fdddaa081a222080 145 \\x00000001000000019271c244eff64e21418b612105bf96b11862d3b9ec6ea17eaa376dee63b2a800065237205420ed964d6656ef49cd169937f680dbd68f5678ed46c81b4e01385c4651b93dd304b54676fef3e2e70c6a99c8340a23ccf4006b69e0b240a74e4ff4045eadeb7306803590a36201fa8f8bf6897ecae5ba90d9bc31fc7bd00c7f05b0 1 \\x2559ea40da5f1ecbdbda1d4e2b5dd74a84b902f65a4e7571cbb4216117f8939de40cd852af226f211059977b1f86107b34bf27be12c9ae9db76f22607ec35d0e 1651516335000000 0 2000000
-12 \\x7dfbb946bdbbfd51a04142f100eefa0489c7cd257fdceb104a6d972695c9f7215fa1991036ca727acfe47488d763c006c3091d08aea30d63751d175471950316 145 \\x000000010000000109af50c6c9604426404d3b4fc178503016316fde8d84cbddb43c0a12d934cc2b47f1a0f35c6a8217d0c6a336efd6cf2c84284829bd809fc7b665bc1c888d84795c014cfce930fdbfb0a3f047d749bc452e9e2cf64b627f95acf6441fe3f492e1c0627f5c865de6553b22f199d5c537459e2f5e9717b93da0175759c59c313a59 1 \\x2a86e686e1877e03e89e0840246a4198197b75e7a5780bb33ec5733782d2aa65221377c102ec0306303a804ab7fdbe5956b5a8258ef3d78fb08abead7d127203 1651516335000000 0 2000000
-13 \\xafea2551572c9dd021c82e15b6ae68d96948cca99296d1c5c125d5f358fec29d32a5f8422d8c516767f79d8af214c0c33491daef9b306f457a2fba00b6fab800 358 \\x0000000100000001cb7384b3c0b8e4cbf0132257ccc157eabfdcdcd3bb8f71f2ee10125e57e227b4348c2547fc411fffe1f13ed6b44a0e2e7508668bb61f2474d049a610ef69a6c53a955b5ae307c13e77ae57c43188049758e6dedb1c7c3650b4278c9e4e82777863cf51eba16c1373736f4bd2335474869e4266db18992f0c4f690b5133bb9ab3 2 \\xb830de0ffdfd9daf70416d250ecf728c75ca9358ce565d21d09a6119a9ce09a7e1b1eccac2909c477d103a6edc325046f1f512342c40b1dbbcf751e4e878ca09 1651516341000000 10 1000000
-14 \\x9b40a1dcdb68eafca2559dcf2db8b766aa416f747a47334671f72f1188e58a06563eefa15d9dba3516d5c864e2ddd3d1c2aaec8b4758fda48a20882155824352 393 \\x0000000100000001c890007dc292a6defc008bf3241a134e3b85e9193dbfbd17ee9954d1dd08ac22f5fbb2df964f069da6d959230cd8ca42f381c77d27d5839030ded1d820d6f90f1b2ba0eb9240cedf08d37e70cff4439652a9d05dbb664d0baa0263025fca0d8b26dc4138c7bdb1cd3c02d9fd92ce738ad7564c84005cfdad804b3a790de9db8a 2 \\x7870a65558a801140f9ef97dbdaaec4b49e7a557db26a360ebf8f8fd7cbb80a07d850f2f0e9705950226607d97c1c253e4814b1747d0f0ded91db8f6427c960d 1651516341000000 5 1000000
-15 \\x29095c3964a596bb78a06ca9f3adec3ff1aa1520840e4a3544fbff139e4f71505431826c47ac60135acaed42caf00a591d8f6ee97323befb0b8346963a72fe82 235 \\x000000010000000170f546de9796a42a24570887e5c78c00375f37f9399d368575c8130f22118b15848e5bd1009561486a39876ef35a3945fad9f4722079c7e2fb384a66981c344c995b6c6bc3fecf30cbaf00227061787e54adcafaa4607b2246c1c5e1d6fb2251ddd97231f89ce4ebb8c5928c2d040c5643c4bcafd43f0929640b6773a188d114 2 \\xefb0c3d99fef8faa8915ba96f2ce50f7d6b2ef3212df43b5b494ad0598b1a017c48b25de346aebf558cfbf0bb05cd55c0a8c62f196e6ab04f829d1a2f4a8e501 1651516341000000 2 3000000
-16 \\xff4e506199cefe53db3d7fe6957fe8ece8355df93bce75deeccb31c568f675e37e9170cee3857754ecbd39203261cdb202ceeed9d8a1bb5643be04bff2d342d0 45 \\x000000010000000173e53391d0b117287f30e1b84227f321575df97a0a902c44d56c343aee1a77b95ef0cb7dbe07b735666109de5dcc6f567c20278be7de40711620d8adb49c4e4f870cefdb9d713a442c38748d1a3667fc713ddf374d39b0891bfb924241f1459b6e07e30b08de8c87db9f718b33eb124301b2f2f624f9f3c9f1c9045c5fe3e12d 2 \\x069750e67dfe4f15196f8c0cde7a99125d2c30ceb21ebf8a2c091f8523c00a8de9011f50f18e6ec3f6223045dd3207e7374e0a9b121b5031e9239e0d67c1fb0f 1651516341000000 0 11000000
-17 \\x7d4a2872c2f31703683f5cbe1606430ad9d7f92e834d8a8683cda0c0d12b7ed3f512594d11e03f35da6da7c7d2d244b681c32d690402d15879eb6f070a904c23 45 \\x00000001000000016429d1fba18b335683d37ba1c2226c97660b46783a7069c20bf12f104dde53460e1ef017c2e18faefa2ee7670fe62a0bc8e5dfaed07581c5cec2bad6432534defd26d58d8745e320bb05e8e28dad41fc49455fd971d0a59b672b1b3925e54e27c3fe9947b6c0147e94d0beee57bebfeb72622edbbd273244251a9906e508ebc0 2 \\x3c054176c30782ef92abe69ec99e7c523fd8c160e72008c01f3a7e6bbf4018a87858cdc99a793f4322960aff6d5945520a7641c58ddc14dd5a18e3d07d371403 1651516341000000 0 11000000
-18 \\x2e5bef5ba80a3e779fb9c83538dcfe88b3f756e3b3c3bf86c43848bcc82cfdd6531e14566a5c6dec2078f68a7ffd4f1a8459096b8759adf5705fb4e527838276 45 \\x000000010000000108a4ac03860016d9b9ff6f08874aee00f254778dd8fa4ad5b106924c3368f012f98b3c8406e3c5d6e8100892c2e01a435bcba3e89b4cc5017e1617f9547798a5ece3fc8c3987aeb9bce758f5133e09b95cef69477dd1fc7be68d875cc9f1cb9bade341c28e95c8d0657b40793dfadbdfc056250e4502fcee533cfd4a1d8467e8 2 \\x725e5a580f29f46efdf2feed34f878e503caceeef809e1a5997d87a6e84bd476dc069e021eda1a6d5f92d497594f34390ae081461fcd51055017993eed6b730d 1651516341000000 0 11000000
-19 \\x6d34dd310dc7ba84cfe621cb8921374d30362918a4d36bcbfe441bd9bab4c4f8ec6e7a24f2b89971f7067b240ca40063521c77f60e7acdff5589e2c95e5f9b57 45 \\x00000001000000016a01a862297f0ec7a399fbe5f5a697ea3fe80baa1c566e0a5c9d0f1c659f79fbc636c4855bf5578a2d1dd0747b1b1e51c15bd2d106f26ec33392b3a2f6616c558d37da43470bb371ff0c9fce99c04507b63ca50501d2e022efdb29751cab65c755c982d96bb1aa6ccd1a065c2f80321926e0e27bec2d362f6a95707fabc8e7c3 2 \\x64b0f438212c3573fd8543a0c15e7f39dd87ce27e2ce22578a83fc3b4f3de4f58d0db1a544c8088bdc34bbdf5256a3b0b758540b605a8e9b63034cf6f213bd0d 1651516341000000 0 11000000
-20 \\xd18b5384a3841b46935c3f62aa33d2e7eb12ecd85e7622cccfd3881d88b96fd2c193fdbea90bf22f3e61ed7c8c2a4862bce810832455d6b4a7a3b7d0f28173da 45 \\x000000010000000166d624a079c32ec98cdb4729bd5df99617a6b2f530a9ad0ab60ea7c2dddb2f433afbffa9145d060c9fc8b794254cb2944f9e5fb0d1b5c0f44540f0befe3ba0fc19bf261a6c95b458f5a94e386ddc7b700f5b6487ca0476621ddd2c90582e003384c2a24ce98fe2cfa310b49fd6cd4583f52763ae1bfa9d2f2e8dc1e72238ef59 2 \\x16098645b42ce413db31208ed74ff95976c9b97ea680564d198d50014534c71f82234301232359955b043cfeae920a6f629187ebe2a01512e8a3549b55a02609 1651516341000000 0 11000000
-21 \\x89129e1959b4257a11c689d9a05d245f84c345ad3d4c585b3b9e49d956bf58a2c934eaddbab7d59057092bf344f48920b3df866586ee80d97b70ec99d65a3eda 45 \\x0000000100000001ab6d79005d35d02481dfca68661e99b5321f8eeba8b5008eba9be31f994efbbce8784788db3f7c04085ad9217b432e224dd3c5e11924c27c5b8500f5f924dc93330a717e20d08c857a12e3359d60a9d38b23456bba44bc196e7582624409ac5d8b442cd571a147b5ed7fe49b88ad244321aed0cef0b7baa8cf20cf7a532b08 2 \\x5deae9ce7e3fac11619e328e67b013acb9bacf68dd3d737db5936ae66dd5efedb0b7948999a1729e226d0b577702dc9a619881a3c1d1c29f23ccbfed06955a0d 1651516341000000 0 11000000
-22 \\x410f2098735a8a8d6f1b080354001c1fd0823ec3fc1bb6d81afb1044b26d94154625d2a665f5aaf081e5a4b0ffaebf2afadfb1d40f29c77d5fd1a90a9ce1f2c8 45 \\x000000010000000120a89221e74d312ea6c0b8ea2c05011cf9eba3eef03ae77896b3937f371f1df002330f1be186019ed0ea5f3404cd048e963e2bc125d4368282379adbe7510c1078b02bc6b7752abdc01e06f0348a24af6f951b0edbdb93b30d583c261ad8b61e5e7cac37d46a4e175c997451e2ba5f6473d64d7ccaca28cfd89b6a82ccb24b83 2 \\x38ef2d8790b6218589e12d7f2b65002b267e76e5f5bb665d7b6bf053a01930c4a0e766fc0f082961bb8f4c5833e1c7b24875b8794a27699b2308907d4053b604 1651516341000000 0 11000000
-23 \\x64664ab99dd598ad76475bedf0f833da271efd85606159a62d4c447a9bac72ff838d547ed369a09e27e46cd429d530c4a349e35b7fca8919e1f766f16b3e69d7 45 \\x00000001000000018440921b9963700edb0ad0d4d880a9049205c917514964d47e815d3590b02c1839f8f8af8cee989228066dfc595e8b494fd8e37a9f9e07e2f1a74f5a24d7bc6e6708588fe226b603a60cc35dea4df0d80ef8a58205bb99631b5637c29c84c33bf6b32558339b4a963164d079ad40298b03633b0e272e85a878a22fa1dba6113e 2 \\xad759d5b0db5b5a48346a5c70e4d1259c84b7f2455ac07ba0b104db9827263c47067937bc4a5985cf23c3f91e72a867865e08325ec22b0b3a3039c8adbc06a01 1651516341000000 0 11000000
-24 \\x90cea31f56472a2a10ee60e65a36cd396ced1635518fda48865a01c73b8a2573f222f4ee16cf3af259d4a97d05d8fcc65951a7d38b4f5efdd57b2b3d3e059326 145 \\x000000010000000168e6626c43d09c81044f24909995a502215a56cc961d2fee531e8a360e74e4886d98b12434ac308d9f3c0cdc38266a7ba18cb8fbba6056351513f0d728fc86319b46bcb6e628072e79dd9458a13a8814bc8e79c3edd0a4b95206a61e0aac593837377101a98d9fa7d9f49bf656d32a3f55de8143b3adeabed6e58fe7c742f502 2 \\x17fb776feb130e0693ec856b850f25cfd26ec1e7be631086935edc95050da442ef1c80bb8aacf978d4f18a3427951ae2d4422a87dd8093d0e38d8b88dcc8410d 1651516341000000 0 2000000
-25 \\xa70f22cc7c33d2fb4a75683771f4b1afa075083b8eaad3512415af94c54f4ffa71e54bf02cc36cd85314a14222e1513312b763af77475bed82980b1b6ad79fdb 145 \\x0000000100000001464c9b34de9afb94e45ac568cd2dc622c2249ebfdfe812aed17713faa6327d720af337e08bb836d391502255328f40ae998728186596a72bdd6ab1a7f59bc4840e5e83969345c2429d49ab1cf9c6a9f28fbcb694acb096c3f1e6c2415c2b9d2a4be9337f0a206163e6c935cc94426acfd582b38ab64f6edd4ddd8ecffee8858c 2 \\x4ce37c5b7d2fb138630f916fa03b28ca5c8f126ce5c6fcc8d83b0ad5058f05aa793d72911c1b735160620269690d06187aecb9fc79ce77d50ff1e5b2bf0a7a07 1651516341000000 0 2000000
-26 \\xeec9da07dad2e0ea1ef02c9efdd229043e5fe6ae3df5d3a93219d99010746291b883996f020b5ffde76934b2ab609b9fbe7daa09441558cc5433087f3b330bbd 145 \\x0000000100000001a3e2f18446950f07a099c9fb915aeb45eb85fc1463831a158f1607e2f1b616922aac6b970f353e2786cbb4fb6b90e66edbc3e825ee4e910ee85c3d608329b163bc0f9a4ab5bfa7a2f20f3dfd16e24183e4b7497be4e0101a3f17cf7c6c7a30a9da5379a2899ad15f2ed314e6af7024d34ad1730d1a99294eae194629cedde1f9 2 \\x4b54a8b5769c739fb2a121453978eb62d977a6570f9df375c3e7509f979ae085ba0dfdd51ee4b1779c46ceecc0ba4a88bcb2ccd9c293cd2f05e88b166074380d 1651516341000000 0 2000000
-\.
-
-
---
--- Data for Name: revolving_work_shards; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.revolving_work_shards (shard_serial_id, last_attempt, start_row, end_row, active, job_name) FROM stdin;
-\.
-
-
---
--- Data for Name: signkey_revocations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.signkey_revocations (signkey_revocations_serial_id, esk_serial, master_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: wad_in_entries_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wad_in_entries_default (wad_in_entry_serial_id, wad_in_serial_id, reserve_pub, purse_pub, h_contract, purse_expiration, merge_timestamp, amount_with_fee_val, amount_with_fee_frac, wad_fee_val, wad_fee_frac, deposit_fees_val, deposit_fees_frac, reserve_sig, purse_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: wad_out_entries_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wad_out_entries_default (wad_out_entry_serial_id, wad_out_serial_id, reserve_pub, purse_pub, h_contract, purse_expiration, merge_timestamp, amount_with_fee_val, amount_with_fee_frac, wad_fee_val, wad_fee_frac, deposit_fees_val, deposit_fees_frac, reserve_sig, purse_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: wads_in_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wads_in_default (wad_in_serial_id, wad_id, origin_exchange_url, amount_val, amount_frac, arrival_time) FROM stdin;
-\.
-
-
---
--- Data for Name: wads_out_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wads_out_default (wad_out_serial_id, wad_id, partner_serial_id, amount_val, amount_frac, execution_time) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_accounts; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_accounts (payto_uri, master_sig, is_active, last_change) FROM stdin;
-payto://x-taler-bank/localhost/Exchange \\x37ee013beee22858235b0d57dca4462ee47c273f90dcc1d6146eb0b1f9c22c9a7543a6f55c70fb532e12bfbc651729632b2bcea1d73262970959dffedaeb1602 t 1651516325000000
-\.
-
-
---
--- Data for Name: wire_auditor_account_progress; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_auditor_account_progress (master_pub, account_name, last_wire_reserve_in_serial_id, last_wire_wire_out_serial_id, wire_in_off, wire_out_off) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_auditor_progress; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_auditor_progress (master_pub, last_timestamp, last_reserve_close_uuid) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_fee; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_fee (wire_fee_serial, wire_method, start_date, end_date, wire_fee_val, wire_fee_frac, closing_fee_val, closing_fee_frac, wad_fee_val, wad_fee_frac, master_sig) FROM stdin;
-1 x-taler-bank 1640995200000000 1672531200000000 0 1000000 0 1000000 0 1000000 \\xc4bc53a23028f8d21026f07e7e7176f581de0cafb26d3f73087e9507301db0a31e88659125340f8340fd433118c0fdca78cfb42eb9920f50ed8a9926cab95a03
-\.
-
-
---
--- Data for Name: wire_out_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_out_default (wireout_uuid, execution_date, wtid_raw, wire_target_h_payto, exchange_account_section, amount_val, amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_targets_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_targets_default (wire_target_serial_id, wire_target_h_payto, payto_uri, kyc_ok, external_id) FROM stdin;
-1 \\x9fdccd6e7dcee5d5170f969c3ff68fe716445016e622f0bd2beb7cab7de6589a payto://x-taler-bank/localhost/testuser-pc10aumb f \N
-2 \\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660c payto://x-taler-bank/localhost/43 f \N
-3 \\xdcd64d0315f126bffea43abc7779ad044bee42a64ba4c827d4005d1d0eac966d payto://x-taler-bank/localhost/testuser-5saj9erp f \N
-\.
-
-
---
--- Data for Name: work_shards; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.work_shards (shard_serial_id, last_attempt, start_row, end_row, completed, job_name) FROM stdin;
-1 0 0 1024 f wirewatch-exchange-account-1
-\.
-
-
---
--- Name: account_merges_account_merge_request_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.account_merges_account_merge_request_serial_id_seq', 1, false);
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.aggregation_tracking_aggregation_serial_id_seq', 1, false);
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.app_bankaccount_account_no_seq', 13, true);
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.app_banktransaction_id_seq', 4, true);
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditor_denom_sigs_auditor_denom_serial_seq', 424, true);
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditor_reserves_auditor_reserves_rowid_seq', 1, false);
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditors_auditor_uuid_seq', 1, true);
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_group_id_seq', 1, false);
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_group_permissions_id_seq', 1, false);
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_permission_id_seq', 32, true);
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_groups_id_seq', 1, false);
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_id_seq', 13, true);
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_user_permissions_id_seq', 1, false);
-
-
---
--- Name: contracts_contract_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.contracts_contract_serial_id_seq', 1, false);
-
-
---
--- Name: cs_nonce_locks_cs_nonce_lock_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.cs_nonce_locks_cs_nonce_lock_serial_id_seq', 1, false);
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.denomination_revocations_denom_revocations_serial_id_seq', 1, false);
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.denominations_denominations_serial_seq', 424, true);
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.deposit_confirmations_serial_id_seq', 3, true);
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.deposits_deposit_serial_id_seq', 3, true);
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.django_content_type_id_seq', 8, true);
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.django_migrations_id_seq', 16, true);
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.exchange_sign_keys_esk_serial_seq', 5, true);
-
-
---
--- Name: extension_details_extension_details_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.extension_details_extension_details_serial_id_seq', 1, false);
-
-
---
--- Name: extensions_extension_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.extensions_extension_id_seq', 1, false);
-
-
---
--- Name: global_fee_global_fee_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.global_fee_global_fee_serial_seq', 1, true);
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.known_coins_known_coin_id_seq', 7, true);
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_accounts_account_serial_seq', 1, true);
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_deposits_deposit_serial_seq', 3, true);
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_exchange_signing_keys_signkey_serial_seq', 5, true);
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_exchange_wire_fees_wirefee_serial_seq', 1, true);
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_instances_merchant_serial_seq', 1, true);
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_inventory_product_serial_seq', 1, false);
-
-
---
--- Name: merchant_kyc_kyc_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_kyc_kyc_serial_id_seq', 1, true);
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_orders_order_serial_seq', 3, true);
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_refunds_refund_serial_seq', 1, true);
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tip_pickups_pickup_serial_seq', 1, false);
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tip_reserves_reserve_serial_seq', 1, false);
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tips_tip_serial_seq', 1, false);
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_transfers_credit_serial_seq', 1, false);
-
-
---
--- Name: partners_partner_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.partners_partner_serial_id_seq', 1, false);
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.prewire_prewire_uuid_seq', 1, false);
-
-
---
--- Name: purse_deposits_purse_deposit_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.purse_deposits_purse_deposit_serial_id_seq', 1, false);
-
-
---
--- Name: purse_merges_purse_merge_request_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.purse_merges_purse_merge_request_serial_id_seq', 1, false);
-
-
---
--- Name: purse_requests_purse_requests_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.purse_requests_purse_requests_serial_id_seq', 1, false);
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.recoup_recoup_uuid_seq', 1, false);
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.recoup_refresh_recoup_refresh_uuid_seq', 1, false);
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_commitments_melt_serial_id_seq', 4, true);
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_revealed_coins_rrc_serial_seq', 48, true);
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_transfer_keys_rtc_serial_seq', 4, true);
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refunds_refund_serial_id_seq', 1, true);
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_close_close_uuid_seq', 1, false);
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_in_reserve_in_serial_id_seq', 2, true);
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_out_reserve_out_serial_id_seq', 26, true);
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_reserve_uuid_seq', 2, true);
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.revolving_work_shards_shard_serial_id_seq', 1, false);
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.signkey_revocations_signkey_revocations_serial_id_seq', 1, false);
-
-
---
--- Name: wad_in_entries_wad_in_entry_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wad_in_entries_wad_in_entry_serial_id_seq', 1, false);
-
-
---
--- Name: wad_out_entries_wad_out_entry_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wad_out_entries_wad_out_entry_serial_id_seq', 1, false);
-
-
---
--- Name: wads_in_wad_in_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wads_in_wad_in_serial_id_seq', 1, false);
-
-
---
--- Name: wads_out_wad_out_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wads_out_wad_out_serial_id_seq', 1, false);
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wire_fee_wire_fee_serial_seq', 1, true);
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wire_out_wireout_uuid_seq', 1, false);
-
-
---
--- Name: wire_targets_wire_target_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wire_targets_wire_target_serial_id_seq', 5, true);
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.work_shards_shard_serial_id_seq', 1, true);
-
-
---
--- Name: patches patches_pkey; Type: CONSTRAINT; Schema: _v; Owner: -
---
-
-ALTER TABLE ONLY _v.patches
- ADD CONSTRAINT patches_pkey PRIMARY KEY (patch_name);
-
-
---
--- Name: account_merges_default account_merges_default_account_merge_request_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.account_merges_default
- ADD CONSTRAINT account_merges_default_account_merge_request_serial_id_key UNIQUE (account_merge_request_serial_id);
-
-
---
--- Name: account_merges account_merges_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.account_merges
- ADD CONSTRAINT account_merges_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: account_merges_default account_merges_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.account_merges_default
- ADD CONSTRAINT account_merges_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: aggregation_tracking_default aggregation_tracking_default_aggregation_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking_default
- ADD CONSTRAINT aggregation_tracking_default_aggregation_serial_id_key UNIQUE (aggregation_serial_id);
-
-
---
--- Name: aggregation_tracking aggregation_tracking_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_pkey PRIMARY KEY (deposit_serial_id);
-
-
---
--- Name: aggregation_tracking_default aggregation_tracking_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking_default
- ADD CONSTRAINT aggregation_tracking_default_pkey PRIMARY KEY (deposit_serial_id);
-
-
---
--- Name: app_bankaccount app_bankaccount_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_pkey PRIMARY KEY (account_no);
-
-
---
--- Name: app_bankaccount app_bankaccount_user_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_user_id_key UNIQUE (user_id);
-
-
---
--- Name: app_banktransaction app_banktransaction_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_pkey PRIMARY KEY (id);
-
-
---
--- Name: app_banktransaction app_banktransaction_request_uid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_request_uid_key UNIQUE (request_uid);
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawoperation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawoperation_pkey PRIMARY KEY (withdraw_id);
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_auditor_denom_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_auditor_denom_serial_key UNIQUE (auditor_denom_serial);
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_pkey PRIMARY KEY (denominations_serial, auditor_uuid);
-
-
---
--- Name: auditor_denomination_pending auditor_denomination_pending_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denomination_pending
- ADD CONSTRAINT auditor_denomination_pending_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: auditor_exchanges auditor_exchanges_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_exchanges
- ADD CONSTRAINT auditor_exchanges_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_historic_denomination_revenue auditor_historic_denomination_revenue_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_denomination_revenue
- ADD CONSTRAINT auditor_historic_denomination_revenue_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: auditor_progress_aggregation auditor_progress_aggregation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_aggregation
- ADD CONSTRAINT auditor_progress_aggregation_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_coin auditor_progress_coin_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_coin
- ADD CONSTRAINT auditor_progress_coin_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_deposit_confirmation auditor_progress_deposit_confirmation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_deposit_confirmation
- ADD CONSTRAINT auditor_progress_deposit_confirmation_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_reserve auditor_progress_reserve_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_reserve
- ADD CONSTRAINT auditor_progress_reserve_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_reserves auditor_reserves_auditor_reserves_rowid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves
- ADD CONSTRAINT auditor_reserves_auditor_reserves_rowid_key UNIQUE (auditor_reserves_rowid);
-
-
---
--- Name: auditors auditors_auditor_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors
- ADD CONSTRAINT auditors_auditor_uuid_key UNIQUE (auditor_uuid);
-
-
---
--- Name: auditors auditors_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors
- ADD CONSTRAINT auditors_pkey PRIMARY KEY (auditor_pub);
-
-
---
--- Name: auth_group auth_group_name_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group
- ADD CONSTRAINT auth_group_name_key UNIQUE (name);
-
-
---
--- Name: auth_group_permissions auth_group_permissions_group_id_permission_id_0cd325b0_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_group_id_permission_id_0cd325b0_uniq UNIQUE (group_id, permission_id);
-
-
---
--- Name: auth_group_permissions auth_group_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_group auth_group_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group
- ADD CONSTRAINT auth_group_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_permission auth_permission_content_type_id_codename_01ab375a_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_content_type_id_codename_01ab375a_uniq UNIQUE (content_type_id, codename);
-
-
---
--- Name: auth_permission auth_permission_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_groups auth_user_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_groups auth_user_groups_user_id_group_id_94350c0c_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_user_id_group_id_94350c0c_uniq UNIQUE (user_id, group_id);
-
-
---
--- Name: auth_user auth_user_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user
- ADD CONSTRAINT auth_user_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_user_id_permission_id_14a6b632_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_user_id_permission_id_14a6b632_uniq UNIQUE (user_id, permission_id);
-
-
---
--- Name: auth_user auth_user_username_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user
- ADD CONSTRAINT auth_user_username_key UNIQUE (username);
-
-
---
--- Name: close_requests close_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.close_requests
- ADD CONSTRAINT close_requests_pkey PRIMARY KEY (reserve_pub, close_timestamp);
-
-
---
--- Name: close_requests_default close_requests_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.close_requests_default
- ADD CONSTRAINT close_requests_default_pkey PRIMARY KEY (reserve_pub, close_timestamp);
-
-
---
--- Name: contracts_default contracts_default_contract_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.contracts_default
- ADD CONSTRAINT contracts_default_contract_serial_id_key UNIQUE (contract_serial_id);
-
-
---
--- Name: contracts contracts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.contracts
- ADD CONSTRAINT contracts_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: contracts_default contracts_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.contracts_default
- ADD CONSTRAINT contracts_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: cs_nonce_locks_default cs_nonce_locks_default_cs_nonce_lock_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.cs_nonce_locks_default
- ADD CONSTRAINT cs_nonce_locks_default_cs_nonce_lock_serial_id_key UNIQUE (cs_nonce_lock_serial_id);
-
-
---
--- Name: cs_nonce_locks cs_nonce_locks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.cs_nonce_locks
- ADD CONSTRAINT cs_nonce_locks_pkey PRIMARY KEY (nonce);
-
-
---
--- Name: cs_nonce_locks_default cs_nonce_locks_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.cs_nonce_locks_default
- ADD CONSTRAINT cs_nonce_locks_default_pkey PRIMARY KEY (nonce);
-
-
---
--- Name: denomination_revocations denomination_revocations_denom_revocations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denomination_revocations_denom_revocations_serial_id_key UNIQUE (denom_revocations_serial_id);
-
-
---
--- Name: denomination_revocations denomination_revocations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denomination_revocations_pkey PRIMARY KEY (denominations_serial);
-
-
---
--- Name: denominations denominations_denominations_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations
- ADD CONSTRAINT denominations_denominations_serial_key UNIQUE (denominations_serial);
-
-
---
--- Name: denominations denominations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations
- ADD CONSTRAINT denominations_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: deposit_confirmations deposit_confirmations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT deposit_confirmations_pkey PRIMARY KEY (h_contract_terms, h_wire, coin_pub, merchant_pub, exchange_sig, exchange_pub, master_sig);
-
-
---
--- Name: deposit_confirmations deposit_confirmations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT deposit_confirmations_serial_id_key UNIQUE (serial_id);
-
-
---
--- Name: deposits_default deposits_default_coin_pub_merchant_pub_h_contract_terms_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits_default
- ADD CONSTRAINT deposits_default_coin_pub_merchant_pub_h_contract_terms_key UNIQUE (coin_pub, merchant_pub, h_contract_terms);
-
-
---
--- Name: deposits_default deposits_default_deposit_serial_id_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits_default
- ADD CONSTRAINT deposits_default_deposit_serial_id_pkey PRIMARY KEY (deposit_serial_id);
-
-
---
--- Name: django_content_type django_content_type_app_label_model_76bd3d3b_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type
- ADD CONSTRAINT django_content_type_app_label_model_76bd3d3b_uniq UNIQUE (app_label, model);
-
-
---
--- Name: django_content_type django_content_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type
- ADD CONSTRAINT django_content_type_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_migrations django_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_migrations
- ADD CONSTRAINT django_migrations_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_session django_session_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_session
- ADD CONSTRAINT django_session_pkey PRIMARY KEY (session_key);
-
-
---
--- Name: exchange_sign_keys exchange_sign_keys_esk_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys
- ADD CONSTRAINT exchange_sign_keys_esk_serial_key UNIQUE (esk_serial);
-
-
---
--- Name: exchange_sign_keys exchange_sign_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys
- ADD CONSTRAINT exchange_sign_keys_pkey PRIMARY KEY (exchange_pub);
-
-
---
--- Name: extension_details extension_details_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.extension_details
- ADD CONSTRAINT extension_details_pkey PRIMARY KEY (extension_details_serial_id);
-
-
---
--- Name: extension_details_default extension_details_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.extension_details_default
- ADD CONSTRAINT extension_details_default_pkey PRIMARY KEY (extension_details_serial_id);
-
-
---
--- Name: extensions extensions_extension_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.extensions
- ADD CONSTRAINT extensions_extension_id_key UNIQUE (extension_id);
-
-
---
--- Name: extensions extensions_name_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.extensions
- ADD CONSTRAINT extensions_name_key UNIQUE (name);
-
-
---
--- Name: global_fee global_fee_global_fee_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.global_fee
- ADD CONSTRAINT global_fee_global_fee_serial_key UNIQUE (global_fee_serial);
-
-
---
--- Name: global_fee global_fee_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.global_fee
- ADD CONSTRAINT global_fee_pkey PRIMARY KEY (start_date);
-
-
---
--- Name: history_requests history_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.history_requests
- ADD CONSTRAINT history_requests_pkey PRIMARY KEY (reserve_pub, request_timestamp);
-
-
---
--- Name: history_requests_default history_requests_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.history_requests_default
- ADD CONSTRAINT history_requests_default_pkey PRIMARY KEY (reserve_pub, request_timestamp);
-
-
---
--- Name: known_coins_default known_coins_default_known_coin_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins_default
- ADD CONSTRAINT known_coins_default_known_coin_id_key UNIQUE (known_coin_id);
-
-
---
--- Name: known_coins known_coins_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_pkey PRIMARY KEY (coin_pub);
-
-
---
--- Name: known_coins_default known_coins_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins_default
- ADD CONSTRAINT known_coins_default_pkey PRIMARY KEY (coin_pub);
-
-
---
--- Name: merchant_accounts merchant_accounts_h_wire_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_h_wire_key UNIQUE (h_wire);
-
-
---
--- Name: merchant_accounts merchant_accounts_merchant_serial_payto_uri_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_merchant_serial_payto_uri_key UNIQUE (merchant_serial, payto_uri);
-
-
---
--- Name: merchant_accounts merchant_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_pkey PRIMARY KEY (account_serial);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_h_contract_terms_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_h_contract_terms_key UNIQUE (merchant_serial, h_contract_terms);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_order_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_order_id_key UNIQUE (merchant_serial, order_id);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_pkey PRIMARY KEY (order_serial);
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_deposit_serial_credit_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_deposit_serial_credit_serial_key UNIQUE (deposit_serial, credit_serial);
-
-
---
--- Name: merchant_deposits merchant_deposits_order_serial_coin_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_order_serial_coin_pub_key UNIQUE (order_serial, coin_pub);
-
-
---
--- Name: merchant_deposits merchant_deposits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_pkey PRIMARY KEY (deposit_serial);
-
-
---
--- Name: merchant_exchange_signing_keys merchant_exchange_signing_key_exchange_pub_start_date_maste_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys
- ADD CONSTRAINT merchant_exchange_signing_key_exchange_pub_start_date_maste_key UNIQUE (exchange_pub, start_date, master_pub);
-
-
---
--- Name: merchant_exchange_signing_keys merchant_exchange_signing_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys
- ADD CONSTRAINT merchant_exchange_signing_keys_pkey PRIMARY KEY (signkey_serial);
-
-
---
--- Name: merchant_exchange_wire_fees merchant_exchange_wire_fees_master_pub_h_wire_method_start__key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees
- ADD CONSTRAINT merchant_exchange_wire_fees_master_pub_h_wire_method_start__key UNIQUE (master_pub, h_wire_method, start_date);
-
-
---
--- Name: merchant_exchange_wire_fees merchant_exchange_wire_fees_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees
- ADD CONSTRAINT merchant_exchange_wire_fees_pkey PRIMARY KEY (wirefee_serial);
-
-
---
--- Name: merchant_instances merchant_instances_merchant_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_merchant_id_key UNIQUE (merchant_id);
-
-
---
--- Name: merchant_instances merchant_instances_merchant_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_merchant_pub_key UNIQUE (merchant_pub);
-
-
---
--- Name: merchant_instances merchant_instances_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_pkey PRIMARY KEY (merchant_serial);
-
-
---
--- Name: merchant_inventory merchant_inventory_merchant_serial_product_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_merchant_serial_product_id_key UNIQUE (merchant_serial, product_id);
-
-
---
--- Name: merchant_inventory merchant_inventory_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_pkey PRIMARY KEY (product_serial);
-
-
---
--- Name: merchant_keys merchant_keys_merchant_priv_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_merchant_priv_key UNIQUE (merchant_priv);
-
-
---
--- Name: merchant_keys merchant_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_pkey PRIMARY KEY (merchant_serial);
-
-
---
--- Name: merchant_kyc merchant_kyc_kyc_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_kyc
- ADD CONSTRAINT merchant_kyc_kyc_serial_id_key UNIQUE (kyc_serial_id);
-
-
---
--- Name: merchant_kyc merchant_kyc_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_kyc
- ADD CONSTRAINT merchant_kyc_pkey PRIMARY KEY (account_serial, exchange_url);
-
-
---
--- Name: merchant_orders merchant_orders_merchant_serial_order_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_merchant_serial_order_id_key UNIQUE (merchant_serial, order_id);
-
-
---
--- Name: merchant_orders merchant_orders_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_pkey PRIMARY KEY (order_serial);
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_pkey PRIMARY KEY (refund_serial);
-
-
---
--- Name: merchant_refunds merchant_refunds_order_serial_coin_pub_rtransaction_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_order_serial_coin_pub_rtransaction_id_key UNIQUE (order_serial, coin_pub, rtransaction_id);
-
-
---
--- Name: merchant_refunds merchant_refunds_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_pkey PRIMARY KEY (refund_serial);
-
-
---
--- Name: merchant_tip_pickup_signatures merchant_tip_pickup_signatures_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickup_signatures
- ADD CONSTRAINT merchant_tip_pickup_signatures_pkey PRIMARY KEY (pickup_serial, coin_offset);
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_pickup_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_pickup_id_key UNIQUE (pickup_id);
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_pkey PRIMARY KEY (pickup_serial);
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_priv_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_priv_key UNIQUE (reserve_priv);
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_serial_key UNIQUE (reserve_serial);
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_pkey PRIMARY KEY (reserve_serial);
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_reserve_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_reserve_pub_key UNIQUE (reserve_pub);
-
-
---
--- Name: merchant_tips merchant_tips_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_pkey PRIMARY KEY (tip_serial);
-
-
---
--- Name: merchant_tips merchant_tips_tip_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_tip_id_key UNIQUE (tip_id);
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_pkey PRIMARY KEY (credit_serial);
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_deposit_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_deposit_serial_key UNIQUE (deposit_serial);
-
-
---
--- Name: merchant_transfers merchant_transfers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_pkey PRIMARY KEY (credit_serial);
-
-
---
--- Name: merchant_transfers merchant_transfers_wtid_exchange_url_account_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_wtid_exchange_url_account_serial_key UNIQUE (wtid, exchange_url, account_serial);
-
-
---
--- Name: partner_accounts partner_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.partner_accounts
- ADD CONSTRAINT partner_accounts_pkey PRIMARY KEY (payto_uri);
-
-
---
--- Name: partners partners_partner_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.partners
- ADD CONSTRAINT partners_partner_serial_id_key UNIQUE (partner_serial_id);
-
-
---
--- Name: prewire prewire_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire
- ADD CONSTRAINT prewire_pkey PRIMARY KEY (prewire_uuid);
-
-
---
--- Name: prewire_default prewire_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire_default
- ADD CONSTRAINT prewire_default_pkey PRIMARY KEY (prewire_uuid);
-
-
---
--- Name: purse_deposits purse_deposits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_deposits
- ADD CONSTRAINT purse_deposits_pkey PRIMARY KEY (purse_pub, coin_pub);
-
-
---
--- Name: purse_deposits_default purse_deposits_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_deposits_default
- ADD CONSTRAINT purse_deposits_default_pkey PRIMARY KEY (purse_pub, coin_pub);
-
-
---
--- Name: purse_deposits_default purse_deposits_default_purse_deposit_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_deposits_default
- ADD CONSTRAINT purse_deposits_default_purse_deposit_serial_id_key UNIQUE (purse_deposit_serial_id);
-
-
---
--- Name: purse_merges purse_merges_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_merges
- ADD CONSTRAINT purse_merges_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: purse_merges_default purse_merges_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_merges_default
- ADD CONSTRAINT purse_merges_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: purse_merges_default purse_merges_default_purse_merge_request_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_merges_default
- ADD CONSTRAINT purse_merges_default_purse_merge_request_serial_id_key UNIQUE (purse_merge_request_serial_id);
-
-
---
--- Name: purse_requests purse_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_requests
- ADD CONSTRAINT purse_requests_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: purse_requests_default purse_requests_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_requests_default
- ADD CONSTRAINT purse_requests_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: purse_requests_default purse_requests_default_purse_requests_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_requests_default
- ADD CONSTRAINT purse_requests_default_purse_requests_serial_id_key UNIQUE (purse_requests_serial_id);
-
-
---
--- Name: recoup_default recoup_default_recoup_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_default
- ADD CONSTRAINT recoup_default_recoup_uuid_key UNIQUE (recoup_uuid);
-
-
---
--- Name: recoup_refresh_default recoup_refresh_default_recoup_refresh_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh_default
- ADD CONSTRAINT recoup_refresh_default_recoup_refresh_uuid_key UNIQUE (recoup_refresh_uuid);
-
-
---
--- Name: refresh_commitments_default refresh_commitments_default_melt_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments_default
- ADD CONSTRAINT refresh_commitments_default_melt_serial_id_key UNIQUE (melt_serial_id);
-
-
---
--- Name: refresh_commitments refresh_commitments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_pkey PRIMARY KEY (rc);
-
-
---
--- Name: refresh_commitments_default refresh_commitments_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments_default
- ADD CONSTRAINT refresh_commitments_default_pkey PRIMARY KEY (rc);
-
-
---
--- Name: refresh_revealed_coins_default refresh_revealed_coins_default_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins_default
- ADD CONSTRAINT refresh_revealed_coins_default_coin_ev_key UNIQUE (coin_ev);
-
-
---
--- Name: refresh_revealed_coins_default refresh_revealed_coins_default_h_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins_default
- ADD CONSTRAINT refresh_revealed_coins_default_h_coin_ev_key UNIQUE (h_coin_ev);
-
-
---
--- Name: refresh_revealed_coins_default refresh_revealed_coins_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins_default
- ADD CONSTRAINT refresh_revealed_coins_default_pkey PRIMARY KEY (melt_serial_id, freshcoin_index);
-
-
---
--- Name: refresh_revealed_coins_default refresh_revealed_coins_default_rrc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins_default
- ADD CONSTRAINT refresh_revealed_coins_default_rrc_serial_key UNIQUE (rrc_serial);
-
-
---
--- Name: refresh_transfer_keys refresh_transfer_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys
- ADD CONSTRAINT refresh_transfer_keys_pkey PRIMARY KEY (melt_serial_id);
-
-
---
--- Name: refresh_transfer_keys_default refresh_transfer_keys_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys_default
- ADD CONSTRAINT refresh_transfer_keys_default_pkey PRIMARY KEY (melt_serial_id);
-
-
---
--- Name: refresh_transfer_keys_default refresh_transfer_keys_default_rtc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys_default
- ADD CONSTRAINT refresh_transfer_keys_default_rtc_serial_key UNIQUE (rtc_serial);
-
-
---
--- Name: refunds_default refunds_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds_default
- ADD CONSTRAINT refunds_default_pkey PRIMARY KEY (deposit_serial_id, rtransaction_id);
-
-
---
--- Name: refunds_default refunds_default_refund_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds_default
- ADD CONSTRAINT refunds_default_refund_serial_id_key UNIQUE (refund_serial_id);
-
-
---
--- Name: reserves_close_default reserves_close_default_close_uuid_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close_default
- ADD CONSTRAINT reserves_close_default_close_uuid_pkey PRIMARY KEY (close_uuid);
-
-
---
--- Name: reserves reserves_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves
- ADD CONSTRAINT reserves_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves_default reserves_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_default
- ADD CONSTRAINT reserves_default_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves_in reserves_in_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves_in_default reserves_in_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in_default
- ADD CONSTRAINT reserves_in_default_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves_in_default reserves_in_default_reserve_in_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in_default
- ADD CONSTRAINT reserves_in_default_reserve_in_serial_id_key UNIQUE (reserve_in_serial_id);
-
-
---
--- Name: reserves_out reserves_out_h_blind_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_h_blind_ev_key UNIQUE (h_blind_ev);
-
-
---
--- Name: reserves_out_default reserves_out_default_h_blind_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out_default
- ADD CONSTRAINT reserves_out_default_h_blind_ev_key UNIQUE (h_blind_ev);
-
-
---
--- Name: reserves_out_default reserves_out_default_reserve_out_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out_default
- ADD CONSTRAINT reserves_out_default_reserve_out_serial_id_key UNIQUE (reserve_out_serial_id);
-
-
---
--- Name: revolving_work_shards revolving_work_shards_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards
- ADD CONSTRAINT revolving_work_shards_pkey PRIMARY KEY (job_name, start_row);
-
-
---
--- Name: revolving_work_shards revolving_work_shards_shard_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards
- ADD CONSTRAINT revolving_work_shards_shard_serial_id_key UNIQUE (shard_serial_id);
-
-
---
--- Name: signkey_revocations signkey_revocations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_pkey PRIMARY KEY (esk_serial);
-
-
---
--- Name: signkey_revocations signkey_revocations_signkey_revocations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_signkey_revocations_serial_id_key UNIQUE (signkey_revocations_serial_id);
-
-
---
--- Name: wad_in_entries wad_in_entries_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_in_entries
- ADD CONSTRAINT wad_in_entries_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: wad_in_entries_default wad_in_entries_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_in_entries_default
- ADD CONSTRAINT wad_in_entries_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: wad_in_entries_default wad_in_entries_default_wad_in_entry_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_in_entries_default
- ADD CONSTRAINT wad_in_entries_default_wad_in_entry_serial_id_key UNIQUE (wad_in_entry_serial_id);
-
-
---
--- Name: wad_out_entries wad_out_entries_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_out_entries
- ADD CONSTRAINT wad_out_entries_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: wad_out_entries_default wad_out_entries_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_out_entries_default
- ADD CONSTRAINT wad_out_entries_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: wad_out_entries_default wad_out_entries_default_wad_out_entry_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_out_entries_default
- ADD CONSTRAINT wad_out_entries_default_wad_out_entry_serial_id_key UNIQUE (wad_out_entry_serial_id);
-
-
---
--- Name: wads_in wads_in_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in
- ADD CONSTRAINT wads_in_pkey PRIMARY KEY (wad_id);
-
-
---
--- Name: wads_in_default wads_in_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in_default
- ADD CONSTRAINT wads_in_default_pkey PRIMARY KEY (wad_id);
-
-
---
--- Name: wads_in wads_in_wad_id_origin_exchange_url_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in
- ADD CONSTRAINT wads_in_wad_id_origin_exchange_url_key UNIQUE (wad_id, origin_exchange_url);
-
-
---
--- Name: wads_in_default wads_in_default_wad_id_origin_exchange_url_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in_default
- ADD CONSTRAINT wads_in_default_wad_id_origin_exchange_url_key UNIQUE (wad_id, origin_exchange_url);
-
-
---
--- Name: wads_in_default wads_in_default_wad_in_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in_default
- ADD CONSTRAINT wads_in_default_wad_in_serial_id_key UNIQUE (wad_in_serial_id);
-
-
---
--- Name: wads_in_default wads_in_default_wad_is_origin_exchange_url_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in_default
- ADD CONSTRAINT wads_in_default_wad_is_origin_exchange_url_key UNIQUE (wad_id, origin_exchange_url);
-
-
---
--- Name: wads_out wads_out_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_out
- ADD CONSTRAINT wads_out_pkey PRIMARY KEY (wad_id);
-
-
---
--- Name: wads_out_default wads_out_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_out_default
- ADD CONSTRAINT wads_out_default_pkey PRIMARY KEY (wad_id);
-
-
---
--- Name: wads_out_default wads_out_default_wad_out_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_out_default
- ADD CONSTRAINT wads_out_default_wad_out_serial_id_key UNIQUE (wad_out_serial_id);
-
-
---
--- Name: wire_accounts wire_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_accounts
- ADD CONSTRAINT wire_accounts_pkey PRIMARY KEY (payto_uri);
-
-
---
--- Name: wire_auditor_account_progress wire_auditor_account_progress_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_account_progress
- ADD CONSTRAINT wire_auditor_account_progress_pkey PRIMARY KEY (master_pub, account_name);
-
-
---
--- Name: wire_auditor_progress wire_auditor_progress_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_progress
- ADD CONSTRAINT wire_auditor_progress_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: wire_fee wire_fee_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee
- ADD CONSTRAINT wire_fee_pkey PRIMARY KEY (wire_method, start_date);
-
-
---
--- Name: wire_fee wire_fee_wire_fee_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee
- ADD CONSTRAINT wire_fee_wire_fee_serial_key UNIQUE (wire_fee_serial);
-
-
---
--- Name: wire_out_default wire_out_default_wireout_uuid_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out_default
- ADD CONSTRAINT wire_out_default_wireout_uuid_pkey PRIMARY KEY (wireout_uuid);
-
-
---
--- Name: wire_out wire_out_wtid_raw_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out
- ADD CONSTRAINT wire_out_wtid_raw_key UNIQUE (wtid_raw);
-
-
---
--- Name: wire_out_default wire_out_default_wtid_raw_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out_default
- ADD CONSTRAINT wire_out_default_wtid_raw_key UNIQUE (wtid_raw);
-
-
---
--- Name: wire_targets wire_targets_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets
- ADD CONSTRAINT wire_targets_pkey PRIMARY KEY (wire_target_h_payto);
-
-
---
--- Name: wire_targets_default wire_targets_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets_default
- ADD CONSTRAINT wire_targets_default_pkey PRIMARY KEY (wire_target_h_payto);
-
-
---
--- Name: wire_targets_default wire_targets_default_wire_target_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets_default
- ADD CONSTRAINT wire_targets_default_wire_target_serial_id_key UNIQUE (wire_target_serial_id);
-
-
---
--- Name: work_shards work_shards_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards
- ADD CONSTRAINT work_shards_pkey PRIMARY KEY (job_name, start_row);
-
-
---
--- Name: work_shards work_shards_shard_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards
- ADD CONSTRAINT work_shards_shard_serial_id_key UNIQUE (shard_serial_id);
-
-
---
--- Name: account_merges_by_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX account_merges_by_reserve_pub ON ONLY public.account_merges USING btree (reserve_pub);
-
-
---
--- Name: account_merges_default_reserve_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX account_merges_default_reserve_pub_idx ON public.account_merges_default USING btree (reserve_pub);
-
-
---
--- Name: aggregation_tracking_by_wtid_raw_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX aggregation_tracking_by_wtid_raw_index ON ONLY public.aggregation_tracking USING btree (wtid_raw);
-
-
---
--- Name: INDEX aggregation_tracking_by_wtid_raw_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.aggregation_tracking_by_wtid_raw_index IS 'for lookup_transactions';
-
-
---
--- Name: aggregation_tracking_default_wtid_raw_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX aggregation_tracking_default_wtid_raw_idx ON public.aggregation_tracking_default USING btree (wtid_raw);
-
-
---
--- Name: app_banktransaction_credit_account_id_a8ba05ac; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_credit_account_id_a8ba05ac ON public.app_banktransaction USING btree (credit_account_id);
-
-
---
--- Name: app_banktransaction_date_f72bcad6; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_date_f72bcad6 ON public.app_banktransaction USING btree (date);
-
-
---
--- Name: app_banktransaction_debit_account_id_5b1f7528; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_debit_account_id_5b1f7528 ON public.app_banktransaction USING btree (debit_account_id);
-
-
---
--- Name: app_banktransaction_request_uid_b7d06af5_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_request_uid_b7d06af5_like ON public.app_banktransaction USING btree (request_uid varchar_pattern_ops);
-
-
---
--- Name: app_talerwithdrawoperation_selected_exchange_account__6c8b96cf; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_talerwithdrawoperation_selected_exchange_account__6c8b96cf ON public.app_talerwithdrawoperation USING btree (selected_exchange_account_id);
-
-
---
--- Name: app_talerwithdrawoperation_withdraw_account_id_992dc5b3; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_talerwithdrawoperation_withdraw_account_id_992dc5b3 ON public.app_talerwithdrawoperation USING btree (withdraw_account_id);
-
-
---
--- Name: auditor_historic_reserve_summary_by_master_pub_start_date; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auditor_historic_reserve_summary_by_master_pub_start_date ON public.auditor_historic_reserve_summary USING btree (master_pub, start_date);
-
-
---
--- Name: auditor_reserves_by_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auditor_reserves_by_reserve_pub ON public.auditor_reserves USING btree (reserve_pub);
-
-
---
--- Name: auth_group_name_a6ea08ec_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_name_a6ea08ec_like ON public.auth_group USING btree (name varchar_pattern_ops);
-
-
---
--- Name: auth_group_permissions_group_id_b120cbf9; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_permissions_group_id_b120cbf9 ON public.auth_group_permissions USING btree (group_id);
-
-
---
--- Name: auth_group_permissions_permission_id_84c5c92e; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_permissions_permission_id_84c5c92e ON public.auth_group_permissions USING btree (permission_id);
-
-
---
--- Name: auth_permission_content_type_id_2f476e4b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_permission_content_type_id_2f476e4b ON public.auth_permission USING btree (content_type_id);
-
-
---
--- Name: auth_user_groups_group_id_97559544; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_groups_group_id_97559544 ON public.auth_user_groups USING btree (group_id);
-
-
---
--- Name: auth_user_groups_user_id_6a12ed8b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_groups_user_id_6a12ed8b ON public.auth_user_groups USING btree (user_id);
-
-
---
--- Name: auth_user_user_permissions_permission_id_1fbb5f2c; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_user_permissions_permission_id_1fbb5f2c ON public.auth_user_user_permissions USING btree (permission_id);
-
-
---
--- Name: auth_user_user_permissions_user_id_a95ead1b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_user_permissions_user_id_a95ead1b ON public.auth_user_user_permissions USING btree (user_id);
-
-
---
--- Name: auth_user_username_6821ab7c_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_username_6821ab7c_like ON public.auth_user USING btree (username varchar_pattern_ops);
-
-
---
--- Name: denominations_by_expire_legal_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX denominations_by_expire_legal_index ON public.denominations USING btree (expire_legal);
-
-
---
--- Name: deposits_by_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_by_coin_pub_index ON ONLY public.deposits USING btree (coin_pub);
-
-
---
--- Name: deposits_by_ready_main_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_by_ready_main_index ON ONLY public.deposits_by_ready USING btree (wire_deadline, shard, coin_pub);
-
-
---
--- Name: deposits_by_ready_default_wire_deadline_shard_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_by_ready_default_wire_deadline_shard_coin_pub_idx ON public.deposits_by_ready_default USING btree (wire_deadline, shard, coin_pub);
-
-
---
--- Name: deposits_default_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_default_coin_pub_idx ON public.deposits_default USING btree (coin_pub);
-
-
---
--- Name: deposits_for_matching_main_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_for_matching_main_index ON ONLY public.deposits_for_matching USING btree (refund_deadline, merchant_pub, coin_pub);
-
-
---
--- Name: deposits_for_matching_default_refund_deadline_merchant_pub__idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_for_matching_default_refund_deadline_merchant_pub__idx ON public.deposits_for_matching_default USING btree (refund_deadline, merchant_pub, coin_pub);
-
-
---
--- Name: django_session_expire_date_a5c62663; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX django_session_expire_date_a5c62663 ON public.django_session USING btree (expire_date);
-
-
---
--- Name: django_session_session_key_c0390e0f_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX django_session_session_key_c0390e0f_like ON public.django_session USING btree (session_key varchar_pattern_ops);
-
-
---
--- Name: global_fee_by_end_date_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX global_fee_by_end_date_index ON public.global_fee USING btree (end_date);
-
-
---
--- Name: merchant_contract_terms_by_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_expiration ON public.merchant_contract_terms USING btree (paid, pay_deadline);
-
-
---
--- Name: INDEX merchant_contract_terms_by_expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.merchant_contract_terms_by_expiration IS 'for unlock_contracts';
-
-
---
--- Name: merchant_contract_terms_by_merchant_and_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_and_expiration ON public.merchant_contract_terms USING btree (merchant_serial, pay_deadline);
-
-
---
--- Name: INDEX merchant_contract_terms_by_merchant_and_expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.merchant_contract_terms_by_merchant_and_expiration IS 'for delete_contract_terms';
-
-
---
--- Name: merchant_contract_terms_by_merchant_and_payment; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_and_payment ON public.merchant_contract_terms USING btree (merchant_serial, paid);
-
-
---
--- Name: merchant_contract_terms_by_merchant_session_and_fulfillment; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_session_and_fulfillment ON public.merchant_contract_terms USING btree (merchant_serial, fulfillment_url, session_id);
-
-
---
--- Name: merchant_inventory_locks_by_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_inventory_locks_by_expiration ON public.merchant_inventory_locks USING btree (expiration);
-
-
---
--- Name: merchant_inventory_locks_by_uuid; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_inventory_locks_by_uuid ON public.merchant_inventory_locks USING btree (lock_uuid);
-
-
---
--- Name: merchant_orders_by_creation_time; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_by_creation_time ON public.merchant_orders USING btree (creation_time);
-
-
---
--- Name: merchant_orders_by_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_by_expiration ON public.merchant_orders USING btree (pay_deadline);
-
-
---
--- Name: merchant_orders_locks_by_order_and_product; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_locks_by_order_and_product ON public.merchant_order_locks USING btree (order_serial, product_serial);
-
-
---
--- Name: merchant_refunds_by_coin_and_order; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_refunds_by_coin_and_order ON public.merchant_refunds USING btree (coin_pub, order_serial);
-
-
---
--- Name: merchant_tip_reserves_by_exchange_balance; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_exchange_balance ON public.merchant_tip_reserves USING btree (exchange_initial_balance_val, exchange_initial_balance_frac);
-
-
---
--- Name: merchant_tip_reserves_by_merchant_serial_and_creation_time; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_merchant_serial_and_creation_time ON public.merchant_tip_reserves USING btree (merchant_serial, creation_time);
-
-
---
--- Name: merchant_tip_reserves_by_reserve_pub_and_merchant_serial; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_reserve_pub_and_merchant_serial ON public.merchant_tip_reserves USING btree (reserve_pub, merchant_serial, creation_time);
-
-
---
--- Name: merchant_tips_by_pickup_and_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tips_by_pickup_and_expiration ON public.merchant_tips USING btree (was_picked_up, expiration);
-
-
---
--- Name: merchant_transfers_by_credit; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_transfers_by_credit ON public.merchant_transfer_to_coin USING btree (credit_serial);
-
-
---
--- Name: partner_accounts_index_by_partner_and_time; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX partner_accounts_index_by_partner_and_time ON public.partner_accounts USING btree (partner_serial_id, last_seen);
-
-
---
--- Name: prewire_by_failed_finished_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prewire_by_failed_finished_index ON ONLY public.prewire USING btree (failed, finished);
-
-
---
--- Name: INDEX prewire_by_failed_finished_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prewire_by_failed_finished_index IS 'for wire_prepare_data_get';
-
-
---
--- Name: prewire_by_finished_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prewire_by_finished_index ON ONLY public.prewire USING btree (finished);
-
-
---
--- Name: INDEX prewire_by_finished_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prewire_by_finished_index IS 'for gc_prewire';
-
-
---
--- Name: prewire_default_failed_finished_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prewire_default_failed_finished_idx ON public.prewire_default USING btree (failed, finished);
-
-
---
--- Name: prewire_default_finished_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prewire_default_finished_idx ON public.prewire_default USING btree (finished);
-
-
---
--- Name: purse_deposits_by_coin_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_deposits_by_coin_pub ON ONLY public.purse_deposits USING btree (coin_pub);
-
-
---
--- Name: purse_deposits_default_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_deposits_default_coin_pub_idx ON public.purse_deposits_default USING btree (coin_pub);
-
-
---
--- Name: purse_merges_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_merges_reserve_pub ON ONLY public.purse_merges USING btree (reserve_pub);
-
-
---
--- Name: INDEX purse_merges_reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.purse_merges_reserve_pub IS 'needed in reserve history computation';
-
-
---
--- Name: purse_merges_default_reserve_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_merges_default_reserve_pub_idx ON public.purse_merges_default USING btree (reserve_pub);
-
-
---
--- Name: purse_requests_merge_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_requests_merge_pub ON ONLY public.purse_requests USING btree (merge_pub);
-
-
---
--- Name: purse_requests_default_merge_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_requests_default_merge_pub_idx ON public.purse_requests_default USING btree (merge_pub);
-
-
---
--- Name: recoup_by_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_by_coin_pub_index ON ONLY public.recoup USING btree (coin_pub);
-
-
---
--- Name: recoup_by_reserve_main_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_by_reserve_main_index ON ONLY public.recoup_by_reserve USING btree (reserve_out_serial_id);
-
-
---
--- Name: recoup_by_reserve_default_reserve_out_serial_id_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_by_reserve_default_reserve_out_serial_id_idx ON public.recoup_by_reserve_default USING btree (reserve_out_serial_id);
-
-
---
--- Name: recoup_default_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_default_coin_pub_idx ON public.recoup_default USING btree (coin_pub);
-
-
---
--- Name: recoup_refresh_by_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_by_coin_pub_index ON ONLY public.recoup_refresh USING btree (coin_pub);
-
-
---
--- Name: recoup_refresh_by_rrc_serial_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_by_rrc_serial_index ON ONLY public.recoup_refresh USING btree (rrc_serial);
-
-
---
--- Name: recoup_refresh_default_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_default_coin_pub_idx ON public.recoup_refresh_default USING btree (coin_pub);
-
-
---
--- Name: recoup_refresh_default_rrc_serial_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_default_rrc_serial_idx ON public.recoup_refresh_default USING btree (rrc_serial);
-
-
---
--- Name: refresh_commitments_by_old_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_commitments_by_old_coin_pub_index ON ONLY public.refresh_commitments USING btree (old_coin_pub);
-
-
---
--- Name: refresh_commitments_default_old_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_commitments_default_old_coin_pub_idx ON public.refresh_commitments_default USING btree (old_coin_pub);
-
-
---
--- Name: refresh_revealed_coins_coins_by_melt_serial_id_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_revealed_coins_coins_by_melt_serial_id_index ON ONLY public.refresh_revealed_coins USING btree (melt_serial_id);
-
-
---
--- Name: refresh_revealed_coins_default_melt_serial_id_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_revealed_coins_default_melt_serial_id_idx ON public.refresh_revealed_coins_default USING btree (melt_serial_id);
-
-
---
--- Name: refunds_by_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refunds_by_coin_pub_index ON ONLY public.refunds USING btree (coin_pub);
-
-
---
--- Name: refunds_default_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refunds_default_coin_pub_idx ON public.refunds_default USING btree (coin_pub);
-
-
---
--- Name: reserves_by_expiration_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_by_expiration_index ON ONLY public.reserves USING btree (expiration_date, current_balance_val, current_balance_frac);
-
-
---
--- Name: INDEX reserves_by_expiration_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_by_expiration_index IS 'used in get_expired_reserves';
-
-
---
--- Name: reserves_by_gc_date_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_by_gc_date_index ON ONLY public.reserves USING btree (gc_date);
-
-
---
--- Name: INDEX reserves_by_gc_date_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_by_gc_date_index IS 'for reserve garbage collection';
-
-
---
--- Name: reserves_by_reserve_uuid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_by_reserve_uuid_index ON ONLY public.reserves USING btree (reserve_uuid);
-
-
---
--- Name: reserves_close_by_close_uuid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_by_close_uuid_index ON ONLY public.reserves_close USING btree (close_uuid);
-
-
---
--- Name: reserves_close_by_reserve_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_by_reserve_pub_index ON ONLY public.reserves_close USING btree (reserve_pub);
-
-
---
--- Name: reserves_close_default_close_uuid_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_default_close_uuid_idx ON public.reserves_close_default USING btree (close_uuid);
-
-
---
--- Name: reserves_close_default_reserve_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_default_reserve_pub_idx ON public.reserves_close_default USING btree (reserve_pub);
-
-
---
--- Name: reserves_default_expiration_date_current_balance_val_curren_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_default_expiration_date_current_balance_val_curren_idx ON public.reserves_default USING btree (expiration_date, current_balance_val, current_balance_frac);
-
-
---
--- Name: reserves_default_gc_date_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_default_gc_date_idx ON public.reserves_default USING btree (gc_date);
-
-
---
--- Name: reserves_default_reserve_uuid_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_default_reserve_uuid_idx ON public.reserves_default USING btree (reserve_uuid);
-
-
---
--- Name: reserves_in_by_exch_accnt_reserve_in_serial_id_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_by_exch_accnt_reserve_in_serial_id_idx ON ONLY public.reserves_in USING btree (exchange_account_section, reserve_in_serial_id DESC);
-
-
---
--- Name: reserves_in_by_exch_accnt_section_execution_date_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_by_exch_accnt_section_execution_date_idx ON ONLY public.reserves_in USING btree (exchange_account_section, execution_date);
-
-
---
--- Name: reserves_in_by_reserve_in_serial_id_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_by_reserve_in_serial_id_index ON ONLY public.reserves_in USING btree (reserve_in_serial_id);
-
-
---
--- Name: reserves_in_default_exchange_account_section_execution_date_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_default_exchange_account_section_execution_date_idx ON public.reserves_in_default USING btree (exchange_account_section, execution_date);
-
-
---
--- Name: reserves_in_default_exchange_account_section_reserve_in_ser_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_default_exchange_account_section_reserve_in_ser_idx ON public.reserves_in_default USING btree (exchange_account_section, reserve_in_serial_id DESC);
-
-
---
--- Name: reserves_in_default_reserve_in_serial_id_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_default_reserve_in_serial_id_idx ON public.reserves_in_default USING btree (reserve_in_serial_id);
-
-
---
--- Name: reserves_out_by_reserve_main_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_by_reserve_main_index ON ONLY public.reserves_out_by_reserve USING btree (reserve_uuid);
-
-
---
--- Name: reserves_out_by_reserve_default_reserve_uuid_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_by_reserve_default_reserve_uuid_idx ON public.reserves_out_by_reserve_default USING btree (reserve_uuid);
-
-
---
--- Name: reserves_out_by_reserve_out_serial_id_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_by_reserve_out_serial_id_index ON ONLY public.reserves_out USING btree (reserve_out_serial_id);
-
-
---
--- Name: reserves_out_by_reserve_uuid_and_execution_date_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_by_reserve_uuid_and_execution_date_index ON ONLY public.reserves_out USING btree (reserve_uuid, execution_date);
-
-
---
--- Name: INDEX reserves_out_by_reserve_uuid_and_execution_date_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_out_by_reserve_uuid_and_execution_date_index IS 'for get_reserves_out and exchange_do_withdraw_limit_check';
-
-
---
--- Name: reserves_out_default_reserve_out_serial_id_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_default_reserve_out_serial_id_idx ON public.reserves_out_default USING btree (reserve_out_serial_id);
-
-
---
--- Name: reserves_out_default_reserve_uuid_execution_date_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_default_reserve_uuid_execution_date_idx ON public.reserves_out_default USING btree (reserve_uuid, execution_date);
-
-
---
--- Name: revolving_work_shards_by_job_name_active_last_attempt_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX revolving_work_shards_by_job_name_active_last_attempt_index ON public.revolving_work_shards USING btree (job_name, active, last_attempt);
-
-
---
--- Name: wad_in_entries_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wad_in_entries_reserve_pub ON ONLY public.wad_in_entries USING btree (reserve_pub);
-
-
---
--- Name: INDEX wad_in_entries_reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.wad_in_entries_reserve_pub IS 'needed in reserve history computation';
-
-
---
--- Name: wad_in_entries_default_reserve_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wad_in_entries_default_reserve_pub_idx ON public.wad_in_entries_default USING btree (reserve_pub);
-
-
---
--- Name: wad_out_entries_by_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wad_out_entries_by_reserve_pub ON ONLY public.wad_out_entries USING btree (reserve_pub);
-
-
---
--- Name: wad_out_entries_default_reserve_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wad_out_entries_default_reserve_pub_idx ON public.wad_out_entries_default USING btree (reserve_pub);
-
-
---
--- Name: wire_fee_by_end_date_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wire_fee_by_end_date_index ON public.wire_fee USING btree (end_date);
-
-
---
--- Name: wire_out_by_wire_target_h_payto_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wire_out_by_wire_target_h_payto_index ON ONLY public.wire_out USING btree (wire_target_h_payto);
-
-
---
--- Name: wire_out_default_wire_target_h_payto_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wire_out_default_wire_target_h_payto_idx ON public.wire_out_default USING btree (wire_target_h_payto);
-
-
---
--- Name: work_shards_by_job_name_completed_last_attempt_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX work_shards_by_job_name_completed_last_attempt_index ON public.work_shards USING btree (job_name, completed, last_attempt);
-
-
---
--- Name: account_merges_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.account_merges_pkey ATTACH PARTITION public.account_merges_default_pkey;
-
-
---
--- Name: account_merges_default_reserve_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.account_merges_by_reserve_pub ATTACH PARTITION public.account_merges_default_reserve_pub_idx;
-
-
---
--- Name: aggregation_tracking_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.aggregation_tracking_pkey ATTACH PARTITION public.aggregation_tracking_default_pkey;
-
-
---
--- Name: aggregation_tracking_default_wtid_raw_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.aggregation_tracking_by_wtid_raw_index ATTACH PARTITION public.aggregation_tracking_default_wtid_raw_idx;
-
-
---
--- Name: close_requests_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.close_requests_pkey ATTACH PARTITION public.close_requests_default_pkey;
-
-
---
--- Name: contracts_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.contracts_pkey ATTACH PARTITION public.contracts_default_pkey;
-
-
---
--- Name: cs_nonce_locks_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.cs_nonce_locks_pkey ATTACH PARTITION public.cs_nonce_locks_default_pkey;
-
-
---
--- Name: deposits_by_ready_default_wire_deadline_shard_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.deposits_by_ready_main_index ATTACH PARTITION public.deposits_by_ready_default_wire_deadline_shard_coin_pub_idx;
-
-
---
--- Name: deposits_default_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.deposits_by_coin_pub_index ATTACH PARTITION public.deposits_default_coin_pub_idx;
-
-
---
--- Name: deposits_for_matching_default_refund_deadline_merchant_pub__idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.deposits_for_matching_main_index ATTACH PARTITION public.deposits_for_matching_default_refund_deadline_merchant_pub__idx;
-
-
---
--- Name: extension_details_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.extension_details_pkey ATTACH PARTITION public.extension_details_default_pkey;
-
-
---
--- Name: history_requests_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.history_requests_pkey ATTACH PARTITION public.history_requests_default_pkey;
-
-
---
--- Name: known_coins_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.known_coins_pkey ATTACH PARTITION public.known_coins_default_pkey;
-
-
---
--- Name: prewire_default_failed_finished_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.prewire_by_failed_finished_index ATTACH PARTITION public.prewire_default_failed_finished_idx;
-
-
---
--- Name: prewire_default_finished_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.prewire_by_finished_index ATTACH PARTITION public.prewire_default_finished_idx;
-
-
---
--- Name: prewire_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.prewire_pkey ATTACH PARTITION public.prewire_default_pkey;
-
-
---
--- Name: purse_deposits_default_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_deposits_by_coin_pub ATTACH PARTITION public.purse_deposits_default_coin_pub_idx;
-
-
---
--- Name: purse_deposits_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_deposits_pkey ATTACH PARTITION public.purse_deposits_default_pkey;
-
-
---
--- Name: purse_merges_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_merges_pkey ATTACH PARTITION public.purse_merges_default_pkey;
-
-
---
--- Name: purse_merges_default_reserve_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_merges_reserve_pub ATTACH PARTITION public.purse_merges_default_reserve_pub_idx;
-
-
---
--- Name: purse_requests_default_merge_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_requests_merge_pub ATTACH PARTITION public.purse_requests_default_merge_pub_idx;
-
-
---
--- Name: purse_requests_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_requests_pkey ATTACH PARTITION public.purse_requests_default_pkey;
-
-
---
--- Name: recoup_by_reserve_default_reserve_out_serial_id_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.recoup_by_reserve_main_index ATTACH PARTITION public.recoup_by_reserve_default_reserve_out_serial_id_idx;
-
-
---
--- Name: recoup_default_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.recoup_by_coin_pub_index ATTACH PARTITION public.recoup_default_coin_pub_idx;
-
-
---
--- Name: recoup_refresh_default_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.recoup_refresh_by_coin_pub_index ATTACH PARTITION public.recoup_refresh_default_coin_pub_idx;
-
-
---
--- Name: recoup_refresh_default_rrc_serial_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.recoup_refresh_by_rrc_serial_index ATTACH PARTITION public.recoup_refresh_default_rrc_serial_idx;
-
-
---
--- Name: refresh_commitments_default_old_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.refresh_commitments_by_old_coin_pub_index ATTACH PARTITION public.refresh_commitments_default_old_coin_pub_idx;
-
-
---
--- Name: refresh_commitments_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.refresh_commitments_pkey ATTACH PARTITION public.refresh_commitments_default_pkey;
-
-
---
--- Name: refresh_revealed_coins_default_melt_serial_id_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.refresh_revealed_coins_coins_by_melt_serial_id_index ATTACH PARTITION public.refresh_revealed_coins_default_melt_serial_id_idx;
-
-
---
--- Name: refresh_transfer_keys_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.refresh_transfer_keys_pkey ATTACH PARTITION public.refresh_transfer_keys_default_pkey;
-
-
---
--- Name: refunds_default_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.refunds_by_coin_pub_index ATTACH PARTITION public.refunds_default_coin_pub_idx;
-
-
---
--- Name: reserves_close_default_close_uuid_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_close_by_close_uuid_index ATTACH PARTITION public.reserves_close_default_close_uuid_idx;
-
-
---
--- Name: reserves_close_default_reserve_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_close_by_reserve_pub_index ATTACH PARTITION public.reserves_close_default_reserve_pub_idx;
-
-
---
--- Name: reserves_default_expiration_date_current_balance_val_curren_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_by_expiration_index ATTACH PARTITION public.reserves_default_expiration_date_current_balance_val_curren_idx;
-
-
---
--- Name: reserves_default_gc_date_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_by_gc_date_index ATTACH PARTITION public.reserves_default_gc_date_idx;
-
-
---
--- Name: reserves_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_pkey ATTACH PARTITION public.reserves_default_pkey;
-
-
---
--- Name: reserves_default_reserve_uuid_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_by_reserve_uuid_index ATTACH PARTITION public.reserves_default_reserve_uuid_idx;
-
-
---
--- Name: reserves_in_default_exchange_account_section_execution_date_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_in_by_exch_accnt_section_execution_date_idx ATTACH PARTITION public.reserves_in_default_exchange_account_section_execution_date_idx;
-
-
---
--- Name: reserves_in_default_exchange_account_section_reserve_in_ser_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_in_by_exch_accnt_reserve_in_serial_id_idx ATTACH PARTITION public.reserves_in_default_exchange_account_section_reserve_in_ser_idx;
-
-
---
--- Name: reserves_in_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_in_pkey ATTACH PARTITION public.reserves_in_default_pkey;
-
-
---
--- Name: reserves_in_default_reserve_in_serial_id_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_in_by_reserve_in_serial_id_index ATTACH PARTITION public.reserves_in_default_reserve_in_serial_id_idx;
-
-
---
--- Name: reserves_out_by_reserve_default_reserve_uuid_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_out_by_reserve_main_index ATTACH PARTITION public.reserves_out_by_reserve_default_reserve_uuid_idx;
-
-
---
--- Name: reserves_out_default_h_blind_ev_key; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_out_h_blind_ev_key ATTACH PARTITION public.reserves_out_default_h_blind_ev_key;
-
-
---
--- Name: reserves_out_default_reserve_out_serial_id_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_out_by_reserve_out_serial_id_index ATTACH PARTITION public.reserves_out_default_reserve_out_serial_id_idx;
-
-
---
--- Name: reserves_out_default_reserve_uuid_execution_date_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_out_by_reserve_uuid_and_execution_date_index ATTACH PARTITION public.reserves_out_default_reserve_uuid_execution_date_idx;
-
-
---
--- Name: wad_in_entries_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wad_in_entries_pkey ATTACH PARTITION public.wad_in_entries_default_pkey;
-
-
---
--- Name: wad_in_entries_default_reserve_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wad_in_entries_reserve_pub ATTACH PARTITION public.wad_in_entries_default_reserve_pub_idx;
-
-
---
--- Name: wad_out_entries_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wad_out_entries_pkey ATTACH PARTITION public.wad_out_entries_default_pkey;
-
-
---
--- Name: wad_out_entries_default_reserve_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wad_out_entries_by_reserve_pub ATTACH PARTITION public.wad_out_entries_default_reserve_pub_idx;
-
-
---
--- Name: wads_in_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wads_in_pkey ATTACH PARTITION public.wads_in_default_pkey;
-
-
---
--- Name: wads_in_default_wad_id_origin_exchange_url_key; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wads_in_wad_id_origin_exchange_url_key ATTACH PARTITION public.wads_in_default_wad_id_origin_exchange_url_key;
-
-
---
--- Name: wads_out_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wads_out_pkey ATTACH PARTITION public.wads_out_default_pkey;
-
-
---
--- Name: wire_out_default_wire_target_h_payto_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wire_out_by_wire_target_h_payto_index ATTACH PARTITION public.wire_out_default_wire_target_h_payto_idx;
-
-
---
--- Name: wire_out_default_wtid_raw_key; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wire_out_wtid_raw_key ATTACH PARTITION public.wire_out_default_wtid_raw_key;
-
-
---
--- Name: wire_targets_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wire_targets_pkey ATTACH PARTITION public.wire_targets_default_pkey;
-
-
---
--- Name: deposits deposits_on_delete; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER deposits_on_delete AFTER DELETE ON public.deposits FOR EACH ROW EXECUTE FUNCTION public.deposits_delete_trigger();
-
-
---
--- Name: deposits deposits_on_insert; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER deposits_on_insert AFTER INSERT ON public.deposits FOR EACH ROW EXECUTE FUNCTION public.deposits_insert_trigger();
-
-
---
--- Name: deposits deposits_on_update; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER deposits_on_update AFTER UPDATE ON public.deposits FOR EACH ROW EXECUTE FUNCTION public.deposits_update_trigger();
-
-
---
--- Name: recoup recoup_on_delete; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER recoup_on_delete AFTER DELETE ON public.recoup FOR EACH ROW EXECUTE FUNCTION public.recoup_delete_trigger();
-
-
---
--- Name: recoup recoup_on_insert; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER recoup_on_insert AFTER INSERT ON public.recoup FOR EACH ROW EXECUTE FUNCTION public.recoup_insert_trigger();
-
-
---
--- Name: reserves_out reserves_out_on_delete; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER reserves_out_on_delete AFTER DELETE ON public.reserves_out FOR EACH ROW EXECUTE FUNCTION public.reserves_out_by_reserve_delete_trigger();
-
-
---
--- Name: reserves_out reserves_out_on_insert; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER reserves_out_on_insert AFTER INSERT ON public.reserves_out FOR EACH ROW EXECUTE FUNCTION public.reserves_out_by_reserve_insert_trigger();
-
-
---
--- Name: wire_out wire_out_on_delete; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER wire_out_on_delete AFTER DELETE ON public.wire_out FOR EACH ROW EXECUTE FUNCTION public.wire_out_delete_trigger();
-
-
---
--- Name: app_bankaccount app_bankaccount_user_id_2722a34f_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_user_id_2722a34f_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_banktransaction app_banktransaction_credit_account_id_a8ba05ac_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_credit_account_id_a8ba05ac_fk_app_banka FOREIGN KEY (credit_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_banktransaction app_banktransaction_debit_account_id_5b1f7528_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_debit_account_id_5b1f7528_fk_app_banka FOREIGN KEY (debit_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawope_selected_exchange_ac_6c8b96cf_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawope_selected_exchange_ac_6c8b96cf_fk_app_banka FOREIGN KEY (selected_exchange_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawope_withdraw_account_id_992dc5b3_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawope_withdraw_account_id_992dc5b3_fk_app_banka FOREIGN KEY (withdraw_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_auditor_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_auditor_uuid_fkey FOREIGN KEY (auditor_uuid) REFERENCES public.auditors(auditor_uuid) ON DELETE CASCADE;
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: auth_group_permissions auth_group_permissio_permission_id_84c5c92e_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissio_permission_id_84c5c92e_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_group_permissions auth_group_permissions_group_id_b120cbf9_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_group_id_b120cbf9_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_permission auth_permission_content_type_id_2f476e4b_fk_django_co; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_content_type_id_2f476e4b_fk_django_co FOREIGN KEY (content_type_id) REFERENCES public.django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_groups auth_user_groups_group_id_97559544_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_group_id_97559544_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_groups auth_user_groups_user_id_6a12ed8b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_user_id_6a12ed8b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: denomination_revocations denomination_revocations_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denomination_revocations_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: auditor_exchange_signkeys master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_exchange_signkeys
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_reserve master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_reserve
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_aggregation master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_aggregation
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_deposit_confirmation master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_deposit_confirmation
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_coin master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_coin
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: wire_auditor_account_progress master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_account_progress
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: wire_auditor_progress master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_progress
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_reserves master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_reserve_balance master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserve_balance
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_wire_fee_balance master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_wire_fee_balance
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_balance_summary master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_balance_summary
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_historic_denomination_revenue master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_denomination_revenue
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_historic_reserve_summary master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_reserve_summary
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: deposit_confirmations master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_predicted_result master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_predicted_result
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: merchant_accounts merchant_accounts_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial);
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_deposit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_deposit_serial_fkey FOREIGN KEY (deposit_serial) REFERENCES public.merchant_deposits(deposit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_account_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_account_serial_fkey FOREIGN KEY (account_serial) REFERENCES public.merchant_accounts(account_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_contract_terms(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_inventory_locks merchant_inventory_locks_product_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory_locks
- ADD CONSTRAINT merchant_inventory_locks_product_serial_fkey FOREIGN KEY (product_serial) REFERENCES public.merchant_inventory(product_serial);
-
-
---
--- Name: merchant_inventory merchant_inventory_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_keys merchant_keys_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_kyc merchant_kyc_account_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_kyc
- ADD CONSTRAINT merchant_kyc_account_serial_fkey FOREIGN KEY (account_serial) REFERENCES public.merchant_accounts(account_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_order_locks merchant_order_locks_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_order_locks
- ADD CONSTRAINT merchant_order_locks_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_orders(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_order_locks merchant_order_locks_product_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_order_locks
- ADD CONSTRAINT merchant_order_locks_product_serial_fkey FOREIGN KEY (product_serial) REFERENCES public.merchant_inventory(product_serial);
-
-
---
--- Name: merchant_orders merchant_orders_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_refund_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_refund_serial_fkey FOREIGN KEY (refund_serial) REFERENCES public.merchant_refunds(refund_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refunds merchant_refunds_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_contract_terms(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_pickup_signatures merchant_tip_pickup_signatures_pickup_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickup_signatures
- ADD CONSTRAINT merchant_tip_pickup_signatures_pickup_serial_fkey FOREIGN KEY (pickup_serial) REFERENCES public.merchant_tip_pickups(pickup_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_tip_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_tip_serial_fkey FOREIGN KEY (tip_serial) REFERENCES public.merchant_tips(tip_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_serial_fkey FOREIGN KEY (reserve_serial) REFERENCES public.merchant_tip_reserves(reserve_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tips merchant_tips_reserve_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_reserve_serial_fkey FOREIGN KEY (reserve_serial) REFERENCES public.merchant_tip_reserves(reserve_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_deposit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_deposit_serial_fkey FOREIGN KEY (deposit_serial) REFERENCES public.merchant_deposits(deposit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfers merchant_transfers_account_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_account_serial_fkey FOREIGN KEY (account_serial) REFERENCES public.merchant_accounts(account_serial) ON DELETE CASCADE;
-
-
---
--- Name: partner_accounts partner_accounts_partner_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.partner_accounts
- ADD CONSTRAINT partner_accounts_partner_serial_id_fkey FOREIGN KEY (partner_serial_id) REFERENCES public.partners(partner_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: signkey_revocations signkey_revocations_esk_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_esk_serial_fkey FOREIGN KEY (esk_serial) REFERENCES public.exchange_sign_keys(esk_serial) ON DELETE CASCADE;
-
-
---
--- PostgreSQL database dump complete
---
-
diff --git a/src/auditor/auditor.conf b/src/auditor/auditor.conf
index 270836283..3c04d196f 100644
--- a/src/auditor/auditor.conf
+++ b/src/auditor/auditor.conf
@@ -9,7 +9,7 @@ DB = postgres
#TINY_AMOUNT = KUDOS:0.01
# Where do we store the auditor's private key?
-AUDITOR_PRIV_FILE = ${TALER_DATA_HOME}/auditor/offline-keys/auditor.priv
+AUDITOR_PRIV_FILE = ${TALER_DATA_HOME}auditor/offline-keys/auditor.priv
# What is the public key of this auditor? Used for processes that
# verify auditor's signatures but have no access to the private key.
@@ -17,7 +17,7 @@ AUDITOR_PRIV_FILE = ${TALER_DATA_HOME}/auditor/offline-keys/auditor.priv
# What is the Web site of the auditor (i.e. to file complaints about
# a misbehaving exchange)?
-# BASE_URL = https://auditor.taler.net/
+BASE_URL = http://localhost:8083/
# Network configuration for the normal API/service HTTP server
@@ -26,7 +26,7 @@ SERVE = tcp
# Unix domain socket to listen on,
# only effective with "SERVE = unix"
-UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
+UNIXPATH = ${TALER_RUNTIME_DIR}exchange.http
UNIXPATH_MODE = 660
# HTTP port the auditor listens to
diff --git a/src/auditor/batch.conf b/src/auditor/batch.conf
index afd1ae1fb..cd8c64b8e 100644
--- a/src/auditor/batch.conf
+++ b/src/auditor/batch.conf
@@ -1,6 +1,3 @@
-[arm]
-CONFIG = /research/taler/exchange/src/auditor/batch.conf
-
[benchmark]
MERCHANT_DETAILS = merchant_details.json
BANK_DETAILS = bank_details.json
@@ -113,7 +110,7 @@ currency = TESTKUDOS
[merchant-exchange-default]
CURRENCY = TESTKUDOS
EXCHANGE_BASE_URL = http://localhost:8081/
-MASTER_KEY = X2759N3GMFX9N4PAS10ZGXJ3XHF69PJ9K2P9QAQPJMKEH413MW2G
+MASTER_KEY = 2XPQZ7B7EERWT7GR0MF30HPFG4TA1J0CWCQ3XBD48PA4K7GVDBK0
[merchant-account-merchant]
ACTIVE_default = YES
@@ -124,7 +121,7 @@ PAYTO_URI = payto://x-taler-bank/localhost/42
PASSWORD = x
USERNAME = Exchange
WIRE_GATEWAY_AUTH_METHOD = basic
-WIRE_GATEWAY_URL = http://localhost:8082/taler-wire-gateway/Exchange/
+WIRE_GATEWAY_URL = http://localhost:8082/accounts/Exchange/taler-wire-gateway/
[exchange-account-1]
enable_credit = yes
@@ -157,14 +154,14 @@ CONFIG = postgres:///batch
[exchange]
LOOKAHEAD_SIGN = 32 weeks 1 day
SIGNKEY_DURATION = 4 weeks
-MASTER_PUBLIC_KEY = X2759N3GMFX9N4PAS10ZGXJ3XHF69PJ9K2P9QAQPJMKEH413MW2G
+MASTER_PUBLIC_KEY = 2XPQZ7B7EERWT7GR0MF30HPFG4TA1J0CWCQ3XBD48PA4K7GVDBK0
SIGNKEY_LEGAL_DURATION = 4 weeks
UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
[bank]
SERVE = http
ALLOW_REGISTRATIONS = YES
-SUGGESTED_EXCHANGE_PAYTO = payto://x-taler-bank/localhost/2
+SUGGESTED_EXCHANGE_PAYTO = payto://x-taler-bank/localhost:8082/2
SUGGESTED_EXCHANGE = http://localhost:8081/
HTTP_PORT = 8082
MAX_DEBT_BANK = TESTKUDOS:100000.0
@@ -175,7 +172,7 @@ DATABASE = postgres:///batch
CONFIG = postgres:///batch
[auditor]
-PUBLIC_KEY = EK8NVJACS6PCXMZ0CY33K753MGRX5BTXSTRWPGJXWFSBNJ1PNZ8G
+PUBLIC_KEY = JG9QFRG7R7BH9701420BD6M38NZW21MV9AR3QHYJEAHZ4S26B3HG
TINY_AMOUNT = TESTKUDOS:0.01
BASE_URL = http://localhost:8083/
@@ -184,4 +181,3 @@ TALER_CACHE_HOME = $TALER_HOME/.cache/taler/
TALER_CONFIG_HOME = $TALER_HOME/.config/taler/
TALER_DATA_HOME = $TALER_HOME/.local/share/taler/
TALER_HOME = ${PWD}/generate_auditordb_home/
-
diff --git a/src/auditor/batch.sh b/src/auditor/batch.sh
index fed690432..bbe1be0ba 100755
--- a/src/auditor/batch.sh
+++ b/src/auditor/batch.sh
@@ -64,22 +64,22 @@ createdb $TARGET_DB || exit_skip "Could not create database $TARGET_DB"
# obtain key configuration data
-MASTER_PRIV_FILE=`taler-config -f -c $CONF -s exchange-offline -o MASTER_PRIV_FILE`
-MASTER_PRIV_DIR=`dirname $MASTER_PRIV_FILE`
+MASTER_PRIV_FILE=$(taler-config -f -c $CONF -s exchange-offline -o MASTER_PRIV_FILE)
+MASTER_PRIV_DIR=$(dirname $MASTER_PRIV_FILE)
mkdir -p $MASTER_PRIV_DIR
gnunet-ecc -g1 $MASTER_PRIV_FILE > /dev/null
-MASTER_PUB=`gnunet-ecc -p $MASTER_PRIV_FILE`
-EXCHANGE_URL=`taler-config -c $CONF -s EXCHANGE -o BASE_URL`
-MERCHANT_PORT=`taler-config -c $CONF -s MERCHANT -o PORT`
+MASTER_PUB=$(gnunet-ecc -p $MASTER_PRIV_FILE)
+EXCHANGE_URL=$(taler-config -c $CONF -s EXCHANGE -o BASE_URL)
+MERCHANT_PORT=$(taler-config -c $CONF -s MERCHANT -o PORT)
MERCHANT_URL=http://localhost:${MERCHANT_PORT}/
-BANK_PORT=`taler-config -c $CONF -s BANK -o HTTP_PORT`
+BANK_PORT=$(taler-config -c $CONF -s BANK -o HTTP_PORT)
BANK_URL=http://localhost:${BANK_PORT}/
AUDITOR_URL=http://localhost:8083/
-AUDITOR_PRIV_FILE=`taler-config -f -c $CONF -s AUDITOR -o AUDITOR_PRIV_FILE`
-AUDITOR_PRIV_DIR=`dirname $AUDITOR_PRIV_FILE`
+AUDITOR_PRIV_FILE=$(taler-config -f -c $CONF -s AUDITOR -o AUDITOR_PRIV_FILE)
+AUDITOR_PRIV_DIR=$(dirname $AUDITOR_PRIV_FILE)
mkdir -p $AUDITOR_PRIV_DIR
gnunet-ecc -g1 $AUDITOR_PRIV_FILE > /dev/null
-AUDITOR_PUB=`gnunet-ecc -p $AUDITOR_PRIV_FILE`
+AUDITOR_PUB=$(gnunet-ecc -p $AUDITOR_PRIV_FILE)
echo "AUDITOR PUB is $AUDITOR_PUB using file $AUDITOR_PRIV_FILE"
@@ -193,7 +193,7 @@ echo " DONE"
echo -n "Setting up merchant"
-curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"payto_uris":["payto://x-taler-bank/localhost/43"],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_ms" : 3600000},"default_pay_delay":{"d_ms": 3600000}}' http://localhost:9966/management/instances
+curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us" : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' http://localhost:9966/management/instances
echo " DONE"
@@ -214,7 +214,7 @@ bash
# {
# amountToSpend: "TESTKUDOS:4",
# amountToWithdraw: "TESTKUDOS:10",
-# bankBaseUrl: $BANK_URL,
+# corebankApiBaseUrl: $BANK_URL,
# exchangeBaseUrl: $EXCHANGE_URL,
# merchantBaseUrl: $MERCHANT_URL,
# }' \
diff --git a/src/auditor/generate-auditor-basedb-template.conf b/src/auditor/generate-auditor-basedb-template.conf
deleted file mode 100644
index 1d18740c7..000000000
--- a/src/auditor/generate-auditor-basedb-template.conf
+++ /dev/null
@@ -1 +0,0 @@
-@INLINE@ generate-auditor-basedb.conf
diff --git a/src/auditor/generate-auditor-basedb.conf b/src/auditor/generate-auditor-basedb.conf
index 5540aa3b8..8cf63fbba 100644
--- a/src/auditor/generate-auditor-basedb.conf
+++ b/src/auditor/generate-auditor-basedb.conf
@@ -1,101 +1,123 @@
+[PATHS]
+TALER_CACHE_HOME = $TALER_HOME/.cache/taler/
+TALER_CONFIG_HOME = $TALER_HOME/.config/taler/
+TALER_DATA_HOME = $TALER_HOME/.local/share/taler/
+TALER_HOME = ${PWD}/generate_auditordb_home/
+[taler]
+CURRENCY = TESTKUDOS
+CURRENCY_ROUND_UNIT = TESTKUDOS:0.01
+
[exchange]
-MAX_KEYS_CACHING = forever
-DB = postgres
-SERVE = tcp
-UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
-UNIXPATH_MODE = 660
-PORT = 8081
-BASE_URL = http://localhost:8081/
+MASTER_PUBLIC_KEY = M4FGP18EQFXFGGFQ1AWXHACN2JX0SMVK9CNF6459Z1WG18JSN0BG
SIGNKEY_DURATION = 4 weeks
-SIGNKEY_LEGAL_DURATION = 4 weeks
LOOKAHEAD_SIGN = 32 weeks 1 day
+SIGNKEY_LEGAL_DURATION = 4 weeks
+AML_THRESHOLD = TESTKUDOS:1000000
+db = postgres
+BASE_URL = http://localhost:8081/
+IDLE_RESERVE_EXPIRATION_TIME = 4 weeks
+LEGAL_RESERVE_EXPIRATION_TIME = 4 weeks
-[merchant]
-SERVE = tcp
-PORT = 9966
-UNIXPATH = ${TALER_RUNTIME_DIR}/merchant.http
-UNIXPATH_MODE = 660
-DEFAULT_WIRE_FEE_AMORTIZATION = 1
-DB = postgres
-WIREFORMAT = default
-# Set very low, so we can be sure that the database generated
-# will contain wire transfers "ready" for the aggregator.
-WIRE_TRANSFER_DELAY = 1 minute
-DEFAULT_PAY_DEADLINE = 1 day
-DEFAULT_MAX_DEPOSIT_FEE = TESTKUDOS:0.1
-KEYFILE = ${TALER_DATA_HOME}/merchant/merchant.priv
-DEFAULT_MAX_WIRE_FEE = TESTKUDOS:0.10
-
-# Ensure that merchant reports EVERY deposit confirmation to auditor
-FORCE_AUDIT = YES
-
-[instance-default]
-KEYFILE = ${TALER_DATA_HOME}/merchant/default.priv
-NAME = Merchant Inc.
+[exchangedb]
+IDLE_RESERVE_EXPIRATION_TIME = 4 weeks
+LEGAL_RESERVE_EXPIRATION_TIME = 4 weeks
+AGGREGATOR_SHIFT = 1 s
+DEFAULT_PURSE_LIMIT = 1
-[auditor]
-DB = postgres
-AUDITOR_PRIV_FILE = ${TALER_DATA_HOME}/auditor/offline-keys/auditor.priv
+[libeufin-bank]
+CURRENCY = TESTKUDOS
+DEFAULT_CUSTOMER_DEBT_LIMIT = TESTKUDOS:200
+DEFAULT_ADMIN_DEBT_LIMIT = TESTKUDOS:2000
+ALLOW_REGISTRATION = yes
+REGISTRATION_BONUS_ENABLED = yes
+REGISTRATION_BONUS = TESTKUDOS:100
+SUGGESTED_WITHDRAWAL_EXCHANGE = http://localhost:8081/
+WIRE_TYPE = iban
+IBAN_PAYTO_BIC = SANDBOXX
SERVE = tcp
-UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
-UNIXPATH_MODE = 660
-PORT = 8083
-BASE_URL = http://localhost:8083/
-TINY_AMOUNT = TESTKUDOS:0.01
+PORT = 8082
-[PATHS]
-TALER_HOME = ${PWD}/generate_auditordb_home/
-TALER_DATA_HOME = $TALER_HOME/.local/share/taler/
-TALER_CONFIG_HOME = $TALER_HOME/.config/taler/
-TALER_CACHE_HOME = $TALER_HOME/.cache/taler/
-TALER_RUNTIME_DIR = ${TMPDIR:-${TMP:-/tmp}}/taler-system-runtime/
-
-[bank]
-DATABASE = postgres:///taler-auditor-basedb
-MAX_DEBT = TESTKUDOS:50.0
-MAX_DEBT_BANK = TESTKUDOS:100000.0
-HTTP_PORT = 8082
-SUGGESTED_EXCHANGE = http://localhost:8081/
-SUGGESTED_EXCHANGE_PAYTO = payto://x-taler-bank/localhost/2
-ALLOW_REGISTRATIONS = YES
-SERVE = http
+[libeufin-bankdb-postgres]
+CONFIG = postgresql:///auditor-basedb
-[exchangedb]
+[exchangedb-postgres]
+CONFIG = postgres:///auditor-basedb
+SQL_DIR = $DATADIR/sql/exchange/
IDLE_RESERVE_EXPIRATION_TIME = 4 weeks
-LEGAL_RESERVE_EXPIRATION_TIME = 7 years
-
-[taler]
-CURRENCY = TESTKUDOS
-CURRENCY_ROUND_UNIT = TESTKUDOS:0.01
+LEGAL_RESERVE_EXPIRATION_TIME = 4 weeks
[exchange-account-1]
-PAYTO_URI = payto://x-taler-bank/localhost/Exchange
-enable_debit = yes
-enable_credit = yes
+PAYTO_URI = payto://iban/SANDBOXX/DE989651?receiver-name=Exchange+Company
+ENABLE_DEBIT = YES
+ENABLE_CREDIT = YES
[exchange-accountcredentials-1]
-WIRE_GATEWAY_URL = "http://localhost:8082/taler-wire-gateway/Exchange/"
+WIRE_GATEWAY_URL = http://localhost:8082/accounts/exchange/taler-wire-gateway/
+WIRE_GATEWAY_AUTH_METHOD = basic
+USERNAME = exchange
+PASSWORD = x
+
+[exchange-account-2]
+PAYTO_URI = "payto://x-taler-bank/localhost/2?receiver-name=2"
+ENABLE_DEBIT = YES
+ENABLE_CREDIT = YES
+
+[exchange-accountcredentials-2]
WIRE_GATEWAY_AUTH_METHOD = basic
USERNAME = Exchange
PASSWORD = x
+WIRE_GATEWAY_URL = "http://localhost:8082/accounts/2/taler-wire-gateway/"
-[merchant-account-merchant]
-PAYTO_URI = payto://x-taler-bank/localhost/42
-HONOR_default = YES
-ACTIVE_default = YES
+[admin-accountcredentials-2]
+WIRE_GATEWAY_AUTH_METHOD = basic
+# For now, fakebank still checks against the Exchange account...
+USERNAME = Exchange
+PASSWORD = x
+WIRE_GATEWAY_URL = "http://localhost:8082/accounts/2/taler-wire-gateway/"
+
+
+[merchant]
+FORCE_AUDIT = YES
+SERVE = TCP
+PORT = 8888
+
+[merchantdb-postgres]
+CONFIG = postgres:///auditor-basedb
+SQL_DIR = $DATADIR/sql/merchant/
[merchant-exchange-default]
+MASTER_KEY = M4FGP18EQFXFGGFQ1AWXHACN2JX0SMVK9CNF6459Z1WG18JSN0BG
EXCHANGE_BASE_URL = http://localhost:8081/
CURRENCY = TESTKUDOS
-[payments-generator]
-currency = TESTKUDOS
-instance = default
-bank = http://localhost:8082/
-merchant = http://localhost:9966/
-exchange_admin = http://localhost:18080/
-exchange-admin = http://localhost:18080/
-exchange = http://localhost:8081/
+[bank]
+HTTP_PORT = 8082
+
+[libeufin-nexus]
+DB_CONNECTION="postgresql:///auditor-basedb"
+
+[libeufin-sandbox]
+DB_CONNECTION="postgresql:///auditor-basedb"
+
+[libeufin-bank]
+CURRENCY = TESTKUDOS
+DEFAULT_CUSTOMER_DEBT_LIMIT = TESTKUDOS:200 # dead
+DEFAULT_ADMIN_DEBT_LIMIT = TESTKUDOS:2000
+REGISTRATION_BONUS_ENABLED = yes
+REGISTRATION_BONUS = TESTKUDOS:100
+SUGGESTED_WITHDRAWAL_EXCHANGE = http://localhost:8081/
+SERVE = tcp
+PORT = 8082
+
+[auditor]
+BASE_URL = http://localhost:8083/
+TINY_AMOUNT = TESTKUDOS:0.01
+PUBLIC_KEY = 0EHPW5WEKHXPPN4MPJNGA7Z6D29JP21GKVNV8ARFB1YW7WWJX20G
+db = postgres
+
+[auditordb-postgres]
+CONFIG = postgres:///auditor-basedb
+SQL_DIR = $DATADIR/sql/auditor/
[coin_kudos_ct_1]
value = TESTKUDOS:0.01
@@ -192,31 +214,3 @@ fee_refresh = TESTKUDOS:0.03
fee_refund = TESTKUDOS:0.01
CIPHER = RSA
rsa_keysize = 1024
-
-[coin_kudos_ct_1]
-value = TESTKUDOS:0.01
-duration_withdraw = 7 days
-duration_spend = 2 years
-duration_legal = 3 years
-fee_withdraw = TESTKUDOS:0.01
-fee_deposit = TESTKUDOS:0.01
-fee_refresh = TESTKUDOS:0.01
-fee_refund = TESTKUDOS:0.01
-CIPHER = RSA
-rsa_keysize = 1024
-
-[coin_kudos_ct_10]
-value = TESTKUDOS:0.10
-duration_withdraw = 7 days
-duration_spend = 2 years
-duration_legal = 3 years
-fee_withdraw = TESTKUDOS:0.01
-fee_deposit = TESTKUDOS:0.01
-fee_refresh = TESTKUDOS:0.03
-fee_refund = TESTKUDOS:0.01
-CIPHER = RSA
-rsa_keysize = 1024
-
-[benchmark]
-BANK_DETAILS = bank_details.json
-MERCHANT_DETAILS = merchant_details.json
diff --git a/src/auditor/generate-auditor-basedb.sh b/src/auditor/generate-auditor-basedb.sh
index 4006addfd..bbce37cdc 100755
--- a/src/auditor/generate-auditor-basedb.sh
+++ b/src/auditor/generate-auditor-basedb.sh
@@ -1,227 +1,114 @@
#!/bin/bash
-# Script to generate the basic database for auditor
-# testing from a 'correct' interaction between exchange,
-# wallet and merchant.
+# This file is in the public domain.
#
-# Creates $BASEDB.sql, $BASEDB.fees, $BASEDB.mpub and
-# $BASEDB.age.
-# Default $BASEDB is "auditor-basedb", override via $1.
+# Script to generate the basic database for auditor testing from a 'correct'
+# interaction between exchange, wallet and merchant.
#
-# Currently must be run online as it interacts with
-# bank.test.taler.net; also requires the wallet CLI
-# to be installed and in the path. Furthermore, the
-# user running this script must be Postgres superuser
-# and be allowed to create/drop databases.
+# Creates "$1.sql".
+#
+# Requires the wallet CLI to be installed and in the path. Furthermore, the
+# user running this script must be Postgres superuser and be allowed to
+# create/drop databases.
#
set -eu
-# Cleanup to run whenever we exit
-function cleanup()
-{
- for n in `jobs -p`
- do
- kill $n 2> /dev/null || true
- done
- wait
-}
-
-# Install cleanup handler (except for kill -9)
-trap cleanup EXIT
-
-
-# Exit, with status code "skip" (no 'real' failure)
-function exit_skip() {
- echo $1
- exit 77
-}
+. setup.sh
+
+CONF="generate-auditor-basedb.conf"
+# Parse command-line options
+while getopts ':c:d:h' OPTION; do
+ case "$OPTION" in
+ c)
+ CONF="$OPTARG"
+ ;;
+ d)
+ BASEDB="$OPTARG"
+ ;;
+ h)
+ echo 'Supported options:'
+# shellcheck disable=SC2016
+ echo ' -c $CONF -- set configuration'
+# shellcheck disable=SC2016
+ echo ' -d $DB -- set database name'
+ ;;
+ ?)
+ exit_fail "Unrecognized command line option"
+ ;;
+ esac
+done
# Where do we write the result?
-BASEDB=${1:-"auditor-basedb"}
-
-# Name of the Postgres database we will use for the script.
-# Will be dropped, do NOT use anything that might be used
-# elsewhere
-export TARGET_DB=`basename ${BASEDB}`
-
-export WALLET_DB=${BASEDB:-"wallet"}.wdb
-
-# delete existing wallet database
-rm -f $WALLET_DB
-
-
-# Configuration file will be edited, so we create one
-# from the template.
-CONF=${BASEDB}.conf
-cp generate-auditor-basedb.conf $CONF
-
+if [ ! -v BASEDB ]
+then
+ exit_fail "-d option required"
+fi
-echo -n "Testing for taler-bank-manage"
-taler-bank-manage --help >/dev/null </dev/null || exit_skip " MISSING"
-echo " FOUND"
-echo -n "Testing for taler-wallet-cli"
-taler-wallet-cli -v >/dev/null </dev/null || exit_skip " MISSING"
-echo " FOUND"
-echo -n "Testing for curl"
+echo -n "Testing for curl ..."
curl --help >/dev/null </dev/null || exit_skip " MISSING"
echo " FOUND"
-
-pwd
-# Clean up
-
-DATA_DIR=`taler-config -f -c $CONF -s PATHS -o TALER_HOME`
-rm -rf $DATA_DIR || true
-
# reset database
-dropdb $TARGET_DB >/dev/null 2>/dev/null || true
-createdb $TARGET_DB || exit_skip "Could not create database $TARGET_DB"
+echo -n "Reset 'auditor-basedb' database at $PGHOST ..."
+dropdb "auditor-basedb" >/dev/null 2>/dev/null || true
+createdb "auditor-basedb" || exit_skip "Could not create database '$BASEDB' at $PGHOST"
+echo " DONE"
+# Launch exchange, merchant and bank.
+setup -c "$CONF" \
+ -abemw \
+ -d "iban"
# obtain key configuration data
-MASTER_PRIV_FILE=`taler-config -f -c $CONF -s exchange-offline -o MASTER_PRIV_FILE`
-MASTER_PRIV_DIR=`dirname $MASTER_PRIV_FILE`
-mkdir -p $MASTER_PRIV_DIR
-gnunet-ecc -g1 $MASTER_PRIV_FILE > /dev/null
-MASTER_PUB=`gnunet-ecc -p $MASTER_PRIV_FILE`
-EXCHANGE_URL=`taler-config -c $CONF -s EXCHANGE -o BASE_URL`
-MERCHANT_PORT=`taler-config -c $CONF -s MERCHANT -o PORT`
-MERCHANT_URL=http://localhost:${MERCHANT_PORT}/
-BANK_PORT=`taler-config -c $CONF -s BANK -o HTTP_PORT`
-BANK_URL=http://localhost:${BANK_PORT}/
-AUDITOR_URL=http://localhost:8083/
-AUDITOR_PRIV_FILE=`taler-config -f -c $CONF -s AUDITOR -o AUDITOR_PRIV_FILE`
-AUDITOR_PRIV_DIR=`dirname $AUDITOR_PRIV_FILE`
-mkdir -p $AUDITOR_PRIV_DIR
-gnunet-ecc -g1 $AUDITOR_PRIV_FILE > /dev/null
-AUDITOR_PUB=`gnunet-ecc -p $AUDITOR_PRIV_FILE`
-
-echo "AUDITOR PUB is $AUDITOR_PUB using file $AUDITOR_PRIV_FILE"
-
-# patch configuration
-taler-config -c $CONF -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_PUB
-taler-config -c $CONF -s auditor -o PUBLIC_KEY -V $AUDITOR_PUB
-taler-config -c $CONF -s merchant-exchange-default -o MASTER_KEY -V $MASTER_PUB
-taler-config -c $CONF -s exchangedb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s auditordb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s merchantdb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s bank -o database -V postgres:///$TARGET_DB
-
-# setup exchange
-echo "Setting up exchange"
-taler-exchange-dbinit -c $CONF
-
-echo "Setting up merchant"
-taler-merchant-dbinit -c $CONF
-
-# setup auditor
-echo "Setting up auditor"
-taler-auditor-dbinit -c $CONF || exit_skip "Failed to initialize auditor DB"
-taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL || exit_skip "Failed to add exchange to auditor"
-
-# Launch services
-echo "Launching services"
-taler-bank-manage-testing $CONF postgres:///$TARGET_DB serve &> taler-bank.log &
-TFN=`which taler-exchange-httpd`
-TBINPFX=`dirname $TFN`
-TLIBEXEC=${TBINPFX}/../lib/taler/libexec/
-taler-exchange-secmod-eddsa -c $CONF 2> taler-exchange-secmod-eddsa.log &
-taler-exchange-secmod-rsa -c $CONF 2> taler-exchange-secmod-rsa.log &
-taler-exchange-secmod-cs -c $CONF 2> taler-exchange-secmod-cs.log &
-taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log &
-taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log &
-taler-exchange-wirewatch -c $CONF 2> taler-exchange-wirewatch.log &
-taler-auditor-httpd -L INFO -c $CONF 2> taler-auditor-httpd.log &
-
-# Wait for all bank to be available (usually the slowest)
-for n in `seq 1 50`
-do
- echo -n "."
- sleep 0.2
- OK=0
- # bank
- wget http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
-
-if [ 1 != $OK ]
-then
- exit_skip "Failed to launch services"
-fi
-
-# Wait for all services to be available
-for n in `seq 1 50`
-do
- echo -n "."
- sleep 0.1
- OK=0
- # exchange
- wget http://localhost:8081/seed -o /dev/null -O /dev/null >/dev/null || continue
- # merchant
- wget http://localhost:9966/ -o /dev/null -O /dev/null >/dev/null || continue
- # Auditor
- wget http://localhost:8083/ -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
-
-if [ 1 != $OK ]
-then
- exit_skip "Failed to launch services"
-fi
+EXCHANGE_URL=$(taler-config -c "$CONF" -s EXCHANGE -o BASE_URL)
+MERCHANT_PORT=$(taler-config -c "$CONF" -s MERCHANT -o PORT)
+MERCHANT_URL="http://localhost:${MERCHANT_PORT}/"
+BANK_PORT=$(taler-config -c "$CONF" -s BANK -o HTTP_PORT)
+BANK_URL="http://localhost:${BANK_PORT}"
+
+echo -n "Checking setup worked ..."
+wget \
+ --tries=1 \
+ --timeout=1 \
+ "${EXCHANGE_URL}config" \
+ -o /dev/null \
+ -O /dev/null >/dev/null
+echo "DONE"
+
+export MERCHANT_URL
+echo -n "Setting up merchant ..."
+
+curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us" : 3600000000},"default_pay_delay":{"d_us": 3600000000},"use_stefan":false}' "${MERCHANT_URL}management/instances"
echo " DONE"
-echo -n "Setting up keys"
-taler-exchange-offline -c $CONF \
- download sign \
- enable-account payto://x-taler-bank/localhost/Exchange \
- enable-auditor $AUDITOR_PUB $AUDITOR_URL "TESTKUDOS Auditor" \
- wire-fee now x-taler-bank TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 \
- global-fee now TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 1h 1h 1year 5 \
- upload &> taler-exchange-offline.log
-
-echo -n "."
-
-for n in `seq 1 2`
-do
- echo -n "."
- OK=0
- wget --timeout=1 http://localhost:8081/keys -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
+echo -n "Setting up merchant account ..."
+FORTYTHREE="payto://iban/SANDBOXX/DE474361?receiver-name=Merchant43"
+STATUS=$(curl -H "Content-Type: application/json" -X POST \
+ "${MERCHANT_URL}private/accounts" \
+ -d '{"payto_uri":"'"$FORTYTHREE"'"}' \
+ -w "%{http_code}" -s -o /dev/null)
-if [ 1 != $OK ]
+if [ "$STATUS" != "200" ]
then
- exit_skip "Failed to setup keys"
+ exit_fail "Expected 200 OK. Got: $STATUS"
fi
-
-echo " DONE"
-echo -n "Adding auditor signatures ..."
-
-taler-auditor-offline -c $CONF \
- download sign upload &> taler-auditor-offline.log
-
echo " DONE"
-# Setup merchant
-
-echo -n "Setting up merchant"
-
-curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"payto_uris":["payto://x-taler-bank/localhost/43"],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_ms" : 3600000},"default_pay_delay":{"d_ms": 3600000}}' http://localhost:9966/management/instances
-
-echo " DONE"
-
-# run wallet CLI
-echo "Running wallet"
-
-
-taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'runIntegrationTest' \
+# delete existing wallet database
+export WALLET_DB="wallet.wdb"
+rm -f "$WALLET_DB"
+
+echo -n "Running wallet ..."
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ api \
+ --expect-success \
+ 'runIntegrationTest' \
"$(jq -n '
{
amountToSpend: "TESTKUDOS:4",
amountToWithdraw: "TESTKUDOS:10",
- bankBaseUrl: $BANK_URL,
+ corebankApiBaseUrl: $BANK_URL,
exchangeBaseUrl: $EXCHANGE_URL,
merchantBaseUrl: $MERCHANT_URL,
}' \
@@ -229,27 +116,28 @@ taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'runIntegrationTest' \
--arg EXCHANGE_URL "$EXCHANGE_URL" \
--arg BANK_URL "$BANK_URL"
)" &> taler-wallet-cli.log
+echo " DONE"
-
-echo "Shutting down services"
-cleanup
+taler-wallet-cli --wallet-db="$WALLET_DB" run-until-done
# Dump database
-echo "Dumping database"
-pg_dump -O $TARGET_DB | sed -e '/AS integer/d' > ${BASEDB}.sql
-
-echo $MASTER_PUB > ${BASEDB}.mpub
+mkdir -p "$(dirname "$BASEDB")"
-date +%s > ${BASEDB}.age
+echo "Dumping database ${BASEDB}.sql"
+pg_dump -O "auditor-basedb" | sed -e '/AS integer/d' > "${BASEDB}.sql"
+cp "${CONF}.edited" "${BASEDB}.conf"
+cp "$(taler-config -c "${CONF}.edited" -s exchange-offline -o MASTER_PRIV_FILE -f)" "${BASEDB}.mpriv"
# clean up
-echo "Final clean up"
-dropdb $TARGET_DB
-
-rm -rf $DATA_DIR || true
+echo -n "Final clean up ..."
+kill -TERM "$SETUP_PID"
+wait
+unset SETUP_PID
+dropdb "auditor-basedb"
+echo " DONE"
echo "====================================="
-echo " Finished generation of $BASEDB"
+echo "Finished generation of ${BASEDB}.sql"
echo "====================================="
exit 0
diff --git a/src/auditor/generate-kyc-basedb.conf b/src/auditor/generate-kyc-basedb.conf
new file mode 100644
index 000000000..7f4a55cee
--- /dev/null
+++ b/src/auditor/generate-kyc-basedb.conf
@@ -0,0 +1,4 @@
+# This file is in the public domain.
+@INLINE@ generate-auditor-basedb.conf
+
+# FIXME: add options for KYC here! \ No newline at end of file
diff --git a/src/auditor/generate-revoke-basedb.sh b/src/auditor/generate-revoke-basedb.sh
index 2be431199..29aa74b27 100755
--- a/src/auditor/generate-revoke-basedb.sh
+++ b/src/auditor/generate-revoke-basedb.sh
@@ -6,263 +6,138 @@
# create/drop databases.
#
set -eu
+# set -x
-# Cleanup to run whenever we exit
-function cleanup()
-{
- for n in `jobs -p`
- do
- kill $n 2> /dev/null || true
- done
- wait
-}
-
-# Install cleanup handler (except for kill -9)
-trap cleanup EXIT
-
-# Exit, with status code "skip" (no 'real' failure)
-function exit_skip() {
- echo $1
- exit 77
-}
+. setup.sh
-# Where do we write the result?
-export BASEDB=${1:-"revoke-basedb"}
-
-# Name of the Postgres database we will use for the script.
-# Will be dropped, do NOT use anything that might be used
-# elsewhere
-export TARGET_DB=`basename ${BASEDB}`
-TMP_DIR=`mktemp -d revocation-tmp-XXXXXX`
-export WALLET_DB=wallet-revocation.json
-rm -f $WALLET_DB
-
-# Configuration file will be edited, so we create one
-# from the template.
-export CONF=generate-auditor-basedb-revocation.conf
-cp generate-auditor-basedb.conf $CONF
-
-
-echo -n "Testing for taler-bank-manage"
-taler-bank-manage --help >/dev/null </dev/null || exit_skip " MISSING"
-echo " FOUND"
-echo -n "Testing for taler-wallet-cli"
-taler-wallet-cli -v >/dev/null </dev/null || exit_skip " MISSING"
-echo " FOUND"
-echo -n "Testing for curl"
+echo -n "Testing for curl ..."
curl --help >/dev/null </dev/null || exit_skip " MISSING"
echo " FOUND"
-
-
-# Clean up
-DATA_DIR=`taler-config -f -c $CONF -s PATHS -o TALER_HOME`
-rm -rf $DATA_DIR || true
+CONF="generate-auditor-basedb.conf"
# reset database
-dropdb $TARGET_DB >/dev/null 2>/dev/null || true
-createdb $TARGET_DB || exit_skip "Could not create database $TARGET_DB"
-
-# obtain key configuration data
-MASTER_PRIV_FILE=`taler-config -f -c $CONF -s exchange-offline -o MASTER_PRIV_FILE`
-MASTER_PRIV_DIR=`dirname $MASTER_PRIV_FILE`
-mkdir -p $MASTER_PRIV_DIR
-gnunet-ecc -g1 $MASTER_PRIV_FILE > /dev/null
-export MASTER_PUB=`gnunet-ecc -p $MASTER_PRIV_FILE`
-export EXCHANGE_URL=`taler-config -c $CONF -s EXCHANGE -o BASE_URL`
-MERCHANT_PORT=`taler-config -c $CONF -s MERCHANT -o PORT`
-export MERCHANT_URL=http://localhost:${MERCHANT_PORT}/
-BANK_PORT=`taler-config -c $CONF -s BANK -o HTTP_PORT`
-export BANK_URL=http://localhost:${BANK_PORT}/
-export AUDITOR_URL=http://localhost:8083/
-AUDITOR_PRIV_FILE=`taler-config -f -c $CONF -s AUDITOR -o AUDITOR_PRIV_FILE`
-AUDITOR_PRIV_DIR=`dirname $AUDITOR_PRIV_FILE`
-mkdir -p $AUDITOR_PRIV_DIR
-gnunet-ecc -g1 $AUDITOR_PRIV_FILE > /dev/null
-AUDITOR_PUB=`gnunet-ecc -p $AUDITOR_PRIV_FILE`
-
-# patch configuration
-taler-config -c $CONF -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_PUB
-taler-config -c $CONF -s merchant-exchange-default -o MASTER_KEY -V $MASTER_PUB
-taler-config -c $CONF -s exchangedb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s auditordb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s merchantdb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s bank -o database -V postgres:///$TARGET_DB
-taler-config -c $CONF -s exchange -o KEYDIR -V "${TMP_DIR}/keydir/"
-taler-config -c $CONF -s exchange -o REVOCATION_DIR -V "${TMP_DIR}/revdir/"
-
-# setup exchange
-echo "Setting up exchange"
-taler-exchange-dbinit -c $CONF
-
-echo "Setting up merchant"
-taler-merchant-dbinit -c $CONF
-
-# setup auditor
-echo "Setting up auditor"
-taler-auditor-dbinit -c $CONF
-taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL
-
-# Launch services
-echo "Launching services"
-taler-bank-manage-testing $CONF postgres:///$TARGET_DB serve &> revocation-bank.log &
-TFN=`which taler-exchange-httpd`
-TBINPFX=`dirname $TFN`
-TLIBEXEC=${TBINPFX}/../lib/taler/libexec/
-taler-exchange-secmod-eddsa -c $CONF 2> taler-exchange-secmod-eddsa.log &
-SIGNKEY_HELPER_PID=$!
-taler-exchange-secmod-rsa -c $CONF 2> taler-exchange-secmod-rsa.log &
-RSA_DENOM_HELPER_PID=$!
-taler-exchange-secmod-cs -c $CONF 2> taler-exchange-secmod-cs.log &
-CS_DENOM_HELPER_PID=$!
-taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log &
-EXCHANGE_PID=$!
-taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log &
-MERCHANT_PID=$!
-taler-exchange-wirewatch -c $CONF 2> taler-exchange-wirewatch.log &
-taler-auditor-httpd -c $CONF 2> taler-auditor-httpd.log &
-
-# Wait for all bank to be available (usually the slowest)
-for n in `seq 1 50`
-do
- echo -n "."
- sleep 0.2
- OK=0
- # bank
- wget http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
-
-if [ 1 != $OK ]
-then
- exit_skip "Failed to launch Bank services"
-fi
-
-# Wait for all other services to be available
-for n in `seq 1 50`
-do
- echo -n "."
- sleep 0.1
- OK=0
- # exchange
- wget http://localhost:8081/seed -o /dev/null -O /dev/null >/dev/null || continue
- # merchant
- wget http://localhost:9966/ -o /dev/null -O /dev/null >/dev/null || continue
- # Auditor
- wget http://localhost:8083/ -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
-
-if [ 1 != $OK ]
-then
- cleanup
- exit_skip "Failed to launch Taler services"
-fi
+echo -n "Reset 'auditor-basedb' database ..."
+dropdb "auditor-basedb" >/dev/null 2>/dev/null || true
+createdb "auditor-basedb" || exit_skip "Could not create database '$BASEDB'"
echo " DONE"
-echo -n "Setting up keys"
-
-taler-exchange-offline -c $CONF \
- download sign \
- enable-account payto://x-taler-bank/localhost/Exchange \
- enable-auditor $AUDITOR_PUB $AUDITOR_URL "TESTKUDOS Auditor" \
- wire-fee now x-taler-bank TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 \
- global-fee now TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 1h 1h 1year 5 \
- upload &> taler-exchange-offline.log
-
-echo -n "."
-
-for n in `seq 1 2`
-do
- echo -n "."
- OK=0
- # bank
- wget --timeout=1 http://localhost:8081/keys -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
-
-if [ 1 != $OK ]
-then
- exit_skip "Failed to setup keys"
-fi
+# Launch exchange, merchant and bank.
+setup -c "$CONF" \
+ -abemw \
+ -d "iban"
+# obtain key configuration data
+EXCHANGE_URL=$(taler-config -c "$CONF" -s EXCHANGE -o BASE_URL)
+MERCHANT_PORT=$(taler-config -c "$CONF" -s MERCHANT -o PORT)
+MERCHANT_URL="http://localhost:${MERCHANT_PORT}/"
+BANK_PORT=$(taler-config -c "$CONF" -s BANK -o HTTP_PORT)
+BANK_URL="http://localhost:${BANK_PORT}"
-taler-auditor-offline -c $CONF \
- download sign upload &> taler-auditor-offline.log
-
-echo " DONE"
# Setup merchant
-echo -n "Setting up merchant"
-
-curl -H "Content-Type: application/json" -X POST -d '{"auth": {"method": "external"}, "payto_uris":["payto://x-taler-bank/localhost/43"],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_ms" : 3600000},"default_pay_delay":{"d_ms": 3600000}}' http://localhost:9966/management/instances
+echo -n "Setting up merchant ..."
+curl -H "Content-Type: application/json" -X POST -d '{"auth": {"method": "external"}, "accounts":[{"payto_uri":"payto://iban/SANDBOXX/DE474361?receiver-name=Merchant43"}],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us" : 3600000000},"default_pay_delay":{"d_us": 3600000000},"use_stefan":true}' "${MERCHANT_URL}management/instances"
+echo " DONE"
# run wallet CLI
echo "Running wallet"
-taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'withdrawTestBalance' \
+export WALLET_DB="wallet.wdb"
+rm -f "$WALLET_DB"
+
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ api \
+ --expect-success 'withdrawTestBalance' \
"$(jq -n '
{
amount: "TESTKUDOS:8",
- bankBaseUrl: $BANK_URL,
+ corebankApiBaseUrl: $BANK_URL,
exchangeBaseUrl: $EXCHANGE_URL,
}' \
- --arg BANK_URL $BANK_URL \
- --arg EXCHANGE_URL $EXCHANGE_URL
- )"
+ --arg BANK_URL "$BANK_URL" \
+ --arg EXCHANGE_URL "$EXCHANGE_URL"
+ )" &> taler-wallet-cli-withdraw.log
-taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ run-until-done \
+ &> taler-wallet-cli-withdraw-finish.log
-export coins=$(taler-wallet-cli --wallet-db=$WALLET_DB advanced dump-coins)
+export COINS=$(taler-wallet-cli --wallet-db="$WALLET_DB" advanced dump-coins)
echo -n "COINS are:"
-echo $coins
+echo "$COINS"
# Find coin we want to revoke
-export rc=$(echo "$coins" | jq -r '[.coins[] | select((.denom_value == "TESTKUDOS:2"))][0] | .coin_pub')
+export rc=$(echo "$COINS" | jq -r '[.coins[] | select((.denom_value == "TESTKUDOS:2"))][0] | .coin_pub')
# Find the denom
-export rd=$(echo "$coins" | jq -r '[.coins[] | select((.denom_value == "TESTKUDOS:2"))][0] | .denom_pub_hash')
-echo "Revoking denomination ${rd} (to affect coin ${rc})"
+export rd=$(echo "$COINS" | jq -r '[.coins[] | select((.denom_value == "TESTKUDOS:2"))][0] | .denom_pub_hash')
+echo -n "Revoking denomination ${rd} (to affect coin ${rc}) ..."
# Find all other coins, which will be suspended
-export susp=$(echo "$coins" | jq --arg rc "$rc" '[.coins[] | select(.coin_pub != $rc) | .coin_pub]')
+export susp=$(echo "$COINS" | jq --arg rc "$rc" '[.coins[] | select(.coin_pub != $rc) | .coin_pub]')
# Do the revocation
-taler-exchange-offline -c $CONF \
- revoke-denomination "${rd}" upload &> taler-exchange-offline-revoke.log
-
+taler-exchange-offline \
+ -c $CONF \
+ revoke-denomination "${rd}" \
+ upload \
+ &> taler-exchange-offline-revoke.log
+echo "DONE"
+
+echo -n "Signing replacement keys ..."
sleep 1 # Give exchange time to create replacmenent key
# Re-sign replacement keys
-taler-auditor-offline -c $CONF \
- download sign upload &> taler-auditor-offline.log
+taler-auditor-offline \
+ -c $CONF \
+ download \
+ sign \
+ upload \
+ &> taler-auditor-offline-reinit.log
+echo " DONE"
# Now we suspend the other coins, so later we will pay with the recouped coin
-taler-wallet-cli --wallet-db=$WALLET_DB advanced suspend-coins "$susp"
+taler-wallet-cli \
+ --wallet-db="$WALLET_DB" \
+ advanced \
+ suspend-coins "$susp"
# Update exchange /keys so recoup gets scheduled
-taler-wallet-cli --wallet-db=$WALLET_DB exchanges update \
- -f $EXCHANGE_URL
+taler-wallet-cli \
+ --wallet-db="$WALLET_DB" \
+ exchanges \
+ update \
+ -f "$EXCHANGE_URL"
# Block until scheduled operations are done
-taler-wallet-cli --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ --wallet-db="$WALLET_DB"\
+ run-until-done
-# Now we buy something, only the coins resulting from recouped will be
+# Now we buy something, only the coins resulting from recoup will be
# used, as other ones are suspended
-taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'testPay' \
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ api \
+ 'testPay' \
"$(jq -n '
{
amount: "TESTKUDOS:1",
merchantBaseUrl: $MERCHANT_URL,
summary: "foo",
}' \
- --arg MERCHANT_URL $MERCHANT_URL
+ --arg MERCHANT_URL "$MERCHANT_URL"
)"
-taler-wallet-cli --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ --wallet-db="$WALLET_DB" \
+ run-until-done
echo "Purchase with recoup'ed coin (via reserve) done"
@@ -275,9 +150,6 @@ echo "Will refresh coin ${rrc} of denomination ${zombie_denom}"
# Find all other coins, which will be suspended
export susp=$(echo "$coins" | jq --arg rrc "$rrc" '[.coins[] | select(.coin_pub != $rrc) | .coin_pub]')
-export rrc
-export zombie_denom
-
# Travel into the future! (must match DURATION_WITHDRAW option)
export TIMETRAVEL="--timetravel=604800000000"
@@ -286,13 +158,13 @@ kill -TERM $EXCHANGE_PID
kill -TERM $RSA_DENOM_HELPER_PID
kill -TERM $CS_DENOM_HELPER_PID
kill -TERM $SIGNKEY_HELPER_PID
-taler-exchange-secmod-eddsa $TIMETRAVEL -c $CONF 2> taler-exchange-secmod-eddsa.log &
+taler-exchange-secmod-eddsa $TIMETRAVEL -c $CONF 2> ${MY_TMP_DIR}/taler-exchange-secmod-eddsa.log &
SIGNKEY_HELPER_PID=$!
-taler-exchange-secmod-rsa $TIMETRAVEL -c $CONF 2> taler-exchange-secmod-rsa.log &
+taler-exchange-secmod-rsa $TIMETRAVEL -c $CONF 2> ${MY_TMP_DIR}/taler-exchange-secmod-rsa.log &
RSA_DENOM_HELPER_PID=$!
-taler-exchange-secmod-cs $TIMETRAVEL -c $CONF 2> taler-exchange-secmod-cs.log &
+taler-exchange-secmod-cs $TIMETRAVEL -c $CONF 2> ${MY_TMP_DIR}/taler-exchange-secmod-cs.log &
CS_DENOM_HELPER_PID=$!
-taler-exchange-httpd $TIMETRAVEL -c $CONF 2> taler-exchange-httpd.log &
+taler-exchange-httpd $TIMETRAVEL -c $CONF 2> ${MY_TMP_DIR}/taler-exchange-httpd.log &
export EXCHANGE_PID=$!
# Wait for exchange to be available
@@ -308,8 +180,15 @@ do
done
echo "Refreshing coin $rrc"
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB advanced force-refresh "$rrc"
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ "$TIMETRAVEL" \
+ --wallet-db="$WALLET_DB" \
+ advanced force-refresh \
+ "$rrc"
+taler-wallet-cli \
+ "$TIMETRAVEL" \
+ --wallet-db="$WALLET_DB" \
+ run-until-done
# Update our list of the coins
export coins=$(taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB advanced dump-coins)
@@ -332,29 +211,49 @@ export susp=$(echo "$coins" | jq --arg freshc "$freshc" '[.coins[] | select(.coi
# Do the revocation of freshc
echo "Revoking ${fresh_denom} (to affect coin ${freshc})"
-taler-exchange-offline -c $CONF \
- revoke-denomination "${fresh_denom}" upload &> taler-exchange-offline-revoke-2.log
+taler-exchange-offline \
+ -c "$CONF" \
+ revoke-denomination \
+ "${fresh_denom}" \
+ upload &> taler-exchange-offline-revoke-2.log
sleep 1 # Give exchange time to create replacmenent key
# Re-sign replacement keys
-taler-auditor-offline -c $CONF \
- download sign upload &> taler-auditor-offline.log
+taler-auditor-offline \
+ -c "$CONF" \
+ download \
+ sign \
+ upload &> taler-auditor-offline.log
# Now we suspend the other coins, so later we will pay with the recouped coin
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB advanced suspend-coins "$susp"
+taler-wallet-cli \
+ "$TIMETRAVEL" \
+ --wallet-db="$WALLET_DB" \
+ advanced \
+ suspend-coins "$susp"
# Update exchange /keys so recoup gets scheduled
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB exchanges update \
- -f $EXCHANGE_URL
+taler-wallet-cli \
+ "$TIMETRAVEL"\
+ --wallet-db="$WALLET_DB" \
+ exchanges update \
+ -f "$EXCHANGE_URL"
# Block until scheduled operations are done
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ "$TIMETRAVEL" \
+ --wallet-db="$WALLET_DB" \
+ run-until-done
echo "Restarting merchant (so new keys are known)"
kill -TERM $MERCHANT_PID
-taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log &
+taler-merchant-httpd \
+ -c "$CONF" \
+ -L INFO \
+ 2> ${MY_TMP_DIR}/taler-merchant-httpd.log &
MERCHANT_PID=$!
+
# Wait for merchant to be again available
for n in `seq 1 50`
do
@@ -378,30 +277,35 @@ taler-wallet-cli $TIMETRAVEL --no-throttle --wallet-db=$WALLET_DB api 'testPay'
}' \
--arg MERCHANT_URL $MERCHANT_URL
)"
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ "$TIMETRAVEL" \
+ --wallet-db="$WALLET_DB" \
+ run-until-done
echo "Bought something with refresh-recouped coin"
echo "Shutting down services"
-cleanup
+exit_cleanup
-# Dump database
-echo "Dumping database"
-pg_dump -O $TARGET_DB | sed -e '/AS integer/d' > ${BASEDB}.sql
+# Where do we write the result?
+export BASEDB=${1:-"revoke-basedb"}
+
-echo $MASTER_PUB > ${BASEDB}.mpub
-date +%s > ${BASEDB}.age
+# Dump database
+echo "Dumping database ${BASEDB}.sql"
+pg_dump -O "auditor-basedb" | sed -e '/AS integer/d' > "${BASEDB}.sql"
# clean up
-echo "Final clean up"
-dropdb $TARGET_DB
-rm -rf $DATA_DIR || true
-rm -f $CONF
-rm -r $TMP_DIR
+echo -n "Final clean up ..."
+kill -TERM "$SETUP_PID"
+wait
+unset SETUP_PID
+dropdb "auditor-basedb"
+echo " DONE"
echo "====================================="
-echo " Finished revocation DB generation "
+echo "Finished generation of ${BASEDB}.sql"
echo "====================================="
exit 0
diff --git a/src/auditor/generate_auditordb_home/.local/share/taler/exchange-offline/master.priv b/src/auditor/generate_auditordb_home/.local/share/taler/exchange-offline/master.priv
new file mode 100644
index 000000000..85195dd8f
--- /dev/null
+++ b/src/auditor/generate_auditordb_home/.local/share/taler/exchange-offline/master.priv
@@ -0,0 +1 @@
+%I7qYÿ®ÜX˜2@–šò%'1†”ÂOàÔæJ³Ô¦‘ \ No newline at end of file
diff --git a/src/auditor/report-lib.c b/src/auditor/report-lib.c
index 8d783e0cf..d0e1325ea 100644
--- a/src/auditor/report-lib.c
+++ b/src/auditor/report-lib.c
@@ -62,6 +62,11 @@ struct TALER_AuditorPublicKeyP TALER_ARL_auditor_pub;
char *TALER_ARL_auditor_url;
/**
+ * REST API endpoint of the exchange.
+ */
+char *TALER_ARL_exchange_url;
+
+/**
* At what time did the auditor process start?
*/
struct GNUNET_TIME_Absolute start_time;
@@ -255,7 +260,7 @@ TALER_ARL_get_denomination_info (
*
* @param analysis analysis to run
* @param analysis_cls closure for @a analysis
- * @return #GNUNET_OK if @a analysis succeessfully committed,
+ * @return #GNUNET_OK if @a analysis successfully committed,
* #GNUNET_NO if we had an error on commit (retry may help)
* #GNUNET_SYSERR on hard errors
*/
@@ -356,28 +361,6 @@ TALER_ARL_setup_sessions_and_run (TALER_ARL_Analysis ana,
}
-/**
- * Test if the given @a mpub matches the #TALER_ARL_master_pub.
- * If so, set "found" to GNUNET_YES.
- *
- * @param cls a `int *` pointing to "found"
- * @param mpub exchange master public key to compare
- * @param exchange_url URL of the exchange (ignored)
- */
-static void
-test_master_present (void *cls,
- const struct TALER_MasterPublicKeyP *mpub,
- const char *exchange_url)
-{
- int *found = cls;
-
- (void) exchange_url;
- if (0 == GNUNET_memcmp (mpub,
- &TALER_ARL_master_pub))
- *found = GNUNET_YES;
-}
-
-
void
TALER_ARL_amount_add_ (struct TALER_Amount *sum,
const struct TALER_Amount *a1,
@@ -549,6 +532,18 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
"BASE_URL");
return GNUNET_SYSERR;
}
+ if (GNUNET_OK !=
+ GNUNET_CONFIGURATION_get_value_string (TALER_ARL_cfg,
+ "exchange",
+ "BASE_URL",
+ &TALER_ARL_exchange_url))
+ {
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+ "exchange",
+ "BASE_URL");
+ return GNUNET_SYSERR;
+ }
+
if (GNUNET_is_zero (&TALER_ARL_master_pub))
{
/* -m option not given, try configuration */
@@ -580,6 +575,9 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
GNUNET_free (master_public_key_str);
return GNUNET_SYSERR;
}
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Running auditor against exchange master public key `%s'\n",
+ master_public_key_str);
GNUNET_free (master_public_key_str);
} /* end of -m not given */
@@ -705,29 +703,13 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
TALER_ARL_done (NULL);
return GNUNET_SYSERR;
}
+ if (GNUNET_SYSERR ==
+ TALER_ARL_adb->preflight (TALER_ARL_adb->cls))
{
- int found;
-
- if (GNUNET_SYSERR ==
- TALER_ARL_adb->preflight (TALER_ARL_adb->cls))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to start session with auditor database.\n");
- TALER_ARL_done (NULL);
- return GNUNET_SYSERR;
- }
- found = GNUNET_NO;
- (void) TALER_ARL_adb->list_exchanges (TALER_ARL_adb->cls,
- &test_master_present,
- &found);
- if (GNUNET_NO == found)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Exchange's master public key `%s' not known to auditor DB. Did you forget to run `taler-auditor-exchange`?\n",
- GNUNET_p2s (&TALER_ARL_master_pub.eddsa_pub));
- TALER_ARL_done (NULL);
- return GNUNET_SYSERR;
- }
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to start session with auditor database.\n");
+ TALER_ARL_done (NULL);
+ return GNUNET_SYSERR;
}
return GNUNET_OK;
}
@@ -765,6 +747,7 @@ TALER_ARL_done (json_t *report)
JSON_INDENT (2));
json_decref (report);
}
+ GNUNET_free (TALER_ARL_exchange_url);
GNUNET_free (TALER_ARL_auditor_url);
}
diff --git a/src/auditor/report-lib.h b/src/auditor/report-lib.h
index 8054baa46..db29abc3a 100644
--- a/src/auditor/report-lib.h
+++ b/src/auditor/report-lib.h
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2016-2020 Taler Systems SA
+ Copyright (C) 2016-2024 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero Public License as published by the Free Software
@@ -28,6 +28,52 @@
#include "taler_bank_service.h"
#include "taler_signatures.h"
+/**
+ * Macro to use to access progress point value @a name.
+ */
+#define TALER_ARL_USE_PP(name) TAC_ ## name
+
+/**
+ * Macro to use to declare progress point value @a name.
+ */
+#define TALER_ARL_DEF_PP(name) \
+ uint64_t TALER_ARL_USE_PP (name) = 0
+
+/**
+ * Macro to use to GET progress point value @a name from DB.
+ */
+#define TALER_ARL_GET_PP(name) \
+ TALER_S (name), &TALER_ARL_USE_PP (name)
+
+/**
+ * Macro to use to SET progress point value @a name in DB.
+ */
+#define TALER_ARL_SET_PP(name) \
+ TALER_S (name), TALER_ARL_USE_PP (name)
+
+/**
+ * Macro to use to access amount balance @a name.
+ */
+#define TALER_ARL_USE_AB(name) TAC_ ## name
+
+/**
+ * Macro to use to declare amount balance @a name.
+ */
+#define TALER_ARL_DEF_AB(name) \
+ struct TALER_Amount TALER_ARL_USE_AB (name)
+
+/**
+ * Macro to use to GET amount balance @a name from DB.
+ */
+#define TALER_ARL_GET_AB(name) \
+ TALER_S (name), &TALER_ARL_USE_AB (name)
+
+/**
+ * Macro to use to SET amount balance @a name in DB.
+ */
+#define TALER_ARL_SET_AB(name) \
+ TALER_S (name), &TALER_ARL_USE_AB (name)
+
/**
* Command-line option "-r": restart audit from scratch
@@ -75,6 +121,11 @@ extern struct TALER_AuditorPublicKeyP TALER_ARL_auditor_pub;
extern char *TALER_ARL_auditor_url;
/**
+ * REST API endpoint of the exchange.
+ */
+extern char *TALER_ARL_exchange_url;
+
+/**
* At what time did the auditor process start?
*/
extern struct GNUNET_TIME_Absolute start_time;
diff --git a/src/auditor/revoke-basedb.age b/src/auditor/revoke-basedb.age
deleted file mode 100644
index 7191ca49b..000000000
--- a/src/auditor/revoke-basedb.age
+++ /dev/null
@@ -1 +0,0 @@
-1651516459
diff --git a/src/auditor/revoke-basedb.conf b/src/auditor/revoke-basedb.conf
index da440c60a..706f97347 100644
--- a/src/auditor/revoke-basedb.conf
+++ b/src/auditor/revoke-basedb.conf
@@ -1,34 +1,34 @@
[auditor]
-DB = postgres
+PUBLIC_KEY = CK4P6P5VXR82B1A4C3PY5DCHG8HDZA1HSZR76Z8D6FD57MASFT70
TINY_AMOUNT = TESTKUDOS:0.01
BASE_URL = http://localhost:8083/
[exchange-account-1]
-PAYTO_URI = payto://x-taler-bank/localhost/Exchange
+PAYTO_URI = payto://iban/SANDBOXX/DE717324?receiver-name=Exchange+Company
enable_debit = yes
enable_credit = yes
[exchange-accountcredentials-1]
-WIRE_GATEWAY_URL = "http://localhost:8082/taler-wire-gateway/Exchange/"
+WIRE_GATEWAY_URL = "http://localhost:8082/accounts/exchange/taler-wire-gateway/"
WIRE_GATEWAY_AUTH_METHOD = basic
-USERNAME = Exchange
+USERNAME = exchange
PASSWORD = x
[exchangedb]
WIREFEE_BASE_DIR = ${PWD}/wirefees/
[auditordb-postgres]
-CONFIG = postgres:///taler-auditor-test
+CONFIG = postgres:///revoke-basedb
[exchangedb-postgres]
-CONFIG = postgres:///taler-auditor-test
+CONFIG = postgres:///revoke-basedb
[taler]
CURRENCY = TESTKUDOS
CURRENCY_ROUND_UNIT = TESTKUDOS:0.01
[bank]
-DATABASE = postgres:///taler-auditor-test
+DATABASE = postgres:///revoke-basedb
MAX_DEBT = TESTKUDOS:50.0
MAX_DEBT_BANK = TESTKUDOS:100000.0
HTTP_PORT = 8082
diff --git a/src/auditor/revoke-basedb.fees b/src/auditor/revoke-basedb.fees
deleted file mode 100644
index d9b45a374..000000000
--- a/src/auditor/revoke-basedb.fees
+++ /dev/null
Binary files differ
diff --git a/src/auditor/revoke-basedb.mpub b/src/auditor/revoke-basedb.mpub
deleted file mode 100644
index c947d28a3..000000000
--- a/src/auditor/revoke-basedb.mpub
+++ /dev/null
@@ -1 +0,0 @@
-9M29VNDWV6DZPGE5DXHM8Z0A41CDC6JTTE2J85C1C9V165TGPASG
diff --git a/src/auditor/revoke-basedb.sql b/src/auditor/revoke-basedb.sql
deleted file mode 100644
index 7cf16618c..000000000
--- a/src/auditor/revoke-basedb.sql
+++ /dev/null
@@ -1,16143 +0,0 @@
---
--- PostgreSQL database dump
---
-
--- Dumped from database version 13.5 (Debian 13.5-0+deb11u1)
--- Dumped by pg_dump version 13.5 (Debian 13.5-0+deb11u1)
-
-SET statement_timeout = 0;
-SET lock_timeout = 0;
-SET idle_in_transaction_session_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = on;
-SELECT pg_catalog.set_config('search_path', '', false);
-SET check_function_bodies = false;
-SET xmloption = content;
-SET client_min_messages = warning;
-SET row_security = off;
-
---
--- Name: _v; Type: SCHEMA; Schema: -; Owner: -
---
-
-CREATE SCHEMA _v;
-
-
---
--- Name: SCHEMA _v; Type: COMMENT; Schema: -; Owner: -
---
-
-COMMENT ON SCHEMA _v IS 'Schema for versioning data and functionality.';
-
-
---
--- Name: assert_patch_is_applied(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_patch_is_applied(in_patch_name text) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- t_text TEXT;
-BEGIN
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_patch_name;
- IF NOT FOUND THEN
- RAISE EXCEPTION 'Patch % is not applied!', in_patch_name;
- END IF;
- RETURN format('Patch %s is applied.', in_patch_name);
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_patch_is_applied(in_patch_name text); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_patch_is_applied(in_patch_name text) IS 'Function that can be used to make sure that patch has been applied.';
-
-
---
--- Name: assert_user_is_not_superuser(); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_not_superuser() RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_super bool;
-BEGIN
- SELECT usesuper INTO v_super FROM pg_user WHERE usename = current_user;
- IF v_super THEN
- RAISE EXCEPTION 'Current user is superuser - cannot continue.';
- END IF;
- RETURN 'assert_user_is_not_superuser: OK';
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_not_superuser(); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_not_superuser() IS 'Function that can be used to make sure that patch is being applied using normal (not superuser) account.';
-
-
---
--- Name: assert_user_is_one_of(text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_one_of(VARIADIC p_acceptable_users text[]) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
-BEGIN
- IF current_user = any( p_acceptable_users ) THEN
- RETURN 'assert_user_is_one_of: OK';
- END IF;
- RAISE EXCEPTION 'User is not one of: % - cannot continue.', p_acceptable_users;
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_one_of(VARIADIC p_acceptable_users text[]); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_one_of(VARIADIC p_acceptable_users text[]) IS 'Function that can be used to make sure that patch is being applied by one of defined users.';
-
-
---
--- Name: assert_user_is_superuser(); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_superuser() RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_super bool;
-BEGIN
- SELECT usesuper INTO v_super FROM pg_user WHERE usename = current_user;
- IF v_super THEN
- RETURN 'assert_user_is_superuser: OK';
- END IF;
- RAISE EXCEPTION 'Current user is not superuser - cannot continue.';
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_superuser(); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_superuser() IS 'Function that can be used to make sure that patch is being applied using superuser account.';
-
-
---
--- Name: register_patch(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(text) RETURNS SETOF integer
- LANGUAGE sql
- AS $_$
- SELECT _v.register_patch( $1, NULL, NULL );
-$_$;
-
-
---
--- Name: FUNCTION register_patch(text); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(text) IS 'Wrapper to allow registration of patches without requirements and conflicts.';
-
-
---
--- Name: register_patch(text, text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(text, text[]) RETURNS SETOF integer
- LANGUAGE sql
- AS $_$
- SELECT _v.register_patch( $1, $2, NULL );
-$_$;
-
-
---
--- Name: FUNCTION register_patch(text, text[]); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(text, text[]) IS 'Wrapper to allow registration of patches without conflicts.';
-
-
---
--- Name: register_patch(text, text[], text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer) RETURNS SETOF integer
- LANGUAGE plpgsql
- AS $$
-DECLARE
- t_text TEXT;
- t_text_a TEXT[];
- i INT4;
-BEGIN
- -- Thanks to this we know only one patch will be applied at a time
- LOCK TABLE _v.patches IN EXCLUSIVE MODE;
-
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_patch_name;
- IF FOUND THEN
- RAISE EXCEPTION 'Patch % is already applied!', in_patch_name;
- END IF;
-
- t_text_a := ARRAY( SELECT patch_name FROM _v.patches WHERE patch_name = any( in_conflicts ) );
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Versioning patches conflict. Conflicting patche(s) installed: %.', array_to_string( t_text_a, ', ' );
- END IF;
-
- IF array_upper( in_requirements, 1 ) IS NOT NULL THEN
- t_text_a := '{}';
- FOR i IN array_lower( in_requirements, 1 ) .. array_upper( in_requirements, 1 ) LOOP
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_requirements[i];
- IF NOT FOUND THEN
- t_text_a := t_text_a || in_requirements[i];
- END IF;
- END LOOP;
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Missing prerequisite(s): %.', array_to_string( t_text_a, ', ' );
- END IF;
- END IF;
-
- INSERT INTO _v.patches (patch_name, applied_tsz, applied_by, requires, conflicts ) VALUES ( in_patch_name, now(), current_user, coalesce( in_requirements, '{}' ), coalesce( in_conflicts, '{}' ) );
- RETURN;
-END;
-$$;
-
-
---
--- Name: FUNCTION register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer) IS 'Function to register patches in database. Raises exception if there are conflicts, prerequisites are not installed or the migration has already been installed.';
-
-
---
--- Name: unregister_patch(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.unregister_patch(in_patch_name text, OUT versioning integer) RETURNS SETOF integer
- LANGUAGE plpgsql
- AS $$
-DECLARE
- i INT4;
- t_text_a TEXT[];
-BEGIN
- -- Thanks to this we know only one patch will be applied at a time
- LOCK TABLE _v.patches IN EXCLUSIVE MODE;
-
- t_text_a := ARRAY( SELECT patch_name FROM _v.patches WHERE in_patch_name = ANY( requires ) );
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Cannot uninstall %, as it is required by: %.', in_patch_name, array_to_string( t_text_a, ', ' );
- END IF;
-
- DELETE FROM _v.patches WHERE patch_name = in_patch_name;
- GET DIAGNOSTICS i = ROW_COUNT;
- IF i < 1 THEN
- RAISE EXCEPTION 'Patch % is not installed, so it can''t be uninstalled!', in_patch_name;
- END IF;
-
- RETURN;
-END;
-$$;
-
-
---
--- Name: FUNCTION unregister_patch(in_patch_name text, OUT versioning integer); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.unregister_patch(in_patch_name text, OUT versioning integer) IS 'Function to unregister patches in database. Dies if the patch is not registered, or if unregistering it would break dependencies.';
-
-
---
--- Name: add_constraints_to_account_merges_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_account_merges_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE account_merges_' || partition_suffix || ' '
- 'ADD CONSTRAINT account_merges_' || partition_suffix || '_account_merge_request_serial_id_key '
- 'UNIQUE (account_merge_request_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_aggregation_tracking_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_aggregation_tracking_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE aggregation_tracking_' || partition_suffix || ' '
- 'ADD CONSTRAINT aggregation_tracking_' || partition_suffix || '_aggregation_serial_id_key '
- 'UNIQUE (aggregation_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_contracts_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_contracts_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE contracts_' || partition_suffix || ' '
- 'ADD CONSTRAINT contracts_' || partition_suffix || '_contract_serial_id_key '
- 'UNIQUE (contract_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_cs_nonce_locks_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_cs_nonce_locks_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE cs_nonce_locks_' || partition_suffix || ' '
- 'ADD CONSTRAINT cs_nonce_locks_' || partition_suffix || '_cs_nonce_lock_serial_id_key '
- 'UNIQUE (cs_nonce_lock_serial_id)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_deposits_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_deposits_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE deposits_' || partition_suffix || ' '
- 'ADD CONSTRAINT deposits_' || partition_suffix || '_deposit_serial_id_pkey '
- 'PRIMARY KEY (deposit_serial_id) '
- ',ADD CONSTRAINT deposits_' || partition_suffix || '_coin_pub_merchant_pub_h_contract_terms_key '
- 'UNIQUE (coin_pub, merchant_pub, h_contract_terms)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_known_coins_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_known_coins_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE known_coins_' || partition_suffix || ' '
- 'ADD CONSTRAINT known_coins_' || partition_suffix || '_known_coin_id_key '
- 'UNIQUE (known_coin_id)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_purse_deposits_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_purse_deposits_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE purse_deposits_' || partition_suffix || ' '
- 'ADD CONSTRAINT purse_deposits_' || partition_suffix || '_purse_deposit_serial_id_key '
- 'UNIQUE (purse_deposit_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_purse_merges_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_purse_merges_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE purse_merges_' || partition_suffix || ' '
- 'ADD CONSTRAINT purse_merges_' || partition_suffix || '_purse_merge_request_serial_id_key '
- 'UNIQUE (purse_merge_request_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_purse_requests_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_purse_requests_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE purse_requests_' || partition_suffix || ' '
- 'ADD CONSTRAINT purse_requests_' || partition_suffix || '_purse_requests_serial_id_key '
- 'UNIQUE (purse_requests_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_recoup_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_recoup_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE recoup_' || partition_suffix || ' '
- 'ADD CONSTRAINT recoup_' || partition_suffix || '_recoup_uuid_key '
- 'UNIQUE (recoup_uuid) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_recoup_refresh_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_recoup_refresh_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE recoup_refresh_' || partition_suffix || ' '
- 'ADD CONSTRAINT recoup_refresh_' || partition_suffix || '_recoup_refresh_uuid_key '
- 'UNIQUE (recoup_refresh_uuid) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_refresh_commitments_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_refresh_commitments_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE refresh_commitments_' || partition_suffix || ' '
- 'ADD CONSTRAINT refresh_commitments_' || partition_suffix || '_melt_serial_id_key '
- 'UNIQUE (melt_serial_id)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_refresh_revealed_coins_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_refresh_revealed_coins_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE refresh_revealed_coins_' || partition_suffix || ' '
- 'ADD CONSTRAINT refresh_revealed_coins_' || partition_suffix || '_rrc_serial_key '
- 'UNIQUE (rrc_serial) '
- ',ADD CONSTRAINT refresh_revealed_coins_' || partition_suffix || '_coin_ev_key '
- 'UNIQUE (coin_ev) '
- ',ADD CONSTRAINT refresh_revealed_coins_' || partition_suffix || '_h_coin_ev_key '
- 'UNIQUE (h_coin_ev) '
- ',ADD PRIMARY KEY (melt_serial_id, freshcoin_index) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_refresh_transfer_keys_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_refresh_transfer_keys_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE refresh_transfer_keys_' || partition_suffix || ' '
- 'ADD CONSTRAINT refresh_transfer_keys_' || partition_suffix || '_rtc_serial_key '
- 'UNIQUE (rtc_serial)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_refunds_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_refunds_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE refunds_' || partition_suffix || ' '
- 'ADD CONSTRAINT refunds_' || partition_suffix || '_refund_serial_id_key '
- 'UNIQUE (refund_serial_id) '
- ',ADD PRIMARY KEY (deposit_serial_id, rtransaction_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_reserves_close_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_reserves_close_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE reserves_close_' || partition_suffix || ' '
- 'ADD CONSTRAINT reserves_close_' || partition_suffix || '_close_uuid_pkey '
- 'PRIMARY KEY (close_uuid)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_reserves_in_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_reserves_in_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE reserves_in_' || partition_suffix || ' '
- 'ADD CONSTRAINT reserves_in_' || partition_suffix || '_reserve_in_serial_id_key '
- 'UNIQUE (reserve_in_serial_id)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_reserves_out_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_reserves_out_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE reserves_out_' || partition_suffix || ' '
- 'ADD CONSTRAINT reserves_out_' || partition_suffix || '_reserve_out_serial_id_key '
- 'UNIQUE (reserve_out_serial_id)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wad_in_entries_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wad_in_entries_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE wad_in_entries_' || partition_suffix || ' '
- 'ADD CONSTRAINT wad_in_entries_' || partition_suffix || '_wad_in_entry_serial_id_key '
- 'UNIQUE (wad_in_entry_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wad_out_entries_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wad_out_entries_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE wad_out_entries_' || partition_suffix || ' '
- 'ADD CONSTRAINT wad_out_entries_' || partition_suffix || '_wad_out_entry_serial_id_key '
- 'UNIQUE (wad_out_entry_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wads_in_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wads_in_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE wads_in_' || partition_suffix || ' '
- 'ADD CONSTRAINT wads_in_' || partition_suffix || '_wad_in_serial_id_key '
- 'UNIQUE (wad_in_serial_id) '
- ',ADD CONSTRAINT wads_in_' || partition_suffix || '_wad_is_origin_exchange_url_key '
- 'UNIQUE (wad_id, origin_exchange_url) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wads_out_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wads_out_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE wads_out_' || partition_suffix || ' '
- 'ADD CONSTRAINT wads_out_' || partition_suffix || '_wad_out_serial_id_key '
- 'UNIQUE (wad_out_serial_id) '
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wire_out_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wire_out_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE wire_out_' || partition_suffix || ' '
- 'ADD CONSTRAINT wire_out_' || partition_suffix || '_wireout_uuid_pkey '
- 'PRIMARY KEY (wireout_uuid)'
- );
-END
-$$;
-
-
---
--- Name: add_constraints_to_wire_targets_partition(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.add_constraints_to_wire_targets_partition(partition_suffix character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- EXECUTE FORMAT (
- 'ALTER TABLE wire_targets_' || partition_suffix || ' '
- 'ADD CONSTRAINT wire_targets_' || partition_suffix || '_wire_target_serial_id_key '
- 'UNIQUE (wire_target_serial_id)'
- );
-END
-$$;
-
-
---
--- Name: create_foreign_hash_partition(character varying, integer, character varying, integer, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_foreign_hash_partition(source_table_name character varying, modulus integer, shard_suffix character varying, current_shard_num integer, local_user character varying DEFAULT 'taler-exchange-httpd'::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- RAISE NOTICE 'Creating %_% on %', source_table_name, shard_suffix, shard_suffix;
-
- EXECUTE FORMAT(
- 'CREATE FOREIGN TABLE IF NOT EXISTS %I '
- 'PARTITION OF %I '
- 'FOR VALUES WITH (MODULUS %s, REMAINDER %s) '
- 'SERVER %I'
- ,source_table_name || '_' || shard_suffix
- ,source_table_name
- ,modulus
- ,current_shard_num-1
- ,shard_suffix
- );
-
- EXECUTE FORMAT(
- 'ALTER FOREIGN TABLE %I OWNER TO %I'
- ,source_table_name || '_' || shard_suffix
- ,local_user
- );
-
-END
-$$;
-
-
---
--- Name: create_foreign_range_partition(character varying, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_foreign_range_partition(source_table_name character varying, partition_num integer) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- RAISE NOTICE 'TODO';
-END
-$$;
-
-
---
--- Name: create_foreign_servers(integer, character varying, character varying, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_foreign_servers(amount integer, domain character varying, remote_user character varying DEFAULT 'taler'::character varying, remote_user_password character varying DEFAULT 'taler'::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- PERFORM prepare_sharding();
-
- FOR i IN 1..amount LOOP
- PERFORM create_shard_server(
- i::varchar
- ,amount
- ,i
- ,'shard-' || i::varchar || '.' || domain
- ,remote_user
- ,remote_user_password
- ,'taler-exchange'
- ,'5432'
- ,'taler-exchange-httpd'
- );
- END LOOP;
-
- PERFORM drop_default_partitions();
-
-END
-$$;
-
-
---
--- Name: create_hash_partition(character varying, integer, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_hash_partition(source_table_name character varying, modulus integer, partition_num integer) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- RAISE NOTICE 'Creating partition %_%', source_table_name, partition_num;
-
- EXECUTE FORMAT(
- 'CREATE TABLE IF NOT EXISTS %I '
- 'PARTITION OF %I '
- 'FOR VALUES WITH (MODULUS %s, REMAINDER %s)'
- ,source_table_name || '_' || partition_num
- ,source_table_name
- ,modulus
- ,partition_num-1
- );
-
-END
-$$;
-
-
---
--- Name: create_partitioned_table(character varying, character varying, character varying, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_partitioned_table(table_definition character varying, table_name character varying, main_table_partition_str character varying, shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- IF shard_suffix IS NOT NULL THEN
- table_name=table_name || '_' || shard_suffix;
- main_table_partition_str = '';
- END IF;
-
- EXECUTE FORMAT(
- table_definition,
- table_name,
- main_table_partition_str
- );
-
-END
-$$;
-
-
---
--- Name: create_partitions(integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_partitions(num_partitions integer) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- modulus INTEGER;
-BEGIN
-
- modulus := num_partitions;
-
- PERFORM detach_default_partitions();
-
- LOOP
-
- PERFORM create_hash_partition(
- 'wire_targets'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_wire_targets_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'reserves'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'reserves_in'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_reserves_in_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'reserves_close'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_reserves_close_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'reserves_out'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_reserves_out_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'reserves_out_by_reserve'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'known_coins'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_known_coins_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'refresh_commitments'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_refresh_commitments_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'refresh_revealed_coins'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_refresh_revealed_coins_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'refresh_transfer_keys'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_refresh_transfer_keys_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'deposits'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_deposits_partition(num_partitions::varchar);
-
--- TODO: dynamically (!) creating/deleting deposits partitions:
--- create new partitions 'as needed', drop old ones once the aggregator has made
--- them empty; as 'new' deposits will always have deadlines in the future, this
--- would basically guarantee no conflict between aggregator and exchange service!
--- SEE also: https://www.cybertec-postgresql.com/en/automatic-partition-creation-in-postgresql/
--- (article is slightly wrong, as this works:)
---CREATE TABLE tab (
--- id bigint GENERATED ALWAYS AS IDENTITY,
--- ts timestamp NOT NULL,
--- data text
--- PARTITION BY LIST ((ts::date));
--- CREATE TABLE tab_def PARTITION OF tab DEFAULT;
--- BEGIN
--- CREATE TABLE tab_part2 (LIKE tab);
--- insert into tab_part2 (id,ts, data) values (5,'2022-03-21', 'foo');
--- alter table tab attach partition tab_part2 for values in ('2022-03-21');
--- commit;
--- Naturally, to ensure this is actually 100% conflict-free, we'd
--- need to create tables at the granularity of the wire/refund deadlines;
--- that is right now configurable via AGGREGATOR_SHIFT option.
-
--- FIXME: range partitioning
--- PERFORM create_range_partition(
--- 'deposits_by_ready'
--- ,modulus
--- ,num_partitions
--- );
---
--- PERFORM create_range_partition(
--- 'deposits_for_matching'
--- ,modulus
--- ,num_partitions
--- );
-
- PERFORM create_hash_partition(
- 'refunds'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_refunds_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'wire_out'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_wire_out_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'aggregation_transient'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'aggregation_tracking'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_aggregation_tracking_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'recoup'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_recoup_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'recoup_by_reserve'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'recoup_refresh'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_recoup_refresh_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'prewire'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'cs_nonce_locks'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_cs_nonce_locks_partition(num_partitions::varchar);
-
- ---------------- P2P ----------------------
-
- PERFORM create_hash_partition(
- 'purse_requests'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_purse_requests_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'purse_merges'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_purse_merges_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'account_merges'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_account_merges_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'contracts'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_contracts_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'history_requests'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'close_requests'
- ,modulus
- ,num_partitions
- );
-
- PERFORM create_hash_partition(
- 'purse_deposits'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_purse_deposits_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'wad_out_entries'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_wad_out_entries_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'wads_in'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_wads_in_partition(num_partitions::varchar);
-
- PERFORM create_hash_partition(
- 'wad_in_entries'
- ,modulus
- ,num_partitions
- );
- PERFORM add_constraints_to_wad_in_entries_partition(num_partitions::varchar);
-
- num_partitions=num_partitions-1;
- EXIT WHEN num_partitions=0;
-
- END LOOP;
-
- PERFORM drop_default_partitions();
-
-END
-$$;
-
-
---
--- Name: create_range_partition(character varying, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_range_partition(source_table_name character varying, partition_num integer) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
- RAISE NOTICE 'TODO';
-END
-$$;
-
-
---
--- Name: create_shard_server(character varying, integer, integer, character varying, character varying, character varying, character varying, integer, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_shard_server(shard_suffix character varying, total_num_shards integer, current_shard_num integer, remote_host character varying, remote_user character varying, remote_user_password character varying, remote_db_name character varying DEFAULT 'taler-exchange'::character varying, remote_port integer DEFAULT 5432, local_user character varying DEFAULT 'taler-exchange-httpd'::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- RAISE NOTICE 'Creating server %', remote_host;
-
- EXECUTE FORMAT(
- 'CREATE SERVER IF NOT EXISTS %I '
- 'FOREIGN DATA WRAPPER postgres_fdw '
- 'OPTIONS (dbname %L, host %L, port %L)'
- ,shard_suffix
- ,remote_db_name
- ,remote_host
- ,remote_port
- );
-
- EXECUTE FORMAT(
- 'CREATE USER MAPPING IF NOT EXISTS '
- 'FOR %I SERVER %I '
- 'OPTIONS (user %L, password %L)'
- ,local_user
- ,shard_suffix
- ,remote_user
- ,remote_user_password
- );
-
- EXECUTE FORMAT(
- 'GRANT ALL PRIVILEGES '
- 'ON FOREIGN SERVER %I '
- 'TO %I;'
- ,shard_suffix
- ,local_user
- );
-
- PERFORM create_foreign_hash_partition(
- 'wire_targets'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'reserves'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'reserves_in'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'reserves_out'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'reserves_out_by_reserve'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'reserves_close'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'known_coins'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'refresh_commitments'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'refresh_revealed_coins'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'refresh_transfer_keys'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'deposits'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
--- PERFORM create_foreign_range_partition(
--- 'deposits_by_ready'
--- ,total_num_shards
--- ,shard_suffix
--- ,current_shard_num
--- ,local_user
--- );
--- PERFORM create_foreign_range_partition(
--- 'deposits_for_matching'
--- ,total_num_shards
--- ,shard_suffix
--- ,current_shard_num
--- ,local_user
--- );
- PERFORM create_foreign_hash_partition(
- 'refunds'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'wire_out'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'aggregation_transient'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'aggregation_tracking'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'recoup'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'recoup_by_reserve'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'recoup_refresh'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'prewire'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'cs_nonce_locks'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
-
- ------------------- P2P --------------------
-
- PERFORM create_foreign_hash_partition(
- 'purse_requests'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'purse_merges'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'account_merges'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'contracts'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'history_requests'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'close_requests'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'purse_deposits'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'wad_out_entries'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'wads_in'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
- PERFORM create_foreign_hash_partition(
- 'wad_in_entries'
- ,total_num_shards
- ,shard_suffix
- ,current_shard_num
- ,local_user
- );
-
-END
-$$;
-
-
---
--- Name: FUNCTION create_shard_server(shard_suffix character varying, total_num_shards integer, current_shard_num integer, remote_host character varying, remote_user character varying, remote_user_password character varying, remote_db_name character varying, remote_port integer, local_user character varying); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.create_shard_server(shard_suffix character varying, total_num_shards integer, current_shard_num integer, remote_host character varying, remote_user character varying, remote_user_password character varying, remote_db_name character varying, remote_port integer, local_user character varying) IS 'Create a shard server on the master
- node with all foreign tables and user mappings';
-
-
---
--- Name: create_table_account_merges(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_account_merges(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'account_merges';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(account_merge_request_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE
- ',reserve_pub BYTEA NOT NULL CHECK (LENGTH(reserve_pub)=32)' -- REFERENCES reserves (reserve_pub) ON DELETE CASCADE
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)' -- REFERENCES purse_requests (purse_pub)
- ',PRIMARY KEY (purse_pub)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by reserve_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_pub '
- 'ON ' || table_name || ' '
- '(reserve_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_aggregation_tracking(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_aggregation_tracking(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'aggregation_tracking';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(aggregation_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',deposit_serial_id INT8 PRIMARY KEY' -- REFERENCES deposits (deposit_serial_id) ON DELETE CASCADE' -- FIXME chnage to coint_pub + deposit_serial_id for more efficient depost -- or something else ???
- ',wtid_raw BYTEA NOT NULL' -- CONSTRAINT wire_out_ref REFERENCES wire_out(wtid_raw) ON DELETE CASCADE DEFERRABLE'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (deposit_serial_id)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_wtid_raw_index '
- 'ON ' || table_name || ' '
- '(wtid_raw);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_wtid_raw_index '
- 'IS ' || quote_literal('for lookup_transactions') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_aggregation_transient(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_aggregation_transient(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'aggregation_transient';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',wire_target_h_payto BYTEA CHECK (LENGTH(wire_target_h_payto)=32)'
- ',exchange_account_section TEXT NOT NULL'
- ',wtid_raw BYTEA NOT NULL CHECK (LENGTH(wtid_raw)=32)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (wire_target_h_payto)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_close_requests(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_close_requests(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'close_requests';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(reserve_pub BYTEA NOT NULL CHECK (LENGTH(reserve_pub)=32)' -- REFERENCES reserves(reserve_pub) ON DELETE CASCADE
- ',close_timestamp INT8 NOT NULL'
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',close_val INT8 NOT NULL'
- ',close_frac INT4 NOT NULL'
- ',PRIMARY KEY (reserve_pub,close_timestamp)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_pub)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_contracts(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_contracts(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'contracts';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(contract_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)'
- ',pub_ckey BYTEA NOT NULL CHECK (LENGTH(pub_ckey)=32)'
- ',contract_sig BYTEA NOT NULL CHECK (LENGTH(contract_sig)=64)'
- ',e_contract BYTEA NOT NULL'
- ',purse_expiration INT8 NOT NULL'
- ',PRIMARY KEY (purse_pub)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_cs_nonce_locks(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_cs_nonce_locks(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(cs_nonce_lock_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',nonce BYTEA PRIMARY KEY CHECK (LENGTH(nonce)=32)'
- ',op_hash BYTEA NOT NULL CHECK (LENGTH(op_hash)=64)'
- ',max_denomination_serial INT8 NOT NULL'
- ') %s ;'
- ,'cs_nonce_locks'
- ,'PARTITION BY HASH (nonce)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_deposits(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_deposits(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'deposits';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(deposit_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- PRIMARY KEY'
- ',shard INT8 NOT NULL'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub) ON DELETE CASCADE
- ',known_coin_id INT8 NOT NULL' -- REFERENCES known_coins (known_coin_id) ON DELETE CASCADE' --- FIXME: column needed???
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',wallet_timestamp INT8 NOT NULL'
- ',exchange_timestamp INT8 NOT NULL'
- ',refund_deadline INT8 NOT NULL'
- ',wire_deadline INT8 NOT NULL'
- ',merchant_pub BYTEA NOT NULL CHECK (LENGTH(merchant_pub)=32)'
- ',h_contract_terms BYTEA NOT NULL CHECK (LENGTH(h_contract_terms)=64)'
- ',coin_sig BYTEA NOT NULL CHECK (LENGTH(coin_sig)=64)'
- ',wire_salt BYTEA NOT NULL CHECK (LENGTH(wire_salt)=16)'
- ',wire_target_h_payto BYTEA CHECK (LENGTH(wire_target_h_payto)=32)'
- ',done BOOLEAN NOT NULL DEFAULT FALSE'
- ',extension_blocked BOOLEAN NOT NULL DEFAULT FALSE'
- ',extension_details_serial_id INT8' -- REFERENCES extension_details (extension_details_serial_id) ON DELETE CASCADE'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (coin_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_coin_pub_index '
- 'ON ' || table_name || ' '
- '(coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_deposits_by_ready(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_deposits_by_ready(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'deposits_by_ready';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(wire_deadline INT8 NOT NULL'
- ',shard INT8 NOT NULL'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)'
- ',deposit_serial_id INT8'
- ') %s ;'
- ,table_name
- ,'PARTITION BY RANGE (wire_deadline)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_main_index '
- 'ON ' || table_name || ' '
- '(wire_deadline ASC, shard ASC, coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_deposits_for_matching(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_deposits_for_matching(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'deposits_for_matching';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(refund_deadline INT8 NOT NULL'
- ',merchant_pub BYTEA NOT NULL CHECK (LENGTH(merchant_pub)=32)'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub) ON DELETE CASCADE
- ',deposit_serial_id INT8'
- ') %s ;'
- ,table_name
- ,'PARTITION BY RANGE (refund_deadline)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_main_index '
- 'ON ' || table_name || ' '
- '(refund_deadline ASC, merchant_pub, coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_history_requests(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_history_requests(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'history_requests';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(reserve_pub BYTEA NOT NULL CHECK (LENGTH(reserve_pub)=32)' -- REFERENCES reserves(reserve_pub) ON DELETE CASCADE
- ',request_timestamp INT8 NOT NULL'
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',history_fee_val INT8 NOT NULL'
- ',history_fee_frac INT4 NOT NULL'
- ',PRIMARY KEY (reserve_pub,request_timestamp)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_pub)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_known_coins(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_known_coins(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR default 'known_coins';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(known_coin_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',denominations_serial INT8 NOT NULL' -- REFERENCES denominations (denominations_serial) ON DELETE CASCADE'
- ',coin_pub BYTEA NOT NULL PRIMARY KEY CHECK (LENGTH(coin_pub)=32)'
- ',age_commitment_hash BYTEA CHECK (LENGTH(age_commitment_hash)=32)'
- ',denom_sig BYTEA NOT NULL'
- ',remaining_val INT8 NOT NULL'
- ',remaining_frac INT4 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (coin_pub)' -- FIXME: or include denominations_serial? or multi-level partitioning?;
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
-END
-$$;
-
-
---
--- Name: create_table_prewire(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_prewire(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'prewire';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(prewire_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY'
- ',wire_method TEXT NOT NULL'
- ',finished BOOLEAN NOT NULL DEFAULT false'
- ',failed BOOLEAN NOT NULL DEFAULT false'
- ',buf BYTEA NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (prewire_uuid)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_finished_index '
- 'ON ' || table_name || ' '
- '(finished);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_finished_index '
- 'IS ' || quote_literal('for gc_prewire') || ';'
- );
- -- FIXME: find a way to combine these two indices?
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_failed_finished_index '
- 'ON ' || table_name || ' '
- '(failed,finished);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_failed_finished_index '
- 'IS ' || quote_literal('for wire_prepare_data_get') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_purse_deposits(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_purse_deposits(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'purse_deposits';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(purse_deposit_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE
- ',partner_serial_id INT8' -- REFERENCES partners(partner_serial_id) ON DELETE CASCADE'
- ',purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)'
- ',coin_pub BYTEA NOT NULL' -- REFERENCES known_coins (coin_pub) ON DELETE CASCADE'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',coin_sig BYTEA NOT NULL CHECK(LENGTH(coin_sig)=64)'
- ',PRIMARY KEY (purse_pub,coin_pub)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by coin_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_coin_pub '
- 'ON ' || table_name || ' '
- '(coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_purse_merges(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_purse_merges(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'purse_merges';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(purse_merge_request_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY '-- UNIQUE
- ',partner_serial_id INT8' -- REFERENCES partners(partner_serial_id) ON DELETE CASCADE
- ',reserve_pub BYTEA NOT NULL CHECK(length(reserve_pub)=32)'--REFERENCES reserves (reserve_pub) ON DELETE CASCADE
- ',purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)' --REFERENCES purse_requests (purse_pub) ON DELETE CASCADE
- ',merge_sig BYTEA NOT NULL CHECK (LENGTH(merge_sig)=64)'
- ',merge_timestamp INT8 NOT NULL'
- ',PRIMARY KEY (purse_pub)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by reserve_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_reserve_pub '
- 'ON ' || table_name || ' '
- '(reserve_pub);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_reserve_pub '
- 'IS ' || quote_literal('needed in reserve history computation') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_purse_requests(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_purse_requests(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'purse_requests';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(purse_requests_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)'
- ',merge_pub BYTEA NOT NULL CHECK (LENGTH(merge_pub)=32)'
- ',purse_expiration INT8 NOT NULL'
- ',h_contract_terms BYTEA NOT NULL CHECK (LENGTH(h_contract_terms)=64)'
- ',age_limit INT4 NOT NULL'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',balance_val INT8 NOT NULL DEFAULT (0)'
- ',balance_frac INT4 NOT NULL DEFAULT (0)'
- ',purse_sig BYTEA NOT NULL CHECK(LENGTH(purse_sig)=64)'
- ',PRIMARY KEY (purse_pub)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by marge_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_merge_pub '
- 'ON ' || table_name || ' '
- '(merge_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_recoup(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_recoup(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'recoup';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(recoup_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub)
- ',coin_sig BYTEA NOT NULL CHECK(LENGTH(coin_sig)=64)'
- ',coin_blind BYTEA NOT NULL CHECK(LENGTH(coin_blind)=32)'
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',recoup_timestamp INT8 NOT NULL'
- ',reserve_out_serial_id INT8 NOT NULL' -- REFERENCES reserves_out (reserve_out_serial_id) ON DELETE CASCADE'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (coin_pub);'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_coin_pub_index '
- 'ON ' || table_name || ' '
- '(coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_recoup_by_reserve(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_recoup_by_reserve(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'recoup_by_reserve';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(reserve_out_serial_id INT8 NOT NULL' -- REFERENCES reserves (reserve_out_serial_id) ON DELETE CASCADE
- ',coin_pub BYTEA CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub)
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_out_serial_id)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_main_index '
- 'ON ' || table_name || ' '
- '(reserve_out_serial_id);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_recoup_refresh(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_recoup_refresh(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'recoup_refresh';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(recoup_refresh_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub)
- ',known_coin_id BIGINT NOT NULL' -- REFERENCES known_coins (known_coin_id) ON DELETE CASCADE
- ',coin_sig BYTEA NOT NULL CHECK(LENGTH(coin_sig)=64)'
- ',coin_blind BYTEA NOT NULL CHECK(LENGTH(coin_blind)=32)'
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',recoup_timestamp INT8 NOT NULL'
- ',rrc_serial INT8 NOT NULL' -- REFERENCES refresh_revealed_coins (rrc_serial) ON DELETE CASCADE -- UNIQUE'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (coin_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: any query using this index will be slow. Materialize index or change query?
- -- Also: which query uses this index?
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_rrc_serial_index '
- 'ON ' || table_name || ' '
- '(rrc_serial);'
- );
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_coin_pub_index '
- 'ON ' || table_name || ' '
- '(coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_refresh_commitments(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_refresh_commitments(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'refresh_commitments';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(melt_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',rc BYTEA PRIMARY KEY CHECK (LENGTH(rc)=64)'
- ',old_coin_pub BYTEA NOT NULL' -- REFERENCES known_coins (coin_pub) ON DELETE CASCADE'
- ',old_coin_sig BYTEA NOT NULL CHECK(LENGTH(old_coin_sig)=64)'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',noreveal_index INT4 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (rc)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- Note: index spans partitions, may need to be materialized.
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_old_coin_pub_index '
- 'ON ' || table_name || ' '
- '(old_coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_refresh_revealed_coins(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_refresh_revealed_coins(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'refresh_revealed_coins';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(rrc_serial BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',melt_serial_id INT8 NOT NULL' -- REFERENCES refresh_commitments (melt_serial_id) ON DELETE CASCADE'
- ',freshcoin_index INT4 NOT NULL'
- ',link_sig BYTEA NOT NULL CHECK(LENGTH(link_sig)=64)'
- ',denominations_serial INT8 NOT NULL' -- REFERENCES denominations (denominations_serial) ON DELETE CASCADE'
- ',coin_ev BYTEA NOT NULL' -- UNIQUE'
- ',h_coin_ev BYTEA NOT NULL CHECK(LENGTH(h_coin_ev)=64)' -- UNIQUE'
- ',ev_sig BYTEA NOT NULL'
- ',ewv BYTEA NOT NULL'
- -- ,PRIMARY KEY (melt_serial_id, freshcoin_index) -- done per shard
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (melt_serial_id)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_coins_by_melt_serial_id_index '
- 'ON ' || table_name || ' '
- '(melt_serial_id);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_refresh_transfer_keys(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_refresh_transfer_keys(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'refresh_transfer_keys';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(rtc_serial BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',melt_serial_id INT8 PRIMARY KEY' -- REFERENCES refresh_commitments (melt_serial_id) ON DELETE CASCADE'
- ',transfer_pub BYTEA NOT NULL CHECK(LENGTH(transfer_pub)=32)'
- ',transfer_privs BYTEA NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (melt_serial_id)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_refunds(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_refunds(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'refunds';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(refund_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' -- REFERENCES known_coins (coin_pub) ON DELETE CASCADE
- ',deposit_serial_id INT8 NOT NULL' -- REFERENCES deposits (deposit_serial_id) ON DELETE CASCADE'
- ',merchant_sig BYTEA NOT NULL CHECK(LENGTH(merchant_sig)=64)'
- ',rtransaction_id INT8 NOT NULL'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- -- ,PRIMARY KEY (deposit_serial_id, rtransaction_id) -- done per shard!
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (coin_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_coin_pub_index '
- 'ON ' || table_name || ' '
- '(coin_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_reserves(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_reserves(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'reserves';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(reserve_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY'
- ',reserve_pub BYTEA PRIMARY KEY CHECK(LENGTH(reserve_pub)=32)'
- ',current_balance_val INT8 NOT NULL'
- ',current_balance_frac INT4 NOT NULL'
- ',purses_active INT8 NOT NULL DEFAULT(0)'
- ',purses_allowed INT8 NOT NULL DEFAULT(0)'
- ',kyc_required BOOLEAN NOT NULL DEFAULT(FALSE)'
- ',kyc_passed BOOLEAN NOT NULL DEFAULT(FALSE)'
- ',expiration_date INT8 NOT NULL'
- ',gc_date INT8 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_expiration_index '
- 'ON ' || table_name || ' '
- '(expiration_date'
- ',current_balance_val'
- ',current_balance_frac'
- ');'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_expiration_index '
- 'IS ' || quote_literal('used in get_expired_reserves') || ';'
- );
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_uuid_index '
- 'ON ' || table_name || ' '
- '(reserve_uuid);'
- );
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_gc_date_index '
- 'ON ' || table_name || ' '
- '(gc_date);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_gc_date_index '
- 'IS ' || quote_literal('for reserve garbage collection') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_reserves_close(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_reserves_close(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR default 'reserves_close';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(close_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE / PRIMARY KEY'
- ',reserve_pub BYTEA NOT NULL' -- REFERENCES reserves (reserve_pub) ON DELETE CASCADE'
- ',execution_date INT8 NOT NULL'
- ',wtid BYTEA NOT NULL CHECK (LENGTH(wtid)=32)'
- ',wire_target_h_payto BYTEA CHECK (LENGTH(wire_target_h_payto)=32)'
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',closing_fee_val INT8 NOT NULL'
- ',closing_fee_frac INT4 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_close_uuid_index '
- 'ON ' || table_name || ' '
- '(close_uuid);'
- );
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_pub_index '
- 'ON ' || table_name || ' '
- '(reserve_pub);'
- );
-END
-$$;
-
-
---
--- Name: create_table_reserves_in(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_reserves_in(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR default 'reserves_in';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(reserve_in_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',reserve_pub BYTEA PRIMARY KEY' -- REFERENCES reserves (reserve_pub) ON DELETE CASCADE'
- ',wire_reference INT8 NOT NULL'
- ',credit_val INT8 NOT NULL'
- ',credit_frac INT4 NOT NULL'
- ',wire_source_h_payto BYTEA CHECK (LENGTH(wire_source_h_payto)=32)'
- ',exchange_account_section TEXT NOT NULL'
- ',execution_date INT8 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (reserve_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_in_serial_id_index '
- 'ON ' || table_name || ' '
- '(reserve_in_serial_id);'
- );
- -- FIXME: where do we need this index? Can we do better?
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_exch_accnt_section_execution_date_idx '
- 'ON ' || table_name || ' '
- '(exchange_account_section '
- ',execution_date'
- ');'
- );
- -- FIXME: where do we need this index? Can we do better?
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_exch_accnt_reserve_in_serial_id_idx '
- 'ON ' || table_name || ' '
- '(exchange_account_section,'
- 'reserve_in_serial_id DESC'
- ');'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_reserves_out(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_reserves_out(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR default 'reserves_out';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(reserve_out_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',h_blind_ev BYTEA CHECK (LENGTH(h_blind_ev)=64) UNIQUE'
- ',denominations_serial INT8 NOT NULL' -- REFERENCES denominations (denominations_serial)'
- ',denom_sig BYTEA NOT NULL'
- ',reserve_uuid INT8 NOT NULL' -- REFERENCES reserves (reserve_uuid) ON DELETE CASCADE'
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',execution_date INT8 NOT NULL'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ') %s ;'
- ,'reserves_out'
- ,'PARTITION BY HASH (h_blind_ev)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_out_serial_id_index '
- 'ON ' || table_name || ' '
- '(reserve_out_serial_id);'
- );
- -- FIXME: change query to use reserves_out_by_reserve instead and materialize execution_date there as well???
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_uuid_and_execution_date_index '
- 'ON ' || table_name || ' '
- '(reserve_uuid, execution_date);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_by_reserve_uuid_and_execution_date_index '
- 'IS ' || quote_literal('for get_reserves_out and exchange_do_withdraw_limit_check') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_reserves_out_by_reserve(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_reserves_out_by_reserve(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'reserves_out_by_reserve';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(reserve_uuid INT8 NOT NULL' -- REFERENCES reserves (reserve_uuid) ON DELETE CASCADE
- ',h_blind_ev BYTEA CHECK (LENGTH(h_blind_ev)=64)'
- ') %s '
- ,table_name
- ,'PARTITION BY HASH (reserve_uuid)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_main_index '
- 'ON ' || table_name || ' '
- '(reserve_uuid);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_wad_in_entries(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wad_in_entries(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'wad_in_entries';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(wad_in_entry_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',wad_in_serial_id INT8' -- REFERENCES wads_in (wad_in_serial_id) ON DELETE CASCADE
- ',reserve_pub BYTEA NOT NULL CHECK(LENGTH(reserve_pub)=32)'
- ',purse_pub BYTEA PRIMARY KEY CHECK(LENGTH(purse_pub)=32)'
- ',h_contract BYTEA NOT NULL CHECK(LENGTH(h_contract)=64)'
- ',purse_expiration INT8 NOT NULL'
- ',merge_timestamp INT8 NOT NULL'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',wad_fee_val INT8 NOT NULL'
- ',wad_fee_frac INT4 NOT NULL'
- ',deposit_fees_val INT8 NOT NULL'
- ',deposit_fees_frac INT4 NOT NULL'
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',purse_sig BYTEA NOT NULL CHECK (LENGTH(purse_sig)=64)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by reserve_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_reserve_pub '
- 'ON ' || table_name || ' '
- '(reserve_pub);'
- );
- EXECUTE FORMAT (
- 'COMMENT ON INDEX ' || table_name || '_reserve_pub '
- 'IS ' || quote_literal('needed in reserve history computation') || ';'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_wad_out_entries(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wad_out_entries(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'wad_out_entries';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(wad_out_entry_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',wad_out_serial_id INT8' -- REFERENCES wads_out (wad_out_serial_id) ON DELETE CASCADE
- ',reserve_pub BYTEA NOT NULL CHECK(LENGTH(reserve_pub)=32)'
- ',purse_pub BYTEA PRIMARY KEY CHECK(LENGTH(purse_pub)=32)'
- ',h_contract BYTEA NOT NULL CHECK(LENGTH(h_contract)=64)'
- ',purse_expiration INT8 NOT NULL'
- ',merge_timestamp INT8 NOT NULL'
- ',amount_with_fee_val INT8 NOT NULL'
- ',amount_with_fee_frac INT4 NOT NULL'
- ',wad_fee_val INT8 NOT NULL'
- ',wad_fee_frac INT4 NOT NULL'
- ',deposit_fees_val INT8 NOT NULL'
- ',deposit_fees_frac INT4 NOT NULL'
- ',reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)'
- ',purse_sig BYTEA NOT NULL CHECK (LENGTH(purse_sig)=64)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- -- FIXME: change to materialized index by reserve_pub!
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_reserve_pub '
- 'ON ' || table_name || ' '
- '(reserve_pub);'
- );
-
-END
-$$;
-
-
---
--- Name: create_table_wads_in(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wads_in(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'wads_in';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(wad_in_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',wad_id BYTEA PRIMARY KEY CHECK (LENGTH(wad_id)=24)'
- ',origin_exchange_url TEXT NOT NULL'
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',arrival_time INT8 NOT NULL'
- ',UNIQUE (wad_id, origin_exchange_url)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (wad_id)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_wads_out(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wads_out(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'wads_out';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I '
- '(wad_out_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' --UNIQUE
- ',wad_id BYTEA PRIMARY KEY CHECK (LENGTH(wad_id)=24)'
- ',partner_serial_id INT8 NOT NULL' -- REFERENCES partners(partner_serial_id) ON DELETE CASCADE
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ',execution_time INT8 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (wad_id)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: create_table_wire_out(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wire_out(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'wire_out';
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(wireout_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY' -- PRIMARY KEY'
- ',execution_date INT8 NOT NULL'
- ',wtid_raw BYTEA UNIQUE NOT NULL CHECK (LENGTH(wtid_raw)=32)'
- ',wire_target_h_payto BYTEA CHECK (LENGTH(wire_target_h_payto)=32)'
- ',exchange_account_section TEXT NOT NULL'
- ',amount_val INT8 NOT NULL'
- ',amount_frac INT4 NOT NULL'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (wtid_raw)'
- ,shard_suffix
- );
-
- table_name = concat_ws('_', table_name, shard_suffix);
-
- EXECUTE FORMAT (
- 'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_wire_target_h_payto_index '
- 'ON ' || table_name || ' '
- '(wire_target_h_payto);'
- );
-
-
-END
-$$;
-
-
---
--- Name: create_table_wire_targets(character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.create_table_wire_targets(shard_suffix character varying DEFAULT NULL::character varying) RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(wire_target_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
- ',wire_target_h_payto BYTEA PRIMARY KEY CHECK (LENGTH(wire_target_h_payto)=32)'
- ',payto_uri VARCHAR NOT NULL'
- ',kyc_ok BOOLEAN NOT NULL DEFAULT (FALSE)'
- ',external_id VARCHAR'
- ') %s ;'
- ,'wire_targets'
- ,'PARTITION BY HASH (wire_target_h_payto)'
- ,shard_suffix
- );
-
-END
-$$;
-
-
---
--- Name: defer_wire_out(); Type: PROCEDURE; Schema: public; Owner: -
---
-
-CREATE PROCEDURE public.defer_wire_out()
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
-IF EXISTS (
- SELECT 1
- FROM information_Schema.constraint_column_usage
- WHERE table_name='wire_out'
- AND constraint_name='wire_out_ref')
-THEN
- SET CONSTRAINTS wire_out_ref DEFERRED;
-END IF;
-
-END $$;
-
-
---
--- Name: deposits_delete_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.deposits_delete_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- was_ready BOOLEAN;
-BEGIN
- was_ready = NOT (OLD.done OR OLD.extension_blocked);
-
- IF (was_ready)
- THEN
- DELETE FROM deposits_by_ready
- WHERE wire_deadline = OLD.wire_deadline
- AND shard = OLD.shard
- AND coin_pub = OLD.coin_pub
- AND deposit_serial_id = OLD.deposit_serial_id;
- DELETE FROM deposits_for_matching
- WHERE refund_deadline = OLD.refund_deadline
- AND merchant_pub = OLD.merchant_pub
- AND coin_pub = OLD.coin_pub
- AND deposit_serial_id = OLD.deposit_serial_id;
- END IF;
- RETURN NEW;
-END $$;
-
-
---
--- Name: FUNCTION deposits_delete_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.deposits_delete_trigger() IS 'Replicate deposit deletions into materialized indices.';
-
-
---
--- Name: deposits_insert_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.deposits_insert_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- is_ready BOOLEAN;
-BEGIN
- is_ready = NOT (NEW.done OR NEW.extension_blocked);
-
- IF (is_ready)
- THEN
- INSERT INTO deposits_by_ready
- (wire_deadline
- ,shard
- ,coin_pub
- ,deposit_serial_id)
- VALUES
- (NEW.wire_deadline
- ,NEW.shard
- ,NEW.coin_pub
- ,NEW.deposit_serial_id);
- INSERT INTO deposits_for_matching
- (refund_deadline
- ,merchant_pub
- ,coin_pub
- ,deposit_serial_id)
- VALUES
- (NEW.refund_deadline
- ,NEW.merchant_pub
- ,NEW.coin_pub
- ,NEW.deposit_serial_id);
- END IF;
- RETURN NEW;
-END $$;
-
-
---
--- Name: FUNCTION deposits_insert_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.deposits_insert_trigger() IS 'Replicate deposit inserts into materialized indices.';
-
-
---
--- Name: deposits_update_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.deposits_update_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-DECLARE
- was_ready BOOLEAN;
-DECLARE
- is_ready BOOLEAN;
-BEGIN
- was_ready = NOT (OLD.done OR OLD.extension_blocked);
- is_ready = NOT (NEW.done OR NEW.extension_blocked);
- IF (was_ready AND NOT is_ready)
- THEN
- DELETE FROM deposits_by_ready
- WHERE wire_deadline = OLD.wire_deadline
- AND shard = OLD.shard
- AND coin_pub = OLD.coin_pub
- AND deposit_serial_id = OLD.deposit_serial_id;
- DELETE FROM deposits_for_matching
- WHERE refund_deadline = OLD.refund_deadline
- AND merchant_pub = OLD.merchant_pub
- AND coin_pub = OLD.coin_pub
- AND deposit_serial_id = OLD.deposit_serial_id;
- END IF;
- IF (is_ready AND NOT was_ready)
- THEN
- INSERT INTO deposits_by_ready
- (wire_deadline
- ,shard
- ,coin_pub
- ,deposit_serial_id)
- VALUES
- (NEW.wire_deadline
- ,NEW.shard
- ,NEW.coin_pub
- ,NEW.deposit_serial_id);
- INSERT INTO deposits_for_matching
- (refund_deadline
- ,merchant_pub
- ,coin_pub
- ,deposit_serial_id)
- VALUES
- (NEW.refund_deadline
- ,NEW.merchant_pub
- ,NEW.coin_pub
- ,NEW.deposit_serial_id);
- END IF;
- RETURN NEW;
-END $$;
-
-
---
--- Name: FUNCTION deposits_update_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.deposits_update_trigger() IS 'Replicate deposits changes into materialized indices.';
-
-
---
--- Name: detach_default_partitions(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.detach_default_partitions() RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- RAISE NOTICE 'Detaching all default table partitions';
-
- ALTER TABLE IF EXISTS wire_targets
- DETACH PARTITION wire_targets_default;
-
- ALTER TABLE IF EXISTS reserves
- DETACH PARTITION reserves_default;
-
- ALTER TABLE IF EXISTS reserves_in
- DETACH PARTITION reserves_in_default;
-
- ALTER TABLE IF EXISTS reserves_close
- DETACH PARTITION reserves_close_default;
-
- ALTER TABLE IF EXISTS reserves_out
- DETACH PARTITION reserves_out_default;
-
- ALTER TABLE IF EXISTS reserves_out_by_reserve
- DETACH PARTITION reserves_out_by_reserve_default;
-
- ALTER TABLE IF EXISTS known_coins
- DETACH PARTITION known_coins_default;
-
- ALTER TABLE IF EXISTS refresh_commitments
- DETACH PARTITION refresh_commitments_default;
-
- ALTER TABLE IF EXISTS refresh_revealed_coins
- DETACH PARTITION refresh_revealed_coins_default;
-
- ALTER TABLE IF EXISTS refresh_transfer_keys
- DETACH PARTITION refresh_transfer_keys_default;
-
- ALTER TABLE IF EXISTS deposits
- DETACH PARTITION deposits_default;
-
---- TODO range partitioning
--- ALTER TABLE IF EXISTS deposits_by_ready
--- DETACH PARTITION deposits_by_ready_default;
---
--- ALTER TABLE IF EXISTS deposits_for_matching
--- DETACH PARTITION deposits_default_for_matching_default;
-
- ALTER TABLE IF EXISTS refunds
- DETACH PARTITION refunds_default;
-
- ALTER TABLE IF EXISTS wire_out
- DETACH PARTITION wire_out_default;
-
- ALTER TABLE IF EXISTS aggregation_transient
- DETACH PARTITION aggregation_transient_default;
-
- ALTER TABLE IF EXISTS aggregation_tracking
- DETACH PARTITION aggregation_tracking_default;
-
- ALTER TABLE IF EXISTS recoup
- DETACH PARTITION recoup_default;
-
- ALTER TABLE IF EXISTS recoup_by_reserve
- DETACH PARTITION recoup_by_reserve_default;
-
- ALTER TABLE IF EXISTS recoup_refresh
- DETACH PARTITION recoup_refresh_default;
-
- ALTER TABLE IF EXISTS prewire
- DETACH PARTITION prewire_default;
-
- ALTER TABLE IF EXISTS cs_nonce_locks
- DETACH partition cs_nonce_locks_default;
-
- ALTER TABLE IF EXISTS purse_requests
- DETACH partition purse_requests_default;
-
- ALTER TABLE IF EXISTS purse_merges
- DETACH partition purse_merges_default;
-
- ALTER TABLE IF EXISTS account_merges
- DETACH partition account_merges_default;
-
- ALTER TABLE IF EXISTS contracts
- DETACH partition contracts_default;
-
- ALTER TABLE IF EXISTS history_requests
- DETACH partition history_requests_default;
-
- ALTER TABLE IF EXISTS close_requests
- DETACH partition close_requests_default;
-
- ALTER TABLE IF EXISTS purse_deposits
- DETACH partition purse_deposits_default;
-
- ALTER TABLE IF EXISTS wad_out_entries
- DETACH partition wad_out_entries_default;
-
- ALTER TABLE IF EXISTS wads_in
- DETACH partition wads_in_default;
-
- ALTER TABLE IF EXISTS wad_in_entries
- DETACH partition wad_in_entries_default;
-END
-$$;
-
-
---
--- Name: FUNCTION detach_default_partitions(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.detach_default_partitions() IS 'We need to drop default and create new one before deleting the default partitions
- otherwise constraints get lost too. Might be needed in shardig too';
-
-
---
--- Name: drop_default_partitions(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.drop_default_partitions() RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- RAISE NOTICE 'Dropping default table partitions';
-
- DROP TABLE IF EXISTS wire_targets_default;
- DROP TABLE IF EXISTS reserves_default;
- DROP TABLE IF EXISTS reserves_in_default;
- DROP TABLE IF EXISTS reserves_close_default;
- DROP TABLE IF EXISTS reserves_out_default;
- DROP TABLE IF EXISTS reserves_out_by_reserve_default;
- DROP TABLE IF EXISTS known_coins_default;
- DROP TABLE IF EXISTS refresh_commitments_default;
- DROP TABLE IF EXISTS refresh_revealed_coins_default;
- DROP TABLE IF EXISTS refresh_transfer_keys_default;
- DROP TABLE IF EXISTS deposits_default;
---DROP TABLE IF EXISTS deposits_by_ready_default;
---DROP TABLE IF EXISTS deposits_for_matching_default;
- DROP TABLE IF EXISTS refunds_default;
- DROP TABLE IF EXISTS wire_out_default;
- DROP TABLE IF EXISTS aggregation_transient_default;
- DROP TABLE IF EXISTS aggregation_tracking_default;
- DROP TABLE IF EXISTS recoup_default;
- DROP TABLE IF EXISTS recoup_by_reserve_default;
- DROP TABLE IF EXISTS recoup_refresh_default;
- DROP TABLE IF EXISTS prewire_default;
- DROP TABLE IF EXISTS cs_nonce_locks_default;
-
- DROP TABLE IF EXISTS purse_requests_default;
- DROP TABLE IF EXISTS purse_merges_default;
- DROP TABLE IF EXISTS account_merges_default;
- DROP TABLE IF EXISTS contracts_default;
- DROP TABLE IF EXISTS history_requests_default;
- DROP TABLE IF EXISTS close_requests_default;
- DROP TABLE IF EXISTS purse_deposits_default;
- DROP TABLE IF EXISTS wad_out_entries_default;
- DROP TABLE IF EXISTS wads_in_default;
- DROP TABLE IF EXISTS wad_in_entries_default;
-
-END
-$$;
-
-
---
--- Name: FUNCTION drop_default_partitions(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.drop_default_partitions() IS 'Drop all default partitions once other partitions are attached.
- Might be needed in sharding too.';
-
-
---
--- Name: exchange_do_account_merge(bytea, bytea, bytea); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_account_merge(in_purse_pub bytea, in_reserve_pub bytea, in_reserve_sig bytea, OUT out_balance_ok boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-BEGIN
- -- FIXME: function/API is dead! Do DCE?
-END $$;
-
-
---
--- Name: exchange_do_batch_withdraw(bigint, integer, bytea, bigint, bigint); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_batch_withdraw(amount_val bigint, amount_frac integer, rpub bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- reserve_gc INT8;
-DECLARE
- reserve_val INT8;
-DECLARE
- reserve_frac INT4;
-BEGIN
--- Shards: reserves by reserve_pub (SELECT)
--- reserves_out (INSERT, with CONFLICT detection) by wih
--- reserves by reserve_pub (UPDATE)
--- reserves_in by reserve_pub (SELECT)
--- wire_targets by wire_target_h_payto
-
-SELECT
- current_balance_val
- ,current_balance_frac
- ,gc_date
- ,reserve_uuid
- INTO
- reserve_val
- ,reserve_frac
- ,reserve_gc
- ,ruuid
- FROM reserves
- WHERE reserves.reserve_pub=rpub;
-
-IF NOT FOUND
-THEN
- -- reserve unknown
- reserve_found=FALSE;
- balance_ok=FALSE;
- kycok=FALSE;
- account_uuid=0;
- ruuid=2;
- RETURN;
-END IF;
-
--- Check reserve balance is sufficient.
-IF (reserve_val > amount_val)
-THEN
- IF (reserve_frac >= amount_frac)
- THEN
- reserve_val=reserve_val - amount_val;
- reserve_frac=reserve_frac - amount_frac;
- ELSE
- reserve_val=reserve_val - amount_val - 1;
- reserve_frac=reserve_frac + 100000000 - amount_frac;
- END IF;
-ELSE
- IF (reserve_val = amount_val) AND (reserve_frac >= amount_frac)
- THEN
- reserve_val=0;
- reserve_frac=reserve_frac - amount_frac;
- ELSE
- reserve_found=TRUE;
- balance_ok=FALSE;
- kycok=FALSE; -- we do not really know or care
- account_uuid=0;
- RETURN;
- END IF;
-END IF;
-
--- Calculate new expiration dates.
-min_reserve_gc=GREATEST(min_reserve_gc,reserve_gc);
-
--- Update reserve balance.
-UPDATE reserves SET
- gc_date=min_reserve_gc
- ,current_balance_val=reserve_val
- ,current_balance_frac=reserve_frac
-WHERE
- reserves.reserve_pub=rpub;
-
-reserve_found=TRUE;
-balance_ok=TRUE;
-
-
--- Obtain KYC status based on the last wire transfer into
--- this reserve. FIXME: likely not adequate for reserves that got P2P transfers!
--- SELECT
--- kyc_ok
--- ,wire_target_serial_id
--- INTO
--- kycok
--- ,account_uuid
--- FROM reserves_in
--- JOIN wire_targets ON (wire_source_h_payto = wire_target_h_payto)
--- WHERE reserve_pub=rpub
--- LIMIT 1; -- limit 1 should not be required (without p2p transfers)
-
-WITH reserves_in AS materialized (
- SELECT wire_source_h_payto
- FROM reserves_in WHERE
- reserve_pub=rpub
-)
-SELECT
- kyc_ok
- ,wire_target_serial_id
-INTO
- kycok
- ,account_uuid
-FROM wire_targets
- WHERE wire_target_h_payto = (
- SELECT wire_source_h_payto
- FROM reserves_in
- );
-
-END $$;
-
-
---
--- Name: FUNCTION exchange_do_batch_withdraw(amount_val bigint, amount_frac integer, rpub bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.exchange_do_batch_withdraw(amount_val bigint, amount_frac integer, rpub bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint) IS 'Checks whether the reserve has sufficient balance for a withdraw operation (or the request is repeated and was previously approved) and if so updates the database with the result. Excludes storing the planchets.';
-
-
---
--- Name: exchange_do_batch_withdraw_insert(bytea, bigint, integer, bytea, bigint, bytea, bytea, bytea, bigint); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_batch_withdraw_insert(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, ruuid bigint, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, OUT out_denom_unknown boolean, OUT out_nonce_reuse boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- denom_serial INT8;
-BEGIN
--- Shards: reserves by reserve_pub (SELECT)
--- reserves_out (INSERT, with CONFLICT detection) by wih
--- reserves by reserve_pub (UPDATE)
--- reserves_in by reserve_pub (SELECT)
--- wire_targets by wire_target_h_payto
-
-out_denom_unknown=TRUE;
-out_conflict=TRUE;
-out_nonce_reuse=TRUE;
-
-SELECT denominations_serial
- INTO denom_serial
- FROM denominations
- WHERE denom_pub_hash=h_denom_pub;
-
-IF NOT FOUND
-THEN
- -- denomination unknown, should be impossible!
- out_denom_unknown=TRUE;
- ASSERT false, 'denomination unknown';
- RETURN;
-END IF;
-out_denom_unknown=FALSE;
-
-INSERT INTO reserves_out
- (h_blind_ev
- ,denominations_serial
- ,denom_sig
- ,reserve_uuid
- ,reserve_sig
- ,execution_date
- ,amount_with_fee_val
- ,amount_with_fee_frac)
-VALUES
- (h_coin_envelope
- ,denom_serial
- ,denom_sig
- ,ruuid
- ,reserve_sig
- ,now
- ,amount_val
- ,amount_frac)
-ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- out_conflict=TRUE;
- RETURN;
-END IF;
-out_conflict=FALSE;
-
--- Special actions needed for a CS withdraw?
-out_nonce_reuse=FALSE;
-IF NOT NULL cs_nonce
-THEN
- -- Cache CS signature to prevent replays in the future
- -- (and check if cached signature exists at the same time).
- INSERT INTO cs_nonce_locks
- (nonce
- ,max_denomination_serial
- ,op_hash)
- VALUES
- (cs_nonce
- ,denom_serial
- ,h_coin_envelope)
- ON CONFLICT DO NOTHING;
-
- IF NOT FOUND
- THEN
- -- See if the existing entry is identical.
- SELECT 1
- FROM cs_nonce_locks
- WHERE nonce=cs_nonce
- AND op_hash=h_coin_envelope;
- IF NOT FOUND
- THEN
- out_nonce_reuse=TRUE;
- ASSERT false, 'nonce reuse attempted by client';
- RETURN;
- END IF;
- END IF;
-END IF;
-
-END $$;
-
-
---
--- Name: FUNCTION exchange_do_batch_withdraw_insert(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, ruuid bigint, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, OUT out_denom_unknown boolean, OUT out_nonce_reuse boolean, OUT out_conflict boolean); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.exchange_do_batch_withdraw_insert(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, ruuid bigint, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, OUT out_denom_unknown boolean, OUT out_nonce_reuse boolean, OUT out_conflict boolean) IS 'Stores information about a planchet for a batch withdraw operation. Checks if the planchet already exists, and in that case indicates a conflict';
-
-
---
--- Name: exchange_do_close_request(bytea, bytea); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_close_request(in_reserve_pub bytea, in_reserve_sig bytea, OUT out_final_balance_val bigint, OUT out_final_balance_frac integer, OUT out_balance_ok boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-BEGIN
- -- FIXME
-END $$;
-
-
---
--- Name: exchange_do_deposit(bigint, integer, bytea, bytea, bigint, bigint, bigint, bigint, bytea, character varying, bytea, bigint, bytea, bytea, bigint, boolean, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_deposit(in_amount_with_fee_val bigint, in_amount_with_fee_frac integer, in_h_contract_terms bytea, in_wire_salt bytea, in_wallet_timestamp bigint, in_exchange_timestamp bigint, in_refund_deadline bigint, in_wire_deadline bigint, in_merchant_pub bytea, in_receiver_wire_account character varying, in_h_payto bytea, in_known_coin_id bigint, in_coin_pub bytea, in_coin_sig bytea, in_shard bigint, in_extension_blocked boolean, in_extension_details character varying, OUT out_exchange_timestamp bigint, OUT out_balance_ok boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- wtsi INT8; -- wire target serial id
-DECLARE
- xdi INT8; -- eXstension details serial id
-BEGIN
--- Shards: INSERT extension_details (by extension_details_serial_id)
--- INSERT wire_targets (by h_payto), on CONFLICT DO NOTHING;
--- INSERT deposits (by coin_pub, shard), ON CONFLICT DO NOTHING;
--- UPDATE known_coins (by coin_pub)
-
-IF NOT NULL in_extension_details
-THEN
- INSERT INTO extension_details
- (extension_options)
- VALUES
- (in_extension_details)
- RETURNING extension_details_serial_id INTO xdi;
-ELSE
- xdi=NULL;
-END IF;
-
-
-INSERT INTO wire_targets
- (wire_target_h_payto
- ,payto_uri)
- VALUES
- (in_h_payto
- ,in_receiver_wire_account)
-ON CONFLICT DO NOTHING -- for CONFLICT ON (wire_target_h_payto)
- RETURNING wire_target_serial_id INTO wtsi;
-
-IF NOT FOUND
-THEN
- SELECT wire_target_serial_id
- INTO wtsi
- FROM wire_targets
- WHERE wire_target_h_payto=in_h_payto;
-END IF;
-
-
-INSERT INTO deposits
- (shard
- ,coin_pub
- ,known_coin_id
- ,amount_with_fee_val
- ,amount_with_fee_frac
- ,wallet_timestamp
- ,exchange_timestamp
- ,refund_deadline
- ,wire_deadline
- ,merchant_pub
- ,h_contract_terms
- ,coin_sig
- ,wire_salt
- ,wire_target_h_payto
- ,extension_blocked
- ,extension_details_serial_id
- )
- VALUES
- (in_shard
- ,in_coin_pub
- ,in_known_coin_id
- ,in_amount_with_fee_val
- ,in_amount_with_fee_frac
- ,in_wallet_timestamp
- ,in_exchange_timestamp
- ,in_refund_deadline
- ,in_wire_deadline
- ,in_merchant_pub
- ,in_h_contract_terms
- ,in_coin_sig
- ,in_wire_salt
- ,in_h_payto
- ,in_extension_blocked
- ,xdi)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: see if an identical record exists.
- -- Note that by checking 'coin_sig', we implicitly check
- -- identity over everything that the signature covers.
- -- We do select over merchant_pub and wire_target_h_payto
- -- primarily here to maximally use the existing index.
- SELECT
- exchange_timestamp
- INTO
- out_exchange_timestamp
- FROM deposits
- WHERE shard=in_shard
- AND merchant_pub=in_merchant_pub
- AND wire_target_h_payto=in_h_payto
- AND coin_pub=in_coin_pub
- AND coin_sig=in_coin_sig;
-
- IF NOT FOUND
- THEN
- -- Deposit exists, but with differences. Not allowed.
- out_balance_ok=FALSE;
- out_conflict=TRUE;
- RETURN;
- END IF;
-
- -- Idempotent request known, return success.
- out_balance_ok=TRUE;
- out_conflict=FALSE;
-
- RETURN;
-END IF;
-
-
-out_exchange_timestamp=in_exchange_timestamp;
-
--- Check and update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=remaining_frac-in_amount_with_fee_frac
- + CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 100000000
- ELSE 0
- END,
- remaining_val=remaining_val-in_amount_with_fee_val
- - CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 1
- ELSE 0
- END
- WHERE coin_pub=in_coin_pub
- AND ( (remaining_val > in_amount_with_fee_val) OR
- ( (remaining_frac >= in_amount_with_fee_frac) AND
- (remaining_val >= in_amount_with_fee_val) ) );
-
-IF NOT FOUND
-THEN
- -- Insufficient balance.
- out_balance_ok=FALSE;
- out_conflict=FALSE;
- RETURN;
-END IF;
-
--- Everything fine, return success!
-out_balance_ok=TRUE;
-out_conflict=FALSE;
-
-END $$;
-
-
---
--- Name: exchange_do_gc(bigint, bigint); Type: PROCEDURE; Schema: public; Owner: -
---
-
-CREATE PROCEDURE public.exchange_do_gc(in_ancient_date bigint, in_now bigint)
- LANGUAGE plpgsql
- AS $$
-DECLARE
- reserve_uuid_min INT8; -- minimum reserve UUID still alive
-DECLARE
- melt_min INT8; -- minimum melt still alive
-DECLARE
- coin_min INT8; -- minimum known_coin still alive
-DECLARE
- deposit_min INT8; -- minimum deposit still alive
-DECLARE
- reserve_out_min INT8; -- minimum reserve_out still alive
-DECLARE
- denom_min INT8; -- minimum denomination still alive
-BEGIN
-
-DELETE FROM prewire
- WHERE finished=TRUE;
-
-DELETE FROM wire_fee
- WHERE end_date < in_ancient_date;
-
--- TODO: use closing fee as threshold?
-DELETE FROM reserves
- WHERE gc_date < in_now
- AND current_balance_val = 0
- AND current_balance_frac = 0;
-
-SELECT
- reserve_out_serial_id
- INTO
- reserve_out_min
- FROM reserves_out
- ORDER BY reserve_out_serial_id ASC
- LIMIT 1;
-
-DELETE FROM recoup
- WHERE reserve_out_serial_id < reserve_out_min;
--- FIXME: recoup_refresh lacks GC!
-
-SELECT
- reserve_uuid
- INTO
- reserve_uuid_min
- FROM reserves
- ORDER BY reserve_uuid ASC
- LIMIT 1;
-
-DELETE FROM reserves_out
- WHERE reserve_uuid < reserve_uuid_min;
-
--- FIXME: this query will be horribly slow;
--- need to find another way to formulate it...
-DELETE FROM denominations
- WHERE expire_legal < in_now
- AND denominations_serial NOT IN
- (SELECT DISTINCT denominations_serial
- FROM reserves_out)
- AND denominations_serial NOT IN
- (SELECT DISTINCT denominations_serial
- FROM known_coins
- WHERE coin_pub IN
- (SELECT DISTINCT coin_pub
- FROM recoup))
- AND denominations_serial NOT IN
- (SELECT DISTINCT denominations_serial
- FROM known_coins
- WHERE coin_pub IN
- (SELECT DISTINCT coin_pub
- FROM recoup_refresh));
-
-SELECT
- melt_serial_id
- INTO
- melt_min
- FROM refresh_commitments
- ORDER BY melt_serial_id ASC
- LIMIT 1;
-
-DELETE FROM refresh_revealed_coins
- WHERE melt_serial_id < melt_min;
-
-DELETE FROM refresh_transfer_keys
- WHERE melt_serial_id < melt_min;
-
-SELECT
- known_coin_id
- INTO
- coin_min
- FROM known_coins
- ORDER BY known_coin_id ASC
- LIMIT 1;
-
-DELETE FROM deposits
- WHERE known_coin_id < coin_min;
-
-SELECT
- deposit_serial_id
- INTO
- deposit_min
- FROM deposits
- ORDER BY deposit_serial_id ASC
- LIMIT 1;
-
-DELETE FROM refunds
- WHERE deposit_serial_id < deposit_min;
-
-DELETE FROM aggregation_tracking
- WHERE deposit_serial_id < deposit_min;
-
-SELECT
- denominations_serial
- INTO
- denom_min
- FROM denominations
- ORDER BY denominations_serial ASC
- LIMIT 1;
-
-DELETE FROM cs_nonce_locks
- WHERE max_denomination_serial <= denom_min;
-
-END $$;
-
-
---
--- Name: exchange_do_history_request(bytea, bytea, bigint, bigint, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_history_request(in_reserve_pub bytea, in_reserve_sig bytea, in_request_timestamp bigint, in_history_fee_val bigint, in_history_fee_frac integer, OUT out_balance_ok boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-BEGIN
- -- FIXME
-END $$;
-
-
---
--- Name: exchange_do_melt(bytea, bigint, integer, bytea, bytea, bytea, bigint, integer, boolean); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_melt(in_cs_rms bytea, in_amount_with_fee_val bigint, in_amount_with_fee_frac integer, in_rc bytea, in_old_coin_pub bytea, in_old_coin_sig bytea, in_known_coin_id bigint, in_noreveal_index integer, in_zombie_required boolean, OUT out_balance_ok boolean, OUT out_zombie_bad boolean, OUT out_noreveal_index integer) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- denom_max INT8;
-BEGIN
--- Shards: INSERT refresh_commitments (by rc)
--- (rare:) SELECT refresh_commitments (by old_coin_pub) -- crosses shards!
--- (rare:) SEELCT refresh_revealed_coins (by melt_serial_id)
--- (rare:) PERFORM recoup_refresh (by rrc_serial) -- crosses shards!
--- UPDATE known_coins (by coin_pub)
-
-INSERT INTO refresh_commitments
- (rc
- ,old_coin_pub
- ,old_coin_sig
- ,amount_with_fee_val
- ,amount_with_fee_frac
- ,noreveal_index
- )
- VALUES
- (in_rc
- ,in_old_coin_pub
- ,in_old_coin_sig
- ,in_amount_with_fee_val
- ,in_amount_with_fee_frac
- ,in_noreveal_index)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: see if an identical record exists.
- out_noreveal_index=-1;
- SELECT
- noreveal_index
- INTO
- out_noreveal_index
- FROM refresh_commitments
- WHERE rc=in_rc;
- out_balance_ok=FOUND;
- out_zombie_bad=FALSE; -- zombie is OK
- RETURN;
-END IF;
-
-
-IF in_zombie_required
-THEN
- -- Check if this coin was part of a refresh
- -- operation that was subsequently involved
- -- in a recoup operation. We begin by all
- -- refresh operations our coin was involved
- -- with, then find all associated reveal
- -- operations, and then see if any of these
- -- reveal operations was involved in a recoup.
- PERFORM
- FROM recoup_refresh
- WHERE rrc_serial IN
- (SELECT rrc_serial
- FROM refresh_revealed_coins
- WHERE melt_serial_id IN
- (SELECT melt_serial_id
- FROM refresh_commitments
- WHERE old_coin_pub=in_old_coin_pub));
- IF NOT FOUND
- THEN
- out_zombie_bad=TRUE;
- out_balance_ok=FALSE;
- RETURN;
- END IF;
-END IF;
-
-out_zombie_bad=FALSE; -- zombie is OK
-
-
--- Check and update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=remaining_frac-in_amount_with_fee_frac
- + CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 100000000
- ELSE 0
- END,
- remaining_val=remaining_val-in_amount_with_fee_val
- - CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 1
- ELSE 0
- END
- WHERE coin_pub=in_old_coin_pub
- AND ( (remaining_val > in_amount_with_fee_val) OR
- ( (remaining_frac >= in_amount_with_fee_frac) AND
- (remaining_val >= in_amount_with_fee_val) ) );
-
-IF NOT FOUND
-THEN
- -- Insufficient balance.
- out_noreveal_index=-1;
- out_balance_ok=FALSE;
- RETURN;
-END IF;
-
-
-
--- Special actions needed for a CS melt?
-IF NOT NULL in_cs_rms
-THEN
- -- Get maximum denominations serial value in
- -- existence, this will determine how long the
- -- nonce will be locked.
- SELECT
- denominations_serial
- INTO
- denom_max
- FROM denominations
- ORDER BY denominations_serial DESC
- LIMIT 1;
-
- -- Cache CS signature to prevent replays in the future
- -- (and check if cached signature exists at the same time).
- INSERT INTO cs_nonce_locks
- (nonce
- ,max_denomination_serial
- ,op_hash)
- VALUES
- (cs_rms
- ,denom_serial
- ,in_rc)
- ON CONFLICT DO NOTHING;
-
- IF NOT FOUND
- THEN
- -- Record exists, make sure it is the same
- SELECT 1
- FROM cs_nonce_locks
- WHERE nonce=cs_rms
- AND op_hash=in_rc;
-
- IF NOT FOUND
- THEN
- -- Nonce reuse detected
- out_balance_ok=FALSE;
- out_zombie_bad=FALSE;
- out_noreveal_index=42; -- FIXME: return error message more nicely!
- ASSERT false, 'nonce reuse attempted by client';
- END IF;
- END IF;
-END IF;
-
--- Everything fine, return success!
-out_balance_ok=TRUE;
-out_noreveal_index=in_noreveal_index;
-
-END $$;
-
-
---
--- Name: exchange_do_purse_deposit(bigint, bytea, bigint, integer, bytea, bytea, bigint, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_purse_deposit(in_partner_id bigint, in_purse_pub bytea, in_amount_with_fee_val bigint, in_amount_with_fee_frac integer, in_coin_pub bytea, in_coin_sig bytea, in_amount_without_fee_val bigint, in_amount_without_fee_frac integer, OUT out_balance_ok boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
--- Store the deposit request.
-INSERT INTO purse_deposits
- (partner_serial_id
- ,purse_pub
- ,coin_pub
- ,amount_with_fee_val
- ,amount_with_fee_frac
- ,coin_sig)
- VALUES
- (in_partner_id
- ,in_purse_pub
- ,in_coin_pub
- ,in_amount_with_fee_val
- ,in_amount_with_fee_frac
- ,in_coin_sig)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: check if coin_sig is the same,
- -- if so, success, otherwise conflict!
- SELECT
- 1
- FROM purse_deposits
- WHERE coin_pub = in_coin_pub
- AND purse_pub = in_purse_pub
- AND coin_sig = in_cion_sig;
- IF NOT FOUND
- THEN
- -- Deposit exists, but with differences. Not allowed.
- out_balance_ok=FALSE;
- out_conflict=TRUE;
- RETURN;
- END IF;
-END IF;
-
-
--- Debit the coin
--- Check and update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=remaining_frac-in_amount_with_fee_frac
- + CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 100000000
- ELSE 0
- END,
- remaining_val=remaining_val-in_amount_with_fee_val
- - CASE
- WHEN remaining_frac < in_amount_with_fee_frac
- THEN 1
- ELSE 0
- END
- WHERE coin_pub=in_coin_pub
- AND ( (remaining_val > in_amount_with_fee_val) OR
- ( (remaining_frac >= in_amount_with_fee_frac) AND
- (remaining_val >= in_amount_with_fee_val) ) );
-
-IF NOT FOUND
-THEN
- -- Insufficient balance.
- out_balance_ok=FALSE;
- out_conflict=FALSE;
- RETURN;
-END IF;
-
-
--- Credit the purse.
-UPDATE purse_requests
- SET
- balance_frac=balance_frac+in_amount_without_fee_frac
- - CASE
- WHEN balance_frac+in_amount_without_fee_frac >= 100000000
- THEN 100000000
- ELSE 0
- END,
- balance_val=balance_val+in_amount_without_fee_val
- + CASE
- WHEN balance_frac+in_amount_without_fee_frac >= 100000000
- THEN 1
- ELSE 0
- END
- WHERE purse_pub=in_purse_pub;
-
-out_conflict=FALSE;
-out_balance_ok=TRUE;
-
-END $$;
-
-
---
--- Name: exchange_do_purse_merge(bytea, bytea, bigint, bytea, character varying, bytea); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_purse_merge(in_purse_pub bytea, in_merge_sig bytea, in_merge_timestamp bigint, in_reserve_sig bytea, in_partner_url character varying, in_reserve_pub bytea, OUT out_no_partner boolean, OUT out_no_balance boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- my_partner_serial_id INT8;
-BEGIN
-
-IF in_partner_url IS NULL
-THEN
- my_partner_serial_id=0;
-ELSE
- SELECT
- partner_serial_id
- INTO
- my_partner_serial_id
- FROM partners
- WHERE partner_base_url=in_partner_url
- AND start_date <= in_merge_timestamp
- AND end_date > in_merge_timestamp;
- IF NOT FOUND
- THEN
- out_no_partner=TRUE;
- out_conflict=FALSE;
- RETURN;
- END IF;
-END IF;
-
-out_no_partner=FALSE;
-
-
--- Check purse is 'full'.
-PERFORM
- FROM purse_requests
- WHERE purse_pub=in_purse_pub
- AND balance_val >= amount_with_fee_val
- AND ( (balance_frac >= amount_with_fee_frac) OR
- (balance_val > amount_with_fee_val) );
-IF NOT FOUND
-THEN
- out_no_balance=TRUE;
- out_conflict=FALSE;
- RETURN;
-END IF;
-out_no_balance=FALSE;
-
-
-
--- Store purse merge signature, checks for purse_pub uniqueness
-INSERT INTO purse_merges
- (partner_serial_id
- ,reserve_pub
- ,purse_pub
- ,merge_sig
- ,merge_timestamp)
- VALUES
- (my_partner_serial_id
- ,in_reserve_pub
- ,in_purse_pub
- ,in_merge_sig
- ,in_merge_timestamp)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: see if an identical record exists.
- -- Note that by checking 'merge_sig', we implicitly check
- -- identity over everything that the signature covers.
- PERFORM
- FROM purse_merges
- WHERE purse_pub=in_purse_pub
- AND merge_sig=in_merge_sig;
- IF NOT FOUND
- THEN
- -- Purse was merged, but to some other reserve. Not allowed.
- out_conflict=TRUE;
- RETURN;
- END IF;
-
- -- "success"
- out_conflict=FALSE;
- RETURN;
-END IF;
-out_conflict=FALSE;
-
--- Store account merge signature.
-INSERT INTO account_merges
- (reserve_pub
- ,reserve_sig
- ,purse_pub)
- VALUES
- (in_reserve_pub
- ,in_reserve_sig
- ,in_purse_pub);
-
-
-RETURN;
-
-END $$;
-
-
---
--- Name: exchange_do_recoup_to_coin(bytea, bigint, bytea, bytea, bigint, bytea, bigint); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_recoup_to_coin(in_old_coin_pub bytea, in_rrc_serial bigint, in_coin_blind bytea, in_coin_pub bytea, in_known_coin_id bigint, in_coin_sig bytea, in_recoup_timestamp bigint, OUT out_recoup_ok boolean, OUT out_internal_failure boolean, OUT out_recoup_timestamp bigint) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- tmp_val INT8; -- amount recouped
-DECLARE
- tmp_frac INT8; -- amount recouped
-BEGIN
-
--- Shards: UPDATE known_coins (by coin_pub)
--- SELECT recoup_refresh (by coin_pub)
--- UPDATE known_coins (by coin_pub)
--- INSERT recoup_refresh (by coin_pub)
-
-
-out_internal_failure=FALSE;
-
-
--- Check remaining balance of the coin.
-SELECT
- remaining_frac
- ,remaining_val
- INTO
- tmp_frac
- ,tmp_val
-FROM known_coins
- WHERE coin_pub=in_coin_pub;
-
-IF NOT FOUND
-THEN
- out_internal_failure=TRUE;
- out_recoup_ok=FALSE;
- RETURN;
-END IF;
-
-IF tmp_val + tmp_frac = 0
-THEN
- -- Check for idempotency
- SELECT
- recoup_timestamp
- INTO
- out_recoup_timestamp
- FROM recoup_refresh
- WHERE coin_pub=in_coin_pub;
- out_recoup_ok=FOUND;
- RETURN;
-END IF;
-
--- Update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=0
- ,remaining_val=0
- WHERE coin_pub=in_coin_pub;
-
-
--- Credit the old coin.
-UPDATE known_coins
- SET
- remaining_frac=remaining_frac+tmp_frac
- - CASE
- WHEN remaining_frac+tmp_frac >= 100000000
- THEN 100000000
- ELSE 0
- END,
- remaining_val=remaining_val+tmp_val
- + CASE
- WHEN remaining_frac+tmp_frac >= 100000000
- THEN 1
- ELSE 0
- END
- WHERE coin_pub=in_old_coin_pub;
-
-
-IF NOT FOUND
-THEN
- RAISE NOTICE 'failed to increase old coin balance from recoup';
- out_recoup_ok=TRUE;
- out_internal_failure=TRUE;
- RETURN;
-END IF;
-
-
-INSERT INTO recoup_refresh
- (coin_pub
- ,known_coin_id
- ,coin_sig
- ,coin_blind
- ,amount_val
- ,amount_frac
- ,recoup_timestamp
- ,rrc_serial
- )
-VALUES
- (in_coin_pub
- ,in_known_coin_id
- ,in_coin_sig
- ,in_coin_blind
- ,tmp_val
- ,tmp_frac
- ,in_recoup_timestamp
- ,in_rrc_serial);
-
--- Normal end, everything is fine.
-out_recoup_ok=TRUE;
-out_recoup_timestamp=in_recoup_timestamp;
-
-END $$;
-
-
---
--- Name: exchange_do_recoup_to_reserve(bytea, bigint, bytea, bytea, bigint, bytea, bigint, bigint, bigint); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_recoup_to_reserve(in_reserve_pub bytea, in_reserve_out_serial_id bigint, in_coin_blind bytea, in_coin_pub bytea, in_known_coin_id bigint, in_coin_sig bytea, in_reserve_gc bigint, in_reserve_expiration bigint, in_recoup_timestamp bigint, OUT out_recoup_ok boolean, OUT out_internal_failure boolean, OUT out_recoup_timestamp bigint) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- tmp_val INT8; -- amount recouped
-DECLARE
- tmp_frac INT8; -- amount recouped
-BEGIN
--- Shards: SELECT known_coins (by coin_pub)
--- SELECT recoup (by coin_pub)
--- UPDATE known_coins (by coin_pub)
--- UPDATE reserves (by reserve_pub)
--- INSERT recoup (by coin_pub)
-
-out_internal_failure=FALSE;
-
-
--- Check remaining balance of the coin.
-SELECT
- remaining_frac
- ,remaining_val
- INTO
- tmp_frac
- ,tmp_val
-FROM known_coins
- WHERE coin_pub=in_coin_pub;
-
-IF NOT FOUND
-THEN
- out_internal_failure=TRUE;
- out_recoup_ok=FALSE;
- RETURN;
-END IF;
-
-IF tmp_val + tmp_frac = 0
-THEN
- -- Check for idempotency
- SELECT
- recoup_timestamp
- INTO
- out_recoup_timestamp
- FROM recoup
- WHERE coin_pub=in_coin_pub;
-
- out_recoup_ok=FOUND;
- RETURN;
-END IF;
-
-
--- Update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=0
- ,remaining_val=0
- WHERE coin_pub=in_coin_pub;
-
-
--- Credit the reserve and update reserve timers.
-UPDATE reserves
- SET
- current_balance_frac=current_balance_frac+tmp_frac
- - CASE
- WHEN current_balance_frac+tmp_frac >= 100000000
- THEN 100000000
- ELSE 0
- END,
- current_balance_val=current_balance_val+tmp_val
- + CASE
- WHEN current_balance_frac+tmp_frac >= 100000000
- THEN 1
- ELSE 0
- END,
- gc_date=GREATEST(gc_date, in_reserve_gc),
- expiration_date=GREATEST(expiration_date, in_reserve_expiration)
- WHERE reserve_pub=in_reserve_pub;
-
-
-IF NOT FOUND
-THEN
- RAISE NOTICE 'failed to increase reserve balance from recoup';
- out_recoup_ok=TRUE;
- out_internal_failure=TRUE;
- RETURN;
-END IF;
-
-
-INSERT INTO recoup
- (coin_pub
- ,coin_sig
- ,coin_blind
- ,amount_val
- ,amount_frac
- ,recoup_timestamp
- ,reserve_out_serial_id
- )
-VALUES
- (in_coin_pub
- ,in_coin_sig
- ,in_coin_blind
- ,tmp_val
- ,tmp_frac
- ,in_recoup_timestamp
- ,in_reserve_out_serial_id);
-
--- Normal end, everything is fine.
-out_recoup_ok=TRUE;
-out_recoup_timestamp=in_recoup_timestamp;
-
-END $$;
-
-
---
--- Name: exchange_do_refund(bigint, integer, bigint, integer, bigint, integer, bytea, bigint, bigint, bigint, bytea, bytea, bytea); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_refund(in_amount_with_fee_val bigint, in_amount_with_fee_frac integer, in_amount_val bigint, in_amount_frac integer, in_deposit_fee_val bigint, in_deposit_fee_frac integer, in_h_contract_terms bytea, in_rtransaction_id bigint, in_deposit_shard bigint, in_known_coin_id bigint, in_coin_pub bytea, in_merchant_pub bytea, in_merchant_sig bytea, OUT out_not_found boolean, OUT out_refund_ok boolean, OUT out_gone boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- dsi INT8; -- ID of deposit being refunded
-DECLARE
- tmp_val INT8; -- total amount refunded
-DECLARE
- tmp_frac INT8; -- total amount refunded
-DECLARE
- deposit_val INT8; -- amount that was originally deposited
-DECLARE
- deposit_frac INT8; -- amount that was originally deposited
-BEGIN
--- Shards: SELECT deposits (coin_pub, shard, h_contract_terms, merchant_pub)
--- INSERT refunds (by coin_pub, rtransaction_id) ON CONFLICT DO NOTHING
--- SELECT refunds (by coin_pub)
--- UPDATE known_coins (by coin_pub)
-
-SELECT
- deposit_serial_id
- ,amount_with_fee_val
- ,amount_with_fee_frac
- ,done
-INTO
- dsi
- ,deposit_val
- ,deposit_frac
- ,out_gone
-FROM deposits
- WHERE coin_pub=in_coin_pub
- AND shard=in_deposit_shard
- AND merchant_pub=in_merchant_pub
- AND h_contract_terms=in_h_contract_terms;
-
-IF NOT FOUND
-THEN
- -- No matching deposit found!
- out_refund_ok=FALSE;
- out_conflict=FALSE;
- out_not_found=TRUE;
- out_gone=FALSE;
- RETURN;
-END IF;
-
-INSERT INTO refunds
- (deposit_serial_id
- ,coin_pub
- ,merchant_sig
- ,rtransaction_id
- ,amount_with_fee_val
- ,amount_with_fee_frac
- )
- VALUES
- (dsi
- ,in_coin_pub
- ,in_merchant_sig
- ,in_rtransaction_id
- ,in_amount_with_fee_val
- ,in_amount_with_fee_frac)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: see if an identical record exists.
- -- Note that by checking 'coin_sig', we implicitly check
- -- identity over everything that the signature covers.
- -- We do select over merchant_pub and h_contract_terms
- -- primarily here to maximally use the existing index.
- PERFORM
- FROM refunds
- WHERE coin_pub=in_coin_pub
- AND deposit_serial_id=dsi
- AND rtransaction_id=in_rtransaction_id
- AND amount_with_fee_val=in_amount_with_fee_val
- AND amount_with_fee_frac=in_amount_with_fee_frac;
-
- IF NOT FOUND
- THEN
- -- Deposit exists, but have conflicting refund.
- out_refund_ok=FALSE;
- out_conflict=TRUE;
- out_not_found=FALSE;
- RETURN;
- END IF;
-
- -- Idempotent request known, return success.
- out_refund_ok=TRUE;
- out_conflict=FALSE;
- out_not_found=FALSE;
- out_gone=FALSE;
- RETURN;
-END IF;
-
-IF out_gone
-THEN
- -- money already sent to the merchant. Tough luck.
- out_refund_ok=FALSE;
- out_conflict=FALSE;
- out_not_found=FALSE;
- RETURN;
-END IF;
-
--- Check refund balance invariant.
-SELECT
- SUM(amount_with_fee_val) -- overflow here is not plausible
- ,SUM(CAST(amount_with_fee_frac AS INT8)) -- compute using 64 bits
- INTO
- tmp_val
- ,tmp_frac
- FROM refunds
- WHERE coin_pub=in_coin_pub
- AND deposit_serial_id=dsi;
-IF tmp_val IS NULL
-THEN
- RAISE NOTICE 'failed to sum up existing refunds';
- out_refund_ok=FALSE;
- out_conflict=FALSE;
- out_not_found=FALSE;
- RETURN;
-END IF;
-
--- Normalize result before continuing
-tmp_val = tmp_val + tmp_frac / 100000000;
-tmp_frac = tmp_frac % 100000000;
-
--- Actually check if the deposits are sufficient for the refund. Verbosely. ;-)
-IF (tmp_val < deposit_val)
-THEN
- out_refund_ok=TRUE;
-ELSE
- IF (tmp_val = deposit_val) AND (tmp_frac <= deposit_frac)
- THEN
- out_refund_ok=TRUE;
- ELSE
- out_refund_ok=FALSE;
- END IF;
-END IF;
-
-IF (tmp_val = deposit_val) AND (tmp_frac = deposit_frac)
-THEN
- -- Refunds have reached the full value of the original
- -- deposit. Also refund the deposit fee.
- in_amount_frac = in_amount_frac + in_deposit_fee_frac;
- in_amount_val = in_amount_val + in_deposit_fee_val;
-
- -- Normalize result before continuing
- in_amount_val = in_amount_val + in_amount_frac / 100000000;
- in_amount_frac = in_amount_frac % 100000000;
-END IF;
-
--- Update balance of the coin.
-UPDATE known_coins
- SET
- remaining_frac=remaining_frac+in_amount_frac
- - CASE
- WHEN remaining_frac+in_amount_frac >= 100000000
- THEN 100000000
- ELSE 0
- END,
- remaining_val=remaining_val+in_amount_val
- + CASE
- WHEN remaining_frac+in_amount_frac >= 100000000
- THEN 1
- ELSE 0
- END
- WHERE coin_pub=in_coin_pub;
-
-
-out_conflict=FALSE;
-out_not_found=FALSE;
-
-END $$;
-
-
---
--- Name: exchange_do_reserve_purse(bytea, bytea, bigint, bytea, bigint, integer, bytea); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_reserve_purse(in_purse_pub bytea, in_merge_sig bytea, in_merge_timestamp bigint, in_reserve_sig bytea, in_purse_fee_val bigint, in_purse_fee_frac integer, in_reserve_pub bytea, OUT out_no_funds boolean, OUT out_conflict boolean) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- my_purses_active INT8;
-DECLARE
- my_purses_allowed INT8;
-DECLARE
- my_balance_val INT8;
-DECLARE
- my_balance_frac INT4;
-DECLARE
- my_kyc_passed BOOLEAN;
-BEGIN
-
--- comment out for now
-IF TRUE
-THEN
- out_no_funds=FALSE;
- out_conflict=FALSE;
- RETURN;
-END IF;
-
--- Store purse merge signature, checks for purse_pub uniqueness
-INSERT INTO purse_merges
- (partner_serial_id
- ,reserve_pub
- ,purse_pub
- ,merge_sig
- ,merge_timestamp)
- VALUES
- (0
- ,in_reserve_pub
- ,in_purse_pub
- ,in_merge_sig
- ,in_merge_timestamp)
- ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- Idempotency check: see if an identical record exists.
- -- Note that by checking 'merge_sig', we implicitly check
- -- identity over everything that the signature covers.
- PERFORM
- FROM purse_merges
- WHERE purse_pub=in_purse_pub
- AND merge_sig=in_merge_sig;
- IF NOT FOUND
- THEN
- -- Purse was merged, but to some other reserve. Not allowed.
- out_conflict=TRUE;
- RETURN;
- END IF;
-
- -- "success"
- out_conflict=FALSE;
- out_no_funds=FALSE;
- RETURN;
-END IF;
-out_conflict=FALSE;
-
-
--- Store account merge signature.
-INSERT INTO account_merges
- (reserve_pub
- ,reserve_sig
- ,purse_pub)
- VALUES
- (in_reserve_pub
- ,in_reserve_sig
- ,in_purse_pub);
-
-
-
--- Charge reserve for purse creation.
--- FIXME: Use different type of purse
--- signature in this case, so that we
--- can properly account for the purse
--- fees when auditing!!!
-SELECT
- purses_active
- ,purses_allowed
- ,kyc_passed
- ,current_balance_val
- ,current_balance_frac
-INTO
- my_purses_active
- ,my_purses_allowed
- ,my_kyc_passed
- ,my_balance_val
- ,my_balance_frac
-FROM reserves
-WHERE reserve_pub=in_reserve_pub;
-
-IF NOT FOUND
-THEN
- out_no_funds=TRUE;
- -- FIXME: be more specific in the returned
- -- error that we don't know the reserve
- -- (instead of merely saying it has no funds)
- RETURN;
-END IF;
-
-IF NOT my_kyc_passed
-THEN
- -- FIXME: might want to categorically disallow
- -- purse creation without KYC (depending on
- -- exchange settings => new argument?)
-END IF;
-
-IF ( (my_purses_active >= my_purses_allowed) AND
- ( (my_balance_val < in_purse_fee_val) OR
- ( (my_balance_val <= in_purse_fee_val) AND
- (my_balance_frac < in_purse_fee_frac) ) ) )
-THEN
- out_no_funds=TRUE;
- RETURN;
-END IF;
-
-IF (my_purses_active < my_purses_allowed)
-THEN
- my_purses_active = my_purses_active + 1;
-ELSE
- -- FIXME: See above: we should probably have
- -- very explicit wallet-approval in the
- -- signature to charge the reserve!
- my_balance_val = my_balance_val - in_purse_fee_val;
- IF (my_balance_frac > in_purse_fee_frac)
- THEN
- my_balance_frac = my_balance_frac - in_purse_fee_frac;
- ELSE
- my_balance_val = my_balance_val - 1;
- my_balance_frac = my_balance_frac + 100000000 - in_purse_fee_frac;
- END IF;
-END IF;
-
-UPDATE reserves SET
- gc_date=min_reserve_gc
- ,current_balance_val=my_balance_val
- ,current_balance_frac=my_balance_frac
- ,purses_active=my_purses_active
- ,kyc_required=TRUE
-WHERE
- reserves.reserve_pub=rpub;
-
-out_no_funds=FALSE;
-
-
-END $$;
-
-
---
--- Name: exchange_do_withdraw(bytea, bigint, integer, bytea, bytea, bytea, bytea, bytea, bigint, bigint); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_withdraw(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, rpub bytea, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint) RETURNS record
- LANGUAGE plpgsql
- AS $$
-DECLARE
- reserve_gc INT8;
-DECLARE
- denom_serial INT8;
-DECLARE
- reserve_val INT8;
-DECLARE
- reserve_frac INT4;
-BEGIN
--- Shards: reserves by reserve_pub (SELECT)
--- reserves_out (INSERT, with CONFLICT detection) by wih
--- reserves by reserve_pub (UPDATE)
--- reserves_in by reserve_pub (SELECT)
--- wire_targets by wire_target_h_payto
-
-SELECT denominations_serial
- INTO denom_serial
- FROM denominations
- WHERE denom_pub_hash=h_denom_pub;
-
-IF NOT FOUND
-THEN
- -- denomination unknown, should be impossible!
- reserve_found=FALSE;
- balance_ok=FALSE;
- kycok=FALSE;
- account_uuid=0;
- ruuid=0;
- ASSERT false, 'denomination unknown';
- RETURN;
-END IF;
-
-
-SELECT
- current_balance_val
- ,current_balance_frac
- ,gc_date
- ,reserve_uuid
- INTO
- reserve_val
- ,reserve_frac
- ,reserve_gc
- ,ruuid
- FROM reserves
- WHERE reserves.reserve_pub=rpub;
-
-IF NOT FOUND
-THEN
- -- reserve unknown
- reserve_found=FALSE;
- balance_ok=FALSE;
- kycok=FALSE;
- account_uuid=0;
- ruuid=2;
- RETURN;
-END IF;
-
--- We optimistically insert, and then on conflict declare
--- the query successful due to idempotency.
-INSERT INTO reserves_out
- (h_blind_ev
- ,denominations_serial
- ,denom_sig
- ,reserve_uuid
- ,reserve_sig
- ,execution_date
- ,amount_with_fee_val
- ,amount_with_fee_frac)
-VALUES
- (h_coin_envelope
- ,denom_serial
- ,denom_sig
- ,ruuid
- ,reserve_sig
- ,now
- ,amount_val
- ,amount_frac)
-ON CONFLICT DO NOTHING;
-
-IF NOT FOUND
-THEN
- -- idempotent query, all constraints must be satisfied
- reserve_found=TRUE;
- balance_ok=TRUE;
- kycok=TRUE;
- account_uuid=0;
- RETURN;
-END IF;
-
--- Check reserve balance is sufficient.
-IF (reserve_val > amount_val)
-THEN
- IF (reserve_frac >= amount_frac)
- THEN
- reserve_val=reserve_val - amount_val;
- reserve_frac=reserve_frac - amount_frac;
- ELSE
- reserve_val=reserve_val - amount_val - 1;
- reserve_frac=reserve_frac + 100000000 - amount_frac;
- END IF;
-ELSE
- IF (reserve_val = amount_val) AND (reserve_frac >= amount_frac)
- THEN
- reserve_val=0;
- reserve_frac=reserve_frac - amount_frac;
- ELSE
- reserve_found=TRUE;
- balance_ok=FALSE;
- kycok=FALSE; -- we do not really know or care
- account_uuid=0;
- RETURN;
- END IF;
-END IF;
-
--- Calculate new expiration dates.
-min_reserve_gc=GREATEST(min_reserve_gc,reserve_gc);
-
--- Update reserve balance.
-UPDATE reserves SET
- gc_date=min_reserve_gc
- ,current_balance_val=reserve_val
- ,current_balance_frac=reserve_frac
-WHERE
- reserves.reserve_pub=rpub;
-
-reserve_found=TRUE;
-balance_ok=TRUE;
-
-
-
--- Special actions needed for a CS withdraw?
-IF NOT NULL cs_nonce
-THEN
- -- Cache CS signature to prevent replays in the future
- -- (and check if cached signature exists at the same time).
- INSERT INTO cs_nonce_locks
- (nonce
- ,max_denomination_serial
- ,op_hash)
- VALUES
- (cs_nonce
- ,denom_serial
- ,h_coin_envelope)
- ON CONFLICT DO NOTHING;
-
- IF NOT FOUND
- THEN
- -- See if the existing entry is identical.
- SELECT 1
- FROM cs_nonce_locks
- WHERE nonce=cs_nonce
- AND op_hash=h_coin_envelope;
- IF NOT FOUND
- THEN
- reserve_found=FALSE;
- balance_ok=FALSE;
- kycok=FALSE;
- account_uuid=0;
- ruuid=1; -- FIXME: return error message more nicely!
- ASSERT false, 'nonce reuse attempted by client';
- END IF;
- END IF;
-END IF;
-
-
-
--- Obtain KYC status based on the last wire transfer into
--- this reserve. FIXME: likely not adequate for reserves that got P2P transfers!
--- SELECT
--- kyc_ok
--- ,wire_target_serial_id
--- INTO
--- kycok
--- ,account_uuid
--- FROM reserves_in
--- JOIN wire_targets ON (wire_source_h_payto = wire_target_h_payto)
--- WHERE reserve_pub=rpub
--- LIMIT 1; -- limit 1 should not be required (without p2p transfers)
-
-WITH reserves_in AS materialized (
- SELECT wire_source_h_payto
- FROM reserves_in WHERE
- reserve_pub=rpub
-)
-SELECT
- kyc_ok
- ,wire_target_serial_id
-INTO
- kycok
- ,account_uuid
-FROM wire_targets
- WHERE wire_target_h_payto = (
- SELECT wire_source_h_payto
- FROM reserves_in
- );
-
-END $$;
-
-
---
--- Name: FUNCTION exchange_do_withdraw(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, rpub bytea, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.exchange_do_withdraw(cs_nonce bytea, amount_val bigint, amount_frac integer, h_denom_pub bytea, rpub bytea, reserve_sig bytea, h_coin_envelope bytea, denom_sig bytea, now bigint, min_reserve_gc bigint, OUT reserve_found boolean, OUT balance_ok boolean, OUT kycok boolean, OUT account_uuid bigint, OUT ruuid bigint) IS 'Checks whether the reserve has sufficient balance for a withdraw operation (or the request is repeated and was previously approved) and if so updates the database with the result';
-
-
---
--- Name: exchange_do_withdraw_limit_check(bigint, bigint, bigint, integer); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.exchange_do_withdraw_limit_check(ruuid bigint, start_time bigint, upper_limit_val bigint, upper_limit_frac integer, OUT below_limit boolean) RETURNS boolean
- LANGUAGE plpgsql
- AS $$
-DECLARE
- total_val INT8;
-DECLARE
- total_frac INT8; -- INT4 could overflow during accumulation!
-BEGIN
--- NOTE: Read-only, but crosses shards.
--- Shards: reserves by reserve_pub
--- reserves_out by reserve_uuid -- crosses shards!!
-
-
-SELECT
- SUM(amount_with_fee_val) -- overflow here is not plausible
- ,SUM(CAST(amount_with_fee_frac AS INT8)) -- compute using 64 bits
- INTO
- total_val
- ,total_frac
- FROM reserves_out
- WHERE reserve_uuid=ruuid
- AND execution_date > start_time;
-
--- normalize result
-total_val = total_val + total_frac / 100000000;
-total_frac = total_frac % 100000000;
-
--- compare to threshold
-below_limit = (total_val < upper_limit_val) OR
- ( (total_val = upper_limit_val) AND
- (total_frac <= upper_limit_frac) );
-END $$;
-
-
---
--- Name: FUNCTION exchange_do_withdraw_limit_check(ruuid bigint, start_time bigint, upper_limit_val bigint, upper_limit_frac integer, OUT below_limit boolean); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.exchange_do_withdraw_limit_check(ruuid bigint, start_time bigint, upper_limit_val bigint, upper_limit_frac integer, OUT below_limit boolean) IS 'Check whether the withdrawals from the given reserve since the given time are below the given threshold';
-
-
---
--- Name: prepare_sharding(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.prepare_sharding() RETURNS void
- LANGUAGE plpgsql
- AS $$
-BEGIN
-
- CREATE EXTENSION IF NOT EXISTS postgres_fdw;
-
- PERFORM detach_default_partitions();
-
- ALTER TABLE IF EXISTS wire_targets
- DROP CONSTRAINT IF EXISTS wire_targets_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS reserves
- DROP CONSTRAINT IF EXISTS reserves_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS reserves_in
- DROP CONSTRAINT IF EXISTS reserves_in_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS reserves_close
- DROP CONSTRAINT IF EXISTS reserves_close_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS reserves_out
- DROP CONSTRAINT IF EXISTS reserves_out_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS reserves_out_denominations_serial_fkey
- ,DROP CONSTRAINT IF EXISTS reserves_out_h_blind_ev_key
- ;
-
- ALTER TABLE IF EXISTS known_coins
- DROP CONSTRAINT IF EXISTS known_coins_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS known_coins_denominations_serial_fkey
- ;
-
- ALTER TABLE IF EXISTS refresh_commitments
- DROP CONSTRAINT IF EXISTS refresh_commitments_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS refresh_old_coin_pub_fkey
- ;
-
- ALTER TABLE IF EXISTS refresh_revealed_coins
- DROP CONSTRAINT IF EXISTS refresh_revealed_coins_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS refresh_revealed_coins_denominations_serial_fkey
- ;
-
- ALTER TABLE IF EXISTS refresh_transfer_keys
- DROP CONSTRAINT IF EXISTS refresh_transfer_keys_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS deposits
- DROP CONSTRAINT IF EXISTS deposits_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS deposits_extension_details_serial_id_fkey
- ,DROP CONSTRAINT IF EXISTS deposits_coin_pub_merchant_pub_h_contract_terms_key CASCADE
- ;
-
- ALTER TABLE IF EXISTS refunds
- DROP CONSTRAINT IF EXISTS refunds_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS wire_out
- DROP CONSTRAINT IF EXISTS wire_out_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS wire_out_wtid_raw_key CASCADE
- ;
-
- ALTER TABLE IF EXISTS aggregation_tracking
- DROP CONSTRAINT IF EXISTS aggregation_tracking_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS aggregation_tracking_wtid_raw_fkey
- ;
-
- ALTER TABLE IF EXISTS recoup
- DROP CONSTRAINT IF EXISTS recoup_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS recoup_refresh
- DROP CONSTRAINT IF EXISTS recoup_refresh_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS prewire
- DROP CONSTRAINT IF EXISTS prewire_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS cs_nonce_locks
- DROP CONSTRAINT IF EXISTS cs_nonce_locks_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS purse_requests
- DROP CONSTRAINT IF EXISTS purse_requests_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS purse_merges
- DROP CONSTRAINT IF EXISTS purse_merges_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS account_merges
- DROP CONSTRAINT IF EXISTS account_merges_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS contracts
- DROP CONSTRAINT IF EXISTS contracts_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS history_requests
- DROP CONSTRAINT IF EXISTS history_requests_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS close_requests
- DROP CONSTRAINT IF EXISTS close_requests_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS purse_deposits
- DROP CONSTRAINT IF EXISTS purse_deposits_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS wads_out
- DROP CONSTRAINT IF EXISTS wads_out_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS wad_out_entries
- DROP CONSTRAINT IF EXISTS wad_out_entries_pkey CASCADE
- ;
-
- ALTER TABLE IF EXISTS wads_in
- DROP CONSTRAINT IF EXISTS wads_in_pkey CASCADE
- ,DROP CONSTRAINT IF EXISTS wads_in_wad_id_origin_exchange_url_key
- ;
-
- ALTER TABLE IF EXISTS wad_in_entries
- DROP CONSTRAINT IF EXISTS wad_in_entries_pkey CASCADE
- ;
-
-END
-$$;
-
-
---
--- Name: recoup_delete_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.recoup_delete_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- DELETE FROM recoup_by_reserve
- WHERE reserve_out_serial_id = OLD.reserve_out_serial_id
- AND coin_pub = OLD.coin_pub;
- RETURN OLD;
-END $$;
-
-
---
--- Name: FUNCTION recoup_delete_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.recoup_delete_trigger() IS 'Replicate recoup deletions into recoup_by_reserve table.';
-
-
---
--- Name: recoup_insert_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.recoup_insert_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- INSERT INTO recoup_by_reserve
- (reserve_out_serial_id
- ,coin_pub)
- VALUES
- (NEW.reserve_out_serial_id
- ,NEW.coin_pub);
- RETURN NEW;
-END $$;
-
-
---
--- Name: FUNCTION recoup_insert_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.recoup_insert_trigger() IS 'Replicate recoup inserts into recoup_by_reserve table.';
-
-
---
--- Name: reserves_out_by_reserve_delete_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.reserves_out_by_reserve_delete_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- DELETE FROM reserves_out_by_reserve
- WHERE reserve_uuid = OLD.reserve_uuid;
- RETURN OLD;
-END $$;
-
-
---
--- Name: FUNCTION reserves_out_by_reserve_delete_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.reserves_out_by_reserve_delete_trigger() IS 'Replicate reserve_out deletions into reserve_out_by_reserve table.';
-
-
---
--- Name: reserves_out_by_reserve_insert_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.reserves_out_by_reserve_insert_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- INSERT INTO reserves_out_by_reserve
- (reserve_uuid
- ,h_blind_ev)
- VALUES
- (NEW.reserve_uuid
- ,NEW.h_blind_ev);
- RETURN NEW;
-END $$;
-
-
---
--- Name: FUNCTION reserves_out_by_reserve_insert_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.reserves_out_by_reserve_insert_trigger() IS 'Replicate reserve_out inserts into reserve_out_by_reserve table.';
-
-
---
--- Name: wire_out_delete_trigger(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION public.wire_out_delete_trigger() RETURNS trigger
- LANGUAGE plpgsql
- AS $$
-BEGIN
- DELETE FROM aggregation_tracking
- WHERE wtid_raw = OLD.wtid_raw;
- RETURN OLD;
-END $$;
-
-
---
--- Name: FUNCTION wire_out_delete_trigger(); Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON FUNCTION public.wire_out_delete_trigger() IS 'Replicate reserve_out deletions into aggregation_tracking. This replaces an earlier use of an ON DELETE CASCADE that required a DEFERRABLE constraint and conflicted with nice partitioning.';
-
-
-SET default_tablespace = '';
-
-SET default_table_access_method = heap;
-
---
--- Name: patches; Type: TABLE; Schema: _v; Owner: -
---
-
-CREATE TABLE _v.patches (
- patch_name text NOT NULL,
- applied_tsz timestamp with time zone DEFAULT now() NOT NULL,
- applied_by text NOT NULL,
- requires text[],
- conflicts text[]
-);
-
-
---
--- Name: TABLE patches; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON TABLE _v.patches IS 'Contains information about what patches are currently applied on database.';
-
-
---
--- Name: COLUMN patches.patch_name; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.patch_name IS 'Name of patch, has to be unique for every patch.';
-
-
---
--- Name: COLUMN patches.applied_tsz; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.applied_tsz IS 'When the patch was applied.';
-
-
---
--- Name: COLUMN patches.applied_by; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.applied_by IS 'Who applied this patch (PostgreSQL username)';
-
-
---
--- Name: COLUMN patches.requires; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.requires IS 'List of patches that are required for given patch.';
-
-
---
--- Name: COLUMN patches.conflicts; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.conflicts IS 'List of patches that conflict with given patch.';
-
-
---
--- Name: account_merges; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.account_merges (
- account_merge_request_serial_id bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_pub bytea NOT NULL,
- CONSTRAINT account_merges_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT account_merges_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT account_merges_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE account_merges; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.account_merges IS 'Merge requests where a purse- and account-owner requested merging the purse into the account';
-
-
---
--- Name: COLUMN account_merges.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.account_merges.reserve_pub IS 'public key of the target reserve';
-
-
---
--- Name: COLUMN account_merges.reserve_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.account_merges.reserve_sig IS 'signature by the reserve private key affirming the merge, of type TALER_SIGNATURE_WALLET_ACCOUNT_MERGE';
-
-
---
--- Name: COLUMN account_merges.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.account_merges.purse_pub IS 'public key of the purse';
-
-
---
--- Name: account_merges_account_merge_request_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.account_merges ALTER COLUMN account_merge_request_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.account_merges_account_merge_request_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: account_merges_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.account_merges_default (
- account_merge_request_serial_id bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_pub bytea NOT NULL,
- CONSTRAINT account_merges_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT account_merges_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT account_merges_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.account_merges ATTACH PARTITION public.account_merges_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: aggregation_tracking; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.aggregation_tracking (
- aggregation_serial_id bigint NOT NULL,
- deposit_serial_id bigint NOT NULL,
- wtid_raw bytea NOT NULL
-)
-PARTITION BY HASH (deposit_serial_id);
-
-
---
--- Name: TABLE aggregation_tracking; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.aggregation_tracking IS 'mapping from wire transfer identifiers (WTID) to deposits (and back)';
-
-
---
--- Name: COLUMN aggregation_tracking.wtid_raw; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.aggregation_tracking.wtid_raw IS 'identifier of the wire transfer';
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.aggregation_tracking ALTER COLUMN aggregation_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.aggregation_tracking_aggregation_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: aggregation_tracking_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.aggregation_tracking_default (
- aggregation_serial_id bigint NOT NULL,
- deposit_serial_id bigint NOT NULL,
- wtid_raw bytea NOT NULL
-);
-ALTER TABLE ONLY public.aggregation_tracking ATTACH PARTITION public.aggregation_tracking_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: aggregation_transient; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.aggregation_transient (
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- wire_target_h_payto bytea,
- exchange_account_section text NOT NULL,
- wtid_raw bytea NOT NULL,
- CONSTRAINT aggregation_transient_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT aggregation_transient_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-)
-PARTITION BY HASH (wire_target_h_payto);
-
-
---
--- Name: TABLE aggregation_transient; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.aggregation_transient IS 'aggregations currently happening (lacking wire_out, usually because the amount is too low); this table is not replicated';
-
-
---
--- Name: COLUMN aggregation_transient.amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.aggregation_transient.amount_val IS 'Sum of all of the aggregated deposits (without deposit fees)';
-
-
---
--- Name: COLUMN aggregation_transient.wtid_raw; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.aggregation_transient.wtid_raw IS 'identifier of the wire transfer';
-
-
---
--- Name: aggregation_transient_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.aggregation_transient_default (
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- wire_target_h_payto bytea,
- exchange_account_section text NOT NULL,
- wtid_raw bytea NOT NULL,
- CONSTRAINT aggregation_transient_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT aggregation_transient_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-);
-ALTER TABLE ONLY public.aggregation_transient ATTACH PARTITION public.aggregation_transient_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: app_bankaccount; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_bankaccount (
- is_public boolean NOT NULL,
- account_no integer NOT NULL,
- balance character varying NOT NULL,
- user_id integer NOT NULL
-);
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.app_bankaccount_account_no_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.app_bankaccount_account_no_seq OWNED BY public.app_bankaccount.account_no;
-
-
---
--- Name: app_banktransaction; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_banktransaction (
- id bigint NOT NULL,
- amount character varying NOT NULL,
- subject character varying(200) NOT NULL,
- date timestamp with time zone NOT NULL,
- cancelled boolean NOT NULL,
- request_uid character varying(128) NOT NULL,
- credit_account_id integer NOT NULL,
- debit_account_id integer NOT NULL
-);
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.app_banktransaction_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.app_banktransaction_id_seq OWNED BY public.app_banktransaction.id;
-
-
---
--- Name: app_talerwithdrawoperation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_talerwithdrawoperation (
- withdraw_id uuid NOT NULL,
- amount character varying NOT NULL,
- selection_done boolean NOT NULL,
- confirmation_done boolean NOT NULL,
- aborted boolean NOT NULL,
- selected_reserve_pub text,
- selected_exchange_account_id integer,
- withdraw_account_id integer NOT NULL
-);
-
-
---
--- Name: auditor_balance_summary; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_balance_summary (
- master_pub bytea NOT NULL,
- denom_balance_val bigint NOT NULL,
- denom_balance_frac integer NOT NULL,
- deposit_fee_balance_val bigint NOT NULL,
- deposit_fee_balance_frac integer NOT NULL,
- melt_fee_balance_val bigint NOT NULL,
- melt_fee_balance_frac integer NOT NULL,
- refund_fee_balance_val bigint NOT NULL,
- refund_fee_balance_frac integer NOT NULL,
- risk_val bigint NOT NULL,
- risk_frac integer NOT NULL,
- loss_val bigint NOT NULL,
- loss_frac integer NOT NULL,
- irregular_recoup_val bigint NOT NULL,
- irregular_recoup_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_balance_summary; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_balance_summary IS 'the sum of the outstanding coins from auditor_denomination_pending (denom_pubs must belong to the respectives exchange master public key); it represents the auditor_balance_summary of the exchange at this point (modulo unexpected historic_loss-style events where denomination keys are compromised)';
-
-
---
--- Name: auditor_denom_sigs; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_denom_sigs (
- auditor_denom_serial bigint NOT NULL,
- auditor_uuid bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- auditor_sig bytea,
- CONSTRAINT auditor_denom_sigs_auditor_sig_check CHECK ((length(auditor_sig) = 64))
-);
-
-
---
--- Name: TABLE auditor_denom_sigs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_denom_sigs IS 'Table with auditor signatures on exchange denomination keys.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.auditor_uuid; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.auditor_uuid IS 'Identifies the auditor.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.denominations_serial IS 'Denomination the signature is for.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.auditor_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.auditor_sig IS 'Signature of the auditor, of purpose TALER_SIGNATURE_AUDITOR_EXCHANGE_KEYS.';
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.auditor_denom_sigs ALTER COLUMN auditor_denom_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.auditor_denom_sigs_auditor_denom_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: auditor_denomination_pending; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_denomination_pending (
- denom_pub_hash bytea NOT NULL,
- denom_balance_val bigint NOT NULL,
- denom_balance_frac integer NOT NULL,
- denom_loss_val bigint NOT NULL,
- denom_loss_frac integer NOT NULL,
- num_issued bigint NOT NULL,
- denom_risk_val bigint NOT NULL,
- denom_risk_frac integer NOT NULL,
- recoup_loss_val bigint NOT NULL,
- recoup_loss_frac integer NOT NULL,
- CONSTRAINT auditor_denomination_pending_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64))
-);
-
-
---
--- Name: TABLE auditor_denomination_pending; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_denomination_pending IS 'outstanding denomination coins that the exchange is aware of and what the respective balances are (outstanding as well as issued overall which implies the maximum value at risk).';
-
-
---
--- Name: COLUMN auditor_denomination_pending.num_issued; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.num_issued IS 'counts the number of coins issued (withdraw, refresh) of this denomination';
-
-
---
--- Name: COLUMN auditor_denomination_pending.denom_risk_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.denom_risk_val IS 'amount that could theoretically be lost in the future due to recoup operations';
-
-
---
--- Name: COLUMN auditor_denomination_pending.recoup_loss_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.recoup_loss_val IS 'amount actually lost due to recoup operations past revocation';
-
-
---
--- Name: auditor_exchange_signkeys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_exchange_signkeys (
- master_pub bytea NOT NULL,
- ep_start bigint NOT NULL,
- ep_expire bigint NOT NULL,
- ep_end bigint NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT auditor_exchange_signkeys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT auditor_exchange_signkeys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE auditor_exchange_signkeys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_exchange_signkeys IS 'list of the online signing keys of exchanges we are auditing';
-
-
---
--- Name: auditor_exchanges; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_exchanges (
- master_pub bytea NOT NULL,
- exchange_url character varying NOT NULL,
- CONSTRAINT auditor_exchanges_master_pub_check CHECK ((length(master_pub) = 32))
-);
-
-
---
--- Name: TABLE auditor_exchanges; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_exchanges IS 'list of the exchanges we are auditing';
-
-
---
--- Name: auditor_historic_denomination_revenue; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_historic_denomination_revenue (
- master_pub bytea NOT NULL,
- denom_pub_hash bytea NOT NULL,
- revenue_timestamp bigint NOT NULL,
- revenue_balance_val bigint NOT NULL,
- revenue_balance_frac integer NOT NULL,
- loss_balance_val bigint NOT NULL,
- loss_balance_frac integer NOT NULL,
- CONSTRAINT auditor_historic_denomination_revenue_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64))
-);
-
-
---
--- Name: TABLE auditor_historic_denomination_revenue; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_historic_denomination_revenue IS 'Table with historic profits; basically, when a denom_pub has expired and everything associated with it is garbage collected, the final profits end up in here; note that the denom_pub here is not a foreign key, we just keep it as a reference point.';
-
-
---
--- Name: COLUMN auditor_historic_denomination_revenue.revenue_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_historic_denomination_revenue.revenue_balance_val IS 'the sum of all of the profits we made on the coin except for withdraw fees (which are in historic_reserve_revenue); so this includes the deposit, melt and refund fees';
-
-
---
--- Name: auditor_historic_reserve_summary; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_historic_reserve_summary (
- master_pub bytea NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- reserve_profits_val bigint NOT NULL,
- reserve_profits_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_historic_reserve_summary; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_historic_reserve_summary IS 'historic profits from reserves; we eventually GC auditor_historic_reserve_revenue, and then store the totals in here (by time intervals).';
-
-
---
--- Name: auditor_predicted_result; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_predicted_result (
- master_pub bytea NOT NULL,
- balance_val bigint NOT NULL,
- balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_predicted_result; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_predicted_result IS 'Table with the sum of the ledger, auditor_historic_revenue and the auditor_reserve_balance. This is the final amount that the exchange should have in its bank account right now.';
-
-
---
--- Name: auditor_progress_aggregation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_aggregation (
- master_pub bytea NOT NULL,
- last_wire_out_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_aggregation; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_aggregation IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_coin; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_coin (
- master_pub bytea NOT NULL,
- last_withdraw_serial_id bigint DEFAULT 0 NOT NULL,
- last_deposit_serial_id bigint DEFAULT 0 NOT NULL,
- last_melt_serial_id bigint DEFAULT 0 NOT NULL,
- last_refund_serial_id bigint DEFAULT 0 NOT NULL,
- last_recoup_serial_id bigint DEFAULT 0 NOT NULL,
- last_recoup_refresh_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_coin; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_coin IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_deposit_confirmation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_deposit_confirmation (
- master_pub bytea NOT NULL,
- last_deposit_confirmation_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_deposit_confirmation; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_deposit_confirmation IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_reserve; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_reserve (
- master_pub bytea NOT NULL,
- last_reserve_in_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_out_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_recoup_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_close_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_reserve; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_reserve IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_reserve_balance; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_reserve_balance (
- master_pub bytea NOT NULL,
- reserve_balance_val bigint NOT NULL,
- reserve_balance_frac integer NOT NULL,
- withdraw_fee_balance_val bigint NOT NULL,
- withdraw_fee_balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_reserve_balance; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_reserve_balance IS 'sum of the balances of all customer reserves (by exchange master public key)';
-
-
---
--- Name: auditor_reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_reserves (
- reserve_pub bytea NOT NULL,
- master_pub bytea NOT NULL,
- reserve_balance_val bigint NOT NULL,
- reserve_balance_frac integer NOT NULL,
- withdraw_fee_balance_val bigint NOT NULL,
- withdraw_fee_balance_frac integer NOT NULL,
- expiration_date bigint NOT NULL,
- auditor_reserves_rowid bigint NOT NULL,
- origin_account text,
- CONSTRAINT auditor_reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- Name: TABLE auditor_reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_reserves IS 'all of the customer reserves and their respective balances that the auditor is aware of';
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auditor_reserves_auditor_reserves_rowid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditor_reserves_auditor_reserves_rowid_seq OWNED BY public.auditor_reserves.auditor_reserves_rowid;
-
-
---
--- Name: auditor_wire_fee_balance; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_wire_fee_balance (
- master_pub bytea NOT NULL,
- wire_fee_balance_val bigint NOT NULL,
- wire_fee_balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_wire_fee_balance; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_wire_fee_balance IS 'sum of the balances of all wire fees (by exchange master public key)';
-
-
---
--- Name: auditors; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditors (
- auditor_uuid bigint NOT NULL,
- auditor_pub bytea NOT NULL,
- auditor_name character varying NOT NULL,
- auditor_url character varying NOT NULL,
- is_active boolean NOT NULL,
- last_change bigint NOT NULL,
- CONSTRAINT auditors_auditor_pub_check CHECK ((length(auditor_pub) = 32))
-);
-
-
---
--- Name: TABLE auditors; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditors IS 'Table with auditors the exchange uses or has used in the past. Entries never expire as we need to remember the last_change column indefinitely.';
-
-
---
--- Name: COLUMN auditors.auditor_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.auditor_pub IS 'Public key of the auditor.';
-
-
---
--- Name: COLUMN auditors.auditor_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.auditor_url IS 'The base URL of the auditor.';
-
-
---
--- Name: COLUMN auditors.is_active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.is_active IS 'true if we are currently supporting the use of this auditor.';
-
-
---
--- Name: COLUMN auditors.last_change; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.last_change IS 'Latest time when active status changed. Used to detect replays of old messages.';
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.auditors ALTER COLUMN auditor_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.auditors_auditor_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: auth_group; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_group (
- id integer NOT NULL,
- name character varying(150) NOT NULL
-);
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_group_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_group_id_seq OWNED BY public.auth_group.id;
-
-
---
--- Name: auth_group_permissions; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_group_permissions (
- id bigint NOT NULL,
- group_id integer NOT NULL,
- permission_id integer NOT NULL
-);
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_group_permissions_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_group_permissions_id_seq OWNED BY public.auth_group_permissions.id;
-
-
---
--- Name: auth_permission; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_permission (
- id integer NOT NULL,
- name character varying(255) NOT NULL,
- content_type_id integer NOT NULL,
- codename character varying(100) NOT NULL
-);
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_permission_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_permission_id_seq OWNED BY public.auth_permission.id;
-
-
---
--- Name: auth_user; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user (
- id integer NOT NULL,
- password character varying(128) NOT NULL,
- last_login timestamp with time zone,
- is_superuser boolean NOT NULL,
- username character varying(150) NOT NULL,
- first_name character varying(150) NOT NULL,
- last_name character varying(150) NOT NULL,
- email character varying(254) NOT NULL,
- is_staff boolean NOT NULL,
- is_active boolean NOT NULL,
- date_joined timestamp with time zone NOT NULL
-);
-
-
---
--- Name: auth_user_groups; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user_groups (
- id bigint NOT NULL,
- user_id integer NOT NULL,
- group_id integer NOT NULL
-);
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_groups_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_groups_id_seq OWNED BY public.auth_user_groups.id;
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_id_seq OWNED BY public.auth_user.id;
-
-
---
--- Name: auth_user_user_permissions; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user_user_permissions (
- id bigint NOT NULL,
- user_id integer NOT NULL,
- permission_id integer NOT NULL
-);
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_user_permissions_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_user_permissions_id_seq OWNED BY public.auth_user_user_permissions.id;
-
-
---
--- Name: close_requests; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.close_requests (
- reserve_pub bytea NOT NULL,
- close_timestamp bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- close_val bigint NOT NULL,
- close_frac integer NOT NULL,
- CONSTRAINT close_requests_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT close_requests_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (reserve_pub);
-
-
---
--- Name: TABLE close_requests; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.close_requests IS 'Explicit requests by a reserve owner to close a reserve immediately';
-
-
---
--- Name: COLUMN close_requests.close_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.close_requests.close_timestamp IS 'When the request was created by the client';
-
-
---
--- Name: COLUMN close_requests.reserve_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.close_requests.reserve_sig IS 'Signature affirming that the reserve is to be closed';
-
-
---
--- Name: COLUMN close_requests.close_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.close_requests.close_val IS 'Balance of the reserve at the time of closing, to be wired to the associated bank account (minus the closing fee)';
-
-
---
--- Name: close_requests_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.close_requests_default (
- reserve_pub bytea NOT NULL,
- close_timestamp bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- close_val bigint NOT NULL,
- close_frac integer NOT NULL,
- CONSTRAINT close_requests_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT close_requests_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.close_requests ATTACH PARTITION public.close_requests_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: contracts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.contracts (
- contract_serial_id bigint NOT NULL,
- purse_pub bytea NOT NULL,
- pub_ckey bytea NOT NULL,
- contract_sig bytea NOT NULL,
- e_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- CONSTRAINT contracts_contract_sig_check CHECK ((length(contract_sig) = 64)),
- CONSTRAINT contracts_pub_ckey_check CHECK ((length(pub_ckey) = 32)),
- CONSTRAINT contracts_purse_pub_check CHECK ((length(purse_pub) = 32))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE contracts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.contracts IS 'encrypted contracts associated with purses';
-
-
---
--- Name: COLUMN contracts.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.contracts.purse_pub IS 'public key of the purse that the contract is associated with';
-
-
---
--- Name: COLUMN contracts.pub_ckey; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.contracts.pub_ckey IS 'Public ECDH key used to encrypt the contract, to be used with the purse private key for decryption';
-
-
---
--- Name: COLUMN contracts.contract_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.contracts.contract_sig IS 'signature over the encrypted contract by the purse contract key';
-
-
---
--- Name: COLUMN contracts.e_contract; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.contracts.e_contract IS 'AES-GCM encrypted contract terms (contains gzip compressed JSON after decryption)';
-
-
---
--- Name: contracts_contract_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.contracts ALTER COLUMN contract_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.contracts_contract_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: contracts_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.contracts_default (
- contract_serial_id bigint NOT NULL,
- purse_pub bytea NOT NULL,
- pub_ckey bytea NOT NULL,
- contract_sig bytea NOT NULL,
- e_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- CONSTRAINT contracts_contract_sig_check CHECK ((length(contract_sig) = 64)),
- CONSTRAINT contracts_pub_ckey_check CHECK ((length(pub_ckey) = 32)),
- CONSTRAINT contracts_purse_pub_check CHECK ((length(purse_pub) = 32))
-);
-ALTER TABLE ONLY public.contracts ATTACH PARTITION public.contracts_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: cs_nonce_locks; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.cs_nonce_locks (
- cs_nonce_lock_serial_id bigint NOT NULL,
- nonce bytea NOT NULL,
- op_hash bytea NOT NULL,
- max_denomination_serial bigint NOT NULL,
- CONSTRAINT cs_nonce_locks_nonce_check CHECK ((length(nonce) = 32)),
- CONSTRAINT cs_nonce_locks_op_hash_check CHECK ((length(op_hash) = 64))
-)
-PARTITION BY HASH (nonce);
-
-
---
--- Name: TABLE cs_nonce_locks; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.cs_nonce_locks IS 'ensures a Clause Schnorr client nonce is locked for use with an operation identified by a hash';
-
-
---
--- Name: COLUMN cs_nonce_locks.nonce; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.cs_nonce_locks.nonce IS 'actual nonce submitted by the client';
-
-
---
--- Name: COLUMN cs_nonce_locks.op_hash; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.cs_nonce_locks.op_hash IS 'hash (RC for refresh, blind coin hash for withdraw) the nonce may be used with';
-
-
---
--- Name: COLUMN cs_nonce_locks.max_denomination_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.cs_nonce_locks.max_denomination_serial IS 'Maximum number of a CS denomination serial the nonce could be used with, for GC';
-
-
---
--- Name: cs_nonce_locks_cs_nonce_lock_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.cs_nonce_locks ALTER COLUMN cs_nonce_lock_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.cs_nonce_locks_cs_nonce_lock_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: cs_nonce_locks_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.cs_nonce_locks_default (
- cs_nonce_lock_serial_id bigint NOT NULL,
- nonce bytea NOT NULL,
- op_hash bytea NOT NULL,
- max_denomination_serial bigint NOT NULL,
- CONSTRAINT cs_nonce_locks_nonce_check CHECK ((length(nonce) = 32)),
- CONSTRAINT cs_nonce_locks_op_hash_check CHECK ((length(op_hash) = 64))
-);
-ALTER TABLE ONLY public.cs_nonce_locks ATTACH PARTITION public.cs_nonce_locks_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: denomination_revocations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.denomination_revocations (
- denom_revocations_serial_id bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT denomination_revocations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE denomination_revocations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.denomination_revocations IS 'remembering which denomination keys have been revoked';
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.denomination_revocations ALTER COLUMN denom_revocations_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.denomination_revocations_denom_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: denominations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.denominations (
- denominations_serial bigint NOT NULL,
- denom_pub_hash bytea NOT NULL,
- denom_type integer DEFAULT 1 NOT NULL,
- age_mask integer DEFAULT 0 NOT NULL,
- denom_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- valid_from bigint NOT NULL,
- expire_withdraw bigint NOT NULL,
- expire_deposit bigint NOT NULL,
- expire_legal bigint NOT NULL,
- coin_val bigint NOT NULL,
- coin_frac integer NOT NULL,
- fee_withdraw_val bigint NOT NULL,
- fee_withdraw_frac integer NOT NULL,
- fee_deposit_val bigint NOT NULL,
- fee_deposit_frac integer NOT NULL,
- fee_refresh_val bigint NOT NULL,
- fee_refresh_frac integer NOT NULL,
- fee_refund_val bigint NOT NULL,
- fee_refund_frac integer NOT NULL,
- CONSTRAINT denominations_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64)),
- CONSTRAINT denominations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE denominations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.denominations IS 'Main denominations table. All the valid denominations the exchange knows about.';
-
-
---
--- Name: COLUMN denominations.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.denominations.denominations_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: COLUMN denominations.denom_type; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.denominations.denom_type IS 'determines cipher type for blind signatures used with this denomination; 0 is for RSA';
-
-
---
--- Name: COLUMN denominations.age_mask; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.denominations.age_mask IS 'bitmask with the age restrictions that are being used for this denomination; 0 if denomination does not support the use of age restrictions';
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.denominations ALTER COLUMN denominations_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.denominations_denominations_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: deposit_confirmations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposit_confirmations (
- master_pub bytea NOT NULL,
- serial_id bigint NOT NULL,
- h_contract_terms bytea NOT NULL,
- h_extensions bytea NOT NULL,
- h_wire bytea NOT NULL,
- exchange_timestamp bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- wire_deadline bigint NOT NULL,
- amount_without_fee_val bigint NOT NULL,
- amount_without_fee_frac integer NOT NULL,
- coin_pub bytea NOT NULL,
- merchant_pub bytea NOT NULL,
- exchange_sig bytea NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT deposit_confirmations_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposit_confirmations_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT deposit_confirmations_exchange_sig_check CHECK ((length(exchange_sig) = 64)),
- CONSTRAINT deposit_confirmations_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposit_confirmations_h_contract_terms_check1 CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposit_confirmations_h_wire_check CHECK ((length(h_wire) = 64)),
- CONSTRAINT deposit_confirmations_master_sig_check CHECK ((length(master_sig) = 64)),
- CONSTRAINT deposit_confirmations_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-
-
---
--- Name: TABLE deposit_confirmations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposit_confirmations IS 'deposit confirmation sent to us by merchants; we must check that the exchange reported these properly.';
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.deposit_confirmations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.deposit_confirmations_serial_id_seq OWNED BY public.deposit_confirmations.serial_id;
-
-
---
--- Name: deposits; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits (
- deposit_serial_id bigint NOT NULL,
- shard bigint NOT NULL,
- coin_pub bytea NOT NULL,
- known_coin_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wallet_timestamp bigint NOT NULL,
- exchange_timestamp bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- wire_deadline bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- h_contract_terms bytea NOT NULL,
- coin_sig bytea NOT NULL,
- wire_salt bytea NOT NULL,
- wire_target_h_payto bytea,
- done boolean DEFAULT false NOT NULL,
- extension_blocked boolean DEFAULT false NOT NULL,
- extension_details_serial_id bigint,
- CONSTRAINT deposits_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposits_coin_sig_check CHECK ((length(coin_sig) = 64)),
- CONSTRAINT deposits_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposits_merchant_pub_check CHECK ((length(merchant_pub) = 32)),
- CONSTRAINT deposits_wire_salt_check CHECK ((length(wire_salt) = 16)),
- CONSTRAINT deposits_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32))
-)
-PARTITION BY HASH (coin_pub);
-
-
---
--- Name: TABLE deposits; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposits IS 'Deposits we have received and for which we need to make (aggregate) wire transfers (and manage refunds).';
-
-
---
--- Name: COLUMN deposits.shard; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.shard IS 'Used for load sharding in the materialized indices. Should be set based on merchant_pub. 64-bit value because we need an *unsigned* 32-bit value.';
-
-
---
--- Name: COLUMN deposits.known_coin_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.known_coin_id IS 'Used for garbage collection';
-
-
---
--- Name: COLUMN deposits.wire_salt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.wire_salt IS 'Salt used when hashing the payto://-URI to get the h_wire';
-
-
---
--- Name: COLUMN deposits.wire_target_h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.wire_target_h_payto IS 'Identifies the target bank account and KYC status';
-
-
---
--- Name: COLUMN deposits.done; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.done IS 'Set to TRUE once we have included this deposit in some aggregate wire transfer to the merchant';
-
-
---
--- Name: COLUMN deposits.extension_blocked; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.extension_blocked IS 'True if the aggregation of the deposit is currently blocked by some extension mechanism. Used to filter out deposits that must not be processed by the canonical deposit logic.';
-
-
---
--- Name: COLUMN deposits.extension_details_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.extension_details_serial_id IS 'References extensions table, NULL if extensions are not used';
-
-
---
--- Name: deposits_by_ready; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits_by_ready (
- wire_deadline bigint NOT NULL,
- shard bigint NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint,
- CONSTRAINT deposits_by_ready_coin_pub_check CHECK ((length(coin_pub) = 32))
-)
-PARTITION BY RANGE (wire_deadline);
-
-
---
--- Name: TABLE deposits_by_ready; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposits_by_ready IS 'Enables fast lookups for deposits_get_ready, auto-populated via TRIGGER below';
-
-
---
--- Name: deposits_by_ready_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits_by_ready_default (
- wire_deadline bigint NOT NULL,
- shard bigint NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint,
- CONSTRAINT deposits_by_ready_coin_pub_check CHECK ((length(coin_pub) = 32))
-);
-ALTER TABLE ONLY public.deposits_by_ready ATTACH PARTITION public.deposits_by_ready_default DEFAULT;
-
-
---
--- Name: deposits_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits_default (
- deposit_serial_id bigint NOT NULL,
- shard bigint NOT NULL,
- coin_pub bytea NOT NULL,
- known_coin_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wallet_timestamp bigint NOT NULL,
- exchange_timestamp bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- wire_deadline bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- h_contract_terms bytea NOT NULL,
- coin_sig bytea NOT NULL,
- wire_salt bytea NOT NULL,
- wire_target_h_payto bytea,
- done boolean DEFAULT false NOT NULL,
- extension_blocked boolean DEFAULT false NOT NULL,
- extension_details_serial_id bigint,
- CONSTRAINT deposits_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposits_coin_sig_check CHECK ((length(coin_sig) = 64)),
- CONSTRAINT deposits_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposits_merchant_pub_check CHECK ((length(merchant_pub) = 32)),
- CONSTRAINT deposits_wire_salt_check CHECK ((length(wire_salt) = 16)),
- CONSTRAINT deposits_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32))
-);
-ALTER TABLE ONLY public.deposits ATTACH PARTITION public.deposits_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.deposits ALTER COLUMN deposit_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.deposits_deposit_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: deposits_for_matching; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits_for_matching (
- refund_deadline bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint,
- CONSTRAINT deposits_for_matching_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposits_for_matching_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-)
-PARTITION BY RANGE (refund_deadline);
-
-
---
--- Name: TABLE deposits_for_matching; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposits_for_matching IS 'Enables fast lookups for deposits_iterate_matching, auto-populated via TRIGGER below';
-
-
---
--- Name: deposits_for_matching_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits_for_matching_default (
- refund_deadline bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint,
- CONSTRAINT deposits_for_matching_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposits_for_matching_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-ALTER TABLE ONLY public.deposits_for_matching ATTACH PARTITION public.deposits_for_matching_default DEFAULT;
-
-
---
--- Name: django_content_type; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_content_type (
- id integer NOT NULL,
- app_label character varying(100) NOT NULL,
- model character varying(100) NOT NULL
-);
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.django_content_type_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.django_content_type_id_seq OWNED BY public.django_content_type.id;
-
-
---
--- Name: django_migrations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_migrations (
- id bigint NOT NULL,
- app character varying(255) NOT NULL,
- name character varying(255) NOT NULL,
- applied timestamp with time zone NOT NULL
-);
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.django_migrations_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.django_migrations_id_seq OWNED BY public.django_migrations.id;
-
-
---
--- Name: django_session; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_session (
- session_key character varying(40) NOT NULL,
- session_data text NOT NULL,
- expire_date timestamp with time zone NOT NULL
-);
-
-
---
--- Name: exchange_sign_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.exchange_sign_keys (
- esk_serial bigint NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- valid_from bigint NOT NULL,
- expire_sign bigint NOT NULL,
- expire_legal bigint NOT NULL,
- CONSTRAINT exchange_sign_keys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT exchange_sign_keys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE exchange_sign_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.exchange_sign_keys IS 'Table with master public key signatures on exchange online signing keys.';
-
-
---
--- Name: COLUMN exchange_sign_keys.exchange_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.exchange_pub IS 'Public online signing key of the exchange.';
-
-
---
--- Name: COLUMN exchange_sign_keys.master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.master_sig IS 'Signature affirming the validity of the signing key of purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.';
-
-
---
--- Name: COLUMN exchange_sign_keys.valid_from; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.valid_from IS 'Time when this online signing key will first be used to sign messages.';
-
-
---
--- Name: COLUMN exchange_sign_keys.expire_sign; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.expire_sign IS 'Time when this online signing key will no longer be used to sign.';
-
-
---
--- Name: COLUMN exchange_sign_keys.expire_legal; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.expire_legal IS 'Time when this online signing key legally expires.';
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.exchange_sign_keys ALTER COLUMN esk_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.exchange_sign_keys_esk_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: extension_details; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.extension_details (
- extension_details_serial_id bigint NOT NULL,
- extension_options character varying
-)
-PARTITION BY HASH (extension_details_serial_id);
-
-
---
--- Name: TABLE extension_details; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.extension_details IS 'Extensions that were provided with deposits (not yet used).';
-
-
---
--- Name: COLUMN extension_details.extension_options; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.extension_details.extension_options IS 'JSON object with options set that the exchange needs to consider when executing a deposit. Supported details depend on the extensions supported by the exchange.';
-
-
---
--- Name: extension_details_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.extension_details_default (
- extension_details_serial_id bigint NOT NULL,
- extension_options character varying
-);
-ALTER TABLE ONLY public.extension_details ATTACH PARTITION public.extension_details_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: extension_details_extension_details_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.extension_details ALTER COLUMN extension_details_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.extension_details_extension_details_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: extensions; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.extensions (
- extension_id bigint NOT NULL,
- name character varying NOT NULL,
- config bytea
-);
-
-
---
--- Name: TABLE extensions; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.extensions IS 'Configurations of the activated extensions';
-
-
---
--- Name: COLUMN extensions.name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.extensions.name IS 'Name of the extension';
-
-
---
--- Name: COLUMN extensions.config; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.extensions.config IS 'Configuration of the extension as JSON-blob, maybe NULL';
-
-
---
--- Name: extensions_extension_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.extensions ALTER COLUMN extension_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.extensions_extension_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: global_fee; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.global_fee (
- global_fee_serial bigint NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- history_fee_val bigint NOT NULL,
- history_fee_frac integer NOT NULL,
- kyc_fee_val bigint NOT NULL,
- kyc_fee_frac integer NOT NULL,
- account_fee_val bigint NOT NULL,
- account_fee_frac integer NOT NULL,
- purse_fee_val bigint NOT NULL,
- purse_fee_frac integer NOT NULL,
- purse_timeout bigint NOT NULL,
- kyc_timeout bigint NOT NULL,
- history_expiration bigint NOT NULL,
- purse_account_limit integer NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT global_fee_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE global_fee; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.global_fee IS 'list of the global fees of this exchange, by date';
-
-
---
--- Name: COLUMN global_fee.global_fee_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.global_fee.global_fee_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: global_fee_global_fee_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.global_fee ALTER COLUMN global_fee_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.global_fee_global_fee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: history_requests; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.history_requests (
- reserve_pub bytea NOT NULL,
- request_timestamp bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- history_fee_val bigint NOT NULL,
- history_fee_frac integer NOT NULL,
- CONSTRAINT history_requests_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT history_requests_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (reserve_pub);
-
-
---
--- Name: TABLE history_requests; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.history_requests IS 'Paid history requests issued by a client against a reserve';
-
-
---
--- Name: COLUMN history_requests.request_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.history_requests.request_timestamp IS 'When was the history request made';
-
-
---
--- Name: COLUMN history_requests.reserve_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.history_requests.reserve_sig IS 'Signature approving payment for the history request';
-
-
---
--- Name: COLUMN history_requests.history_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.history_requests.history_fee_val IS 'History fee approved by the signature';
-
-
---
--- Name: history_requests_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.history_requests_default (
- reserve_pub bytea NOT NULL,
- request_timestamp bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- history_fee_val bigint NOT NULL,
- history_fee_frac integer NOT NULL,
- CONSTRAINT history_requests_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT history_requests_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.history_requests ATTACH PARTITION public.history_requests_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: known_coins; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.known_coins (
- known_coin_id bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- coin_pub bytea NOT NULL,
- age_commitment_hash bytea,
- denom_sig bytea NOT NULL,
- remaining_val bigint NOT NULL,
- remaining_frac integer NOT NULL,
- CONSTRAINT known_coins_age_commitment_hash_check CHECK ((length(age_commitment_hash) = 32)),
- CONSTRAINT known_coins_coin_pub_check CHECK ((length(coin_pub) = 32))
-)
-PARTITION BY HASH (coin_pub);
-
-
---
--- Name: TABLE known_coins; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.known_coins IS 'information about coins and their signatures, so we do not have to store the signatures more than once if a coin is involved in multiple operations';
-
-
---
--- Name: COLUMN known_coins.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.denominations_serial IS 'Denomination of the coin, determines the value of the original coin and applicable fees for coin-specific operations.';
-
-
---
--- Name: COLUMN known_coins.coin_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.coin_pub IS 'EdDSA public key of the coin';
-
-
---
--- Name: COLUMN known_coins.age_commitment_hash; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.age_commitment_hash IS 'Optional hash of the age commitment for age restrictions as per DD 24 (active if denom_type has the respective bit set)';
-
-
---
--- Name: COLUMN known_coins.denom_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.denom_sig IS 'This is the signature of the exchange that affirms that the coin is a valid coin. The specific signature type depends on denom_type of the denomination.';
-
-
---
--- Name: COLUMN known_coins.remaining_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.remaining_val IS 'Value of the coin that remains to be spent';
-
-
---
--- Name: known_coins_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.known_coins_default (
- known_coin_id bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- coin_pub bytea NOT NULL,
- age_commitment_hash bytea,
- denom_sig bytea NOT NULL,
- remaining_val bigint NOT NULL,
- remaining_frac integer NOT NULL,
- CONSTRAINT known_coins_age_commitment_hash_check CHECK ((length(age_commitment_hash) = 32)),
- CONSTRAINT known_coins_coin_pub_check CHECK ((length(coin_pub) = 32))
-);
-ALTER TABLE ONLY public.known_coins ATTACH PARTITION public.known_coins_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.known_coins ALTER COLUMN known_coin_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.known_coins_known_coin_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_accounts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_accounts (
- account_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- h_wire bytea NOT NULL,
- salt bytea NOT NULL,
- payto_uri character varying NOT NULL,
- active boolean NOT NULL,
- CONSTRAINT merchant_accounts_h_wire_check CHECK ((length(h_wire) = 64)),
- CONSTRAINT merchant_accounts_salt_check CHECK ((length(salt) = 16))
-);
-
-
---
--- Name: TABLE merchant_accounts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_accounts IS 'bank accounts of the instances';
-
-
---
--- Name: COLUMN merchant_accounts.h_wire; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.h_wire IS 'salted hash of payto_uri';
-
-
---
--- Name: COLUMN merchant_accounts.salt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.salt IS 'salt used when hashing payto_uri into h_wire';
-
-
---
--- Name: COLUMN merchant_accounts.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.payto_uri IS 'payto URI of a merchant bank account';
-
-
---
--- Name: COLUMN merchant_accounts.active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.active IS 'true if we actively use this bank account, false if it is just kept around for older contracts to refer to';
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_accounts ALTER COLUMN account_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_accounts_account_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_contract_terms; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_contract_terms (
- order_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- order_id character varying NOT NULL,
- contract_terms bytea NOT NULL,
- h_contract_terms bytea NOT NULL,
- creation_time bigint NOT NULL,
- pay_deadline bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- paid boolean DEFAULT false NOT NULL,
- wired boolean DEFAULT false NOT NULL,
- fulfillment_url character varying,
- session_id character varying DEFAULT ''::character varying NOT NULL,
- claim_token bytea NOT NULL,
- CONSTRAINT merchant_contract_terms_claim_token_check CHECK ((length(claim_token) = 16)),
- CONSTRAINT merchant_contract_terms_h_contract_terms_check CHECK ((length(h_contract_terms) = 64))
-);
-
-
---
--- Name: TABLE merchant_contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_contract_terms IS 'Contracts are orders that have been claimed by a wallet';
-
-
---
--- Name: COLUMN merchant_contract_terms.merchant_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.merchant_serial IS 'Identifies the instance offering the contract';
-
-
---
--- Name: COLUMN merchant_contract_terms.order_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.order_id IS 'Not a foreign key into merchant_orders because paid contracts persist after expiration';
-
-
---
--- Name: COLUMN merchant_contract_terms.contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.contract_terms IS 'These contract terms include the wallet nonce';
-
-
---
--- Name: COLUMN merchant_contract_terms.h_contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.h_contract_terms IS 'Hash over contract_terms';
-
-
---
--- Name: COLUMN merchant_contract_terms.pay_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.pay_deadline IS 'How long is the offer valid. After this time, the order can be garbage collected';
-
-
---
--- Name: COLUMN merchant_contract_terms.refund_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.refund_deadline IS 'By what times do refunds have to be approved (useful to reject refund requests)';
-
-
---
--- Name: COLUMN merchant_contract_terms.paid; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.paid IS 'true implies the customer paid for this contract; order should be DELETEd from merchant_orders once paid is set to release merchant_order_locks; paid remains true even if the payment was later refunded';
-
-
---
--- Name: COLUMN merchant_contract_terms.wired; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.wired IS 'true implies the exchange wired us the full amount for all non-refunded payments under this contract';
-
-
---
--- Name: COLUMN merchant_contract_terms.fulfillment_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.fulfillment_url IS 'also included in contract_terms, but we need it here to SELECT on it during repurchase detection; can be NULL if the contract has no fulfillment URL';
-
-
---
--- Name: COLUMN merchant_contract_terms.session_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.session_id IS 'last session_id from we confirmed the paying client to use, empty string for none';
-
-
---
--- Name: COLUMN merchant_contract_terms.claim_token; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.claim_token IS 'Token optionally used to access the status of the order. All zeros (not NULL) if not used';
-
-
---
--- Name: merchant_deposit_to_transfer; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_deposit_to_transfer (
- deposit_serial bigint NOT NULL,
- coin_contribution_value_val bigint NOT NULL,
- coin_contribution_value_frac integer NOT NULL,
- credit_serial bigint NOT NULL,
- execution_time bigint NOT NULL,
- signkey_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- CONSTRAINT merchant_deposit_to_transfer_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_deposit_to_transfer; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_deposit_to_transfer IS 'Mapping of deposits to (possibly unconfirmed) wire transfers; NOTE: not used yet';
-
-
---
--- Name: COLUMN merchant_deposit_to_transfer.execution_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposit_to_transfer.execution_time IS 'Execution time as claimed by the exchange, roughly matches time seen by merchant';
-
-
---
--- Name: merchant_deposits; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_deposits (
- deposit_serial bigint NOT NULL,
- order_serial bigint,
- deposit_timestamp bigint NOT NULL,
- coin_pub bytea NOT NULL,
- exchange_url character varying NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- deposit_fee_val bigint NOT NULL,
- deposit_fee_frac integer NOT NULL,
- refund_fee_val bigint NOT NULL,
- refund_fee_frac integer NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- signkey_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- account_serial bigint NOT NULL,
- CONSTRAINT merchant_deposits_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT merchant_deposits_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_deposits; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_deposits IS 'Refunds approved by the merchant (backoffice) logic, excludes abort refunds';
-
-
---
--- Name: COLUMN merchant_deposits.deposit_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.deposit_timestamp IS 'Time when the exchange generated the deposit confirmation';
-
-
---
--- Name: COLUMN merchant_deposits.wire_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.wire_fee_val IS 'We MAY want to see if we should try to get this via merchant_exchange_wire_fees (not sure, may be too complicated with the date range, etc.)';
-
-
---
--- Name: COLUMN merchant_deposits.signkey_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.signkey_serial IS 'Online signing key of the exchange on the deposit confirmation';
-
-
---
--- Name: COLUMN merchant_deposits.exchange_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.exchange_sig IS 'Signature of the exchange over the deposit confirmation';
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_deposits ALTER COLUMN deposit_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_deposits_deposit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_exchange_signing_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_exchange_signing_keys (
- signkey_serial bigint NOT NULL,
- master_pub bytea NOT NULL,
- exchange_pub bytea NOT NULL,
- start_date bigint NOT NULL,
- expire_date bigint NOT NULL,
- end_date bigint NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT merchant_exchange_signing_keys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT merchant_exchange_signing_keys_master_pub_check CHECK ((length(master_pub) = 32)),
- CONSTRAINT merchant_exchange_signing_keys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_exchange_signing_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_exchange_signing_keys IS 'Here we store proofs of the exchange online signing keys being signed by the exchange master key';
-
-
---
--- Name: COLUMN merchant_exchange_signing_keys.master_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_exchange_signing_keys.master_pub IS 'Master public key of the exchange with these online signing keys';
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_exchange_signing_keys ALTER COLUMN signkey_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_exchange_signing_keys_signkey_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_exchange_wire_fees; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_exchange_wire_fees (
- wirefee_serial bigint NOT NULL,
- master_pub bytea NOT NULL,
- h_wire_method bytea NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT merchant_exchange_wire_fees_h_wire_method_check CHECK ((length(h_wire_method) = 64)),
- CONSTRAINT merchant_exchange_wire_fees_master_pub_check CHECK ((length(master_pub) = 32)),
- CONSTRAINT merchant_exchange_wire_fees_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_exchange_wire_fees; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_exchange_wire_fees IS 'Here we store proofs of the wire fee structure of the various exchanges';
-
-
---
--- Name: COLUMN merchant_exchange_wire_fees.master_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_exchange_wire_fees.master_pub IS 'Master public key of the exchange with these wire fees';
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_exchange_wire_fees ALTER COLUMN wirefee_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_exchange_wire_fees_wirefee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_instances; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_instances (
- merchant_serial bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- auth_hash bytea,
- auth_salt bytea,
- merchant_id character varying NOT NULL,
- merchant_name character varying NOT NULL,
- address bytea NOT NULL,
- jurisdiction bytea NOT NULL,
- default_max_deposit_fee_val bigint NOT NULL,
- default_max_deposit_fee_frac integer NOT NULL,
- default_max_wire_fee_val bigint NOT NULL,
- default_max_wire_fee_frac integer NOT NULL,
- default_wire_fee_amortization integer NOT NULL,
- default_wire_transfer_delay bigint NOT NULL,
- default_pay_delay bigint NOT NULL,
- CONSTRAINT merchant_instances_auth_hash_check CHECK ((length(auth_hash) = 64)),
- CONSTRAINT merchant_instances_auth_salt_check CHECK ((length(auth_salt) = 32)),
- CONSTRAINT merchant_instances_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-
-
---
--- Name: TABLE merchant_instances; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_instances IS 'all the instances supported by this backend';
-
-
---
--- Name: COLUMN merchant_instances.auth_hash; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.auth_hash IS 'hash used for merchant back office Authorization, NULL for no check';
-
-
---
--- Name: COLUMN merchant_instances.auth_salt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.auth_salt IS 'salt to use when hashing Authorization header before comparing with auth_hash';
-
-
---
--- Name: COLUMN merchant_instances.merchant_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.merchant_id IS 'identifier of the merchant as used in the base URL (required)';
-
-
---
--- Name: COLUMN merchant_instances.merchant_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.merchant_name IS 'legal name of the merchant as a simple string (required)';
-
-
---
--- Name: COLUMN merchant_instances.address; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.address IS 'physical address of the merchant as a Location in JSON format (required)';
-
-
---
--- Name: COLUMN merchant_instances.jurisdiction; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.jurisdiction IS 'jurisdiction of the merchant as a Location in JSON format (required)';
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_instances ALTER COLUMN merchant_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_instances_merchant_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_inventory; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_inventory (
- product_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- product_id character varying NOT NULL,
- description character varying NOT NULL,
- description_i18n bytea NOT NULL,
- unit character varying NOT NULL,
- image bytea NOT NULL,
- taxes bytea NOT NULL,
- price_val bigint NOT NULL,
- price_frac integer NOT NULL,
- total_stock bigint NOT NULL,
- total_sold bigint DEFAULT 0 NOT NULL,
- total_lost bigint DEFAULT 0 NOT NULL,
- address bytea NOT NULL,
- next_restock bigint NOT NULL,
- minimum_age integer DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE merchant_inventory; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_inventory IS 'products offered by the merchant (may be incomplete, frontend can override)';
-
-
---
--- Name: COLUMN merchant_inventory.description; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.description IS 'Human-readable product description';
-
-
---
--- Name: COLUMN merchant_inventory.description_i18n; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.description_i18n IS 'JSON map from IETF BCP 47 language tags to localized descriptions';
-
-
---
--- Name: COLUMN merchant_inventory.unit; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.unit IS 'Unit of sale for the product (liters, kilograms, packages)';
-
-
---
--- Name: COLUMN merchant_inventory.image; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.image IS 'NOT NULL, but can be 0 bytes; must contain an ImageDataUrl';
-
-
---
--- Name: COLUMN merchant_inventory.taxes; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.taxes IS 'JSON array containing taxes the merchant pays, must be JSON, but can be just "[]"';
-
-
---
--- Name: COLUMN merchant_inventory.price_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.price_val IS 'Current price of one unit of the product';
-
-
---
--- Name: COLUMN merchant_inventory.total_stock; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_stock IS 'A value of -1 is used for unlimited (electronic good), may never be lowered';
-
-
---
--- Name: COLUMN merchant_inventory.total_sold; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_sold IS 'Number of products sold, must be below total_stock, non-negative, may never be lowered';
-
-
---
--- Name: COLUMN merchant_inventory.total_lost; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_lost IS 'Number of products that used to be in stock but were lost (spoiled, damaged), may never be lowered; total_stock >= total_sold + total_lost must always hold';
-
-
---
--- Name: COLUMN merchant_inventory.address; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.address IS 'JSON formatted Location of where the product is stocked';
-
-
---
--- Name: COLUMN merchant_inventory.next_restock; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.next_restock IS 'GNUnet absolute time indicating when the next restock is expected. 0 for unknown.';
-
-
---
--- Name: COLUMN merchant_inventory.minimum_age; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.minimum_age IS 'Minimum age of the customer in years, to be used if an exchange supports the age restriction extension.';
-
-
---
--- Name: merchant_inventory_locks; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_inventory_locks (
- product_serial bigint NOT NULL,
- lock_uuid bytea NOT NULL,
- total_locked bigint NOT NULL,
- expiration bigint NOT NULL,
- CONSTRAINT merchant_inventory_locks_lock_uuid_check CHECK ((length(lock_uuid) = 16))
-);
-
-
---
--- Name: TABLE merchant_inventory_locks; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_inventory_locks IS 'locks on inventory helt by shopping carts; note that locks MAY not be honored if merchants increase total_lost for inventory';
-
-
---
--- Name: COLUMN merchant_inventory_locks.total_locked; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory_locks.total_locked IS 'how many units of the product does this lock reserve';
-
-
---
--- Name: COLUMN merchant_inventory_locks.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory_locks.expiration IS 'when does this lock automatically expire (if no order is created)';
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_inventory ALTER COLUMN product_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_inventory_product_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_keys (
- merchant_priv bytea NOT NULL,
- merchant_serial bigint NOT NULL,
- CONSTRAINT merchant_keys_merchant_priv_check CHECK ((length(merchant_priv) = 32))
-);
-
-
---
--- Name: TABLE merchant_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_keys IS 'private keys of instances that have not been deleted';
-
-
---
--- Name: merchant_kyc; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_kyc (
- kyc_serial_id bigint NOT NULL,
- kyc_timestamp bigint NOT NULL,
- kyc_ok boolean DEFAULT false NOT NULL,
- exchange_sig bytea,
- exchange_pub bytea,
- exchange_kyc_serial bigint DEFAULT 0 NOT NULL,
- account_serial bigint NOT NULL,
- exchange_url character varying NOT NULL,
- CONSTRAINT merchant_kyc_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT merchant_kyc_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_kyc; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_kyc IS 'Status of the KYC process of a merchant account at an exchange';
-
-
---
--- Name: COLUMN merchant_kyc.kyc_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.kyc_timestamp IS 'Last time we checked our KYC status at the exchange. Useful to re-check if the status is very stale. Also the timestamp used for the exchange signature (if present).';
-
-
---
--- Name: COLUMN merchant_kyc.kyc_ok; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.kyc_ok IS 'true if the KYC check was passed successfully';
-
-
---
--- Name: COLUMN merchant_kyc.exchange_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.exchange_sig IS 'signature of the exchange affirming the KYC passed (or NULL if exchange does not require KYC or not kyc_ok)';
-
-
---
--- Name: COLUMN merchant_kyc.exchange_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.exchange_pub IS 'public key used with exchange_sig (or NULL if exchange_sig is NULL)';
-
-
---
--- Name: COLUMN merchant_kyc.exchange_kyc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.exchange_kyc_serial IS 'Number to use in the KYC-endpoints of the exchange to check the KYC status or begin the KYC process. 0 if we do not know it yet.';
-
-
---
--- Name: COLUMN merchant_kyc.account_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.account_serial IS 'Which bank account of the merchant is the KYC status for';
-
-
---
--- Name: COLUMN merchant_kyc.exchange_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_kyc.exchange_url IS 'Which exchange base URL is this KYC status valid for';
-
-
---
--- Name: merchant_kyc_kyc_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_kyc ALTER COLUMN kyc_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_kyc_kyc_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_order_locks; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_order_locks (
- product_serial bigint NOT NULL,
- total_locked bigint NOT NULL,
- order_serial bigint NOT NULL
-);
-
-
---
--- Name: TABLE merchant_order_locks; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_order_locks IS 'locks on orders awaiting claim and payment; note that locks MAY not be honored if merchants increase total_lost for inventory';
-
-
---
--- Name: COLUMN merchant_order_locks.total_locked; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_order_locks.total_locked IS 'how many units of the product does this lock reserve';
-
-
---
--- Name: merchant_orders; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_orders (
- order_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- order_id character varying NOT NULL,
- claim_token bytea NOT NULL,
- h_post_data bytea NOT NULL,
- pay_deadline bigint NOT NULL,
- creation_time bigint NOT NULL,
- contract_terms bytea NOT NULL,
- CONSTRAINT merchant_orders_claim_token_check CHECK ((length(claim_token) = 16)),
- CONSTRAINT merchant_orders_h_post_data_check CHECK ((length(h_post_data) = 64))
-);
-
-
---
--- Name: TABLE merchant_orders; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_orders IS 'Orders we offered to a customer, but that have not yet been claimed';
-
-
---
--- Name: COLUMN merchant_orders.merchant_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.merchant_serial IS 'Identifies the instance offering the contract';
-
-
---
--- Name: COLUMN merchant_orders.claim_token; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.claim_token IS 'Token optionally used to authorize the wallet to claim the order. All zeros (not NULL) if not used';
-
-
---
--- Name: COLUMN merchant_orders.h_post_data; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.h_post_data IS 'Hash of the POST request that created this order, for idempotency checks';
-
-
---
--- Name: COLUMN merchant_orders.pay_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.pay_deadline IS 'How long is the offer valid. After this time, the order can be garbage collected';
-
-
---
--- Name: COLUMN merchant_orders.contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.contract_terms IS 'Claiming changes the contract_terms, hence we have no hash of the terms in this table';
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_orders ALTER COLUMN order_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_orders_order_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_refund_proofs; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_refund_proofs (
- refund_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- signkey_serial bigint NOT NULL,
- CONSTRAINT merchant_refund_proofs_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_refund_proofs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_refund_proofs IS 'Refunds confirmed by the exchange (not all approved refunds are grabbed by the wallet)';
-
-
---
--- Name: merchant_refunds; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_refunds (
- refund_serial bigint NOT NULL,
- order_serial bigint NOT NULL,
- rtransaction_id bigint NOT NULL,
- refund_timestamp bigint NOT NULL,
- coin_pub bytea NOT NULL,
- reason character varying NOT NULL,
- refund_amount_val bigint NOT NULL,
- refund_amount_frac integer NOT NULL
-);
-
-
---
--- Name: COLUMN merchant_refunds.rtransaction_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_refunds.rtransaction_id IS 'Needed for uniqueness in case a refund is increased for the same order';
-
-
---
--- Name: COLUMN merchant_refunds.refund_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_refunds.refund_timestamp IS 'Needed for grouping of refunds in the wallet UI; has no semantics in the protocol (only for UX), but should be from the time when the merchant internally approved the refund';
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_refunds ALTER COLUMN refund_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_refunds_refund_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_tip_pickup_signatures; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_pickup_signatures (
- pickup_serial bigint NOT NULL,
- coin_offset integer NOT NULL,
- blind_sig bytea NOT NULL
-);
-
-
---
--- Name: TABLE merchant_tip_pickup_signatures; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_pickup_signatures IS 'blind signatures we got from the exchange during the tip pickup';
-
-
---
--- Name: merchant_tip_pickups; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_pickups (
- pickup_serial bigint NOT NULL,
- tip_serial bigint NOT NULL,
- pickup_id bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT merchant_tip_pickups_pickup_id_check CHECK ((length(pickup_id) = 64))
-);
-
-
---
--- Name: TABLE merchant_tip_pickups; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_pickups IS 'tips that have been picked up';
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_tip_pickups ALTER COLUMN pickup_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_tip_pickups_pickup_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_tip_reserve_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_reserve_keys (
- reserve_serial bigint NOT NULL,
- reserve_priv bytea NOT NULL,
- exchange_url character varying NOT NULL,
- payto_uri character varying,
- CONSTRAINT merchant_tip_reserve_keys_reserve_priv_check CHECK ((length(reserve_priv) = 32))
-);
-
-
---
--- Name: COLUMN merchant_tip_reserve_keys.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserve_keys.payto_uri IS 'payto:// URI used to fund the reserve, may be NULL once reserve is funded';
-
-
---
--- Name: merchant_tip_reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_reserves (
- reserve_serial bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- merchant_serial bigint NOT NULL,
- creation_time bigint NOT NULL,
- expiration bigint NOT NULL,
- merchant_initial_balance_val bigint NOT NULL,
- merchant_initial_balance_frac integer NOT NULL,
- exchange_initial_balance_val bigint DEFAULT 0 NOT NULL,
- exchange_initial_balance_frac integer DEFAULT 0 NOT NULL,
- tips_committed_val bigint DEFAULT 0 NOT NULL,
- tips_committed_frac integer DEFAULT 0 NOT NULL,
- tips_picked_up_val bigint DEFAULT 0 NOT NULL,
- tips_picked_up_frac integer DEFAULT 0 NOT NULL,
- CONSTRAINT merchant_tip_reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- Name: TABLE merchant_tip_reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_reserves IS 'private keys of reserves that have not been deleted';
-
-
---
--- Name: COLUMN merchant_tip_reserves.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.expiration IS 'FIXME: EXCHANGE API needs to tell us when reserves close if we are to compute this';
-
-
---
--- Name: COLUMN merchant_tip_reserves.merchant_initial_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.merchant_initial_balance_val IS 'Set to the initial balance the merchant told us when creating the reserve';
-
-
---
--- Name: COLUMN merchant_tip_reserves.exchange_initial_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.exchange_initial_balance_val IS 'Set to the initial balance the exchange told us when we queried the reserve status';
-
-
---
--- Name: COLUMN merchant_tip_reserves.tips_committed_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.tips_committed_val IS 'Amount of outstanding approved tips that have not been picked up';
-
-
---
--- Name: COLUMN merchant_tip_reserves.tips_picked_up_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.tips_picked_up_val IS 'Total amount tips that have been picked up from this reserve';
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_tip_reserves ALTER COLUMN reserve_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_tip_reserves_reserve_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_tips; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tips (
- tip_serial bigint NOT NULL,
- reserve_serial bigint NOT NULL,
- tip_id bytea NOT NULL,
- justification character varying NOT NULL,
- next_url character varying NOT NULL,
- expiration bigint NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- picked_up_val bigint DEFAULT 0 NOT NULL,
- picked_up_frac integer DEFAULT 0 NOT NULL,
- was_picked_up boolean DEFAULT false NOT NULL,
- CONSTRAINT merchant_tips_tip_id_check CHECK ((length(tip_id) = 64))
-);
-
-
---
--- Name: TABLE merchant_tips; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tips IS 'tips that have been authorized';
-
-
---
--- Name: COLUMN merchant_tips.reserve_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.reserve_serial IS 'Reserve from which this tip is funded';
-
-
---
--- Name: COLUMN merchant_tips.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.expiration IS 'by when does the client have to pick up the tip';
-
-
---
--- Name: COLUMN merchant_tips.amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.amount_val IS 'total transaction cost for all coins including withdraw fees';
-
-
---
--- Name: COLUMN merchant_tips.picked_up_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.picked_up_val IS 'Tip amount left to be picked up';
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_tips ALTER COLUMN tip_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_tips_tip_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: merchant_transfer_signatures; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfer_signatures (
- credit_serial bigint NOT NULL,
- signkey_serial bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- credit_amount_val bigint NOT NULL,
- credit_amount_frac integer NOT NULL,
- execution_time bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- CONSTRAINT merchant_transfer_signatures_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_transfer_signatures; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfer_signatures IS 'table represents the main information returned from the /transfer request to the exchange.';
-
-
---
--- Name: COLUMN merchant_transfer_signatures.credit_amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_signatures.credit_amount_val IS 'actual value of the (aggregated) wire transfer, excluding the wire fee, according to the exchange';
-
-
---
--- Name: COLUMN merchant_transfer_signatures.execution_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_signatures.execution_time IS 'Execution time as claimed by the exchange, roughly matches time seen by merchant';
-
-
---
--- Name: merchant_transfer_to_coin; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfer_to_coin (
- deposit_serial bigint NOT NULL,
- credit_serial bigint NOT NULL,
- offset_in_exchange_list bigint NOT NULL,
- exchange_deposit_value_val bigint NOT NULL,
- exchange_deposit_value_frac integer NOT NULL,
- exchange_deposit_fee_val bigint NOT NULL,
- exchange_deposit_fee_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE merchant_transfer_to_coin; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfer_to_coin IS 'Mapping of (credit) transfers to (deposited) coins';
-
-
---
--- Name: COLUMN merchant_transfer_to_coin.exchange_deposit_value_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_to_coin.exchange_deposit_value_val IS 'Deposit value as claimed by the exchange, should match our values in merchant_deposits minus refunds';
-
-
---
--- Name: COLUMN merchant_transfer_to_coin.exchange_deposit_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_to_coin.exchange_deposit_fee_val IS 'Deposit value as claimed by the exchange, should match our values in merchant_deposits';
-
-
---
--- Name: merchant_transfers; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfers (
- credit_serial bigint NOT NULL,
- exchange_url character varying NOT NULL,
- wtid bytea,
- credit_amount_val bigint NOT NULL,
- credit_amount_frac integer NOT NULL,
- account_serial bigint NOT NULL,
- verified boolean DEFAULT false NOT NULL,
- confirmed boolean DEFAULT false NOT NULL,
- CONSTRAINT merchant_transfers_wtid_check CHECK ((length(wtid) = 32))
-);
-
-
---
--- Name: TABLE merchant_transfers; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfers IS 'table represents the information provided by the (trusted) merchant about incoming wire transfers';
-
-
---
--- Name: COLUMN merchant_transfers.credit_amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.credit_amount_val IS 'actual value of the (aggregated) wire transfer, excluding the wire fee, according to the merchant';
-
-
---
--- Name: COLUMN merchant_transfers.verified; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.verified IS 'true once we got an acceptable response from the exchange for this transfer';
-
-
---
--- Name: COLUMN merchant_transfers.confirmed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.confirmed IS 'true once the merchant confirmed that this transfer was received';
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.merchant_transfers ALTER COLUMN credit_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.merchant_transfers_credit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: partner_accounts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.partner_accounts (
- payto_uri character varying NOT NULL,
- partner_serial_id bigint,
- partner_master_sig bytea,
- last_seen bigint NOT NULL,
- CONSTRAINT partner_accounts_partner_master_sig_check CHECK ((length(partner_master_sig) = 64))
-);
-
-
---
--- Name: TABLE partner_accounts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.partner_accounts IS 'Table with bank accounts of the partner exchange. Entries never expire as we need to remember the signature for the auditor.';
-
-
---
--- Name: COLUMN partner_accounts.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partner_accounts.payto_uri IS 'payto URI (RFC 8905) with the bank account of the partner exchange.';
-
-
---
--- Name: COLUMN partner_accounts.partner_master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partner_accounts.partner_master_sig IS 'Signature of purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS by the partner master public key';
-
-
---
--- Name: COLUMN partner_accounts.last_seen; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partner_accounts.last_seen IS 'Last time we saw this account as being active at the partner exchange. Used to select the most recent entry, and to detect when we should check again.';
-
-
---
--- Name: partners; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.partners (
- partner_serial_id bigint NOT NULL,
- partner_master_pub bytea NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- wad_frequency bigint NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- master_sig bytea NOT NULL,
- partner_base_url text NOT NULL,
- CONSTRAINT partners_master_sig_check CHECK ((length(master_sig) = 64)),
- CONSTRAINT partners_partner_master_pub_check CHECK ((length(partner_master_pub) = 32))
-);
-
-
---
--- Name: TABLE partners; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.partners IS 'exchanges we do wad transfers to';
-
-
---
--- Name: COLUMN partners.partner_master_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.partner_master_pub IS 'offline master public key of the partner';
-
-
---
--- Name: COLUMN partners.start_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.start_date IS 'starting date of the partnership';
-
-
---
--- Name: COLUMN partners.end_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.end_date IS 'end date of the partnership';
-
-
---
--- Name: COLUMN partners.wad_frequency; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.wad_frequency IS 'how often do we promise to do wad transfers';
-
-
---
--- Name: COLUMN partners.wad_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.wad_fee_val IS 'how high is the fee for a wallet to be added to a wad to this partner';
-
-
---
--- Name: COLUMN partners.master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.master_sig IS 'signature of our master public key affirming the partnership, of purpose TALER_SIGNATURE_MASTER_PARTNER_DETAILS';
-
-
---
--- Name: COLUMN partners.partner_base_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.partners.partner_base_url IS 'base URL of the REST API for this partner';
-
-
---
--- Name: partners_partner_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.partners ALTER COLUMN partner_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.partners_partner_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: prewire; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.prewire (
- prewire_uuid bigint NOT NULL,
- wire_method text NOT NULL,
- finished boolean DEFAULT false NOT NULL,
- failed boolean DEFAULT false NOT NULL,
- buf bytea NOT NULL
-)
-PARTITION BY HASH (prewire_uuid);
-
-
---
--- Name: TABLE prewire; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.prewire IS 'pre-commit data for wire transfers we are about to execute';
-
-
---
--- Name: COLUMN prewire.finished; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.finished IS 'set to TRUE once bank confirmed receiving the wire transfer request';
-
-
---
--- Name: COLUMN prewire.failed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.failed IS 'set to TRUE if the bank responded with a non-transient failure to our transfer request';
-
-
---
--- Name: COLUMN prewire.buf; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.buf IS 'serialized data to send to the bank to execute the wire transfer';
-
-
---
--- Name: prewire_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.prewire_default (
- prewire_uuid bigint NOT NULL,
- wire_method text NOT NULL,
- finished boolean DEFAULT false NOT NULL,
- failed boolean DEFAULT false NOT NULL,
- buf bytea NOT NULL
-);
-ALTER TABLE ONLY public.prewire ATTACH PARTITION public.prewire_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.prewire ALTER COLUMN prewire_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.prewire_prewire_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: purse_deposits; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_deposits (
- purse_deposit_serial_id bigint NOT NULL,
- partner_serial_id bigint,
- purse_pub bytea NOT NULL,
- coin_pub bytea NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- coin_sig bytea NOT NULL,
- CONSTRAINT purse_deposits_coin_sig_check CHECK ((length(coin_sig) = 64)),
- CONSTRAINT purse_deposits_purse_pub_check CHECK ((length(purse_pub) = 32))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE purse_deposits; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.purse_deposits IS 'Requests depositing coins into a purse';
-
-
---
--- Name: COLUMN purse_deposits.partner_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_deposits.partner_serial_id IS 'identifies the partner exchange, NULL in case the target purse lives at this exchange';
-
-
---
--- Name: COLUMN purse_deposits.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_deposits.purse_pub IS 'Public key of the purse';
-
-
---
--- Name: COLUMN purse_deposits.coin_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_deposits.coin_pub IS 'Public key of the coin being deposited';
-
-
---
--- Name: COLUMN purse_deposits.amount_with_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_deposits.amount_with_fee_val IS 'Total amount being deposited';
-
-
---
--- Name: COLUMN purse_deposits.coin_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_deposits.coin_sig IS 'Signature of the coin affirming the deposit into the purse, of type TALER_SIGNATURE_PURSE_DEPOSIT';
-
-
---
--- Name: purse_deposits_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_deposits_default (
- purse_deposit_serial_id bigint NOT NULL,
- partner_serial_id bigint,
- purse_pub bytea NOT NULL,
- coin_pub bytea NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- coin_sig bytea NOT NULL,
- CONSTRAINT purse_deposits_coin_sig_check CHECK ((length(coin_sig) = 64)),
- CONSTRAINT purse_deposits_purse_pub_check CHECK ((length(purse_pub) = 32))
-);
-ALTER TABLE ONLY public.purse_deposits ATTACH PARTITION public.purse_deposits_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: purse_deposits_purse_deposit_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.purse_deposits ALTER COLUMN purse_deposit_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.purse_deposits_purse_deposit_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: purse_merges; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_merges (
- purse_merge_request_serial_id bigint NOT NULL,
- partner_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- merge_sig bytea NOT NULL,
- merge_timestamp bigint NOT NULL,
- CONSTRAINT purse_merges_merge_sig_check CHECK ((length(merge_sig) = 64)),
- CONSTRAINT purse_merges_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT purse_merges_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE purse_merges; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.purse_merges IS 'Merge requests where a purse-owner requested merging the purse into the account';
-
-
---
--- Name: COLUMN purse_merges.partner_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_merges.partner_serial_id IS 'identifies the partner exchange, NULL in case the target reserve lives at this exchange';
-
-
---
--- Name: COLUMN purse_merges.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_merges.reserve_pub IS 'public key of the target reserve';
-
-
---
--- Name: COLUMN purse_merges.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_merges.purse_pub IS 'public key of the purse';
-
-
---
--- Name: COLUMN purse_merges.merge_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_merges.merge_sig IS 'signature by the purse private key affirming the merge, of type TALER_SIGNATURE_WALLET_PURSE_MERGE';
-
-
---
--- Name: COLUMN purse_merges.merge_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_merges.merge_timestamp IS 'when was the merge message signed';
-
-
---
--- Name: purse_merges_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_merges_default (
- purse_merge_request_serial_id bigint NOT NULL,
- partner_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- merge_sig bytea NOT NULL,
- merge_timestamp bigint NOT NULL,
- CONSTRAINT purse_merges_merge_sig_check CHECK ((length(merge_sig) = 64)),
- CONSTRAINT purse_merges_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT purse_merges_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-ALTER TABLE ONLY public.purse_merges ATTACH PARTITION public.purse_merges_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: purse_merges_purse_merge_request_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.purse_merges ALTER COLUMN purse_merge_request_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.purse_merges_purse_merge_request_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: purse_requests; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_requests (
- purse_requests_serial_id bigint NOT NULL,
- purse_pub bytea NOT NULL,
- merge_pub bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- h_contract_terms bytea NOT NULL,
- age_limit integer NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- balance_val bigint DEFAULT 0 NOT NULL,
- balance_frac integer DEFAULT 0 NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT purse_requests_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT purse_requests_merge_pub_check CHECK ((length(merge_pub) = 32)),
- CONSTRAINT purse_requests_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT purse_requests_purse_sig_check CHECK ((length(purse_sig) = 64))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE purse_requests; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.purse_requests IS 'Requests establishing purses, associating them with a contract but without a target reserve';
-
-
---
--- Name: COLUMN purse_requests.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.purse_pub IS 'Public key of the purse';
-
-
---
--- Name: COLUMN purse_requests.purse_expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.purse_expiration IS 'When the purse is set to expire';
-
-
---
--- Name: COLUMN purse_requests.h_contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.h_contract_terms IS 'Hash of the contract the parties are to agree to';
-
-
---
--- Name: COLUMN purse_requests.amount_with_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.amount_with_fee_val IS 'Total amount expected to be in the purse';
-
-
---
--- Name: COLUMN purse_requests.balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.balance_val IS 'Total amount actually in the purse';
-
-
---
--- Name: COLUMN purse_requests.purse_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.purse_requests.purse_sig IS 'Signature of the purse affirming the purse parameters, of type TALER_SIGNATURE_PURSE_REQUEST';
-
-
---
--- Name: purse_requests_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.purse_requests_default (
- purse_requests_serial_id bigint NOT NULL,
- purse_pub bytea NOT NULL,
- merge_pub bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- h_contract_terms bytea NOT NULL,
- age_limit integer NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- balance_val bigint DEFAULT 0 NOT NULL,
- balance_frac integer DEFAULT 0 NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT purse_requests_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT purse_requests_merge_pub_check CHECK ((length(merge_pub) = 32)),
- CONSTRAINT purse_requests_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT purse_requests_purse_sig_check CHECK ((length(purse_sig) = 64))
-);
-ALTER TABLE ONLY public.purse_requests ATTACH PARTITION public.purse_requests_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: purse_requests_purse_requests_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.purse_requests ALTER COLUMN purse_requests_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.purse_requests_purse_requests_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: recoup; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup (
- recoup_uuid bigint NOT NULL,
- coin_pub bytea NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- recoup_timestamp bigint NOT NULL,
- reserve_out_serial_id bigint NOT NULL,
- CONSTRAINT recoup_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT recoup_coin_sig_check CHECK ((length(coin_sig) = 64))
-)
-PARTITION BY HASH (coin_pub);
-
-
---
--- Name: TABLE recoup; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.recoup IS 'Information about recoups that were executed between a coin and a reserve. In this type of recoup, the amount is credited back to the reserve from which the coin originated.';
-
-
---
--- Name: COLUMN recoup.coin_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.coin_pub IS 'Coin that is being debited in the recoup. Do not CASCADE ON DROP on the coin_pub, as we may keep the coin alive!';
-
-
---
--- Name: COLUMN recoup.coin_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.coin_sig IS 'Signature by the coin affirming the recoup, of type TALER_SIGNATURE_WALLET_COIN_RECOUP';
-
-
---
--- Name: COLUMN recoup.coin_blind; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.coin_blind IS 'Denomination blinding key used when creating the blinded coin from the planchet. Secret revealed during the recoup to provide the linkage between the coin and the withdraw operation.';
-
-
---
--- Name: COLUMN recoup.reserve_out_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.reserve_out_serial_id IS 'Identifies the h_blind_ev of the recouped coin and provides the link to the credited reserve.';
-
-
---
--- Name: recoup_by_reserve; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_by_reserve (
- reserve_out_serial_id bigint NOT NULL,
- coin_pub bytea,
- CONSTRAINT recoup_by_reserve_coin_pub_check CHECK ((length(coin_pub) = 32))
-)
-PARTITION BY HASH (reserve_out_serial_id);
-
-
---
--- Name: TABLE recoup_by_reserve; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.recoup_by_reserve IS 'Information in this table is strictly redundant with that of recoup, but saved by a different primary key for fast lookups by reserve_out_serial_id.';
-
-
---
--- Name: recoup_by_reserve_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_by_reserve_default (
- reserve_out_serial_id bigint NOT NULL,
- coin_pub bytea,
- CONSTRAINT recoup_by_reserve_coin_pub_check CHECK ((length(coin_pub) = 32))
-);
-ALTER TABLE ONLY public.recoup_by_reserve ATTACH PARTITION public.recoup_by_reserve_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: recoup_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_default (
- recoup_uuid bigint NOT NULL,
- coin_pub bytea NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- recoup_timestamp bigint NOT NULL,
- reserve_out_serial_id bigint NOT NULL,
- CONSTRAINT recoup_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT recoup_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-ALTER TABLE ONLY public.recoup ATTACH PARTITION public.recoup_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.recoup ALTER COLUMN recoup_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.recoup_recoup_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: recoup_refresh; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_refresh (
- recoup_refresh_uuid bigint NOT NULL,
- coin_pub bytea NOT NULL,
- known_coin_id bigint NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- recoup_timestamp bigint NOT NULL,
- rrc_serial bigint NOT NULL,
- CONSTRAINT recoup_refresh_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_refresh_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT recoup_refresh_coin_sig_check CHECK ((length(coin_sig) = 64))
-)
-PARTITION BY HASH (coin_pub);
-
-
---
--- Name: TABLE recoup_refresh; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.recoup_refresh IS 'Table of coins that originated from a refresh operation and that were recouped. Links the (fresh) coin to the melted operation (and thus the old coin). A recoup on a refreshed coin credits the old coin and debits the fresh coin.';
-
-
---
--- Name: COLUMN recoup_refresh.coin_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.coin_pub IS 'Refreshed coin of a revoked denomination where the residual value is credited to the old coin. Do not CASCADE ON DROP on the coin_pub, as we may keep the coin alive!';
-
-
---
--- Name: COLUMN recoup_refresh.known_coin_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.known_coin_id IS 'FIXME: (To be) used for garbage collection (in the future)';
-
-
---
--- Name: COLUMN recoup_refresh.coin_blind; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.coin_blind IS 'Denomination blinding key used when creating the blinded coin from the planchet. Secret revealed during the recoup to provide the linkage between the coin and the refresh operation.';
-
-
---
--- Name: COLUMN recoup_refresh.rrc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.rrc_serial IS 'Link to the refresh operation. Also identifies the h_blind_ev of the recouped coin (as h_coin_ev).';
-
-
---
--- Name: recoup_refresh_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_refresh_default (
- recoup_refresh_uuid bigint NOT NULL,
- coin_pub bytea NOT NULL,
- known_coin_id bigint NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- recoup_timestamp bigint NOT NULL,
- rrc_serial bigint NOT NULL,
- CONSTRAINT recoup_refresh_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_refresh_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT recoup_refresh_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-ALTER TABLE ONLY public.recoup_refresh ATTACH PARTITION public.recoup_refresh_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.recoup_refresh ALTER COLUMN recoup_refresh_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.recoup_refresh_recoup_refresh_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: refresh_commitments; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_commitments (
- melt_serial_id bigint NOT NULL,
- rc bytea NOT NULL,
- old_coin_pub bytea NOT NULL,
- old_coin_sig bytea NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- noreveal_index integer NOT NULL,
- CONSTRAINT refresh_commitments_old_coin_sig_check CHECK ((length(old_coin_sig) = 64)),
- CONSTRAINT refresh_commitments_rc_check CHECK ((length(rc) = 64))
-)
-PARTITION BY HASH (rc);
-
-
---
--- Name: TABLE refresh_commitments; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_commitments IS 'Commitments made when melting coins and the gamma value chosen by the exchange.';
-
-
---
--- Name: COLUMN refresh_commitments.rc; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_commitments.rc IS 'Commitment made by the client, hash over the various client inputs in the cut-and-choose protocol';
-
-
---
--- Name: COLUMN refresh_commitments.old_coin_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_commitments.old_coin_pub IS 'Coin being melted in the refresh process.';
-
-
---
--- Name: COLUMN refresh_commitments.noreveal_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_commitments.noreveal_index IS 'The gamma value chosen by the exchange in the cut-and-choose protocol';
-
-
---
--- Name: refresh_commitments_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_commitments_default (
- melt_serial_id bigint NOT NULL,
- rc bytea NOT NULL,
- old_coin_pub bytea NOT NULL,
- old_coin_sig bytea NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- noreveal_index integer NOT NULL,
- CONSTRAINT refresh_commitments_old_coin_sig_check CHECK ((length(old_coin_sig) = 64)),
- CONSTRAINT refresh_commitments_rc_check CHECK ((length(rc) = 64))
-);
-ALTER TABLE ONLY public.refresh_commitments ATTACH PARTITION public.refresh_commitments_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.refresh_commitments ALTER COLUMN melt_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.refresh_commitments_melt_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: refresh_revealed_coins; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_revealed_coins (
- rrc_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- freshcoin_index integer NOT NULL,
- link_sig bytea NOT NULL,
- denominations_serial bigint NOT NULL,
- coin_ev bytea NOT NULL,
- h_coin_ev bytea NOT NULL,
- ev_sig bytea NOT NULL,
- ewv bytea NOT NULL,
- CONSTRAINT refresh_revealed_coins_h_coin_ev_check CHECK ((length(h_coin_ev) = 64)),
- CONSTRAINT refresh_revealed_coins_link_sig_check CHECK ((length(link_sig) = 64))
-)
-PARTITION BY HASH (melt_serial_id);
-
-
---
--- Name: TABLE refresh_revealed_coins; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_revealed_coins IS 'Revelations about the new coins that are to be created during a melting session.';
-
-
---
--- Name: COLUMN refresh_revealed_coins.rrc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.rrc_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: COLUMN refresh_revealed_coins.melt_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.melt_serial_id IS 'Identifies the refresh commitment (rc) of the melt operation.';
-
-
---
--- Name: COLUMN refresh_revealed_coins.freshcoin_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.freshcoin_index IS 'index of the fresh coin being created (one melt operation may result in multiple fresh coins)';
-
-
---
--- Name: COLUMN refresh_revealed_coins.coin_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.coin_ev IS 'envelope of the new coin to be signed';
-
-
---
--- Name: COLUMN refresh_revealed_coins.h_coin_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.h_coin_ev IS 'hash of the envelope of the new coin to be signed (for lookups)';
-
-
---
--- Name: COLUMN refresh_revealed_coins.ev_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.ev_sig IS 'exchange signature over the envelope';
-
-
---
--- Name: COLUMN refresh_revealed_coins.ewv; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.ewv IS 'exchange contributed values in the creation of the fresh coin (see /csr)';
-
-
---
--- Name: refresh_revealed_coins_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_revealed_coins_default (
- rrc_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- freshcoin_index integer NOT NULL,
- link_sig bytea NOT NULL,
- denominations_serial bigint NOT NULL,
- coin_ev bytea NOT NULL,
- h_coin_ev bytea NOT NULL,
- ev_sig bytea NOT NULL,
- ewv bytea NOT NULL,
- CONSTRAINT refresh_revealed_coins_h_coin_ev_check CHECK ((length(h_coin_ev) = 64)),
- CONSTRAINT refresh_revealed_coins_link_sig_check CHECK ((length(link_sig) = 64))
-);
-ALTER TABLE ONLY public.refresh_revealed_coins ATTACH PARTITION public.refresh_revealed_coins_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.refresh_revealed_coins ALTER COLUMN rrc_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.refresh_revealed_coins_rrc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: refresh_transfer_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_transfer_keys (
- rtc_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- transfer_pub bytea NOT NULL,
- transfer_privs bytea NOT NULL,
- CONSTRAINT refresh_transfer_keys_transfer_pub_check CHECK ((length(transfer_pub) = 32))
-)
-PARTITION BY HASH (melt_serial_id);
-
-
---
--- Name: TABLE refresh_transfer_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_transfer_keys IS 'Transfer keys of a refresh operation (the data revealed to the exchange).';
-
-
---
--- Name: COLUMN refresh_transfer_keys.rtc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.rtc_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: COLUMN refresh_transfer_keys.melt_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.melt_serial_id IS 'Identifies the refresh commitment (rc) of the operation.';
-
-
---
--- Name: COLUMN refresh_transfer_keys.transfer_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.transfer_pub IS 'transfer public key for the gamma index';
-
-
---
--- Name: COLUMN refresh_transfer_keys.transfer_privs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.transfer_privs IS 'array of TALER_CNC_KAPPA - 1 transfer private keys that have been revealed, with the gamma entry being skipped';
-
-
---
--- Name: refresh_transfer_keys_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_transfer_keys_default (
- rtc_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- transfer_pub bytea NOT NULL,
- transfer_privs bytea NOT NULL,
- CONSTRAINT refresh_transfer_keys_transfer_pub_check CHECK ((length(transfer_pub) = 32))
-);
-ALTER TABLE ONLY public.refresh_transfer_keys ATTACH PARTITION public.refresh_transfer_keys_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.refresh_transfer_keys ALTER COLUMN rtc_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.refresh_transfer_keys_rtc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: refunds; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refunds (
- refund_serial_id bigint NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint NOT NULL,
- merchant_sig bytea NOT NULL,
- rtransaction_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- CONSTRAINT refunds_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT refunds_merchant_sig_check CHECK ((length(merchant_sig) = 64))
-)
-PARTITION BY HASH (coin_pub);
-
-
---
--- Name: TABLE refunds; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refunds IS 'Data on coins that were refunded. Technically, refunds always apply against specific deposit operations involving a coin. The combination of coin_pub, merchant_pub, h_contract_terms and rtransaction_id MUST be unique, and we usually select by coin_pub so that one goes first.';
-
-
---
--- Name: COLUMN refunds.deposit_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refunds.deposit_serial_id IS 'Identifies ONLY the merchant_pub, h_contract_terms and coin_pub. Multiple deposits may match a refund, this only identifies one of them.';
-
-
---
--- Name: COLUMN refunds.rtransaction_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refunds.rtransaction_id IS 'used by the merchant to make refunds unique in case the same coin for the same deposit gets a subsequent (higher) refund';
-
-
---
--- Name: refunds_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refunds_default (
- refund_serial_id bigint NOT NULL,
- coin_pub bytea NOT NULL,
- deposit_serial_id bigint NOT NULL,
- merchant_sig bytea NOT NULL,
- rtransaction_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- CONSTRAINT refunds_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT refunds_merchant_sig_check CHECK ((length(merchant_sig) = 64))
-);
-ALTER TABLE ONLY public.refunds ATTACH PARTITION public.refunds_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.refunds ALTER COLUMN refund_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.refunds_refund_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves (
- reserve_uuid bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- current_balance_val bigint NOT NULL,
- current_balance_frac integer NOT NULL,
- purses_active bigint DEFAULT 0 NOT NULL,
- purses_allowed bigint DEFAULT 0 NOT NULL,
- kyc_required boolean DEFAULT false NOT NULL,
- kyc_passed boolean DEFAULT false NOT NULL,
- expiration_date bigint NOT NULL,
- gc_date bigint NOT NULL,
- CONSTRAINT reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-)
-PARTITION BY HASH (reserve_pub);
-
-
---
--- Name: TABLE reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves IS 'Summarizes the balance of a reserve. Updated when new funds are added or withdrawn.';
-
-
---
--- Name: COLUMN reserves.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.reserve_pub IS 'EdDSA public key of the reserve. Knowledge of the private key implies ownership over the balance.';
-
-
---
--- Name: COLUMN reserves.current_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.current_balance_val IS 'Current balance remaining with the reserve.';
-
-
---
--- Name: COLUMN reserves.purses_active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.purses_active IS 'Number of purses that were created by this reserve that are not expired and not fully paid.';
-
-
---
--- Name: COLUMN reserves.purses_allowed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.purses_allowed IS 'Number of purses that this reserve is allowed to have active at most.';
-
-
---
--- Name: COLUMN reserves.kyc_required; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.kyc_required IS 'True if a KYC check must have been passed before withdrawing from this reserve. Set to true once a reserve received a P2P payment.';
-
-
---
--- Name: COLUMN reserves.kyc_passed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.kyc_passed IS 'True once KYC was passed for this reserve. The KYC details are then available via the wire_targets table under the key of wire_target_h_payto which is to be derived from the reserve_pub and the base URL of this exchange.';
-
-
---
--- Name: COLUMN reserves.expiration_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.expiration_date IS 'Used to trigger closing of reserves that have not been drained after some time';
-
-
---
--- Name: COLUMN reserves.gc_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.gc_date IS 'Used to forget all information about a reserve during garbage collection';
-
-
---
--- Name: reserves_close; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_close (
- close_uuid bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- execution_date bigint NOT NULL,
- wtid bytea NOT NULL,
- wire_target_h_payto bytea,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- CONSTRAINT reserves_close_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT reserves_close_wtid_check CHECK ((length(wtid) = 32))
-)
-PARTITION BY HASH (reserve_pub);
-
-
---
--- Name: TABLE reserves_close; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_close IS 'wire transfers executed by the reserve to close reserves';
-
-
---
--- Name: COLUMN reserves_close.wire_target_h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_close.wire_target_h_payto IS 'Identifies the credited bank account (and KYC status). Note that closing does not depend on KYC.';
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.reserves_close ALTER COLUMN close_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.reserves_close_close_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: reserves_close_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_close_default (
- close_uuid bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- execution_date bigint NOT NULL,
- wtid bytea NOT NULL,
- wire_target_h_payto bytea,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- CONSTRAINT reserves_close_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT reserves_close_wtid_check CHECK ((length(wtid) = 32))
-);
-ALTER TABLE ONLY public.reserves_close ATTACH PARTITION public.reserves_close_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: reserves_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_default (
- reserve_uuid bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- current_balance_val bigint NOT NULL,
- current_balance_frac integer NOT NULL,
- purses_active bigint DEFAULT 0 NOT NULL,
- purses_allowed bigint DEFAULT 0 NOT NULL,
- kyc_required boolean DEFAULT false NOT NULL,
- kyc_passed boolean DEFAULT false NOT NULL,
- expiration_date bigint NOT NULL,
- gc_date bigint NOT NULL,
- CONSTRAINT reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-ALTER TABLE ONLY public.reserves ATTACH PARTITION public.reserves_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: reserves_in; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_in (
- reserve_in_serial_id bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- wire_reference bigint NOT NULL,
- credit_val bigint NOT NULL,
- credit_frac integer NOT NULL,
- wire_source_h_payto bytea,
- exchange_account_section text NOT NULL,
- execution_date bigint NOT NULL,
- CONSTRAINT reserves_in_wire_source_h_payto_check CHECK ((length(wire_source_h_payto) = 32))
-)
-PARTITION BY HASH (reserve_pub);
-
-
---
--- Name: TABLE reserves_in; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_in IS 'list of transfers of funds into the reserves, one per incoming wire transfer';
-
-
---
--- Name: COLUMN reserves_in.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_in.reserve_pub IS 'Public key of the reserve. Private key signifies ownership of the remaining balance.';
-
-
---
--- Name: COLUMN reserves_in.credit_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_in.credit_val IS 'Amount that was transferred into the reserve';
-
-
---
--- Name: COLUMN reserves_in.wire_source_h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_in.wire_source_h_payto IS 'Identifies the debited bank account and KYC status';
-
-
---
--- Name: reserves_in_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_in_default (
- reserve_in_serial_id bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- wire_reference bigint NOT NULL,
- credit_val bigint NOT NULL,
- credit_frac integer NOT NULL,
- wire_source_h_payto bytea,
- exchange_account_section text NOT NULL,
- execution_date bigint NOT NULL,
- CONSTRAINT reserves_in_wire_source_h_payto_check CHECK ((length(wire_source_h_payto) = 32))
-);
-ALTER TABLE ONLY public.reserves_in ATTACH PARTITION public.reserves_in_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.reserves_in ALTER COLUMN reserve_in_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.reserves_in_reserve_in_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: reserves_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out (
- reserve_out_serial_id bigint NOT NULL,
- h_blind_ev bytea,
- denominations_serial bigint NOT NULL,
- denom_sig bytea NOT NULL,
- reserve_uuid bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- execution_date bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- CONSTRAINT reserves_out_h_blind_ev_check CHECK ((length(h_blind_ev) = 64)),
- CONSTRAINT reserves_out_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (h_blind_ev);
-
-
---
--- Name: TABLE reserves_out; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_out IS 'Withdraw operations performed on reserves.';
-
-
---
--- Name: COLUMN reserves_out.h_blind_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_out.h_blind_ev IS 'Hash of the blinded coin, used as primary key here so that broken clients that use a non-random coin or blinding factor fail to withdraw (otherwise they would fail on deposit when the coin is not unique there).';
-
-
---
--- Name: COLUMN reserves_out.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_out.denominations_serial IS 'We do not CASCADE ON DELETE here, we may keep the denomination data alive';
-
-
---
--- Name: reserves_out_by_reserve; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out_by_reserve (
- reserve_uuid bigint NOT NULL,
- h_blind_ev bytea,
- CONSTRAINT reserves_out_by_reserve_h_blind_ev_check CHECK ((length(h_blind_ev) = 64))
-)
-PARTITION BY HASH (reserve_uuid);
-
-
---
--- Name: TABLE reserves_out_by_reserve; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_out_by_reserve IS 'Information in this table is strictly redundant with that of reserves_out, but saved by a different primary key for fast lookups by reserve public key/uuid.';
-
-
---
--- Name: reserves_out_by_reserve_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out_by_reserve_default (
- reserve_uuid bigint NOT NULL,
- h_blind_ev bytea,
- CONSTRAINT reserves_out_by_reserve_h_blind_ev_check CHECK ((length(h_blind_ev) = 64))
-);
-ALTER TABLE ONLY public.reserves_out_by_reserve ATTACH PARTITION public.reserves_out_by_reserve_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: reserves_out_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out_default (
- reserve_out_serial_id bigint NOT NULL,
- h_blind_ev bytea,
- denominations_serial bigint NOT NULL,
- denom_sig bytea NOT NULL,
- reserve_uuid bigint NOT NULL,
- reserve_sig bytea NOT NULL,
- execution_date bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- CONSTRAINT reserves_out_h_blind_ev_check CHECK ((length(h_blind_ev) = 64)),
- CONSTRAINT reserves_out_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.reserves_out ATTACH PARTITION public.reserves_out_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.reserves_out ALTER COLUMN reserve_out_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.reserves_out_reserve_out_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.reserves ALTER COLUMN reserve_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.reserves_reserve_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: revolving_work_shards; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE UNLOGGED TABLE public.revolving_work_shards (
- shard_serial_id bigint NOT NULL,
- last_attempt bigint NOT NULL,
- start_row integer NOT NULL,
- end_row integer NOT NULL,
- active boolean DEFAULT false NOT NULL,
- job_name character varying NOT NULL
-);
-
-
---
--- Name: TABLE revolving_work_shards; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.revolving_work_shards IS 'coordinates work between multiple processes working on the same job with partitions that need to be repeatedly processed; unlogged because on system crashes the locks represented by this table will have to be cleared anyway, typically using "taler-exchange-dbinit -s"';
-
-
---
--- Name: COLUMN revolving_work_shards.shard_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.shard_serial_id IS 'unique serial number identifying the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.last_attempt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.last_attempt IS 'last time a worker attempted to work on the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.start_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.start_row IS 'row at which the shard scope starts, inclusive';
-
-
---
--- Name: COLUMN revolving_work_shards.end_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.end_row IS 'row at which the shard scope ends, exclusive';
-
-
---
--- Name: COLUMN revolving_work_shards.active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.active IS 'set to TRUE when a worker is active on the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.job_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.job_name IS 'unique name of the job the workers on this shard are performing';
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.revolving_work_shards ALTER COLUMN shard_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.revolving_work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: signkey_revocations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.signkey_revocations (
- signkey_revocations_serial_id bigint NOT NULL,
- esk_serial bigint NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT signkey_revocations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE signkey_revocations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.signkey_revocations IS 'Table storing which online signing keys have been revoked';
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.signkey_revocations ALTER COLUMN signkey_revocations_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.signkey_revocations_signkey_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wad_in_entries; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wad_in_entries (
- wad_in_entry_serial_id bigint NOT NULL,
- wad_in_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- h_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- merge_timestamp bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- deposit_fees_val bigint NOT NULL,
- deposit_fees_frac integer NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT wad_in_entries_h_contract_check CHECK ((length(h_contract) = 64)),
- CONSTRAINT wad_in_entries_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT wad_in_entries_purse_sig_check CHECK ((length(purse_sig) = 64)),
- CONSTRAINT wad_in_entries_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT wad_in_entries_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE wad_in_entries; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wad_in_entries IS 'list of purses aggregated in a wad according to the sending exchange';
-
-
---
--- Name: COLUMN wad_in_entries.wad_in_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.wad_in_serial_id IS 'wad for which the given purse was included in the aggregation';
-
-
---
--- Name: COLUMN wad_in_entries.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.reserve_pub IS 'target account of the purse (must be at the local exchange)';
-
-
---
--- Name: COLUMN wad_in_entries.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.purse_pub IS 'public key of the purse that was merged';
-
-
---
--- Name: COLUMN wad_in_entries.h_contract; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.h_contract IS 'hash of the contract terms of the purse';
-
-
---
--- Name: COLUMN wad_in_entries.purse_expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.purse_expiration IS 'Time when the purse was set to expire';
-
-
---
--- Name: COLUMN wad_in_entries.merge_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.merge_timestamp IS 'Time when the merge was approved';
-
-
---
--- Name: COLUMN wad_in_entries.amount_with_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.amount_with_fee_val IS 'Total amount in the purse';
-
-
---
--- Name: COLUMN wad_in_entries.wad_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.wad_fee_val IS 'Total wad fees paid by the purse';
-
-
---
--- Name: COLUMN wad_in_entries.deposit_fees_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.deposit_fees_val IS 'Total deposit fees paid when depositing coins into the purse';
-
-
---
--- Name: COLUMN wad_in_entries.reserve_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.reserve_sig IS 'Signature by the receiving reserve, of purpose TALER_SIGNATURE_ACCOUNT_MERGE';
-
-
---
--- Name: COLUMN wad_in_entries.purse_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_in_entries.purse_sig IS 'Signature by the purse of purpose TALER_SIGNATURE_PURSE_MERGE';
-
-
---
--- Name: wad_in_entries_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wad_in_entries_default (
- wad_in_entry_serial_id bigint NOT NULL,
- wad_in_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- h_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- merge_timestamp bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- deposit_fees_val bigint NOT NULL,
- deposit_fees_frac integer NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT wad_in_entries_h_contract_check CHECK ((length(h_contract) = 64)),
- CONSTRAINT wad_in_entries_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT wad_in_entries_purse_sig_check CHECK ((length(purse_sig) = 64)),
- CONSTRAINT wad_in_entries_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT wad_in_entries_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.wad_in_entries ATTACH PARTITION public.wad_in_entries_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wad_in_entries_wad_in_entry_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wad_in_entries ALTER COLUMN wad_in_entry_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wad_in_entries_wad_in_entry_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wad_out_entries; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wad_out_entries (
- wad_out_entry_serial_id bigint NOT NULL,
- wad_out_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- h_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- merge_timestamp bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- deposit_fees_val bigint NOT NULL,
- deposit_fees_frac integer NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT wad_out_entries_h_contract_check CHECK ((length(h_contract) = 64)),
- CONSTRAINT wad_out_entries_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT wad_out_entries_purse_sig_check CHECK ((length(purse_sig) = 64)),
- CONSTRAINT wad_out_entries_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT wad_out_entries_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-)
-PARTITION BY HASH (purse_pub);
-
-
---
--- Name: TABLE wad_out_entries; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wad_out_entries IS 'Purses combined into a wad';
-
-
---
--- Name: COLUMN wad_out_entries.wad_out_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.wad_out_serial_id IS 'Wad the purse was part of';
-
-
---
--- Name: COLUMN wad_out_entries.reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.reserve_pub IS 'Target reserve for the purse';
-
-
---
--- Name: COLUMN wad_out_entries.purse_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.purse_pub IS 'Public key of the purse';
-
-
---
--- Name: COLUMN wad_out_entries.h_contract; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.h_contract IS 'Hash of the contract associated with the purse';
-
-
---
--- Name: COLUMN wad_out_entries.purse_expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.purse_expiration IS 'Time when the purse expires';
-
-
---
--- Name: COLUMN wad_out_entries.merge_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.merge_timestamp IS 'Time when the merge was approved';
-
-
---
--- Name: COLUMN wad_out_entries.amount_with_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.amount_with_fee_val IS 'Total amount in the purse';
-
-
---
--- Name: COLUMN wad_out_entries.wad_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.wad_fee_val IS 'Wat fee charged to the purse';
-
-
---
--- Name: COLUMN wad_out_entries.deposit_fees_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.deposit_fees_val IS 'Total deposit fees charged to the purse';
-
-
---
--- Name: COLUMN wad_out_entries.reserve_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.reserve_sig IS 'Signature by the receiving reserve, of purpose TALER_SIGNATURE_ACCOUNT_MERGE';
-
-
---
--- Name: COLUMN wad_out_entries.purse_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wad_out_entries.purse_sig IS 'Signature by the purse of purpose TALER_SIGNATURE_PURSE_MERGE';
-
-
---
--- Name: wad_out_entries_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wad_out_entries_default (
- wad_out_entry_serial_id bigint NOT NULL,
- wad_out_serial_id bigint,
- reserve_pub bytea NOT NULL,
- purse_pub bytea NOT NULL,
- h_contract bytea NOT NULL,
- purse_expiration bigint NOT NULL,
- merge_timestamp bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- deposit_fees_val bigint NOT NULL,
- deposit_fees_frac integer NOT NULL,
- reserve_sig bytea NOT NULL,
- purse_sig bytea NOT NULL,
- CONSTRAINT wad_out_entries_h_contract_check CHECK ((length(h_contract) = 64)),
- CONSTRAINT wad_out_entries_purse_pub_check CHECK ((length(purse_pub) = 32)),
- CONSTRAINT wad_out_entries_purse_sig_check CHECK ((length(purse_sig) = 64)),
- CONSTRAINT wad_out_entries_reserve_pub_check CHECK ((length(reserve_pub) = 32)),
- CONSTRAINT wad_out_entries_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-ALTER TABLE ONLY public.wad_out_entries ATTACH PARTITION public.wad_out_entries_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wad_out_entries_wad_out_entry_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wad_out_entries ALTER COLUMN wad_out_entry_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wad_out_entries_wad_out_entry_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wads_in; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wads_in (
- wad_in_serial_id bigint NOT NULL,
- wad_id bytea NOT NULL,
- origin_exchange_url text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- arrival_time bigint NOT NULL,
- CONSTRAINT wads_in_wad_id_check CHECK ((length(wad_id) = 24))
-)
-PARTITION BY HASH (wad_id);
-
-
---
--- Name: TABLE wads_in; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wads_in IS 'Incoming exchange-to-exchange wad wire transfers';
-
-
---
--- Name: COLUMN wads_in.wad_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_in.wad_id IS 'Unique identifier of the wad, part of the wire transfer subject';
-
-
---
--- Name: COLUMN wads_in.origin_exchange_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_in.origin_exchange_url IS 'Base URL of the originating URL, also part of the wire transfer subject';
-
-
---
--- Name: COLUMN wads_in.amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_in.amount_val IS 'Actual amount that was received by our exchange';
-
-
---
--- Name: COLUMN wads_in.arrival_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_in.arrival_time IS 'Time when the wad was received';
-
-
---
--- Name: wads_in_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wads_in_default (
- wad_in_serial_id bigint NOT NULL,
- wad_id bytea NOT NULL,
- origin_exchange_url text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- arrival_time bigint NOT NULL,
- CONSTRAINT wads_in_wad_id_check CHECK ((length(wad_id) = 24))
-);
-ALTER TABLE ONLY public.wads_in ATTACH PARTITION public.wads_in_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wads_in_wad_in_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wads_in ALTER COLUMN wad_in_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wads_in_wad_in_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wads_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wads_out (
- wad_out_serial_id bigint NOT NULL,
- wad_id bytea NOT NULL,
- partner_serial_id bigint NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- execution_time bigint NOT NULL,
- CONSTRAINT wads_out_wad_id_check CHECK ((length(wad_id) = 24))
-)
-PARTITION BY HASH (wad_id);
-
-
---
--- Name: TABLE wads_out; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wads_out IS 'Wire transfers made to another exchange to transfer purse funds';
-
-
---
--- Name: COLUMN wads_out.wad_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_out.wad_id IS 'Unique identifier of the wad, part of the wire transfer subject';
-
-
---
--- Name: COLUMN wads_out.partner_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_out.partner_serial_id IS 'target exchange of the wad';
-
-
---
--- Name: COLUMN wads_out.amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_out.amount_val IS 'Amount that was wired';
-
-
---
--- Name: COLUMN wads_out.execution_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wads_out.execution_time IS 'Time when the wire transfer was scheduled';
-
-
---
--- Name: wads_out_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wads_out_default (
- wad_out_serial_id bigint NOT NULL,
- wad_id bytea NOT NULL,
- partner_serial_id bigint NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- execution_time bigint NOT NULL,
- CONSTRAINT wads_out_wad_id_check CHECK ((length(wad_id) = 24))
-);
-ALTER TABLE ONLY public.wads_out ATTACH PARTITION public.wads_out_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wads_out_wad_out_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wads_out ALTER COLUMN wad_out_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wads_out_wad_out_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wire_accounts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_accounts (
- payto_uri character varying NOT NULL,
- master_sig bytea,
- is_active boolean NOT NULL,
- last_change bigint NOT NULL,
- CONSTRAINT wire_accounts_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE wire_accounts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_accounts IS 'Table with current and historic bank accounts of the exchange. Entries never expire as we need to remember the last_change column indefinitely.';
-
-
---
--- Name: COLUMN wire_accounts.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.payto_uri IS 'payto URI (RFC 8905) with the bank account of the exchange.';
-
-
---
--- Name: COLUMN wire_accounts.master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.master_sig IS 'Signature of purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS';
-
-
---
--- Name: COLUMN wire_accounts.is_active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.is_active IS 'true if we are currently supporting the use of this account.';
-
-
---
--- Name: COLUMN wire_accounts.last_change; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.last_change IS 'Latest time when active status changed. Used to detect replays of old messages.';
-
-
---
--- Name: wire_auditor_account_progress; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_auditor_account_progress (
- master_pub bytea NOT NULL,
- account_name text NOT NULL,
- last_wire_reserve_in_serial_id bigint DEFAULT 0 NOT NULL,
- last_wire_wire_out_serial_id bigint DEFAULT 0 NOT NULL,
- wire_in_off bigint NOT NULL,
- wire_out_off bigint NOT NULL
-);
-
-
---
--- Name: TABLE wire_auditor_account_progress; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_auditor_account_progress IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: wire_auditor_progress; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_auditor_progress (
- master_pub bytea NOT NULL,
- last_timestamp bigint NOT NULL,
- last_reserve_close_uuid bigint NOT NULL
-);
-
-
---
--- Name: wire_fee; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_fee (
- wire_fee_serial bigint NOT NULL,
- wire_method character varying NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- wad_fee_val bigint NOT NULL,
- wad_fee_frac integer NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT wire_fee_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE wire_fee; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_fee IS 'list of the wire fees of this exchange, by date';
-
-
---
--- Name: COLUMN wire_fee.wire_fee_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_fee.wire_fee_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wire_fee ALTER COLUMN wire_fee_serial ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wire_fee_wire_fee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wire_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_out (
- wireout_uuid bigint NOT NULL,
- execution_date bigint NOT NULL,
- wtid_raw bytea NOT NULL,
- wire_target_h_payto bytea,
- exchange_account_section text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT wire_out_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT wire_out_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-)
-PARTITION BY HASH (wtid_raw);
-
-
---
--- Name: TABLE wire_out; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_out IS 'wire transfers the exchange has executed';
-
-
---
--- Name: COLUMN wire_out.wire_target_h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_out.wire_target_h_payto IS 'Identifies the credited bank account and KYC status';
-
-
---
--- Name: COLUMN wire_out.exchange_account_section; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_out.exchange_account_section IS 'identifies the configuration section with the debit account of this payment';
-
-
---
--- Name: wire_out_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_out_default (
- wireout_uuid bigint NOT NULL,
- execution_date bigint NOT NULL,
- wtid_raw bytea NOT NULL,
- wire_target_h_payto bytea,
- exchange_account_section text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT wire_out_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32)),
- CONSTRAINT wire_out_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-);
-ALTER TABLE ONLY public.wire_out ATTACH PARTITION public.wire_out_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wire_out ALTER COLUMN wireout_uuid ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wire_out_wireout_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: wire_targets; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_targets (
- wire_target_serial_id bigint NOT NULL,
- wire_target_h_payto bytea NOT NULL,
- payto_uri character varying NOT NULL,
- kyc_ok boolean DEFAULT false NOT NULL,
- external_id character varying,
- CONSTRAINT wire_targets_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32))
-)
-PARTITION BY HASH (wire_target_h_payto);
-
-
---
--- Name: TABLE wire_targets; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_targets IS 'All senders and recipients of money via the exchange';
-
-
---
--- Name: COLUMN wire_targets.wire_target_h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_targets.wire_target_h_payto IS 'Unsalted hash of payto_uri';
-
-
---
--- Name: COLUMN wire_targets.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_targets.payto_uri IS 'Can be a regular bank account, or also be a URI identifying a reserve-account (for P2P payments)';
-
-
---
--- Name: COLUMN wire_targets.kyc_ok; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_targets.kyc_ok IS 'true if the KYC check was passed successfully';
-
-
---
--- Name: COLUMN wire_targets.external_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_targets.external_id IS 'Name of the user that was used for OAuth 2.0-based legitimization';
-
-
---
--- Name: wire_targets_default; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_targets_default (
- wire_target_serial_id bigint NOT NULL,
- wire_target_h_payto bytea NOT NULL,
- payto_uri character varying NOT NULL,
- kyc_ok boolean DEFAULT false NOT NULL,
- external_id character varying,
- CONSTRAINT wire_targets_wire_target_h_payto_check CHECK ((length(wire_target_h_payto) = 32))
-);
-ALTER TABLE ONLY public.wire_targets ATTACH PARTITION public.wire_targets_default FOR VALUES WITH (modulus 1, remainder 0);
-
-
---
--- Name: wire_targets_wire_target_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.wire_targets ALTER COLUMN wire_target_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.wire_targets_wire_target_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: work_shards; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.work_shards (
- shard_serial_id bigint NOT NULL,
- last_attempt bigint NOT NULL,
- start_row bigint NOT NULL,
- end_row bigint NOT NULL,
- completed boolean DEFAULT false NOT NULL,
- job_name character varying NOT NULL
-);
-
-
---
--- Name: TABLE work_shards; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.work_shards IS 'coordinates work between multiple processes working on the same job';
-
-
---
--- Name: COLUMN work_shards.shard_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.shard_serial_id IS 'unique serial number identifying the shard';
-
-
---
--- Name: COLUMN work_shards.last_attempt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.last_attempt IS 'last time a worker attempted to work on the shard';
-
-
---
--- Name: COLUMN work_shards.start_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.start_row IS 'row at which the shard scope starts, inclusive';
-
-
---
--- Name: COLUMN work_shards.end_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.end_row IS 'row at which the shard scope ends, exclusive';
-
-
---
--- Name: COLUMN work_shards.completed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.completed IS 'set to TRUE once the shard is finished by a worker';
-
-
---
--- Name: COLUMN work_shards.job_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.job_name IS 'unique name of the job the workers on this shard are performing';
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-ALTER TABLE public.work_shards ALTER COLUMN shard_serial_id ADD GENERATED BY DEFAULT AS IDENTITY (
- SEQUENCE NAME public.work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1
-);
-
-
---
--- Name: app_bankaccount account_no; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount ALTER COLUMN account_no SET DEFAULT nextval('public.app_bankaccount_account_no_seq'::regclass);
-
-
---
--- Name: app_banktransaction id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction ALTER COLUMN id SET DEFAULT nextval('public.app_banktransaction_id_seq'::regclass);
-
-
---
--- Name: auditor_reserves auditor_reserves_rowid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves ALTER COLUMN auditor_reserves_rowid SET DEFAULT nextval('public.auditor_reserves_auditor_reserves_rowid_seq'::regclass);
-
-
---
--- Name: auth_group id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group ALTER COLUMN id SET DEFAULT nextval('public.auth_group_id_seq'::regclass);
-
-
---
--- Name: auth_group_permissions id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions ALTER COLUMN id SET DEFAULT nextval('public.auth_group_permissions_id_seq'::regclass);
-
-
---
--- Name: auth_permission id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission ALTER COLUMN id SET DEFAULT nextval('public.auth_permission_id_seq'::regclass);
-
-
---
--- Name: auth_user id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user ALTER COLUMN id SET DEFAULT nextval('public.auth_user_id_seq'::regclass);
-
-
---
--- Name: auth_user_groups id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups ALTER COLUMN id SET DEFAULT nextval('public.auth_user_groups_id_seq'::regclass);
-
-
---
--- Name: auth_user_user_permissions id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions ALTER COLUMN id SET DEFAULT nextval('public.auth_user_user_permissions_id_seq'::regclass);
-
-
---
--- Name: deposit_confirmations serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations ALTER COLUMN serial_id SET DEFAULT nextval('public.deposit_confirmations_serial_id_seq'::regclass);
-
-
---
--- Name: django_content_type id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type ALTER COLUMN id SET DEFAULT nextval('public.django_content_type_id_seq'::regclass);
-
-
---
--- Name: django_migrations id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_migrations ALTER COLUMN id SET DEFAULT nextval('public.django_migrations_id_seq'::regclass);
-
-
---
--- Data for Name: patches; Type: TABLE DATA; Schema: _v; Owner: -
---
-
-COPY _v.patches (patch_name, applied_tsz, applied_by, requires, conflicts) FROM stdin;
-exchange-0001 2022-05-02 20:33:08.632456+02 grothoff {} {}
-merchant-0001 2022-05-02 20:33:09.495945+02 grothoff {} {}
-auditor-0001 2022-05-02 20:33:10.025629+02 grothoff {} {}
-\.
-
-
---
--- Data for Name: account_merges_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.account_merges_default (account_merge_request_serial_id, reserve_pub, reserve_sig, purse_pub) FROM stdin;
-\.
-
-
---
--- Data for Name: aggregation_tracking_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.aggregation_tracking_default (aggregation_serial_id, deposit_serial_id, wtid_raw) FROM stdin;
-\.
-
-
---
--- Data for Name: aggregation_transient_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.aggregation_transient_default (amount_val, amount_frac, wire_target_h_payto, exchange_account_section, wtid_raw) FROM stdin;
-\.
-
-
---
--- Data for Name: app_bankaccount; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_bankaccount (is_public, account_no, balance, user_id) FROM stdin;
-t 3 +TESTKUDOS:0 3
-t 4 +TESTKUDOS:0 4
-t 5 +TESTKUDOS:0 5
-t 6 +TESTKUDOS:0 6
-t 7 +TESTKUDOS:0 7
-t 8 +TESTKUDOS:0 8
-t 9 +TESTKUDOS:0 9
-f 10 +TESTKUDOS:0 10
-f 11 +TESTKUDOS:0 11
-t 1 -TESTKUDOS:100 1
-f 12 +TESTKUDOS:92 12
-t 2 +TESTKUDOS:8 2
-\.
-
-
---
--- Data for Name: app_banktransaction; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_banktransaction (id, amount, subject, date, cancelled, request_uid, credit_account_id, debit_account_id) FROM stdin;
-1 TESTKUDOS:100 Joining bonus 2022-05-02 20:33:19.710863+02 f 55d53162-0d60-4f87-95a1-a30a36a7c617 12 1
-2 TESTKUDOS:8 CDMQCHRC8MTHV2T34NXGSCM9QNJBT73GHRYT7K2QDS1XA8NET490 2022-05-02 20:33:23.213741+02 f 89d148cf-c9a9-43bb-9a17-003cd5338715 2 12
-\.
-
-
---
--- Data for Name: app_talerwithdrawoperation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_talerwithdrawoperation (withdraw_id, amount, selection_done, confirmation_done, aborted, selected_reserve_pub, selected_exchange_account_id, withdraw_account_id) FROM stdin;
-f2ffc636-d7ba-4f83-b5d7-2c3c9e157746 TESTKUDOS:8 t t f CDMQCHRC8MTHV2T34NXGSCM9QNJBT73GHRYT7K2QDS1XA8NET490 2 12
-\.
-
-
---
--- Data for Name: auditor_balance_summary; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_balance_summary (master_pub, denom_balance_val, denom_balance_frac, deposit_fee_balance_val, deposit_fee_balance_frac, melt_fee_balance_val, melt_fee_balance_frac, refund_fee_balance_val, refund_fee_balance_frac, risk_val, risk_frac, loss_val, loss_frac, irregular_recoup_val, irregular_recoup_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_denom_sigs; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_denom_sigs (auditor_denom_serial, auditor_uuid, denominations_serial, auditor_sig) FROM stdin;
-1 1 82 \\x148db4e721b797b96cbe2af707fd739af3a821670254b641b65c96074cfc9c0878deaf21315770de8079a326a063f94c0f97fb6f3cccc9b8b0ee3ec7af95af07
-2 1 170 \\xba0dd58ffa5a51e8ea064c3bffeb0366a5df876a80d6c3d1414dcdc36062c86dd139038380768b165c75b8435b7c31fa8a675bbdbb52399603f279847d9f1709
-3 1 331 \\x3c220644b63503c10b71489686442ae23b37b0ded42bed68a59460955c7962b2c87c8c619f1daa9f3331eab924a9f61bf6ba204e977560ca23d9f08d536a1c0c
-4 1 104 \\x06ba63a59d1b6b16aebdcfa06a572124499d97d59c0bc9b4f176ebd59f30ca5b27edaf80e85b7ccbec341a9682e43303d7f01fb4f08ad28452229fe13014ab03
-5 1 246 \\x850724ba9122a0201616f2ce32f9f66df47f492c483c0c025f60aae86e0fd4a9d02eacf8961f5c0a9574724a9b3d5d75a78c664887965f6fde662b089f9fc30d
-6 1 260 \\x86f46f901b9df2bd4d55d7216f4b7c0e93f5269f8b168a43e274e8a07d6a1c2dbdef0f88b9d208ae290fd8c29a540e00f9ea472a29fadbca91ca0f206eb66b04
-7 1 276 \\x381b4c5a692b436487060d854d659fdd28716e84508c120423d4675755c7f35468d04b032061926bf29daa3a949bae09d19950c7e8dd551e257562233c3c3b0c
-8 1 407 \\xa350e8aff07a3c7540c0aeea74100b195d55b042d86be11b72676622ed5f5ba7044eb2778108c1036f6bb84fa10b42de0c88d72087bd6b9be57e1160fb482808
-9 1 227 \\xf6227bbc19661acce2bdf966103520a5453de7ce2ed5350d3083152f13bf2328429c020d740410cd81b8a7feac2a91016c0647b45b6b8171a5ff4ff2f082650f
-10 1 287 \\xf75a67bb2291cb9e4ff0b5e0c02821f6b5a09a3103d99c823fe84d2923c388d847c68d8af14e18db0ec02913ed6964b35541a313831b0f3f429a1c4428a1800d
-11 1 247 \\x02a6c21bcc318e021a7836f8ca0eaa7f2057b77208710cf309bcd0b3123ae6fd466c3f2f02d1cf5a8547f3edd0888d3de9092dec048ad4dc5aaa87f10dbf0807
-12 1 17 \\x0f39b94e1d9215b5bf5c14813011d7f45658629332af9e0b2f4a7e0508632f8c0e08032ad555be2d0f33d113a34deeed3aeb26c2ad34b74d2fc913d593b4ac07
-13 1 24 \\x19357e6a07e3094742b528714fdd498534f198b136bd397321a75db7ca6805ca51e8664678ed5497581ff03638c89f1d15e9bb17205db5d38456efb88c1c8f04
-14 1 34 \\xf02382bbee8f54d541e8b3784b1d1b36045ed3ba998fa225e6f927037f2f3d8f16c9f9450d09811ba16813201bd8ddea60cb473fff4df2baab30a05f0a08540b
-15 1 265 \\xe04e19e4f656fefeca9a88ec97eb8ebfea0a625508c6ea6d0c45650097d7c9520f6036d72cb0e427445e22b75cc0c78b4f7a7d78a63d7c4f2a2237be9d50c90b
-16 1 306 \\xe7f675708a9afbf635cd145d006da38a8cb2f130f6bc0822f90f8cf7b4516d1b87db80b2e208d9984d1879f419e0177bb103a52a761b712dba50646b8d887d04
-17 1 297 \\x62db426318a3af2a76c45e974f981523b654f07c8799ba9d1de779e7de0dcb04aef92993948481239ec42dffbcd4a49a4d9df44699b2370c2bcce7fba7c52408
-18 1 137 \\x5efef1bd7ffc2226c93b5f953aeebfa3b5905e7dee8e7f2b77cb75b5235ec40c577091503f23e971beaafd8235aedd63abc5b3ba0bce24dbc563c59d7aff9203
-19 1 100 \\x7be7830767db3987f760ffd0514352eddc4da78cf416646a156883f5d1789b27af939b9ab6b2eb03676593c39e471ae6f63ddd14c1813c8ea376f8b352758202
-20 1 303 \\x7c065828bb5f37b0c6349a293c2f428a1f299aa958ce0fb8a922fb6121ea13a424082b8a5eab46f27e99f15a1ddeee8a057d5b09896b6173b9c2eb22c86fd70b
-21 1 378 \\x439105de2faa56c673b5a0734aa85ceab74408009bf4d37bf443a64e81d1b6c56295fe14414f7ea2073923f23c946d288f97b236f52868837021f9a12dd40609
-22 1 68 \\x76c9ef6f6f7304f9d66a6146b3bd5fcc1ca16f4a8f20943a1fc25b3b3c1662735e777a50fcccaf26d0507b12586b7067738e40c3ab7773a564eeb0366ca74b0c
-23 1 384 \\xbf6e886af88b32f16932b7dbdf4e1dca22485b0134bb9d016977d19891e6ddf6d7af326d26064f9577c7944da4edccee38af15c3c919eb65806d7312401ca203
-24 1 424 \\xa7debcc6bcfe592b2d6cff752aa7c6d8b15815b99834c93a0e8d41181817820e91124751ab8a4f0fcac15f12bf402934b91eb838f13d74c0fa79bc038d51dc0e
-25 1 63 \\x99bf8ac8433946201578580620ec2723295375c5cbca04dee1483eea79b69d379bbb7c97c7f7e643e4ca154b7a0016596c3b8980a6212b9b75b035f503b32103
-26 1 326 \\xa31e4e5fee6e671c6d449181ea699b6af807accc956f93bcdf078433cacd12e334f7ba5291fe2f373b0b1ff97041ba11403ff6d7859fae20b7e2b9eb852f2f06
-27 1 173 \\xedee540955ccd603b35f13285c045d4d0068df6417e917d035a955e66842937f180875c2fefd327acab41ced1c25533a0f8a0382a03a235a8a8ded7ad0bd3705
-28 1 336 \\xb6a51478a9f7ea0f5042a03fd085035e1b18a2960c3e66e6ef3e18c70d75ca6a1f3a7dc5c9d6b06f997dda913ff9c206d1d5c370690d7c85caecba367d14220e
-29 1 296 \\xa102175fbca9cc722734c4258c82b14c29e8e6cde1300b12e75909f079f62a193695e13b9c66deff05ce7b3622d86534290bc55534af7967a6bb77a034a29c0f
-30 1 201 \\x2fe539faf7771dcc34fd46da896901c48d0796c127e5942d22fb20ab1a52c69bb7a0177b957628ae4eb2858e4164893e5a2575c599422be937ff5d3d1f9b1e0a
-31 1 254 \\x09ff7bdad5fd36628c300f95244a77233786ac43a5cde11972e8b21f306b9b71c5068b0489db27fa9ba40970262c2a2969978a8b3fa8ec074c1629670ced5804
-32 1 252 \\xdbcaabf5424c48302a74f9c7f1b65d95c3f3e27457d6a35e02f3fdd89ee80f8d32d2e77c0f788f8d52e0b64dc9dd0ad38034216dd203681264a62fce3e656006
-33 1 158 \\x0c6cfeff038bdaf371ceb47a53347c8bbc4256cf07b85225d894651c62bcc65246f49f44ee10d1b66e0cd02bad4397c810774645ef27366b56b192133a909400
-34 1 178 \\x81f5498e9b653a61e1fe1cf98020620b783aecf98aa4c42d0495b83c8658e75319366e6b5536d1463b5ff24a5c2532a86905ceb8fb1941b1b179634c824ca101
-35 1 88 \\xaee93925716102dad82f3388aeed7b35d4f52fe8a882c13866e5e03069fa42d59502ec2745f1075ddc35dc0bd19225adda34e024ea73333663b80100edeb370d
-36 1 190 \\x65ac5d7fd3289a6f0de7c8e64aa4423de23173579c5a06beedb8cee0097afc462ff6ae62ace3193800ab9df90c8e74aecaa32b2d9eddcbfed27919f3a377e303
-37 1 77 \\xa4b1de97409a7ff9e1c4253abdfd1123384a7c0f8736c4f47d54343edaa6627934f48dbf4adc1aa011805677fbdbd6ca885c412e9fe1ee3995bdf2c211f6470e
-38 1 298 \\xf0dd9182157607729910a4176b6b624a85bf4fc5ba11f805264cf896a7627740a85662811cbae9df9974c8ba440fca15e27820a99856510378ee22062f012e00
-39 1 211 \\x76c4e2f18f9567ce78c47c3dcd6e63b37fe57b1b5c980a59981194ee10f416d16cc845e08e29fed591bb51a29cb8d8d6768b6acb5481de9af1ce3a6b54858900
-40 1 41 \\xa4c364673c9a2c1cb6325f75309d03df06080ef6b0c8982991db21051b1e98c7ffa0d5852bb11c84e96a367330a10eaf2f57f11cdfdc1f94a8d588266634a407
-41 1 19 \\x98a8695f11983994d8f7753eeffeb13e6237368289a04558b907150d48e743573ef42ae0d7e1798b78f1b5464fbda6252f2c94ddc1c0c0588d089891db9bd008
-42 1 335 \\x5169b96eff456f8a56d068af4a0cd95a3272504bc6c82d8830dc8cb17c638a02e80326ebcbd12f6e0c725fe0ffd0eecd4419e8e423ae844614d7bc70ca294508
-43 1 91 \\xfda0917ac08f905ed4f625e204680f8c6ec7da988972bf4c273816502b1871b353945ece72585850cae2dfce6a740e2c396173dedda0493409b2c519fd7f0b0c
-44 1 240 \\x4ebf817da5b58eaf3b13d587cfc6be826dc024568bc2bf5bdc51674d975fdddba00dedca01e92988ce4000fd8af9e9ba3f0dbb5d93d1da0686cb17f741257a08
-45 1 413 \\xb17c12ef0b8e269a933e956c794846f1be2197ba0c4049e85573bf15936779d985033762474eb973a7933b8ef1332e27aefe44e1085989f39b1c567631f61707
-46 1 243 \\x0fe31860fc6435e140c2cb81b77fa62a93bd2e685311d067bbda89397f3fcbea957b657b48cec734c53fd7eae3bdc2ce8646287f016e5bb74abc24033f08d903
-47 1 154 \\x62185cdc04eb4bbeab6c573b5048eb2ed352f873025a848a958205ea07fc8e1bd899c02a708255387124b99957373931da1b492a44d48a300b75dac92e75370b
-48 1 128 \\xaca3eb6afe5c23352ab802f6cacec6af14de704da734506f953bcca3e5ab3a3686f3338376872f5098700072f2c689e26726fcc96f218df12af693db0e55a50e
-49 1 26 \\x91f02e10d18e7681f0d9cbc921b6674aa5012352d352d00dfeb69fa7396d2ac07d5f2c9a428ccd95b24bc798fe04871e56f2c01b1c90212da731ee84b02d460c
-50 1 169 \\xbb69878c8e35bbc0e8fd582506ebe80c84060eb4a64745add319657af584901d8e5767090803c7d465c64021b0656917585bb2b97e1f9212eed3790dde32520e
-51 1 340 \\x2e7dd5c10bd46cccb909e5271357ffd31aaf6a3271c571ed643e0e5ab2e99f1a715f8fbb138089867b1c6a9b94cdd56a832b71d93f24777cc04d441624b1f10d
-52 1 405 \\xe714511755a74c56d4a3fac68d3085603b1005212efcb57e04842b9bee1faa57b72728318f4fa901dd8733d9fd1d8e833a1ec20775e156671ad35f93f5586308
-53 1 272 \\xfd0c0c87ce70f55729c0344f95e2eb966237ae6d0e1428895de96cd31273b27d2b0cccf64b916067357b6621acd6950bf7ba52c7bcb88b7c7f44a275fef1100c
-54 1 311 \\x2da23a254e0ba65bd67638613ea23b06a037690f564457ee74f81a064800fb399a3bb7f0e652564a6806d496632017df629b51102fee5f845d55d47470cc640f
-55 1 80 \\xe771e816004161360ff21bc2ff9a6f1c929772de1504aabef6b1505d897c837ff25c70ffaffba96be7990daff29526acc4a64aba0995f2f07ce3feeb8202ed0a
-56 1 1 \\x3df22147066e980bb915c9c0207c46c62d061a2b7356d84f29b827c533710077e9d538c0feab7aa9b8e62ee75407b220597eed386042f90ec8c2648aad6ba800
-57 1 360 \\x665dd03b840b76bd0f925a9de8bed71fb71834a50f430dbbb86f7d5fa13eaf5d069d67fc588cddcaf3c20e1312906217be24d94b6d4a2929b9ead4c1aa94e503
-58 1 56 \\x07adf319ddf7102ae0e21604e8535dd43c5667e412a8e4d3c2f46a298fa56c7c657e155efe34366264b4f5e2c175afc72ffad95111c2d309e36ddd6f52a43c0c
-59 1 10 \\x45f07f93cd48aa3f7cf6347adb3cf1be5f0cfc3a74ab2a4c8d851adcff55b5377aaa5cf967daf51b7571056d23ad925bb06ed1a5be44e8df5b62486e67735908
-60 1 350 \\x9a5458405f2094f4a6e028757f3b71c17752e49b46aeb96cb37dbb657801fecaed1d607ad3289bc13c0ab7e4f64767e5d2e644f6d2f93ed146c9a83b6ccdb103
-61 1 95 \\xc5ce91f1bd5d436f50287d36572a587280ce01a6a1aafb374a19806e5b3f459f2a7eac5b382043c9b9eb342fa5e631e14754848bb3d95d20b06d45294f6c7c07
-62 1 363 \\xb1746ac33955c9eb20bb0a61b149611c1182b2a57746b388469eb9d618cb4556392c64579f25a5dff0a32493e35bc2c5ccbebf268353071cebdfbf305cf0f502
-63 1 174 \\x5acc0500c600d9d9f122a15393f1d5f814274e962e96e53feb75367c509da86e0614301daaf6c849a3aa67e69486f3612a135e6ee748f8c666d991f0cc32db0a
-64 1 390 \\xc0f418868450228abdf38434a53a7d9639f7051bdba3eb0bfe5f490d867259a9400d26cddf90d8628be2774e54c04999a49cb936faf828e7a03282bfafc4f600
-65 1 25 \\x0365e563b6fcce85a03f689f5d7e4ad81d16edb760ee26d7bcaf9ed5b069207255c4cc1798df0e10f3317af37cc5f68250f5b32ed4e74a7ee204303955c74705
-66 1 357 \\x83d94dcd5926879ae7dbcda546c35c9c5d75994c34b7923f8b707041875ef7d62fe574dae666b18403614999e3b0c6a8593e79711395d8fc7ed42deab097d50d
-67 1 310 \\x62247f26657ba74fc30dd1917d46a50153d7c2963b60cd8e31787bfe5d6137e5647fec52ff379c2fc050cd570014a1ac7485321a580a28aaec433f4f42c95d04
-68 1 69 \\x6ed2d376a199e1b180bcdf790ad77a02e765f45b6c3fef24dbb793cb3f594fd99359b59a226f2eb12dfde1688e4c7a2f06dbe327e175abb550f1380e7d1c5f0e
-69 1 62 \\xdc4d3e6c0b53316a7710c3a6f586cef07bb2a56085872f3de7261980538b787ada0c8708acedf062d37891a78ea67bf95db96479122ee27802edc72c2a794005
-70 1 402 \\xa8b7dd455bbec0633d0d08c89d7f2c89dd9aa3f2d8dbc38db9f13c5c910bd05a9880736cf9c4ecb16b21993f2c7c750b4f26fa98bb2fa775ccfd8340efc8cc05
-71 1 223 \\x2067265c0ee1695f5a6789500ccac020b982173e40f8ab97db1adfffc3fcdcff16b06da6d5d6aa4104cf8f98d3bbf6ff2bd49ea809977b820ffe4da29e9e8503
-72 1 379 \\xedbf25c971f937ca6687c0c48dea23c3f69b8c33c70770c4a138b012685d651a1f869346f6c8fb58c9ab7e0d9de7c43cc55b7d2942428cd647ee881ea9664a07
-73 1 79 \\x7705a4d4c93a9ecd268baba9d8f7ff15b4b2eb59ae2e93de284b9ce8673c41a421221c364ed737134a68e96828f66f9625a7d0beb8809f6cb888775e6b2a7f0d
-74 1 54 \\x20343bf992c277cbee499723b40ca38b4964bfc56b82c9423b441e698ab4a306117d8d99f2766af70cb828f1d5b574fcd444f13abc38590bb6bf75e8da0bc908
-75 1 93 \\xa31ed6fc3063b160c3cb93a8c055747c3616a6b3f0445e0edd9d491720d2ac989819ce9a4f7556a3e74112f624d57ef457035fa1d06f477cce5340acbaac190e
-76 1 42 \\xa19c77273919c2b266fca4a022f77c44edc6c9193b08050be6f4a4561a298f451d0f14a0a6bb2636cb0dd391068ea95764abb880ac1fd7d3c3532bff40835202
-77 1 239 \\x5e7635a0f5fa5732e1c9f08c6d68722838a88a2c42c51ef6668b4de3ba423d15b174c1f1eb95fed6e192e02b73c5075cba9558bebacc62a5144a3384f5a5b603
-78 1 349 \\xbd54a00311111bf334cda65552456a7f00bd0ac4c34027e0c1cb6d325875e858f3340b2346f8e0e07e3c51ae7e7de918967852cd75741b40d74385a12f0dbe00
-79 1 251 \\xc7b6149127159e3a304894428f41e5a676fb5b98d12db03ad185d91648f574c7faf96f2217a9d3fe0b8f3a82e72f8f74e8d210b9ceaf9cd88b0cd629ae9be606
-80 1 256 \\x1c51c45907fb795e923e7f4a2f68e6b03499b8fcb0934aafe572835ca4d8661fdab62fd5c42a32930acb6bb1598e76727ad6c0efd49c421eda64e1512f55ef0f
-81 1 213 \\x781b7f875b5889311121cf050e32791dc9f787114b32e1c64ab5f03ec0313680d5dc3ee141c77d72dec05a2515299292f26ab33f78d60aeae4be9d92208bf60c
-82 1 40 \\xbf540008a56baee43e5821432d569e6368d5d1d3e171058114da82d3c958fdd830c4a3fb59476217c3afd606884f8572cd266c1fd3fd4073676055c8f1f81603
-83 1 89 \\x6d54f0bb237edf33d0d52de813b07d9c3642be37dbf0b24d46f72c6ebc3f2c5bb574c5309eb87fc2a1e071727bd0748145065a86361fd4b75a66e463e44e5b0e
-84 1 365 \\xb2fe4d389b3a11e0596939d47d0d20b41fa5ec67290590fa1deb0615fa92f9ad14745c3113346088c8ceab235bc27dac2ce875fad460595f47a54b9711959f01
-85 1 96 \\x4e54414b95bd1773f89d6a332f4159751fc1cc4c5795e665611c318ec5a5be628608c30602ef4a49295a3f932bcc2bca566249e4f107e023c29e291b144cf609
-86 1 175 \\x2451847f3643fbd484bb8652c8ba96978dc970bc1d8e1bdd0af88e807bb9e61af595ba8f293a822c8e4db6f523133ac9a9251e09b1b199eee5d49f406ffcb00f
-87 1 386 \\x1159bfd3552a9dfec92f98ca009575b338a697c4c9c2dfb45830d816b440919645502088ac028fbb9c173b6ef6fe5ecb6ea20cd27aea514149e91cd64b6e4801
-88 1 123 \\x35aa17739756600ebc9efaae7cc218975c685acf4fdafd6c28d09b283a2c6539e13b3193a41648b99ff182bb91e93126cae59d4610b778bc58834d3e70e3f500
-89 1 35 \\x2eb4895bd7b7081d2c16c0fcfb05bdb157e13ea2343c73300890391eac28c7644f55e4f9f6a576d0ca1489f4f7672915782dae9a93f1385548cf1339d841f10c
-90 1 136 \\xdfa9b893916876655ef56308c08b86b3c712b480d4318286cb1adf93bfdc72f4b483448850929c372cd2fab96a6bd27cc9567aa41d50438faa14bdee6dffa201
-91 1 203 \\xd10875a62059dc560b94d242245cbe729edfa1c5ba4e739694da1c294aced24a01143761c64e9f28e0b3f9bb3c2c2e4c9f886d889f449793324a9eba2b5fd50b
-92 1 262 \\x268d657dce741895baff0fd1bf4041926b38fb2c064e32743668b9bb0b07ffe0ea9fdb3c2da6590ec209e98df21f640734d1d665de2b9441fd89bb149b69540d
-93 1 258 \\x52d0f691c31a18908b9e37732fd6fabbfc4ed93934e2ead2c82c2f721db9a02a1ced9021a55e27ba947d18c3d08b9f2e091cf4202758d474276923a95303520b
-94 1 218 \\xece537997c761b8d47c99f84e75f18bc29d26eaf6ac29ad75d1bde66228b759f9e2de33e9627ee071659237e162f188949587df0002cc21f9428a56554434f01
-95 1 18 \\xaaf708383fb842e5952d0c84d1e51486b45361abba3dd8ec9a22f60cd24d2457e29899b56c8312a8ea3af38605196563db692c96a2768f727a91fbe407bfcc03
-96 1 159 \\x00c922d7893ab1174acbdc5c7c201a20c9fef47da24d1ae9bf36e0cae9e45e6b715d3126e5de6264c1e8f4161ee385dfbcbaec1f0257a7c8b6f256cfb0ce200d
-97 1 408 \\xe37de67ba5a7c12c088fb334eb395bd8b85f2f301342f2e8dfe3e2a9367ecc57e1d9bf4fe589fab9c8865288ffa13fffa17cf871b5ccc825455adf09bb28f308
-98 1 86 \\x0ffa85c817aed0bea174a4bd7e39e167b5176c56affe38ecea28a714ba3dab9838e5d5152b9678f09ed5faaff66281218d730846c856b8b6a53b340ba52f4d0a
-99 1 29 \\x77c4ed3b45a935bc1d9bbe86b0d1cbe9667657ec9ffbbed12bca1c0e83b97a2b54f698ebf54eb7c9fbe976331d4599dd4ccbf4b0071c4a285e96ac062e9d6b03
-100 1 344 \\x6e5e8290af53674fca8a145f78f5f9d780917a6861afbcb080a3d11b190fee3d9d94dadc5991bb63a96f7c16f8bb271a534dfee13be85cc15063b6c38e26c802
-101 1 230 \\x02c675413b84d62d5d4a3029636a4b6c9a61e0f76ecf979de357b5535701d47fa4119df7d839a809ce2bbc25dd7866781e402cb4150b563bed2f2e560d2e7c0d
-102 1 361 \\x0db62d3fb74e1f4f5b8c2a54aede978ffca4c37c6be091a4bf97569469a58b1cb9be8ead7b5985ea1af378bbdee299c91d0a879e2ee7a149936502858f00810d
-103 1 341 \\x193767d67b1505d7b108e2f0e0a347532714b503b1fcbb5a44363a7a4fdb53a406c93cb803329ac300c7b09046a98f8b204eb2202b5d668e073cba3f21fd9a09
-104 1 151 \\xd578b9af178b4d1c1f894932eb51f21af0d5e6879f2bf2c570cb9af6eb1cd7a11f01e8e33cfaa4785a8d19e2e79ff93de9e6359b3a16314d867063c86938990f
-105 1 52 \\xf3d9d88573a6b38a61d525b9384b58b553798c523865b30b4e6d3458bc1aed83616186b87cb2506815c08bbf7a7f0f741f3dd7861bd1dba850f41cdf833b3d00
-106 1 179 \\x4b2c480f90aaa9e13f5777e0f23f2f4e88defc7f1a18728c3570539d1e664924c40f691d680600a8e70e3e5666861153a573820a76d2cb2fb277c4d5d57cae00
-107 1 163 \\x11292b021cac955c753300f42dca7bc1d43188c0e1c3f126b7a28775ec3556dd64d869d7e3a58b6a8661579660b724df8af69598c05c3d9f3d3009297200fd03
-108 1 198 \\xc8f9cdeed19d322a27398476abb08f56901c12103deb2b03c4996faff36037019c261aae94c9e0d986e4f5b8d7c27723b65ddad163a3b0f4ccca00d60fffea05
-109 1 294 \\x2c33d9b34fedd08b6f3a1743a2d0e22aee9313722afc76f35d83fbf00ee6a0e42efc33737a0e88a5ba3878806293cf4635eb0ffba156711ea4e4bc51b113b901
-110 1 162 \\x2f694a0e7f55b01689620f3ca7ec366a30cb9dd9be8602a65bf24194317368b08f77a48074a7ddd4a1663a49e130977af5b9e88236ac17d1dd16b7a2159d0e01
-111 1 146 \\xc43f264ecff361ad44b942ffed165cd24bbb0bd8be208cb2089424983faaad1290d19e8a99e3c1ff8d414534a4bde1019363450c6fa126b9e36a614695198a03
-112 1 204 \\x8e314e20d5746c04fb4cff77af91b297252dcc33fe9f71a1853e45b0f9d05be96a2a855ea28d3b39f1841ecf5446e08a31421e991a5a9e9c0042d3382d865c08
-113 1 325 \\x8d4b15839d795249fcdace4e6885d806c40dfc714da8d0a1af03cd789fb582078c4a76667b7cbd931f5f9d2949f6cc8a4217585a08022442501475c590361c0e
-114 1 387 \\xe4c57f483b23d1ba397aca886821e046889abdc545772273f1c961218e3a8a5df0e5c4b8e5ccd57d3d97281d33798b96c54b008a1706781d84de71fbeb5e2e0b
-115 1 191 \\x4b81e9631b13129e6bca67502e36cd6b61980bdabedcabe874f9b44ab116224cc2a4b728f643a8f29897f87d9759a58a5191b77657c42f80ad4431e743e93c02
-116 1 409 \\x3c3bd4daf9509a4e9f14e22e6732129afef5d08722700faaeeee6747535ee9e323215f31170924e0b763eac93a5ec20c7d4faa454d9ada8dfbac0fa873557901
-117 1 406 \\x7e6e5e48f5e7ff214080d73e3ec665fffae73302e8a667733e3932b9eb6944828fa9b491c100ceec912d8946c6582e596edf5ab8e47c2429c0f48ed44575e405
-118 1 334 \\x96c2b8fe3db0472cd6c26ea15c70778ecefdfe495441812a494d03b5a421ee3f1debc63e706537e443da62286c3c320298ce774e6810ffdb35fde68c0de3010d
-119 1 395 \\x177870235ec0ddf6271015a16fbdb6ae67c88f8911caf04495e8f6b495659f734680cb4441034492d029f24f1ed2bea96bd6405ce2c2d2f33de602adbb97360a
-120 1 273 \\xc63929aa9545ca47ebb8cec0ef155b9f58a21afad6987fc094f917c3309f74cb465193aefe8cab36ef1cadc0d9f683480690418b9e1568ac4eabad373d02ec06
-121 1 388 \\xb651ee72a70fda5610ba4ccf7d51ad7c56031ab28039cdb0b9441f77f2b0ca31772bf899f21b17edee117ed68572b6e230c1dc599bb80d448a25f24345a35709
-122 1 255 \\x9df888d84ccce92950c1736b4e5b349262b6b0e8edff9d4c567a7cbc827d7e716cbc646d50abad96ac66a471a88174feecba9310f1519a4313fa49645968ca08
-123 1 353 \\xb53368a38255659cef0407da744f8ea402301eb922f4ab1809cd28cf32402421e5ebacf0ea114b94257c0408875085e855b27ddcdbea8d1d33c81646b1ce4602
-124 1 237 \\x5376b80a7f7bccf49f941bf35bd1dd1ac61673673f338dcc38efd20edcc841e1a8082670ace28368277e400b06a4d57f6e6863ab9bd76403c8aa5be898d8ab0c
-125 1 290 \\x50bcde93bc4c503d7d72a2c066511246a93893e02ee3d79d7b5dabc15d8b9d93032ceba873efe626e7645885f3a87300d35787ba0c4a8d435710038396259f06
-126 1 65 \\x9c5973b71930da152fd2b8d610299eace7ea48c72ef639b83a41b3a7f801ce1f72f46646dcbf95f8dd4885bdabea02cbc83e88bc362adc08919d1cfc04382a07
-127 1 51 \\xc965a09be31fda585007eb97167703092bf4fd47b83741aae0bd69c8cecbd9b5240c9ceec26ba7a49885369bc09ce056824f3ed32ca7345e9827b6cdf66eaf06
-128 1 196 \\xd840216ea64056ffd5b1dd876cdc15eb8ccbf7cfa3ab674ddb535ceb5161d4d49a4dfba4f95ae2869781f0944f5ce1b7b21c75b3c104289a04d1031612a77306
-129 1 184 \\x883c1ef81fcb10539794350afdff84cd84518f553d8f6dabd52289b9e381d53b623e72cf4aea2b0bb2e4d974a6519a94ee1c8e5f16fd8d0aaa36c37c68d4db02
-130 1 278 \\x628fc244f19f2616508ca8be9816e75e49e0f341b2e6cc59ae60425d9178957482396eac7caf0a3dfdc87321d459c6aadf125734c47bb18a36e18f914c480a00
-131 1 233 \\x30c9346b9d9cb1ed0ccecf186ffbf60dac3e38883abfd05dbe9f274370f6d151b4eaf396441efcf7f1ce0f6ab261ff3ef2f480c7721a13f4c4f451f3e98f9907
-132 1 153 \\xc340e42f0c42a4cb3cde90f1177d31dc5d8aeddc2ec8f581b1589bbbcb15e42ea7a11a37ed147bf52d9f33d044751137fe214c6aa12e9466c8b6f476ad7ed207
-133 1 195 \\x0b92d852d7998fa547c0107dea9d9dcca2f439c95f7047a80ef0ee2e5d2d4f3db5e2db3872004b9ec00fda6e192d8d8806a9aef4687de82a089524a1927e3003
-134 1 248 \\x7e49e9ecc51b5de856094bc9193428635e7b470a2b9b0349ee75a8e8eed6c934674edb1d1e745bf2857c3b88bc584b82b3158268bc29ec0d62818b1857914503
-135 1 149 \\x0b68c947f2b359b8bb365dfd4db79cc310d4cacf77fabbff517c0c4eb3f176cc1e7bd6a478c262750e2892075a224b23011cb2bf6ae857ca793b66be2b62a206
-136 1 150 \\xe563e6eb99c07efa6e77616f33dce29805531b3fb8e9ce4b3b3c4e95884f112c33b8dd12b1ca3045d08307dfe0eb275a0a56ebe9d0085fa97f27d37d2c9a870b
-137 1 194 \\x8686404874fec5faaac09636fdc99ca51b3b47acca4dd5e99fea2b6d85e4d202433595f3cc79c2360dec1fedad4640cf338820bdf99b07151940692891a82702
-138 1 253 \\xa167d695c8eed79c598cd10896277af8eca3339ee638e78a02fc1018b337d475fa216d50df1e025837749f10ba929ab73ca05445fbb05f507ca236dc4ee81b0b
-139 1 139 \\x315fc9cb9e7cbcd1794813892bf902c67019fa2d81e1a0e2e6df11a0bd4229322c78af3c156c14b28354eedae50bb15549aea68100379b6a76c50892b1648908
-140 1 47 \\x2e1c540097db59300d77ba09f183998bcec911679feceffd989ba81bb4ff552e0de2ae8471edcb12bd29527c236cf52e958cd3540ec4b5a987b63da0fdd89903
-141 1 232 \\x7fb9d960ab49fe7ea99496e89cfc0eff6fbed1f1c30d4b79057321f33c2c0036a50f8705334e7af06310ecc5fd57fd9f99105ed3877607351f31062b6c066505
-142 1 337 \\x770b3615009129750c53cf6b213782df3a09cb4b317263649de1d7e4d589ffe9d4d004ef937a2ec6a3f9143378f64c9187ff936c537d1403da735ec65cc82d08
-143 1 327 \\x0536e7d6bb877b9cbb65e32d898b9634fb80e213864d7da18fcb4a2c9c39aab80e1829af424f6578a35c77a85cc7ef61d69547f5e73c4adea01fdd8e78a01b04
-144 1 30 \\xc5cef7f548a9fffc2edb6a1a0571053760b23b2d6c3f37dd2d1d56479425b861b3557c77b4c29646ecaef32b9b39a4248bfe266cadf7b4f235cace462886b001
-145 1 333 \\x2d9a999ffc31ac0288d69f4441dea1c934a0372a816f28489fe92906273e9b2c388c33f1fccfeddc2cb7b2854996e6fcaf87a33aba1f78415ece72e561fa150f
-146 1 5 \\xc00d3c93d77b4c120ba2a64dac5059ef101deb49d9d59bc7a6df49b5d2f2011d8205b51c742e4f1ac52ba5d45edfa848c9c7d5d1b9b10d3ba1d9b25b3d9cff02
-147 1 15 \\x91d8b3aca41c5199397237c39f5fdad47c73807f3d61f8cb33da8b52858c1ee0d51071a3ad1a272ce7fac6c4bf6715f6e3a0da342ceb0a2271030fe0d5743500
-148 1 317 \\xc3e29af0f3657c6a62477cc7b0c6dad8d6a72585029f74143ac9ea7aee7a5f232b013e5faa5b1ca6e78a8da8589321b2ba0abf38d75714e1b5c270ed82290109
-149 1 53 \\x5a37810cfa69b4ee07290291e561748a29571f49a3b3f1fcdd4993adab371adaf1f0d0f6c5f7ae5bb57855e250419fc13148407488c7f9f14eb891cc8c86b90c
-150 1 314 \\xad22d20322cdf2f0106228dab3233093264c7275840e40a4920df4518f2bb97e25dcf313651682fa17aac9ad9014c97ad67d096f94ed121f7ffed43d2808b308
-151 1 355 \\x490dbadab6ffaeb446289be55158115cd67b28c1d3d092f856754bc3b394bbb5e940eb344f6b41280d0ce3595885a9c6ea9330b568e19291b45e2d08eb6da100
-152 1 192 \\x95516fab5967e66852073c1745337076e53d64dd32f7843fffe76b5f200b641356a2be63475295b9eaab3c8da0a322019c692b54486acadcd461493716ae7f08
-153 1 312 \\x77cd41456b32ca3711df80af5a5027b5cf87b7ca49fe4da6ae05a1ef98994644670c5ae748b842993f050a87257ba741cb43159034bd4f8bdfafa1c587c70d0c
-154 1 323 \\xd989d6eabfac52fc6f3d3c49af2f3352f1f0376b94f0b92425b3d565d3a7a3fc60ce4d247fc6988c035d638fd9ff1cdc254b4cdd128a7160c5c3865cf11fa20b
-155 1 313 \\x0bce16e993b8a3668e41eaef86d7dfc581eb49a1a332139702bbba61e740334d77a9ea8f503981c224673f24966c5838ca03beb2be9321e5b74458552c8cb108
-156 1 295 \\x3aa1c3250003ca9f6f077c566f6df69967131e071d02c137db18a8aac2149c529b02fa349b848fe21ce3e8c74bca68669f06c9e5490fdfbc46c9d916ddbaea06
-157 1 364 \\x828663c68d15b5bf04dab5e11d0d54ae46d61a44a863cf059729d14f9c38132b530c024fc1df624a08b3eb20b873ea78b6ea1383067e9148283cbab8442e5c02
-158 1 171 \\x130e4fbd32748dee72876f64ae4b6d0fc38b802e6374640078e4ea4dd4c96ca25e68fbefb1f257614c2be5c23a712472c8b40fb1bd67b8c4a21e64ad38f06f0a
-159 1 133 \\x855163031c63721afd67b86a9891180b0e8fe3d940c670da6c6645ac4d3e55cc8e44c263948ff97727d11fd0faffdda7becb0c85cab8cbad9a2a76bce62cdc04
-160 1 4 \\x1307c113ea7760171f422cbf0496effea426a9fb4553a14b822aec41be88693e3819b00feb691209e902ec495bf9f602b8610265a13bfa67d948bc7ee24dbd0a
-161 1 108 \\x7fd5ab753d956595a48439e9e985063d298e5820c5ce86f0cc74261242c6e0b5f63b3249d2020bf77e68de101f2cf1fe4494410f34e963b3a1d8c79737b73b03
-162 1 113 \\xcee006fd05760bd71c7b3f5988b49735e3e7b0d4445a6221d75d1998f09b8a22f0d4a89c205b31b2ed6a5f39bbbaef037809a0dfb5d4d2fb87cf85859b803b03
-163 1 160 \\x5e8eb311ca6febd61bdafcd095729a40b441d85ce8f68832d6fcf1c1d2d6c1fb2b550c8fb8adaca0f2ecf998aea9aabd04d06c98222d454a875bc511946dc00d
-164 1 214 \\xde2bacff72f2f478fb81cb40f77ef1484d4ca765c5b881c374a11f14d0d12899520e31eb1a93b317ccbaa490e1b3bba8b0fb42277164c2c12543b9dfc2c2ac09
-165 1 57 \\xdb7c7e588255b1aaf97c4453eca81d71a77e12ae48571e470fde03c623717626d7ebacf0fd26dfb5db42f1c2e50ed769a26ed5b133ae189ff1f7a11c9fb52b07
-166 1 259 \\x334cd5fa01406d76dd114a4b6fcf37766597c7442d6ae35d4f70cc9fa8d25b05bba9f100da2a76034b5e540513e78547ff2d883320ecf914f4710dffe1ce260f
-167 1 321 \\xf7555f591e9702937b4a5608e9a8ceb8fe07363f4ad2966773f7bfecda918d097eaf80453aff9bf7a0bc62ffe7503b47152f3f2341adc27482b7099595aeb404
-168 1 375 \\xd220c4aeb3e5514fd65dd418a191ddaddb5b5f97eb0d91fabc4cf3e3a0da87bbb6df6227fdcbf737ab08d084b03c79fe6f15c7058d159489b2db0b0c16b25505
-169 1 172 \\x16f60991f302ad75c90b616708547f1ffa63ec3d0d49490480d20c1b71f2437ebad4b34e6d6ac1a81f829233398b8f36949124e0d2a5c5da440ae1b3077fd109
-170 1 87 \\x74c2293a823b1ce99e1dbac3209882e2c15527971430d71718b6f91fcc55aff7abbc997f72d78e46405182d73b7e65fcd9f43fc1fe939a49600b67fc2c1db009
-171 1 182 \\x20f6e2b653bc32a6f0675cac1cf4e8e4a552e49d6cba0087f323a0d1bf1d818027651b12c257ffcf280a54d6e21d874ae02a232b81b2cffd28b515f137d58c01
-172 1 281 \\xf72cc4de82d2aa0370073714ecc87a2a262abdd552cec321cf750b18ef709e481fb438adce786a5bf2c46345d81f0566c1620e40802d2030a342c181a6a68307
-173 1 316 \\xb0bee147f7368fdb0c6cc70d37240b8c15cf5cae6cf3ecc99b365a3dbb5c7cc42c33fca17dfe8e639059c53b4f68316e87d0a7b4ac6e4ed9e1f8b0a017a6040d
-174 1 410 \\x9544a67e2f94a28cc02aaad0deb3850945113d2f329cffdb20d5db7b7f175eba6c0dbef356e86150de7be0061f03a5cf6a3f1244eb5075cc929246a80b5d3204
-175 1 288 \\xd9652e6d460d474a0b830ba6c5267342be20280c108d78fcdfba1a1f6e19a8bd3b48a7ab9dedfe6fced38ad1382e211d5096a45438430bc6a042b3add6a18a09
-176 1 144 \\x16f2b2c2c77ff6d683f3184a5920e677217efa3f5e99db926bfbbe7dd5d6f86a79f0b41064035cee643a450f251d9dc59a17e2af71abdb493187ef2146dd730b
-177 1 135 \\x79eef86cf7c985af2e2be51e4eefa7f462a24d718fd4f0083d1b2852bd9602a86dd1146d3df5dd7c5b859c001205bb08e960588362002053fd60299ada941103
-178 1 319 \\xee9275fb55eef19d82b4a1b91b0ed7435a0f3253c9e2dabc45f8ba167e4520a424329e7bbf5c6587505d9ed0741481b00fc92e1f5df7cba73d02d4d2f33ac504
-179 1 188 \\xf7c0fe504692a60b426dc3009a05d72ea603534573ace1055ebe556672bed0e3fd54379a7ce105fc175cad6774f422d3a4906dd240bd1ac184767374a992130c
-180 1 270 \\xdec12e7884f77784b18e1baf8292d919280d6eb560a62c453249804257e26fe9a95e8e370c5c76ff5061be73df4a4d454e7e72c7116afaea013676c7af32c906
-181 1 12 \\x5c68d3c89a6b4db57f222db7db644a361114e07422b20f70c230eaf5c04c0141b13cbf01532c0270e122520e85e1ad9ae61c0d1030fa0bc91137a22a508a4401
-182 1 127 \\x107bd5d4c326a35d480dab4fa73f46d64fb18b971535244d3ab075994f90d6af9a647e83de1e846b61977d67d6e24a73a62c140b15a4b9455854ad25850ec507
-183 1 67 \\x4f58e48a21e320dac381407418b1c844d5b6d727bb7d1e646f403b867a59cf4decdf61d451cbf8c201b2c9251f63f0d994706eb111ca347a353e936ea19e8308
-184 1 261 \\xfa719325c7a07a5931507e1eb9ad61ca17d3f781751fad52be1ac2391912f754a68a6de95a75307ed77f907981ef3126bbaba05d1608f5d176e734db0598ce0d
-185 1 132 \\xcb8a91fe91c1c2a8077cf08d333be4476127c7fc699c162e1b23bc68722f02974840705ee0805416f4c866bc9c1e8b168347e2d2ebfd78b4d3b5568e1014e60d
-186 1 366 \\x27c187a352d86c0203578d4465f5d42774faa710e0b34b622ae592d4bb05d321ee3dc5e97e5e455d13c22c0d6bd21b4bee125bdd2c41b399188fd74e1f13750b
-187 1 231 \\x02e5395b8e3dd92f8df05ef628f8269506926058ad18d4edf18c72ea40b079940e106d74e5913c0c4fe79363435217a532f590c03f9f31b66d60feaf23c34a09
-188 1 371 \\xca999c1e34c27f5c829be149b1e19e49dd844eb9b7d79f405a11e9e8798c5875b5b80900f3de464f9cca30179a3a38b2202574c898fa64b46776d38bf008b60b
-189 1 138 \\xf3e736d00b4242bfe9cc299879eebcb06bca6b88cb0099b3a24e8f1c6f8fa93825ab156554d529cc539b7267b7af35d5912996d68bf7df1f9ecfab600bd54006
-190 1 105 \\xf7f932c89585f253a82651c8722a36d94f925c16b3cc4b18006c21fea95e4bae7f8bfab72767671f4462e45b0c0b4ff140e410dcd49de4b5e12db680a6d7190b
-191 1 245 \\xaa35aabad330c83de015f1923a16e9c2699c099d7cd2a35dccd70d3ccacbae3e6688128aa0dd6f3588e7d9600272f903c6a8c434ffb5b5f6e3779fc9bef65f09
-192 1 234 \\x7b9243da23e19f529c22695914134c74174e9f73bdc0cc49e944915b8768e49473913577984276cd571c2b0386cc254a208731fa4074a37ce9c5ae6de993530f
-193 1 267 \\x695fbcfd1bd6d5391ca6e7a4267627bcb9691c6b5fa834b3ac8a29002fb981e7181bc41548fbe72efd13ffc09032cd71301e1e61ad12c6a11624aa5aa400f30d
-194 1 301 \\x3445fcabe03bbf8d29cfa9cf55a2cad98ce50707cd30d939219c05f44695f98eb0be2d3fde27ebe1703adb7f12907e1cb0a5b792cca1ff7061ce0486fac1af0b
-195 1 277 \\xdce5c31552e38eb1d30eabfc7cc2ce9377ea52e507a6c8af3bda3d5a0dcc32fbe5e04fcf9a6eca0b30f271dd471957d1adbdb99a09a5d34c63a6dec1453a6507
-196 1 16 \\x79c38d3b6420f5b0a6b328a4a6241ff12abc02ba3abc9b1095ca7bc5fec5863fb37383f15a639a0280f9573cb795ac9ae79bc49e993a3e83fa79ab843276e800
-197 1 6 \\x90cd5eb53e175b27496e47167ef04f98002fd0cf8788fe5de79f0c008de7f32e8fc73894af423cd3403f4e12df82eaa83930cf313a5fbf214f0c8711f1be8f0f
-198 1 421 \\x9d95fcc59969fa816a652f1eee955f6bddb3648b12734f6658cf1ae35b564d907dd182bba149ac1032895570beb234b39db6ed4745f0acfb47e8ee051def2700
-199 1 129 \\xa00c2068f7ed7424c21e602e2e0598cfe0ba18365cd4dd11fda62c1c610f52cbd8e71dc7a51dae76f04961a59b286b7cfd466ee169284f4938790ea8f1207900
-200 1 39 \\x0d6155d494a46957c37b662f735af77935e4b76648ab613dec08068ea85f2fb3b5f895d020fdb2fb09d871edb4671b80db2028a4b4bee09569d9a298398e6d03
-201 1 102 \\x6fe600c8780732f4b823cc1d02826e30937051dee3ccbbad0e95ed570398f22f76232a4a1bb2ce66b7ba222afb1ea5efa4ca88177cf20422c4413773c8456b05
-202 1 362 \\xbfa31646f514da3e09089d03de4ad20d729e572bc96d8be384ed07269a5e0a3d68882e8b7e0bf864c71029f068895887c0e3f356d4cd89a84e964dfb7e61c506
-203 1 271 \\xabd6f90be35df4a7498e169050a532bc17e530faa99008a6d733b94418199065363f0b8b3d166a1edee139beecfed217b994429ca6f495334d2951de1bd8da09
-204 1 73 \\x59ab57e2dfa5c1af86a8025b1be5bc81806e5d73a600197537331ab4b8cf9e290058f6594aacd449e35ad9486f56e78cf204c091179e9641d2915ed6415ea001
-205 1 28 \\x02c8e944c6e655926602d766c79ee093c4ebb4b582de74e886dcb60c67f5b066072282800dd259f6d6dea4d567a238d8199620765e7daf66d50eab751c025b08
-206 1 419 \\x48fe79213d15321726bc85ae1de3286ae6181f55da376a17f9072a912441037e3207d21675669d6e2032e5e48acb0380d275cbacc517de205bf72d2f6d93ce05
-207 1 3 \\xe134bfd9c3f010f905db042f3e8009ae77b8c12b4362e596dd2f6eb4c1f9e2f06d84a29e5653dd87b83ab7ad0c48188796b517d731095dbfdda32f7932377804
-208 1 423 \\xeb37072737147763c4b69e4ff741b334084ee4772a6dba766d0689ccd5a4ebe5a7e8fdbde6c487c33a8d41af1aa151aeafb979aa45ba53455247090bd8d3120b
-209 1 101 \\xab3bafd3d6358c6a7f735a0f34b80a85c4cfa46cf3b140ccc22715ccbc426ba2de379ca4148b1b88fe3354818c36c2e81efdbef33a4aab1cbf4b4a9f06c56107
-210 1 48 \\xc36396d375e7d185967175886ec76a9ef86c4bf47657f627fdcf3e3aef041a33ddcf0c9c661cd0ec20e1a4f86620210cbc3b5596796941128463d3356d708b09
-211 1 263 \\x0d1d27c649ad14213eb921b7f80cebba85077647955c2e01b63d512d914debfb9d43bb2b1c2d0248c45805c04a175a69c6963afc63e78449b9a7344bb51f4203
-212 1 119 \\x37987927b322f2520f4e2924fac6ed35c446f9137bd563caff1d1dfd80b8b0b2edf704b8147eaccd2e0189a552eb2c671a3502016d6507deb57e60bf30d8690f
-213 1 207 \\xda1053040a7baef552a52bc5735ea580eeeb28c359bf51e869280638ef1a96dab4d090f1b1a63e2053d36c3ca1773d34d10fd06871bf659ee9b6ceb5d81f7e06
-214 1 352 \\x6db9def4db5133946099ae3de64099e68008562b267ca135fa5d1638cdffab20232b7add65db43cd4795c79c782c2b0ce36743d04adcb6f7f0441577fe9ccb07
-215 1 264 \\xb60c358ba18166f82f1645e8c4f26777505a88de21c6d22a4b5e925499550e5ee94f4825f09d90ede7b2e0864db6f732c9b7747179c5218988a8d9f6daeb110f
-216 1 114 \\x8dece950c41f8a39ac7a3285a846abd46475b8c91661b33c9e700ac3e05196d3603ecd7ea93af65d833970c1edcf5274b18970e97d3944c4dea4cf9ae824df05
-217 1 111 \\x888978574af2f5a448e9cc0ce014fe6e674d30c39b02d2c59b31b4e359c70e1f25f44a9037e7bd706bfc95e11001a558fa110fddd8ceb7ed1785d8dafb4a1809
-218 1 71 \\x10778c60ae02c22592654b30bbc8c5080b4902bc2072046173e3cacf196450c169632186b488addba752a2072857f33e284ccab61b540b1688b674ff33f7460e
-219 1 83 \\x3e7bea11dc09f6255ada93d6b421fc48361ff795182e9e800edc52de33879cebcfc9ec3decd9e9a784cded3541835d07734f6802dce2d130e773386a841fba09
-220 1 220 \\xa4c5648e79e6c4d6c483f9b085f965875a6bd5e6d049677a65e8fc6830b7af61b127a00e2807068120d786b24ab46e76c0bd419f0d18971e1f20b115c12f1901
-221 1 416 \\x87d6c02548175b20f8e20c3d30ed4be52e9e0a565c7fc4a4af68e18b5ced7deef8323596157ab567567f773080f546d18383796118714d9860de2f096968ce00
-222 1 284 \\xa9ed7ebff702a89be843f9eaa4bbc18d1babf02d6dc6ecc344e85c3cc24f000675bd777a5992473a8a933a3af5e9f4a0604a460efdf039516eb9a2fd45145f0a
-223 1 417 \\x0913f7ef3efc6c2ef8326ea03e835f31c6cc1a5b3efd8ca45d2cf6027e34f881241145c425d5adb1edbd4ef12b7b32087183a1cf502daa0df374a3c703d61505
-224 1 226 \\xf8eadb3898b67bd9030ef22f4b9b6ab47576baa9a9da74aaca1e223441d6d0a0c4cf33bab3d77de86dbb043e5d3753ee6c4c77b8fef04702ca6a7e2009cb5807
-225 1 120 \\x700968d383ea05a60d30a75da681e0858450e837766ab7291a2eb627dc2fceb84791ff1cdabc52676ab3a58e756d5520e38ee4338450a4c5af4180b2160cc10a
-226 1 110 \\x6b1e023b8930e116479c74e6df7d892f1ee02405f0c93d48b1eaee5ea19c6afb047cd0bc585f5c9564c913d2106784b8c0917dbba124603194fd8e8f47ddb00c
-227 1 356 \\x3160f7bd6fe14e8b4ee77ed183e6ddd1d67fea3a4a6d51f7ad00de04fb23532e40c55693a6553c0475aaf5db54175910c9b762e52e3159d3af38850a46d6100d
-228 1 31 \\x81f43cfcf561b721ef253ec9863611d8b3bc295b4d7854b9e57f97e33df1ad03483322f0b8cf07bbe79b5839f2d51f152d224a9c874061c4fa61094e37c75c0e
-229 1 167 \\x063fea6af822d8494814100e96994367978a653fd3298715a37bf7ca47a8c02bab7009c75407b743bbb6db72ef519d6f0bcf2b3321e6cdf7c2b7bd58c5f3830f
-230 1 121 \\x70f5873252d421732f8799fe928bdb688e6b6567568dadf9bbe9ed1a4c0dc70a9abb4d9b1aacb18959f73e34aeef62a81a41278c93876d049e19813be8dfc003
-231 1 358 \\x0ee5909843eddb7bc8b99701cf4669f114fe2e85c8ca4490a7ad94c31784afd0002f85d1e14ecd408f1567959e1a0ee1fe56a68f7e4592099babdc68b16cd107
-232 1 285 \\x5384d51eaa9759182661096efab6f4962bf02c71c041f5e7dc4c84a04f105c6c3fc35b3728e7ffe60f1619848583aac8bcec3f9e61ed8df9bd40f34653149900
-233 1 117 \\x9c2ef19a05ceeea1874ad56e3471033401b6ef714d54054f43c8d8ee93143581355bfc694dc184f0f311259735537650d4238e075d2b5bd6c0b3c1fdc78bfa01
-234 1 367 \\x33c07eba3e8fa15265dd595f4536c48e5677f4963d166d5220f3b88011b3dd8483c1c2efb396afcde55a6aedf2da7c7792777f1ae15c3dfd5065cf855c622f08
-235 1 200 \\x2d8b2ad5dbd3e7a23eb28dd75d04c9e4666839ab5d84638959aad7828731311e1201dbff786d11a2accf1a2454d26202dafb6f5b95ff4721ab78a660e50b770d
-236 1 147 \\x376135c9a51f823ac248cb12d99fd26dd4e4e91cd4a339d6bb0bf1d4764f7dd596184b36657ecfa9cf38016ab63d3de12f100eabd3e3f8491fbab5b523652105
-237 1 332 \\x07b5cba414811c4e2b29dea13602acf3fc9cd0f525d0741f70f48e9a3ecc86c7c72305e06b65fea62a4c174cf66ac7d4a0a11e39092cb59d719cabfc5c0a5908
-238 1 165 \\xb3c28ce399bf8fc36b8513d9a137d515abf77a36b4a3c1ee575cae26053f707730b06377db419f9a9e4a6f406429774ad471f85affa12af2a2c8788dd61fe103
-239 1 64 \\x5fab5d500968d6daaa203d56ce118642a0b3bcf0a35931d74fd752024ee4d5fefb94afd7607501548a5629de0106837b4f0ec01919b8597111a4c83e40ca6206
-240 1 177 \\xb763b00598a6760bbf87ae87f9fe755ed72483fd55d157f7bebab2fb256bccc5ba2d90940e5630ed15de18335d6fbad68e1b6fefdc581c0d702ad9ce0afe7a0e
-241 1 60 \\x3927e3351d55d1e39e072e9b8756fd158b886df9d8b7b6b59cd0cdc2fb74f708925cbaa9f841651e6568c28a1d632b68eb2f7a543a6d59d50216ede8f16b4003
-242 1 193 \\x1c539e82a58e42178f725c8946e409e7a345c30eca9d003d28baeeb8738f028ca6320d09caf5f7bc20b596e63ca465e30602a6c46ef5d18be4cad516cbc13b02
-243 1 134 \\xece0aad4e4a2b149917e461758f2ae3d40134deed7978a770f894fdbc4b77140319054b0464d2413b496c3fbe5f29f437b4c1a771abddc646466711484c07209
-244 1 45 \\xbc0e3e74a2faad9d90f6fe568299370c6bdb78f3e4a3db126c5d665f1ae8546d3c5364431b73d1570bfb194f5ea856777f226d92eee66e965df9a55cf49bac08
-245 1 238 \\x6f93e51af60b6660ada87e29973e2283f78f671a40c2722454dbba2bea7fb37d4044dd427175288f5af39f2f74f14e5e44707441ddd71e46cad2a54735c5a007
-246 1 279 \\xa810623ec3529d424f4cc83dc72cc32884f59376900533c4b4646393fafe97bb8e12a85017cb8059ca64466ce20a76170a4f2bc682790273007e81bf708c350d
-247 1 46 \\x02d6c57f783e89a429feb3eb1b474da6b05bf25c168d8027a019051bdc3e6bc555ef6355e014cb4f17202ef352c8bfbb2a6fe69fa593de4518b8a29b62fc1e03
-248 1 286 \\xb2d0665094d955453d131176065e3de794572f647a41aaaa0e3c6ba828d899622e704ce059a6817ae9755a087db11c4d52c54157ad09ba61b52c9ff93053b508
-249 1 49 \\x247e432caf237888cbe19a8ccce0e85d4c289a6aff9b7368780a27a81f47b8a9c5bdb5d5ef1aad3957d5cd869005a41b947c1eef8caf1e368aaa0cfa31807f01
-250 1 74 \\xfe2275fa4f8aede42bf8c0df5b46adb59126874876dd160fe36ff40a58d3743bca1851f4b16e8be7e8bf02a8138ee3bcce344b21a908baba63fc2bd308d68606
-251 1 199 \\xad08068a02fa53bd04226e15258719348c93d6042b997e9ae750141ed25d3647ce3963cfa1dd805b961e46051b81561fea5ca2e2f6feca6940e7183ecd60960a
-252 1 50 \\x7fb767d7995e30ea96b6122038e216686a87db7570106e8c4f3401f7f0b640af47c1704db05ba34f2e5594bc1472f4c2765ef15c59167d9e159409cbdcdd2103
-253 1 94 \\x9fb603a3df2838e72a12643435af32b2d0dbdc312bae6f1dc7263212311f62301b0dd7d1d02399f42392f1e4399e7c6407a00e4fbce0555fc572c9abe6f24d0a
-254 1 269 \\x7a02f3690841d0548bd8e6d53e4b112193361dc2d400cac95df50d5859dfc8749ab5d853123c75319da9408a0dda801e019f0e13c8b56db080271438b557b601
-255 1 142 \\x67f1f4bef3157518f2dc1830f33ab5143eaab5835b05f44ed1e3cce7bf9793169e637443074182a4e0dc50b82db554f2d56fbc84d393497ac39eb3ae1944a501
-256 1 61 \\x44b5013ddccee213e0b1c3eff26826b97238454a52cbacb108a730439394ef4c8e3fdfc900734b1ff398e92058e0aea4b40a35ab592a03fea23607fe8be06109
-257 1 103 \\xc88d1ba8820d3c6c4724394cf2f644542053071fa7ca6101dd89afbe1f40ec2e4457b7894e229ad8934df4ed48ef84845db018a4d666e7a1d8ac8fc5e8959801
-258 1 318 \\x87b2f5c72d303cd74135f16365d97ba00ca1bd2adb3a5b457142678cd965b5292d82f7adb48ab3c4bdbdc44e95853894c7454b9c8b09b052afbc739559c47007
-259 1 397 \\xffc9cee60b7375666bd4d9311c07f9d5affd1edaf5ee4498483b69098c21f098fb779cd7b967c1586e2efd7cda4ee21a5a832624701ba4149f7737ffd0ba6c04
-260 1 274 \\x4e322c92a753e1e5a0c2cf3fab87245cd48ec58b5b3b30a51f8cb0a4f232a5d7ae45d508e8f55a92e08e05e47ad1cf2a72c169722eb8679e9346eac20d410e08
-261 1 131 \\xc3cade3cb07d992e7fc22e4c54dc2e85a49e66a41988cd47a238ec7092b9009c1861cebeec4074631c38ee371bb733a59ec4e2a21fa074e3684ed5883a29ea03
-262 1 202 \\x02b186d9bbf8a7fdb50213c9436d2208f90c3c2d58766654a149cf579a8f61da58fa238bd4b54baa48693780a76141dfbb1005e32429ca613952c5d45be1cf03
-263 1 302 \\xe00b935d144d9821697710cf2eb318d663c53135b9354eb5d80d60f3dec727cf63bbd4cfb7691e8027734b0943757887b6df0d7efcd9f5d56df4a107cc64d709
-264 1 229 \\xb207fb29027c6cdca24198cf765ea62c15b03d3848fb3f02fad62c417eaee1629b82b6cc5bc20973003f2d5fbdc9c4e66d1b78f170449556af83fa95335b120c
-265 1 412 \\x76cbeb58bc6753073c08157cb52e76602b026141aea2d77a46ce787e451c39ad1deab77b7a51da2934894241f90b696acfe0d05234fa3ae18fdd2780139ade0c
-266 1 242 \\x49e0f827619234f5b4f1a8fc007a889203fbb74d79c712884f1e912b9541af1df9f7289a07a238667d992a9cce029cdf4f069d5b9f1d4a2d51ef87063eb6a909
-267 1 166 \\x60681000d75d58fe78372d80327667909151b26183096ed85fbae6021e4beda96194a2011dba86fe37db51c0365531fb7ddebfd94901cfa983ed485fcbb5c902
-268 1 280 \\xbcbd14134deba578cb8fd10ce382c6be129033ccd0a8366280041409762174c18cd5224d0dced9d004e2a44f01f22a0aa4acd3b42a108736b56c1415f2610a07
-269 1 13 \\x4b9824a4c39b5a46b9a655a0970405a5082048de965f9ffb38dfdd1bfbad0edb8c6c087f380bfd6e496295c028135dcff20d415984292a642ce0929f37795b0b
-270 1 268 \\x59cb944a82b01fff46b33950a5a1e37fff99402062e49eeae1037ca790d82baf546a45ba968a4bf53c8de39a73f940c95ffb00d889dc408efbaccf4705fde306
-271 1 235 \\x478e5fa28ab6b97acacee32b01a123d5910127595f244f21354cec38f0e76eeaf51ebc2b0e8b9f26b57bf3179f075e4fb1232da7518eb343cc6fbd7a8db7eb0d
-272 1 289 \\x751085aeb60ee80d21802e72176ced465813bcd23e974431a4bfbce87983616398378160add45920c3d723e6a168493c83e18729c9d1ced5d939acdb0134a707
-273 1 398 \\x62c177fbd0b475c9bade11c49648586aa9218d9432700a16a8915615cc8ccadb771361c5efbed7afa699fdd08377e7a00df39fdd75e51b9176ee2f965dbf2002
-274 1 70 \\x63fcbbd232a5e9581dcb4f8c63385deefc5ca1d1613b315bfa88817293895e08b464d67c6994bc047a58233ab33c668caef82cf87595a463c855cbee969c0604
-275 1 112 \\x09e9af1f9c3b51e634f81614d2a8128d6d98837c47ebbc1aea789524097b3d62989ea72d56171175e7e29004548dc018bb333bd10de37a53a29acd927b71e109
-276 1 59 \\x371a5294bf4b4e957b3894f2d6df2cea05653c09adbdd0f8b8bbab29a7cda657c8005741bd0417b614e99107081534d3760431b7a3236a390e59af3bc3638e06
-277 1 228 \\xdc30f3276cc6f8a13eec79a972724f261b95d5515534c9bcc20220ec4d793ad27dd1e3e42dbe58f6ce32aa5bef22a85e74687a377e9575359d49f42388602a0c
-278 1 345 \\xe9c9a699e9470c30e543a85ac3e73417810466088080f473f62d2700b7b4475778d90ea2b41f8e13b02e7bf82ef29802dd5b5aac04cd5fac4827736a81ee640f
-279 1 155 \\x9dcc6e678b65b2f5489198cbc69118cad7725c0b5f8f71465b256efb492ca99e710646a12a80ffe709654302f6bde2c8732a721a5e19a1e2c90a25c80dd65605
-280 1 98 \\x40a99a5dbb5997cef03d3e412f995424aec3463b8fcf4b0d0f875768a4553bb5b7496548510ceacb0722aa7928f7261021a528627b4910950b9c47965ae42800
-281 1 145 \\xabbb468fbc9673cefc6f7d6bf9a9b8972ffc57415f61f2faa518cd50c67130d70863ec0fd392a05735c21503c215bbda08f0912e3e00862c5ce4d639b7f2ff00
-282 1 396 \\xe0a1bc4394877ee8d0028f0eadad2af6994723055e905e37104388f3b201983283dbe271131c135e363a543ddcb79d20e6171c311690a6771c4e21bc31793e05
-283 1 315 \\x8d5a5873043e5e1d4ced676900693e88d7be438d0ec2d53b5bcf98f7d7f2e105b46009390d637a22ac7be4fe85c848947a8922a3ec9877407daf9f6f620b830e
-284 1 216 \\x18b44e93ab4c04f33e624dba1953caaa6924e82779fc0d7d7ae75a7cdeddd758dfee425d0001b68428c8c84ead4e74474fa8b1e2fd7230d8da99e9169a1e6c03
-285 1 156 \\xb64e61113834f945ab400f7103dde2e4cc897c784a42ab4158fccac51c37412a520ec04dd2e68f2c17ffa2e39d7ca096898fdd15d2cf26b223fb57b0710acd08
-286 1 283 \\xad80fc7f4b64ee3acffa630e766a0d4d0995c8a24299205ae22f6f86626053fd095773a578ef84013c26562d29170ad7b564c5a04b467a8f4fa305de9ab74108
-287 1 328 \\x790d5038d5fd474c0697153f1090669eebe6a8db874281c194b228c3783d3d4fdf5183281195f2aa4c6f0dcd00b01e63b02866d28a40c77603687f1d9e4e460a
-288 1 97 \\x58e994a4bc81fcdb78cff801b51d402b0b76705b493de19626a63d31ed132c3d6493484c747978d5da18da42aa0db927805b73b4d2780d65aedfffab0727630b
-289 1 14 \\x6670e7cd0c31ef5b3adc26adeb5286713a626fa03a2c04ac695cc0a714610f67ad6f6a5936144d0fa6f9be2999b7312dd079cd1e68452309f31eb0603375b90d
-290 1 148 \\x1f2b95273ccd05e2cf14ad3f3c72ee7780062165b94e4c65e1863ed5d1b25eb879df4448fd73b6607e6521de137f29d38c658c4e423efe0cdaaa706911d2da0c
-291 1 206 \\xa73a22b8b837b1753381f944ed9309ec67ce619dd441ece667575ec3faff9df664b9a879440a353e515104eb72f504d58a596b41951ffbf18f2562a010467d08
-292 1 186 \\x85b3222397e26beb580a91500f5e68bacadba211bf580032cec0192601fc45a5e895ebf36071b7846d2fec248672bbdb8652f84d8b4bc0c4a7de1a6a490b4409
-293 1 189 \\x7bdf23b58834cbc42fd25b9b9d6e25a40a36dae0f14652a894eeae924f5ccf375782d0e266465dd466b37e597e732876537e1055396421c0c45b90e0e5107b01
-294 1 354 \\xbf86f6768190881fce2a3b79fbd1f659495a2037068c0c060df44b478ce914bce73b64a9797d79198aed8008b9c89d2fb4fd09b346e3a25f019c44231a52c90c
-295 1 372 \\xf04d6d99cc85956f279c0662428504672cb7b8cdc62f741d16cdfb3f6f569a8e2ebfde2ea87061962183294dbd12a0180d61c6634234e2bfa102258e69201204
-296 1 422 \\x6fec180f61c76823c6a0833d84af78b8d4ed02d22d18c381786e543673519bc57e87f55dfce4943796dd39a1e280aac66683569c96a36a3968a8bf7ea616aa0d
-297 1 418 \\x640d1b603e3c237beae740fd64e97f34053f52055fcd3203e5aed19726f903e016e715c9c7d5ac118ebbee4c3cc32cb770f6cab7c7e1596ecce0418b45b05708
-298 1 81 \\x3559d072ab5e3ad01d85f72ac14159b981e4aec9b23a0dba03eb0105e7e88b513dc458040f9560dcb95a37967e087c210ee93fad4fd87b42ec0a5763f7e0fe07
-299 1 236 \\x72854b868e207f160f691617be818bb2ee5deb36997ad0263579570311847f8e8523bb0578d133c158c3fe3e97d7f646b7116bbcbec496362dff18ae97d0ee08
-300 1 197 \\x5468a51ffdd850ed3c6a0a54a15cae8b0548aff90c41e5b3a5d1e101656d5caba3a102fd244183594f46db1d0d523b490c665037f416725ce8dd4428b4f87303
-301 1 23 \\x1692badc641ce2dccd38a3f1486616d568cbea9f347b6de1c6bde4c15876823a4c21fd56c482b6d5cfebd26ed4a9cf87029ce0deedebec32142b978006d1dc08
-302 1 324 \\xeb3a491be932566b9305e8bd572dee4edb7b6b953eb4e0ecdd96b72eca1be52bf82ef6a5bc32906b831fd3e06caff73697a9583782c4108ee982df6a31aa2c02
-303 1 187 \\x2be6c6b6387190ebb02ef7cb9eff733ec9c060f242f37ad6e2e53bc3a983f8eaac8d81747c796232cfa5e2d38c206cb7ac49b54dfc0d34ace55a150a6a29220b
-304 1 266 \\x1603be7f158ca72fc85bef93bf4c1e9b798a4b1ec316d673f0d011812e3f7211f0b78a94a45500c6ff545d629ba4d98581107b62fa77b0c51db948f0b494f608
-305 1 21 \\xe9e2e8929722aa33da7efbc857aa44e7e94a0a013c164a72fbd2b22bbc18f38adc65a136994cea00945d7eea683f6fc8d57caa0f20d4a76cdee765d7180e130b
-306 1 369 \\xec31bdd6c119b0ccc13dba31bb751bbb0863c455e8ecb916c2c07ed567c8bc703dd7b1b6cbd6ad720a63d7cae987b47bb2ae24ff0f70054387ad4dfc7933c10e
-307 1 343 \\x7ac7caaa33137cd9d845561d8f2eb5e6f1c3b7cfd93f6ffc539956676db0b3b217025fad8938983506fb83217c63cbac248d85c58ebce873fb0ff8d0be3e750c
-308 1 164 \\xfc2c538f73dfc815daa54c147b644347547d5f372be01f83b27bad3d899bd97ade2cf30ca5408d47d8493d535ca05724da6eb149364eef3eaf0418d2cbdd3b08
-309 1 368 \\x7dd8518444937a548b5e860481bd2241cdcda4fda58a1c0cdc37ac0888be5cbd39313f7ba4303a8a798bb203290fb375eb56fb94b42f060c50f5247f99d3db04
-310 1 33 \\x4a17ef7f066705daba868cce3d39ca62496ac2804f043deaa118017ad9101ef2d7c3c83c6857e096586285e4cc7f700075d04f6997464bdd6ba05e6ac83f070c
-311 1 399 \\x4c518f09bbe9da3e7ce9be25b9a880eb4a30047ea7c7ce816c11529681d3377ea92f3580dcfa2a3cfa4bbe81fd0e0aa99e31b32a5ee9b70ee8bacdc79abe590c
-312 1 415 \\xa829b44ec1fe7f5379cbe14027ebc922c1e7bf001b58980d9b10e7e65b01d4c37ce4315d345a0116eaae00e2e19822c9c3fccb3e6492dd2d8dcc2b434c32bb09
-313 1 322 \\x21d298914946acd7d46932bdfa6f0e521afc0060e616d2ab37c32ff4b9a9352699200a0362baa90a024d541a9a27fff66e2e176c008af40d85a756e3b9dcdf03
-314 1 293 \\xfefc084d65749b1ba2255ac0a5c87d3e1f765c01744174901d9c4a8e11a3b39f8892536bfb0cadd9304243a725bc4ed116960d543c0f307533c281ed672e790f
-315 1 217 \\x238dda771acbe8d042a50a16bd2ad062b27cf94475cd875b6b488a1ed5768d56b0d1777376214b2793af3ba9cb6adde0fdcb909a3536d716d136ab0630141d09
-316 1 224 \\xca3a195202cf7c4ce97494b15835a0e02a6a02bf81568be338a133297f403e5b1379c648faafbfc595d8b838533637452fc05eb0cc8ded908289c8d00f430f0e
-317 1 55 \\x45b1826a5376514d262bfe77d89065971b34144fefa448ca683893d48c23622a4188e79b09b56e948e0c039c3d012f03c3adc69a88233d0b693bfb2fc6544c06
-318 1 403 \\x7854e45fe0af042d3836e9b3f2be9a7d12fdb4e89424d5d1c0cfab8e9159df1c295dd170da9fb1ab565502ea92cdfd785a1ddfacdb215fa9bdf47fc0f9a34403
-319 1 176 \\xe7ba9f9ddd025d0ca9bfd0fa03cfab65ed853d2f0f8d28b152884ea1bc7d1b0f1194fe4e1a646fa4ebb6ec7d78b8a82695e700e845134831be330792a9732601
-320 1 300 \\xa982cbfaafb9ebfd0ef0c3b35b05d0be12bc283c275be8bd1fb2bb63d4775ab2bbcb5d330d92d72f1e65d626df15efd50b2b44015cfdcdd075396a78f96df006
-321 1 9 \\xbafd317b9a062884c18bab8318ad06259b7286de70e74e8e90ee896e1594d6f2f332420a579ba8781bb5ab165e721e47db8179722e09d70cc84b4827a3dae105
-322 1 125 \\x5f76c52fb8fd95d873ec22b15069d2eba6beff0e2361ce5c212605be44db664a2fa95d14791bb355d4fd48c94ec0ae9d17a64b5906bfdb3179f085267bf8af0a
-323 1 107 \\x0c93a918cc85badab7f3cb320b75b3f5046cee99706398a35df68f41d692c997eda6d2fd75ba81e07279c5c3811bb0edeeeaacc7618a1e9b6f5aa9decca0470b
-324 1 249 \\x646ed02fcacd59c7bc5c899875e92ac94727058dfe7fed73774370451236f6ae1867d3c5a935a7a96f7797b0587178d3683a8dd976b3ff7143c6628b502f2906
-325 1 116 \\x19c5fcc9893bca1348b51eb09725c483a2359315397d755ec592d3d3aa0673aac8c1e083e99a287b356f84be4407cf6674ade3e30930e34bd6257b9515fa2003
-326 1 215 \\x794a5a06c8ec0d62411a5d68ac5e1e2a2497574244609f7ffb61addf66eea3f323b988d6fb21457c697f61c5719e9732da56bcf90a270fa7358b54b2794c1009
-327 1 373 \\x5420a917dc181a6dacdda86485de71f3d8090f1cff8427846b3aed108a173542231ac19d5d9c8accc6be57fa8789fe6389ba73d37ecedb65d4f6a2220564d801
-328 1 168 \\x8c87c6ccf7f5964ba8aea3e8359caff5af49ac8409c9b71f9ada70b4ba63fb67aab7962f6f2acecc5b3d266b4c9104e3fac39910b8c1d0643079c9ac37342b04
-329 1 37 \\x68faf68b1b8c3cbfbd3254648548dc5035889911155394b184a27173871f45ce7443dbde85e6817e41d73755845b17e83971076f6ad928d33ee0772c780d8706
-330 1 36 \\x29695b9c3d498817b71c474954811f74f84c86a8a0e2783f069030206465a88612fb697906df716456cbdf7a33a669722b81c44b41a3ff066d5a7cdf0bf77d03
-331 1 99 \\x929928a1b85525174cc1f722568ef31e19ef1e4fd9b1e337eadd879e6b5c296723e9b2ae245da326aec8c77c3820ff2484bf7e90eb11037e4f9f22a026270103
-332 1 329 \\x014e405bc03f0055d66c01aabd8e39d5e69d323aeeb1b50a4b2e26f401ec6bbacc80e0c6249ecfb138ef40e0e2d46875d010e2a74bba1f8b989f6fb34c242a0c
-333 1 130 \\xbadd14bb597e3d9e3aa4de9a29126f6593c9c0b0f8349958cb529e3a0686d7caf45c75beaf07be590c7edbf13709541f797cf3d58370321d27ef835238b39c05
-334 1 305 \\x27e189dc1ee434fa83bd929e80b4af5cc08c332b5ad111d51f819aa7fa246a8db98e819c4af14a543ba8fc1bf6dba6d14f44897404be121f1e374ed7bb9e370f
-335 1 392 \\x85a4ae924869a496e85a99e44f27a408780f2ba3a4a6f7f4f0ea9cde5788e9ac04b50484a6606176a40362e16920d1774a701af950071bd7bbe80f69b8c1cf0d
-336 1 205 \\x2ddb3ec91f38ec08bb617eec74993e55d9bb03378a0537dbe0bbaa88c48287bec63114f9652ac849b9bfd88445d1216fa77e7af909cc04fc04b4a703014be908
-337 1 389 \\x50d50c430eee17aca15c725735092d2bbb5cb20ed51143a24468eecc179e993cd771d31bcbd3e309e21a7780adc709312b1fa1eadbf0310672af57564ce82205
-338 1 115 \\x7b55656f9dce9f0fe2364156fef246d6c26e62140fe831a819d4d01104256bbd9034369763f9358dcc0c36bc7d3ad8df0f18b1b85edb4e9be31f9bc311f95d0b
-339 1 43 \\x216627a922b7c583dab1174e5160b89a6913ecf20f2434a42ae81bae7c8cc2af0df126d286a69c980aa8d31740823fe4b22a143452457d172d5152c0a750850a
-340 1 58 \\x7a6bfac4eda738096edd7dfeba00b3878dd4516b20f19fff2f0b870e424119831be4ea517251c7dd4c845cd30ebdb23a3d131afebb4a45f0534d6bb8fc42e607
-341 1 307 \\xc269fccea67a0d413626bdfc4325004f6180028a06186b93cfa6258d0aaad72a3dc368d1ce098ca5f7aa78e09d13791e35116f7545fd6e8f5f6463c6b2ff0907
-342 1 394 \\x3b2f4c7aebd32bce4e1d6b9984e77cff34203a2f44fa79c9b65f23bc3580b5ecf8e0637f6553ef2b7db710a7f65accd1ca505ca5dbed8afdba955c5e1426b805
-343 1 78 \\xf9893136ee9a3da8c234e0d8e17c1547e285dc064087980e0e4fa83bcb8d0f7115d65940d0bb345dd73efe500f4675e42e99dc62b085ae73054e143fea27990d
-344 1 208 \\xf637f38975b3fd4e29749b5dd34265061d6e1ddfedb6c64c0ba68b1d4416c8f1a16304502f11831274f7809a0d6586a3ba44477e2c260fcbc94de305c4fe7206
-345 1 359 \\x52c82bb99e63fcfd827bbc8a2a28337a3181476d6fd4b91ee4d707d306cc822766b0d0eb4af657052beb8a6dea549b81b6cd8aad380347cffd8f905985ac8b0a
-346 1 282 \\xc149219b082115bcfb62708a5f58e928b144d0bce83668b6fe40944cdc738afb4bb00cd9229801c4484fe2a810a07ec2408a741d16e34b25b3728aad52bd4c06
-347 1 338 \\x193f32bb367aa31261ada29f68688a2b2009266fbc2a65a058999174a512ccebe21e7e109da902c97fd04bd29fc6889ed328d43920d0cec51179bfbe462d610d
-348 1 143 \\x55d372f8f111f6da209256e2129af7cf4259575bd5eef8e4e7e201c4f6c5bf2cad080f227e2180ac4599997a229f5fda0467f3730cd0418d3a30325b82d1520f
-349 1 393 \\xdd3fc656005fdf7f4a913099354b3e830c15e991434ca9f4664243407a93f12702802aeb49ef4e686809d85850e09a718df45b6aa2e364cef0f1d190f78d390d
-350 1 411 \\x8b18b97df7111e5e4dfc82727424f9b904ab4a3df45322ac43f10408f1cdbb93632efd3ca7dadf35a2573012adf59017649e9446ebebe6c5b28e15e859f3b003
-351 1 391 \\x71c371192740ac12215294d8f44b49ba8a1dfebf3c60592aa53d586ab835ce0fd87a29fb22d2fd4e4271ea583403fb9e76f15928c822becf44630950eeba3808
-352 1 225 \\x96e22a90c8f5ca6a42599d406871edbb85170412d7eb93534223157190f230f698a8005ee66625f2f47d8154516cc904975408f0cedd5586b5776994bd62e907
-353 1 291 \\x2ee5632c3210df7921682e7823b12e0c5b3f55b6e8853ac6173577b65ceef4a0ab4f45ef2f657315798834e8447613968cad49793173179bbc678fa8c0733301
-354 1 320 \\x82879b34b857f9f66d35534a582e7ae5f44d960b7479fc8708b8b8da60f3d87884e742dfe8d7d82527b9de36f5e58d3e19715f491b4ee9c2e0657d8a9137990b
-355 1 7 \\x9a30147286286d7efe61fa14612997385788679fa9966b7eee2d58a9dc1418e1651feb810596c11dcfaa969f2c2d40d05c4d488e9086bf19c3ee92dc871ea80c
-356 1 185 \\x74d0064e0997337f450b625f33ff56201adbc2c594afb6da675b4dfff8997486a3251dc8d35b32ce9dc9a119bd9048511954570fceed93d9af7b8af93a394802
-357 1 330 \\xfcd850956a4061f56f266bd4a4940435f3cf85da2014cdd0881fd0a45888c5c1e58caa29ace6355e28adfbb0917847ee0e4e03cb866c84c93a56f2a888799901
-358 1 122 \\x1cfb1ed43e967d14ae2ccb9d5c2ce410c264167e7ec97338cedb632379a358af8516dbaf6844e683dcfcaa1db2df0d12ac029bbe49304ec95e2405c9e0d11c0d
-359 1 221 \\x9dbe0ae544706865f19922b2553a5d795011b9ffa9f7e2b2856c33fbf4d91a45f3bd1a9d524a9365fa191f43e5df04cdaa1df36e5a7a66620f4a46d02a34f00b
-360 1 383 \\xc3c47663410f8cab2c96bb0da41502adaae64bee3684395e9459dd6ce70a862ae0be5121c63a4da31ad87287680695a0123a75eeeb9d1a2f590ef0b4e0b86b03
-361 1 377 \\x680aa7912011df1b1ab2213fdec5a87705bc82e0ecd44def5b86d1d59fb6d7c20d184e91c4e9fbea25924a6ee2fb1ddcf3ba260f55600427a8aeb3daf5d96504
-362 1 27 \\x17e6ce83cb5097c0e6bc267005602b200b55b7c71318d1e43958305e81b921169db78189b66f60e49ee548aa538185323ddb33c5b3c45cc113a4a9ae7706d30b
-363 1 304 \\x60645c2ff29d6a55c4b98b795142e1050b7f55ca202a59234d4c4269084f41f3674edce84183f364b690f292f2a3d49f920872d9e499e8d00ffef8163bda000a
-364 1 22 \\x0aaf918057dd1601aad782c075346a9366054b4ef05a7f7faa3bd52d2fdd48411b2b6432e9ffeb735ed58a762c698059433d455b037c7c132a5cb9814b75e904
-365 1 11 \\x9fd0e932028069fa4fdaa042daceda2e9fb60d9610d1ee45013c9d43e79e5cb4140c8e5061ff7396bc88557bfb3c22716b22d83004e1d5080f04537a64307305
-366 1 32 \\x0a4af9ac46e4526993698565025209a601285a49e8b9e93fdbb73aa35f6af675c4f5fdac146750005ed3e43f757de89f6e6bad2a1344d98bbf35a5a58821130f
-367 1 374 \\x65ce8247ea1465e2443409907dc5df4664ea515afa82d9c59e7ebc2f89f9e4fb889d09cb8dca4cc0d3de04bf0c988788f5b838b3fd28fc7c552edea47db7a80c
-368 1 381 \\x65d1889bafdce7501175d2700d7ca6c9987cffb80998fe64908f14d2364b417842b07650ba90caa11a623447cb0acd06c677db82d70a69ed264dc7ddd8370909
-369 1 157 \\xf83492e3226921bfdcfeae65aa590329c7cef2234c94440577cd97e0cd5aa91bcd0237a2ef1e3410465123fb7c2c171eb506237e6ba1bbe4c88a7a68c763e60a
-370 1 72 \\x4ea07320d1d5066b96a773d4675f0feb3e1780cbdc65565f33a98096886eaeb77aeb78d11513dd74e3ef6bdef6693f9207abe0fc748876b36ea9c72c0dcc1603
-371 1 404 \\xfe3d2f5814a44c62483c1c01a09ff251dcfc6b862d66de9a4abf701a2c14d46f278c3509716bb7c8ba91a4437d87694bcedc9c9a2ffd78bc1f9a71030a424d0a
-372 1 348 \\x4969be60e7d7524f3f215d3b5626dc03e623cf53953b0c14a1eef9cf85ca331f2a8ee59b1823aa1e8be41ab98e1a68e5bc379557ffd1c59c7e7ec3f7b21c3406
-373 1 38 \\x8364aedf8af082ef58ac502d4bc9052b94c554c9bd940e885590c9d6a8a5bb52da2123d4fcd181010d08325059bceedb7c50a7129ee0c06ca2d3e4f37c7f3f06
-374 1 209 \\xc56fbab5814e1464279ed87907ca925b30c3972f56b5e049975f4ac2bd84dc9ad1f2cdfd03a2e195e6f181820fab8118dd4634da0b6a55f3a89adc95b7f3cc0b
-375 1 219 \\xef07ec00a509b39c046fe6a165a0f687d1d54ca11e45f3305b27d90a6fd92da447dd6728300b969ae80a6b557bff76018eba6bc10267f99271d537d7d5f9f500
-376 1 20 \\x90845be9591de2501032dfc98e3c4869b4141a6284858ac2cf8918834abd44ce89718393bb0cbc36fbed16312a249d4c703e97dc187da415381b9b627f731407
-377 1 90 \\xbb9bf414bceb8a95e771c593e4c0cec93f0b35969ac5369eb172ade71c8e20219833c960db9b722eedb8e74747730aa83c29d7e0631fccfaf96df2abf78ff00d
-378 1 140 \\x7a879cdfb51ca58d35f8ec81eed68539bdcce23f762be528754cf18cb70c754f8c0c8fc03e590adc767b6b114553b88d7837f93da791de2f5fc1c5c0c6660d07
-379 1 44 \\xaa8f298d75838ea9e1697d95fbcef6464b67c41a95d2eca8eb3de9c5541f44753f85736971acb29587165a3c013fb0c50b4351c6dee9799960ea4eb01e7d430a
-380 1 250 \\x11f7ecfcbefbb0ba8f75b0b51bd6c30c54bbbaf10b7f13eb4694ded6645814efad5f6fdfa09536c81b3e0865f82e8b6d79aaab073400ff6ce5d3ad5b25fa4406
-381 1 347 \\x4f0d44615c6585518e6851456ba2e94995faf168f774bcff689475d5c54ad890d81732fe6576f1bc4e58c74f185a39aa1b2deaaf7afc736c78bc200aac61410f
-382 1 385 \\x5322bc85f99d6c8b26ff385a1568a913fa138f4e69858a264249c98a63c115247d3bd6cb4aa608fe5d3c8f3bc3d382547333dc4ef296c59b94be2c35d6f80601
-383 1 241 \\xa9d149fe43d95bf537dc67900abb84795176ed6440b6e21476ec8f3af8e8d23ca6be4e4a3493c63b4be1d69da4573f23230fd01e3b00ead881dd1f44f285da04
-384 1 414 \\xbb454acab0d6e07e2c639968b5b77dc5bbbc8d6c607a7ab47925f77f32cb81942f8a48c657b4a2f2337e84b1c2e3d107ab4d4811af8d35b161a3f85d0054780b
-385 1 106 \\x3f978dcbedfd9f0c4017a617f5ba2ee6776347baf2b59627ddf501efbacff8287706d5da86e3c32580a2004a39dff898987aa78329eb068fa207c3fd74195b06
-386 1 76 \\x6d53eaa7c03caf210d9d4c433ba1beac570ad3e2d60016485f405140dc86ca055ac93d43d4b90d6ccd4c1dbec61875d41bb01262ec49305c78ae14f226329100
-387 1 309 \\x25939daaed4313a17a1bd017f48ecddb7a134266ee331bf0c2e84560c6a57590fdbb8a4b33de85ebb792d3c507cfe6b66e364b6f89c6aa7be5b46337198acb0c
-388 1 420 \\xf90ecf8acd052f4ff19da004989bc9533f73f7f1037342e9c3871d6827cf5dde783c7e4359d6baed09a67999db7780ac74ab856d2f332315499a7b6f9909af0b
-389 1 181 \\x403638353ae32ea0e6bc3e278f8289cfe1bee95add0a0e76b24ce035f7d578b69f691c490b2d6652be0f1e3aadc75a11db168d05a7190b6ec94333dafc344704
-390 1 212 \\x89afb1e15a84ffeead8e62bad326e7e0de092f6863addd556328801ce130d2bed6efe3bb99591e4d9b8b417aa0a2861274a17893dbb311e6721e250fff99d40b
-391 1 370 \\xc5fb63f3b08aebb1168ac4b4332242e6b89d6f798d0a9de5aa682cffeae0eb465711e2a920cd611255223908367daa231b4f453c271f1e3d9f897d8f1ad3890b
-392 1 400 \\x6b1bf2ba703a158d957fafa75e2d2e029b9d491cd65db2b54ade5587757512abb7ad2abae8227b027cf176f53439e5b5f28e24d71228ec1503833b862dcef208
-393 1 342 \\x63133f50ea01aea33cb0cc7eb4b66804e395e0ec22b67e0f636234b57454a4cb5e18195d26610bf9ae9e067450069f323c11b071a26d0f4ee80f49cd70ee8304
-394 1 351 \\x7a9621df0be09d6bea2c164347a2105091de3f5f07d4ca4306073d65f9c9d59cc34a84b488492ba640eb710f9c16c54b0710406ec3eae9481b8113a62ed92505
-395 1 92 \\x4a11b8853fdbe5c05dfabd881f70c22c30700d62e451bd3f96a367a571a800c614bc3522a81e9e3e933a8d6a69b10c0a795f173fc74d15ec805ba1135d0a0502
-396 1 292 \\xb3a753388827687c33009cab22bb7b0abeda8e213c88580acb49c8eb0d57f9defcb3d81cadb1e6cde8c09d0fef3b4c42ceb35a2dca5a9b947fa58647c3a1220d
-397 1 161 \\xee774866ff1a72906a81b4e3caaa79c38f70cab92b94e7a90af5da5cc0c49f75e749295c2766d79163608689eef6f829b441df145ed8674a4a1786b2b88a8d02
-398 1 183 \\xb775d52b6475a0f570685363c299d0fca781ee5a6f2a263ffe411926ec4ac25be82fe3e82200296402d6593aa865f4bfe65d1b9a78782cf1db3687398e1b0802
-399 1 257 \\xb5a37aa4d31df2ed95c809b0cb7b36b2a35de065853c321fd2be0cb5b3ee9a7a3cb904259e0d51ce870382368cc1c5ed234e4905c5af5e51569ee70f074b7b0a
-400 1 141 \\x17acf2148c44a78404413631241e445e6418ceab8256e22437a48fbc8a97974b9069a564509b988e7a5560e608949e14b2c6daf5b3ccf7ef1572dae80218a206
-401 1 84 \\x04017c9cff61b106284d24725c18fc4a4a2f2b3f96b7ffbf42b461ef7853f28b94f066cce5611bdcb482dd626cbeef4206b21d6b60076434db8c965bbe3f0d03
-402 1 85 \\xbf7dc046df475e2f945404478dbc2acee36b4261a622fcd88fbce21761a839289c27347c161b2bbae698c5bd8ffc2bc5177bcb0f22e64e7b7d9aea467e5dc40e
-403 1 180 \\xbb1887f5e6b2d9c22110e0ec22f82add94e5308126005c49c8c8aff505832f9e20053f7aa096d67c6b3a430ba77b70ee3bd12ed233df2e8ee3ae44f257c3fa02
-404 1 126 \\xde72b43db6d3475d13d008ccd37f1db6f0ae8b0b774a3c47b65da22e63f1add16c31193546b9d8ddda0f8b87695aded1a4ec4c57166e98cd37135704f97e370b
-405 1 339 \\xf542910eb33fb7601cc6f9d11cc5ce693b3d2f2b85d8b6a857adec37eb328304b2c2ab1b2825116e7f17318582e1f221937dd14fe4832c581293969b54bda305
-406 1 401 \\x50989810666452466b7aa42d142e5c2cb8fb0ef5b87a975c9a5d074f2a9867001a9a71a1e1f1016676c145a9c0e42b800e5903a219e7164e35c942e98b54b803
-407 1 124 \\x39c69a33a7e1c2e7a16abe49f48967c1724ccf4c303e393fcd2a2974822a9c7251ee161ab68faee7f1004f84bd8906abcc4d4bf6f592ead821541cf83e99750d
-408 1 66 \\xc4a66691b890611f95df6d08d2502d1e694f0c9ca57776c023d1fa3af16aea6d7bd14282b39ed917f50b6482d8436fe1278a359f393c677cb3775afe4dbd3c05
-409 1 376 \\xafe5aafeab998c768107c1e7c51d3c968037e0cb304e0375dc54733d7ee0298cf3ddfc65cdda1ce6f8d4f857a4bfb8bc8ad879504a1ba54a274fe5ac540c5b08
-410 1 244 \\x8923bdecd2e2e8693efe30034d344f897fe9013f46eb1d1e456050937678f1cb04fb682cd0360b2ebcf5182f42057f37c423bdae9fbf4dabd34b0568cf18a80b
-411 1 382 \\xe322e111832c2f3d2192e607b62dc6d0091605519bed0c207c94303e3a78c6d485fad10f841731789413b2a608bb73925c9558ab2bc25e4ee7f5a93038b11900
-412 1 210 \\xc8e2765a204d379e056ab189a5947f3b8e6fac642bd4ef897a7e34b935d96b3d288f276b4321e5509be9dc3c1c12be88fcb96fc7015a596d48f9f0c27a11ee06
-413 1 308 \\xb012d1bac642b25c7578732d7a571e607cd0bab7e71ddf6e13176733ab56542bf4a45b6f92d6f90c374c2aeda8b8e3e2fd157b4491fb60d38b8628b4e8f06d02
-414 1 8 \\x93904404013f25dd6f1b0aa4b9968daf95f67238cf2678962c67a9a4852a81d1158fe8a3e5ebf142227ee77bad12544e6d4984f255a187fda6f345b9c674d003
-415 1 346 \\xe0480e289d6598f944024b03504e53172c4f027f88dc9cc9b9689d5011a070bc13a1845b5bf7d17374427a9c3c463b3396cd9765be3c665e27d07aa9d8e4e90d
-416 1 2 \\x8ada1038f0d0e599688055a9bb5d71d0b22b6d9e573c8ddf2f2309f2e3c17ef38aa13f9b12513983770f52904525f6f80d3af62f9b11eac0d2e12d44f3967300
-417 1 275 \\x1e9fc939b60d6b83b773c444e97d381deff2af1971f10f615a3d275eea86f849bfe451446b73686acb97a1aa241ae90a0bec1ee99bef2d3b2a0d74a0b587aa0f
-418 1 152 \\xf18569f97f370507ef6a59c1287f02971ddba531a64ba912d2621c4a5e8e263ef4539dad33968fab5343299e184e2a654972f5ed6b7d8f20b98516968ba6d608
-419 1 75 \\x2f293675e44688f0fe753dd8e3938e26c96503f072d9e42485634d39e566e91c8db37b1d0642b9329442e53bea8a55315283d53937314c49a5cb00c6ddc4d809
-420 1 118 \\x904ea32af7897a294f42fa165a1aaf6de2496cd9c434635a907920f67044254f93a8fd7abc97065bbe7381156003f38ce23fd6f00d96771e1a5cd8e394f60304
-421 1 299 \\xe2be615a27ba28db4f3f8e9904ed1838b11ca310153fb82f3e84a810a0f2a8816c7787f7e9234bb812a6d74b58039e43822b1758c0e037e3ce8e4f6e0b318f07
-422 1 380 \\xb1a511b5b906d1d3324a05c581f9d3a7e65abe3b0a221779dc7ba5f6d04894205ff08eb2713f67c44f8e577c2c17121ea56afc719147b165afeb7c2316780e04
-423 1 109 \\x8d289f1c7a197e706e9878c02f0ecfc313bcdd7b03aaff6344ee6482ba3f7db6a4b3a9c22ad4091b47b377b89385ee7c64fd1f79be17c216c57d41ec5876820d
-424 1 222 \\x5d390334afc6fe298ff89534e362ff88e8cecbc362669305196770d726f95b8dacda3c65506ca93876ed7aecb6cd6edc0f1e8f315c17389437d0fee4daf68008
-\.
-
-
---
--- Data for Name: auditor_denomination_pending; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_denomination_pending (denom_pub_hash, denom_balance_val, denom_balance_frac, denom_loss_val, denom_loss_frac, num_issued, denom_risk_val, denom_risk_frac, recoup_loss_val, recoup_loss_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_exchange_signkeys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_exchange_signkeys (master_pub, ep_start, ep_expire, ep_end, exchange_pub, master_sig) FROM stdin;
-\\x4d049dd5bcd99bfb41c56f63447c0a2058d61a5ad3852415816276131750b2b3 1651516390000000 1658773990000000 1661193190000000 \\x8e352f9e7b1dbda4e3dd96c940287f6fa15410430ff4fe0a3f1f4978c467f837 \\xbe18532731b429ee445c8b367e4d56ce354f1f06384fe30567806ab41b300889a5dccb672b47953482d4506e9fe954188db1f3591429ef8e6b51aeaf658ab30d
-\.
-
-
---
--- Data for Name: auditor_exchanges; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_exchanges (master_pub, exchange_url) FROM stdin;
-\\x4d049dd5bcd99bfb41c56f63447c0a2058d61a5ad3852415816276131750b2b3 http://localhost:8081/
-\.
-
-
---
--- Data for Name: auditor_historic_denomination_revenue; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_historic_denomination_revenue (master_pub, denom_pub_hash, revenue_timestamp, revenue_balance_val, revenue_balance_frac, loss_balance_val, loss_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_historic_reserve_summary; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_historic_reserve_summary (master_pub, start_date, end_date, reserve_profits_val, reserve_profits_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_predicted_result; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_predicted_result (master_pub, balance_val, balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_aggregation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_aggregation (master_pub, last_wire_out_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_coin; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_coin (master_pub, last_withdraw_serial_id, last_deposit_serial_id, last_melt_serial_id, last_refund_serial_id, last_recoup_serial_id, last_recoup_refresh_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_deposit_confirmation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_deposit_confirmation (master_pub, last_deposit_confirmation_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_reserve; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_reserve (master_pub, last_reserve_in_serial_id, last_reserve_out_serial_id, last_reserve_recoup_serial_id, last_reserve_close_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_reserve_balance; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_reserve_balance (master_pub, reserve_balance_val, reserve_balance_frac, withdraw_fee_balance_val, withdraw_fee_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_reserves (reserve_pub, master_pub, reserve_balance_val, reserve_balance_frac, withdraw_fee_balance_val, withdraw_fee_balance_frac, expiration_date, auditor_reserves_rowid, origin_account) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_wire_fee_balance; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_wire_fee_balance (master_pub, wire_fee_balance_val, wire_fee_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditors; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditors (auditor_uuid, auditor_pub, auditor_name, auditor_url, is_active, last_change) FROM stdin;
-1 \\x37fee5c036fb332e17758fbcb953bfc3d67b47d732d1447cc4631f6db4341720 TESTKUDOS Auditor http://localhost:8083/ t 1651516396000000
-\.
-
-
---
--- Data for Name: auth_group; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_group (id, name) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_group_permissions; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_group_permissions (id, group_id, permission_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_permission; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_permission (id, name, content_type_id, codename) FROM stdin;
-1 Can add permission 1 add_permission
-2 Can change permission 1 change_permission
-3 Can delete permission 1 delete_permission
-4 Can view permission 1 view_permission
-5 Can add group 2 add_group
-6 Can change group 2 change_group
-7 Can delete group 2 delete_group
-8 Can view group 2 view_group
-9 Can add user 3 add_user
-10 Can change user 3 change_user
-11 Can delete user 3 delete_user
-12 Can view user 3 view_user
-13 Can add content type 4 add_contenttype
-14 Can change content type 4 change_contenttype
-15 Can delete content type 4 delete_contenttype
-16 Can view content type 4 view_contenttype
-17 Can add session 5 add_session
-18 Can change session 5 change_session
-19 Can delete session 5 delete_session
-20 Can view session 5 view_session
-21 Can add bank account 6 add_bankaccount
-22 Can change bank account 6 change_bankaccount
-23 Can delete bank account 6 delete_bankaccount
-24 Can view bank account 6 view_bankaccount
-25 Can add taler withdraw operation 7 add_talerwithdrawoperation
-26 Can change taler withdraw operation 7 change_talerwithdrawoperation
-27 Can delete taler withdraw operation 7 delete_talerwithdrawoperation
-28 Can view taler withdraw operation 7 view_talerwithdrawoperation
-29 Can add bank transaction 8 add_banktransaction
-30 Can change bank transaction 8 change_banktransaction
-31 Can delete bank transaction 8 delete_banktransaction
-32 Can view bank transaction 8 view_banktransaction
-\.
-
-
---
--- Data for Name: auth_user; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user (id, password, last_login, is_superuser, username, first_name, last_name, email, is_staff, is_active, date_joined) FROM stdin;
-1 pbkdf2_sha256$260000$tmAQElYisF5E0ijCJmINqO$wvPhjFwky2USL4S2jr7Re5ZZu1B99ikFmMcbSRJKJjE= \N f Bank f t 2022-05-02 20:33:10.893062+02
-3 pbkdf2_sha256$260000$EOfF9qjOwaA98HPdDkZY6o$gv1q6HAs7BC1BASrIXW5pK6OzYTQWGM+FZqmLetqZ2M= \N f blog f t 2022-05-02 20:33:11.081951+02
-4 pbkdf2_sha256$260000$Xfu2ZitqJbSvOX3wkb6ulj$9zYhKpWO7yzpKLiz1cYSuGcvvwrH8KKd8/+MBvu6tLk= \N f Tor f t 2022-05-02 20:33:11.175804+02
-5 pbkdf2_sha256$260000$97ZZAEUxi49jHPANbyDJ1r$5llbYb0LfOKS+M3XjN4AkscAALGTqxMt1wmiyFVMvTA= \N f GNUnet f t 2022-05-02 20:33:11.272562+02
-6 pbkdf2_sha256$260000$I1w8Ty0XVi80DOBUXDBwZg$1LsY2x+omJSnXDzx7jU9U/9oRGkIJMjMHBn9GG9jyqM= \N f Taler f t 2022-05-02 20:33:11.369859+02
-7 pbkdf2_sha256$260000$o3mijM4nCuPxHlm6Fg5qKm$zjFCbw7S3NlHPAwZb4CSmsBZNELGG6/JP4PzlYGYzXI= \N f FSF f t 2022-05-02 20:33:11.465711+02
-8 pbkdf2_sha256$260000$ytl8iFzcwozShli24pMjaG$cOnkgup2zoWCyGvmhnCOjbb3ubunL1IHLjAXIqxrW/4= \N f Tutorial f t 2022-05-02 20:33:11.562902+02
-9 pbkdf2_sha256$260000$BLJcw4bDrLy2kglZUo2WVn$KSJUk92ScPti0X0tJSB2taQVPXveASN5TcdtahgPDds= \N f Survey f t 2022-05-02 20:33:11.658226+02
-10 pbkdf2_sha256$260000$shkywwwTBeVhvuOGe8Kl8h$IGVo6J6zra0Zmw8LQS6L/4DFWFHalo8ftpKDgdPfyUU= \N f 42 f t 2022-05-02 20:33:12.107885+02
-11 pbkdf2_sha256$260000$jCjSykTeQFPz0vKIbxc4xB$nZICGJ5llfGI0pJQudv0Lv0cIczgJUGcUb7P0tM3GB4= \N f 43 f t 2022-05-02 20:33:12.566959+02
-2 pbkdf2_sha256$260000$K3jdHDdJ27Xl8BqdhlJgsu$SHIhv+piYkN4N3aT9+mT/2BMZSJSBGBGopvdgef8lG8= \N f Exchange f t 2022-05-02 20:33:10.987938+02
-12 pbkdf2_sha256$260000$qouz7nIUDG1e6HlmFn0kNf$+ngIn2KffZdxitSz1qpWGWVZpP11lGkCGWussS4opiw= \N f testuser-zzeu1aog f t 2022-05-02 20:33:19.585113+02
-\.
-
-
---
--- Data for Name: auth_user_groups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user_groups (id, user_id, group_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_user_user_permissions; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user_user_permissions (id, user_id, permission_id) FROM stdin;
-\.
-
-
---
--- Data for Name: close_requests_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.close_requests_default (reserve_pub, close_timestamp, reserve_sig, close_val, close_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: contracts_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.contracts_default (contract_serial_id, purse_pub, pub_ckey, contract_sig, e_contract, purse_expiration) FROM stdin;
-\.
-
-
---
--- Data for Name: cs_nonce_locks_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.cs_nonce_locks_default (cs_nonce_lock_serial_id, nonce, op_hash, max_denomination_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: denomination_revocations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.denomination_revocations (denom_revocations_serial_id, denominations_serial, master_sig) FROM stdin;
-1 152 \\x024ff7b493a5e689a0d6c9b533859b3e7dbedb2a7bcab1c6569af4e19754f24b4d5c198501d4c34354485051ec5161247991da6bf06b729e1b7379e86e0d3b0e
-2 244 \\x41ecbc6621bc2ab3bdb1a15174766f277534395cc8384c833e8a96a72ad83ebac9c9a6974dbf179e6818cf0e782220ab6b70f7491087194e14ee9e14b76a0207
-\.
-
-
---
--- Data for Name: denominations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.denominations (denominations_serial, denom_pub_hash, denom_type, age_mask, denom_pub, master_sig, valid_from, expire_withdraw, expire_deposit, expire_legal, coin_val, coin_frac, fee_withdraw_val, fee_withdraw_frac, fee_deposit_val, fee_deposit_frac, fee_refresh_val, fee_refresh_frac, fee_refund_val, fee_refund_frac) FROM stdin;
-1 \\x01f4b242f370231dcd9dc623b24b48b4e3034fac937e4d4f625102d1ca0264999bf3360d79a44c165f8d4bd1c82ec55f56d575ef6678cd82295f1c26d5d7b174 1 0 \\x000000010000000000800003f38cd6a481acef416652df92fa2181c4c0a6b4021d8b1d97b8a91e779d1911b0e253598acd724219238ec81428f0079c6fe082b12b07806fcd65b04691503dcca48a1714668003eb12e636cf63710ab41e86edd4b48f9a9f1c6166093d240c6b1c85751d1d0fa10e2341d750d508f0812317dfd4badcd89bbec5224c3d6c987f010001 \\x69a85bfbee734b5c4785ba2ae16fe69358e82f2a4482061d7a0ddbb6070467e927e331a6afd7169200c55068bf0039753a634ad87835fd972b692885815a0b08 1679323390000000 1679928190000000 1743000190000000 1837608190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-2 \\x03f89f021f1acbc2ad83de9c15b4af71b56bcdfc619c35ad345d1cb4dc6c16b01c3c1cc02d5dce8d30b5e246bb1f21dc08050c543b87a8613e82ef89c31102f3 1 0 \\x000000010000000000800003cb18d3ce9633ce13eda8a31d84723effaa280af91916994ca1d8b97be3efaa106c0e67a60ce5210ac46ebea9fe2bd83e89c7e6024a022ba6955d8fc89af23033c9292975105050ae5c3ec2f53e473b0a1f89d302b4c084cc729eb2af9224e33df4dcab6677a8a54fa0d97a73c641dc850314890a1a91b07f582f06d5a3bc27a9010001 \\xb605c4850f1de015224b1b2773e0a56675d7dc86050d1c6b89de6b9e3dca7016ce12a1914e70f28224ea0ad284b428e18816f23c33209d86c3b2ef580e2d5808 1652120890000000 1652725690000000 1715797690000000 1810405690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-3 \\x05acffb9d096153a6ac49c946bac3d0d2ae6fbb695bdda640b8cc3188afd574e2bd5b63be9436fcd8f4400561b41bab632631f35f4f7013107513e3e48eb0f0e 1 0 \\x000000010000000000800003ca086eeaf7c9c6a4094b81bfb4089823133106446fe162a899a14a1eb685dbdb4098add717c2353756d68a0d659441b5e323e1f4ccd6a388afacc8f9d4fcdef87b5481b7f7c33f429418f93e065211b8415c86a520f30cc865af6b7ead471c63d3f8744e0cf73d51ec28328f52ce10e63679871ee1559e96f83acb49ec804b87010001 \\x77a9ca83d59f8afdd3c3e4670b663cd0e02ce15c1cf4dbaa726f4261dd3122295aa0bd6187345a9d0b1934036c8d28d9d1fa2512009e673be68f5530b342f700 1667837890000000 1668442690000000 1731514690000000 1826122690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-4 \\x088c69485661c08facd25eb9ef828c0a4a26cd9c39038412f3dc7776643de473b790d9c357a4ab0271c2ce624e8c5203214bb4ad4410374c5efd239a249aa6a7 1 0 \\x000000010000000000800003b70c4e5b490edec20a66322bfe3bccc916e4abe9609d002bb65e99d85697132741ee4383d5b09bc40a83f3647996d833b82291f049d31774065e40fdaca18ffa78066ecd9911623874592d77b5c9f4427be5c81ebeb8b13dd120b79cff8ce7269a154f8dfc23b1938bfb5fca2aa8d570add625f20fe74245bd59c987e89bdb65010001 \\x2dc4e22315126b688450112be911df3c7e62ca789362542b77030057e7a46fe12f681244f686ab7e34c81cb5428d850ad4adfdb827c46180ef5f6a560f6a7608 1671464890000000 1672069690000000 1735141690000000 1829749690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-5 \\x0a98d5bd1f6d12d85212b5d25121150cfc3947e31edd8c38d53f902f90c39f91916f141d0b3706c5628a6ee6fda857b19c35e132c49ac81616497e6a58ffdad9 1 0 \\x000000010000000000800003a0be5ebcd66737602dd3bdd5f15a8e7389707a5220bd767aa2d96675523812bf88206caaa15a7655ec50643e8a4143a6029e94341c18dfe0697a8af67c295c9c56b0e887ca7304761b9c2e1881129e7853cc5049dd8478e07ceaf2dd3dea5f53a8a1b24445c1c57283e7f0833776d0b5a8ca2d26357ff481ff2046594142cec1010001 \\xf4ac2ed60232189d760b56d38ca6e9c7e6accfe3a7d2ecd0083984bae91573a02c0c4fd5f559d3d411bdf4ff87baea5dccfc2c8cce29e1dc209d3a9ad5b3160d 1672069390000000 1672674190000000 1735746190000000 1830354190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-6 \\x0e54f55c6151fbb6c4c3d28c5902cade79f153285210fc8ba4db30f42ad8372c20fbed16de969bf02c97d81b74c9b4974fc326e9c715c8601271301759dcad40 1 0 \\x000000010000000000800003b82e4630bd8a148aaacaf3c980d92b88ce3bb8635a715c21d7d6cb3e6dadbfc10cc5f21aacdf0743583d5197cfe832ba2520281f2b178b6ec312083fb872a2242c28e8667104423fff5368f6778f88d24d98fc002334b02dbc7f659f1204e2763dc4cff79651164179325d315647a219de515114aa593a2bb4b15321ccb062ed010001 \\x61d1a02b0de0cbcaebba326cd7a8231a894ac4a8490fee7bf18eb7d3bdc9a7b39f2f29896401fc231a39096bb3fc946a60d12f25f20716e06e901057418d0b0c 1668442390000000 1669047190000000 1732119190000000 1826727190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-7 \\x10248537ad4ae72cbcd004a510b87f90ba49fc976bb13a62b1b35e9518ecb6b44e42a3a45155dd209f389601768acae777441f67bd69a84ea6751fe948333ca8 1 0 \\x000000010000000000800003caf5e0e7ae348950334d70035beb5ed125e4a8679e58bee63a5a3a92bede22027954c31873e45ff7fc4968928f2281dd4081902f94bb1cc88cdf096f4091273bd6d8d88901be7c6be5a4ae0bcd8f07dc55e07e887fef7353a15261bd722688b727dd91b5367232b7772e6e6e86fdc1b8c52a7c37370a6c022c1baccc913569cf010001 \\x8ad470326c352210a8900498cd1cd9b570034c4b41dd9d597e104c8129e6ce56c0c86c1b0f41e1bffacc52bee86380e3d83ab46a3123ac37c40eec529b3c5a01 1656352390000000 1656957190000000 1720029190000000 1814637190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-8 \\x1448f784b97c06c68d6f8a85704826724c1bea3107bbd3dd934e680e6c6b248a3661e4927b75f003b3979a47325dc08caae001be81cad50b3d834aa31f6ca442 1 0 \\x000000010000000000800003bc75366a44685a583b82ef28d8c24f5f0efa845fb8fa1a317b1091dd05a6e3ea8f36fc4591af3b968464f73bc951532f02b58fad4691ee3867357bb7813bf328fa16f8c640a19beb6a6eb9399de79212eacca72fcc15715048304ed22f23781e9b5aa2389ebfceffda793810589fe47c1cbb3226bc420287f6a65cdf697b2eaf010001 \\xc1f7013e1d6cf6a4937c1ac4175fac32196b22db1f76dac45ed434d81e0b85c90bdfb655ba9d0585d09dc6f3e4d7b09f0f13b1ee77b3c5956e8b2f9c5f33d00d 1652120890000000 1652725690000000 1715797690000000 1810405690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-9 \\x1524c0578ce8601ab790219949557153875f23af183634258e4af801a1a25da97ab5aae54119976decd396193d8f8d2f88df71a35d193cabe088d668694a2552 1 0 \\x000000010000000000800003b4dc113e403fefbeca1b2642f860bed0fa8ffcd7e361b1871d47567652195c45dbe640da8f696d0a94b968bfd3c4d4514be0083b6db628d91ae46e9a9938f05f74cdc986b39bb438633d6dad3a5d3b122681461d3c5e42330d747d9e63bab4a62395f5e52a9bc0ce45a21f974758daf0d905ba124a247188edffb973355d96d7010001 \\xf9261edb9972f45ff9e3a776b9416db2bd79da898b512af0ec12960edcc152ad28b50cb65ba95c86a936bc3382a1da81bf6d2bff6fcd1cc41145c99c55bf0701 1658770390000000 1659375190000000 1722447190000000 1817055190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-10 \\x169c5f4e17f3a111cba3759f4a7154c7a204105c9bf50fe53e3e98ea9271cceba3ed62df84c39fdf95b956844d9422c8939c771763ec3f9d01661fc2e9f89724 1 0 \\x000000010000000000800003c1fd0055e229ca3469ae822931567cbab5d74902839d09e71e36c59a49fb5d0f49c29373364da294d7007ddb7556cb71601239497ad7f8ded5d83a65ac1b8272e74e2fa561f920a5cdfaa3553a51a23bc6e2298b6b9253b831323af613ee685567125ad6785b8777734eac4298ca8b66980abe815a0b214f1475b7915f8c8d0f010001 \\xea16eb4b055228256850d55f24f6c5d12213f005f6647cbe50767f3cc27bc4f816b8c7e8d54b8d80dd67aaa2219c7af458ad8c9ddf450f75dc940fd1403e630e 1678718890000000 1679323690000000 1742395690000000 1837003690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-11 \\x19ac85e705067701dab9a2a938ed65961113341437884a9bf418cfcadddde8efe93bf4aa32c33ad43d5773155f96e2ca708f6cb7dfe82160dd5e519b65f99ed6 1 0 \\x000000010000000000800003d958351c3f1ac89e21334f32059c795a9870efb71bcbf1cf8cc656f16f0a3f6f159653da9b7ad5ec825f7eccca56c32a7783d0ed560577dcf23266599b5bf558605c9d9ac50ae87c95d01a767cd55015e857ac87bc7b88f8db4e86412eeee9f8355ca1ea8daada2024aa2ef21cc7d221670244e66cef71f6b0d446e0ed963e79010001 \\xa3a6c42b678a57f5a3420ed1c1c42882d815c035097716493b3ccad73319ded200af5123c322d335ebc717b8d12e9fc0b7d2f7382534b20d5831a1418bae6b00 1655747890000000 1656352690000000 1719424690000000 1814032690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-12 \\x1ca037ad1b175a0492e272e299553751955cb13a46e76dfa8b20bdc49f8df930dce72656301b38e21fc86354e1026ab4af5e40d4c291a19b6219b083486149e7 1 0 \\x000000010000000000800003df3eb50e23533f0bfdea20775576332ff391c99ce4d4f8b05809a959d71fb8872e3828d1b0a558e2b2920d5801f63c0284e06411e27f4d02c0a80fd76c73e05e091c70c62842bbb1d4a5f82b91f7a14c3a1245e0dde466d6ca3c93b92bee72822f5f218072f17c78ccc18ea9c05e67b0643c0570f5575274643c182ec12a7af5010001 \\x396938f8624bc9871d382bbfc288ab2de622a72f00065b21eb8eabb82da3abbd2dfc83423fecc0fa9e6422c16fbd02a47f3459a0ff9a4feec0610f618bfd9009 1669651390000000 1670256190000000 1733328190000000 1827936190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-13 \\x2174bd6a177303e111d35202c39a54f3c1f7f3903c013bc226beb8eb432a5efa133761b175fae61e3598c17410e8db4b5257ab5168c65abccd1829d638a5fe0a 1 0 \\x000000010000000000800003ba6621b114da75843fe6419d8e077a556f5e15ac3cfae5ace64a2af53b5a17a881cc47fe6f3f234cc2156a94d3914e6dc53922ea403aee1e5077698789910da58ac4cebb5f3b99cd522d16502e5fc0591806ea52d414c769339f7e44a6311c2a22347ddae222538f6193ff5418280520b82918d339aefcaa46e7b6af37167caf010001 \\xbac6026e2613eba482082ca15a44be79e17059a7c80928560b5caf3fab9533e614cb6f1391fcfb77be35bb865b17a3fe8c4231a5113a4a84cae634c74b0bb90a 1663001890000000 1663606690000000 1726678690000000 1821286690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-14 \\x2118914df520c7e20bf0cad1e5ba04efe6448252e5f113c9fea18575b88dad7a205493f19501fc937c20d79bd27957c3443c295e9a2cc85f3dd04cabd3213502 1 0 \\x000000010000000000800003dba3c511b65f4155d9ec93bd2c668b189d53b22480404e7224c53b12b8cd93b31fabdf634803837ed0051170d43e00f7ef7e215c42344331a86c0077835dd154f35b9a197631416394d83c3d8f31dbc546cb81360950b13992529d2dac6398896d9fe93b3ca8911b2a193f524f22f54bf8cd8e4666619264fcf7bf475fade51f010001 \\xa3da375d44cbf6fdc869c6d343433d32446cab43b73b2ea0fcde5a855008e3761b93a4b1520072288ee53d51f8e87303e60e6639444be62f93dbfb18c34f8f05 1661188390000000 1661793190000000 1724865190000000 1819473190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-15 \\x26d84e909f588c0b7b099759e4d0cd33f6f1f2b825e3fa1f2a78a6593f39f3ec727c09aaf62a44ea5878206e12457f63531f07ecaab6fe58b22da1c0c1722bb9 1 0 \\x000000010000000000800003c195e19e945374ea71a24f7868143161fc4a40e863f0b9faab1d92ae518a7eff85b6b7b021fc8c1a2635569cbe4fff406f589965576bfd72fafee93fdce78ec87ce74f49fe74543b8e42c1e4a267dc18cd6b8e1460104b1998d4097f43cdeb6aafd6f1ca6ec6e4626722f418bc8f43b4d7692a90c99bbddbff1171a8ec19a49b010001 \\x85f267945613a2bea5e529398695868ede3665a026bf0f195f302915c142c096d2f3a31ddae3071df277a673c396e43250c696d250cff7ac7d0d684a9cbd020a 1672069390000000 1672674190000000 1735746190000000 1830354190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-16 \\x2fb064fd3d74febf81e9f4f90bbcd762ae152911fcf7605019e4239a2bfe23fffc2abb9b262ef32cb4db9a34d635b3824a84bd65e5dd52d8eda6acc2db9244cf 1 0 \\x000000010000000000800003cd7fe6de42efc5cef3a1670206fa9af89da9eacab2a59ca4b4ea49d95e3dc34bdd349be0c104f4bd67a2939129d89dfe13dc313cac62992ff9a7be4d9076385f467cf468b5efd68e238614e89ad8baf6734040f3b12600a3e0ef5977fe27e47f9b323bd089283ccd02c4e01c9f3ee79c55f3ee8912e70cdf5bc6898b90c138f3010001 \\x80c9f68b43ddd25fd5fc3a9f7f80a2705db8838a03ea961d3bba4a45327e74541227c0e421ea601eef28af368c0a42673462a172029ce0f889d35ab0b5afaa05 1668442390000000 1669047190000000 1732119190000000 1826727190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-17 \\x31fc95dee14d22c79cd35130e32e06230b8098c069054840cea4b98b8f6757cbbea1741a738d8db2c1bc792be0243f766cf8161432c973a1f45681354fe62fdf 1 0 \\x000000010000000000800003bd69b15fed77f16bc21cb4996c19ccd9d93693f6876b7d69f51d89c4f525a4fcb693fa2df4c9e625d2148490f5754670f54e47436d9dd6a9e672e5431b08b3302baee938a3b7a569a00809443b96880a8ffa1cfe0e755d1553e0e9359a7d27d58d57246284804cab9dd849e85792ff1b69d9c436cd60e8f6ec358ce98c2c406d010001 \\x527201eb76729daa276610c23490bfd62ff8535b020d112ad456cd6840c1aa1da967a12f3480dbcc5eb0770a1d6ce5e70e52e6fb995d0a3a0a94b4d4f7d0890a 1682345890000000 1682950690000000 1746022690000000 1840630690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-18 \\x34fc34fac359c7f592846a290f43ad58a0e31ed8f801004411d4b403a0c777473573d1d96848e44c9bfa0f0e13b5443ac49489efa83e5df73412f854e412faae 1 0 \\x000000010000000000800003b17560dc67140beb2a07aefc148bea5bc141073573d28c1a8f288e38f875fce0afcb0409b076e3825b60449bd6e8756802b2face652ca18fef75647f1ddba2cbfe9cfa73f2e56118ebd3f92221c96ee6763c6fd1076e3f780b5234caac0e2ba2783322e97096f9e388723e677ad4f18e02a5ccd752d1762a64dd745a7b294745010001 \\x755739edf6a8d362adc71ec88b0e6b7bc62c0d46c884821968b0de1616d9a13e406ed267e252d71f46fa41ca19c3994dd7d3708279e71b764cee009e01dc1c07 1676300890000000 1676905690000000 1739977690000000 1834585690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-19 \\x36c0ccd1f09e895096a015013ca80cfeaec7603474caa4ac21a2cfcf2646ae5ebed170617d446abebc0e66fbfe59ceebe57f1197950735803dd962070742a27f 1 0 \\x000000010000000000800003cc62b5f71366af41ff75e3a049e9d1c4f37e2d1f20ff709681133d704afaf58c9b6a7c02b0190cd5dffe450ad26bd814f42d046eec5ee8f826a931204a81fe86fd3ad22c4e063555c67caf16b2536a08a102c17e3e160aeb3748bb4b0bb57ae467c4065b70e2a37fff0c596a9110b91459e23d25ad69f6540784c1334dd78017010001 \\x104e06f058490a68116b7399683254d3556492b98044fbcbfc09eed07b453c30eb04d2a807fc2560272c58b29b18731d92fb3d4ae6b6dd3a91ddc395cdc77703 1679927890000000 1680532690000000 1743604690000000 1838212690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-20 \\x371c6a724a21464388cabf26ebd78af850e814827bd0561a6bd853353c01f3ed5c6d539e9c3158ec72e248ffcc6629887c3d27b3be2198cbf0a2cca58e136daa 1 0 \\x000000010000000000800003ac679ce27972b0d9248a87ed89dcb4bb2d545d166c36536eedfffface5e7d23006943e35a3fca7cbabb7474def04ffac2ae1e40540fc02dc6a2f1637c56c1e3d97a64868f7596a5c8edb5c7ec493ed23c1343f0e115cf5b4610e9e5eae0f8d6ee9644c452e23fc915b798028f179fc46ce06883487e02f0d50e2be7969e544c5010001 \\x85668a1b7f83a20fb6e086daf7a8092a9a8adcbe4a9618003c93105cc83bc00e899d0165310c82cf53e1bccce0e49a121feeaa90f856d33f3f0539b1668e300b 1655143390000000 1655748190000000 1718820190000000 1813428190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-21 \\x39002ec78f5bee8e77b20776252c984b0521b0db3950fd33359d14742c7db92891b9fe7d9d81be7afa60d52add1f509b6ef9681d17aeb13b5fb1275828d26f7c 1 0 \\x000000010000000000800003cdc98ec90633ed875d4ccc5f444588970bc17cca75d58f5d3ff4afedc3e5f05969ea625858389e46ca3a43491032f3a16c01ef95589275e2a5fc7ef07583b060110e1b1c093bb5f9f467af909257b99a3e5120e71e68610862103fd46ac562b826f939bbb5457dfead3704649b99f673cf740c04d216803591b4e9242cfcce3b010001 \\x194f9542894323eb64d159df564782b6a79455b63bafe935746e149be8682f19f242272141dc41e34c0a0b40ac5fa033ed34caa636c97d67ac972c30fe637302 1659979390000000 1660584190000000 1723656190000000 1818264190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-22 \\x3988644a4cc6e3ce4cd28224eb334aa3025328add9c629c1306ccc413b6a8f6712a8a78af8ca9c4d9bb1e1860c7d0064f75c09a6535fd20bdc372c8eee0563de 1 0 \\x000000010000000000800003c8aa86e8470e376645165b4aff0a8d8a0c30a2f70296bf07fbe3a158921e8d0ce854a87ff5e80236afe3e237c28a709278cd097382465247925eb5c42ea018c57cf5c67c82b24dd454fb10eeff1a48a5a0ca9a19492eabcb20edf070aee47d0a5e16a3e096207613ba1d37f7b7fb12a0b8191d8349527d3287cf7af596a52c89010001 \\x7d77e3dca57630701c909c069ed574dd36b835a42895e7cb4ec508895911280da93f89b447951ad271bac8866794f3431ec8962dc1e6095df454d15e7d5d4402 1655747890000000 1656352690000000 1719424690000000 1814032690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-23 \\x3e00d70cf7daa441f5f2c7112f456bfe9b060710c7845f728f3f7b0f4ca1fa06939d43e4aaa67fe762e9fac6e1bb16b8244b36d7b9791b4940105c3520be44f8 1 0 \\x000000010000000000800003b73dd1852b2811ea5913f0cd7e20e570e34ed4c96f01e0e823d7a18d4370a86c5f9e4adb8fffc40625ccf918c1263a1c23dacee7758d4a4c253698d1bd763ae1d7816da95b1bf42a39d1828c7c295842587b46dfd0ef6129d075b3c8a59e0d9d0747c2d34cf2ed5cc1e2de81b71cd7c4acb13e8cf55da6a33e7269550e30ff9f010001 \\x7a78f246d1badc3e7a73ff30e72b944f99066473188862edea0fb8e2728e5622e14122fd5417389925a60e7ad53032a6f2300ac7a9eecb82056ad82c955b2a01 1660583890000000 1661188690000000 1724260690000000 1818868690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-24 \\x4184d52bdbf2bcd9a6e2c4e45ad293216251094f438519666e2051b597811a7e271c900b0dafb06e162157a3e2a19fd55ff21b8a14591d0f071f3236b9aa1d2b 1 0 \\x000000010000000000800003d788fd2bd4b78edcea12660843ecc4d42bad9fceaae9e6c26eaea4bc98573e6c204018440cbab650b88306acb697c39e262cca5461c838473822c5fde55db8d9e6627171941f568916e256096593016ac1078b4a4d5a53008b4950ea3c15722fdd5b7e2f3a9f05de51524123bc63c4dd29c210b9c55c887aa3a26f4015c68989010001 \\x07e8264987812abc238eacd911c396c5dd70da751cc65605a2389d58b0cb7c8a2da45f919b93a051b5faf3bcd5e5a5d866b797f05ed9f74b2ca9d5db59d5320b 1682345890000000 1682950690000000 1746022690000000 1840630690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-25 \\x47c431d372c2d88ac563fa5545268776f37c580c9a4d2b034a29de51c528a378f9c7abb6e1dea13e001c555d18961a26ca041810e9edf4e4a5f042addeaea073 1 0 \\x000000010000000000800003e1f7e9609d1f92d9e98d383611a7c272beecafd7a68b81345d368f4b54faff17039469692c0692d037016c676f137267067e4fa50104b5251c737df49a287b71ec427e979244f5e970eaaaba5a758f82b3276fd262068ec33a1ec202eb54a7e0bf49cbc1d2615e49aa5511458d0da9ca71949cd76f9510cd49ad77ed68a6fc85010001 \\x7b1193e2e0762264e0d8a5cff148980de60d85eb8282e2b2493e53ca36b81d02a0d11c62b4d4c9ad604d17a9a8f43be3d2b74a172baf9bddefbbd959f5b88501 1678114390000000 1678719190000000 1741791190000000 1836399190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-26 \\x47d4d187ef60ccbb0f8161fa7309d0bdd78c0fade6ede99d212cf986ff0d363c54fe3772dbdbfac9f42bc1dd5393a61af6916772a59d12363b1d06673173cf49 1 0 \\x000000010000000000800003eb5678ebf91259a1dce43b9d96bab6b1592e61893c4b593d7a0e4d3c325084615295f93748888dc27ad5670b8287ee9b4237e42b2071efb78da94452b81f2825c02409e696ecbc9df2f87ed9d6255b784003b977aaef5853937d8efc1d3efa51dbcbf6c34927d2a1bc80f19f3a4ba28be73bc1d3c9c4ea04075935c7eb0a10f3010001 \\x51df572380c93352d6610e799cb20892a4ef1eac787642db5a3b9eb84189daccbf105ac8059a2965634142cb4f37800d31db288523d3eb5821c272c64207e60d 1679323390000000 1679928190000000 1743000190000000 1837608190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-27 \\x4da0b08672fb7d0b880f50f4ebfaa3a01efea3efc706f460499d78f56553f5e2ebb798fb1c9675406b3e554f63e14e335e953d264a302e4a429149d615f4a7e4 1 0 \\x000000010000000000800003c9ed65ed531b29d9e3c006bfe96400fff24b91efd6271822f49e859bdba3f0a6a8e26d70b3d8b3348a2d3f02c4009f6f85254c0e45d74496a582a2ac61f178dbf7c906bfbed241d4d521525716437c54977df8c8e0e5d6047fd3bff46e4bc05fed8cb8c5b948ea1e9375c9693b26c9d3fbcd4f8fdee805c82e975771ad0733c9010001 \\x368740e6c2098a992f6af9596ad1c0bc3bb15ff7dc6d4a8280e2d75e767df96c1f21a6eebcfdd617b36b8e56538caddbf219b1872d5758f7c363fa619ad79000 1655747890000000 1656352690000000 1719424690000000 1814032690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-28 \\x4f48eb3ad7ddabdc6cdc31501bda0fee8f88849ca4a95b0eb91126206dcde9641ab9d49521fa4bcca2c5981974cbf71d1d63a266d2d0877724c4d61e1ef600ae 1 0 \\x000000010000000000800003cd0cbe3fcfaa9d71f6b8263f1fd15fb1c394c0667540e63fc584e51b5bdcad682e8cc18ea8476e39b37881e971c1388d9556131767f122912ba48629cc6b260cafde79d620fc64923a9b62d8c5e6325db5f6051a0f0012d6c8b26e73ef042812d9e85bb765470c7761c2d1a7dbd1a9adb3c9e6531deaf7079f893ca650ce1157010001 \\x76ed69584aaaa4204681de5df9ebc9557e5adad4c41768ca16ff0a25b914eb77f23ca759b4dea504bb6324776adc8155cac2331d7f1184b8c268f3c3c255e20f 1667837890000000 1668442690000000 1731514690000000 1826122690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-29 \\x51306784c550289d0f2e09e7ab77d959ff8855a9afd1fec9e54b421fcb59d1ba1944037cb9e431c549404fad10c0eda0fac15a3265dbf82960e10be900053dc7 1 0 \\x000000010000000000800003afe4f14ad02f24d1840960338b3f3ae7ebfdb37373a79e7517f9534bc8a8e2cee61a088605bbb1184b1b08ce457fa136a84884551e53e9e90c2aead4a1d9a985c16fad3e821b758ec04982464cd5e7a80bdcc73121cb74889823b647bc6dcf4ff275e9b0307e1c07e809f29192d803a55de3a88edc8f3209d150c305ebea5799010001 \\x94d057513593aa8a3347938d902736938a558c7f95abb21bdf778fd14fac4a1f7ce830db3e569a36f6aebf874fab7d887cfce3f5ce2bcdf8d1d6a76b413c3903 1675696390000000 1676301190000000 1739373190000000 1833981190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-30 \\x522c849230386f1715dedd141a682190332783cb73d5b40e4dc228694485b74d2c4cdc351f0647310ead171a62b55ae7ab0fe67d2ca888184418e9318beac8fc 1 0 \\x000000010000000000800003e77274d1836fac8fc8ca5e2a7ffc5d18370ad43973761106bad2dd777cd40b332405465db2e925d56bc90de1ac2a332c11335512a123cd69be6ca96135e03db5f40ea0247a7f22d0d4c127d5e04d475520f97e216f13c5f01f78103bf6763b48198f21b397221adb8d8ceca149e56c9df063bf84e0a2fc26f164ef645735e807010001 \\xbd7ba5ab0c7a7f0835ff1f98673a6048453a96f5934ecb0bbf6921fdb63b38a3e3f4d83a2b358e1918d0aa0578fffd2e76580426d09640dae20d1acae8614a02 1672673890000000 1673278690000000 1736350690000000 1830958690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-31 \\x52ac9db1803029346232e2bf4fe31dcefbb01d48caf005bc2f48890e220d71993e0b16c410153dec6c6cf53b72b2852d0fc9bd8e303fcfbe30faf87a8af8975d 1 0 \\x000000010000000000800003cd87cbd38d8a2075f3cade845e64a340ab501f880ce6f6a042f4a2f0f19dee07915e74a384fdfef71a2df0138f45fd11e28a3897d78a8ff6a0666a2d0e0770e265d30743fffa5a71114e8d1f5c7381894075fb0d7aa27f3e35c2c4d6d473689be1e096d7723c7493580a5db78c53f25cb901d955c4be9d6fac7325b61ba2ad57010001 \\x2acca4df601365ac3b43fb9e03ba491cb434a4b086761763bcd8f12da218f97b57d46403d9e77e8ea0d6a007225815fd8d4cb6fee6ef052f2b99e1f968e7820c 1666024390000000 1666629190000000 1729701190000000 1824309190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-32 \\x55d85c47c17d8a6e910dbb2f794e49a5c71f52ec7153706b908632104ae932a99f77fa46bdc9ca965525063b2870daa0d3e8909bda8f1b80930c925fca6d9c31 1 0 \\x000000010000000000800003aa65200c0faaf982a92b95c3cc8cd46ad6f6dcc58bc965f21427f6fed350a04a1438aee493d9eba4719ae36fee92676041b8f946eaf3b40270512e328e32ac0d854eba3e93ec5a9b2de09a75b0288d79eaf72d45855336a53637755a38862193b60954c3b5f7e1c1a3e0a8d3e7ca5a1e69fab24b9479d9632995f03ca977cf23010001 \\x92a0c3cfe45428040441b51bb0d61dc037905bf50a51633028e0c6a91099bc016aea27dbfefafa2a26a6f3059b85817b034f0fced70e191022a2feca7849ff09 1655747890000000 1656352690000000 1719424690000000 1814032690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-33 \\x56e059429d696ac9a2649a5ed8346f601e2b8b814fb02e65fb7f11641e86496eef62a80fae0e0eb46b0b78bccd7ea84e75c343c66fd7b6aa646c1dce961afa5a 1 0 \\x000000010000000000800003ada824aeaacd22acf2768679c4ff0640296eeb5b0ea8e0667da3be017f9cdafaeff527a81d8bfad279200153b6b58c592a8343b5f74960d1e67ddb8786460938df12959ba462bf6e484f1fc64677e32cda1a94d870bd20b8c09d3e5ceb8c058cbd8ddba65d4703be860acd0fc97b801ed797f62ff3135965cd10a0f424eaa687010001 \\x01c5a91fd6a4b95f3f7330e336385f9a468545b08ba5e46c636e115698edccf99c81e8a3c5db10f2ed25859d469625c7742ac0b120a13cd507fef5f310fc2b0f 1659979390000000 1660584190000000 1723656190000000 1818264190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-34 \\x57002c31fbf68474e379f4f649b31f400c069f3ca9bd4b393a39ae0770ab6e7161ebc6368f5acf7aa905da01694a7f0b3dd9ad41805e087e88f5ab5351150549 1 0 \\x000000010000000000800003d307efb21091c0d699242598245addee9c0ffe9fbff5174388da1f2fea71976b09b575486c3a6312bfcd16ef176b426d8c9caaad9881cae780ea789062fb3b485950d61e2d8b43c574998d5fe70a7758fde03e24e93f11044f6d9baa6748a29e83f6185bd2f3b47adab650c54631d5d8a006712b45524511a21dbfcf55fbe9dd010001 \\xb059323746412fc0e52449be0996365d9ceace9d5b499ff76067d76261c7c4984f4bbf76f2a2050d8e95c8da94de0840305e3018e80531c422c2fe0916460b02 1682345890000000 1682950690000000 1746022690000000 1840630690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-35 \\x5c44978f20f8a16f53148b3ad1e77903bcbb9fb0e2e3056afcb388075552b19a9cf4a4cb1a9aa13f28d58badaab62215e9dbaa000720d94c44b760380ae2ff90 1 0 \\x000000010000000000800003d36c73b0d94ccc0e56c971ca0e4862e6d4cd94dcd73358d166d74a0513a986d42c42331f6856283586940842013f54fa4d9fa7bd9f5e1e58c5b6b93228603ade61e89830a204843ff1b9ab751d832f25c8f4568c3a08c4f198991e3b7653ea2a4e1176f44e103065c41ee699c40581960444e2f50a956b762aebede6648ea651010001 \\x673d557af016a1c586fda6af7b5aa61614488e0ed7010f309054e7ef2bc42fc8b193d06d33c6b4ae6cafa035fbc8afb4d8b4c1947c7410233aef5929c4975407 1676300890000000 1676905690000000 1739977690000000 1834585690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-36 \\x5e3c4505e825d40fd22f133ed2103cd385e87f087db714dce42b46b6767a7f0cd81d32e3db965312df7e2ead8d85a1eecf070cd86ab8cd0486e505e21950aac8 1 0 \\x0000000100000000008000039e3c29a0d119fd982ac7cca639252e887842026dbe542c96a39a0290c29b91671532a547b76f6c3208cc027acde21b407bc9dd33141199ad919730d44403328c093329097dbbb5ba2bc4b57a42fcda33bb9ea5f5f25943e3cde5258b6686c73ee0d7fffb80c24f48df4e3ec906d5a6f121195a13858c8b89e8cbacf0c12347c7010001 \\x67b88301554835ac735b47afa3c16357167bd53c5d05ff52deb4ac306398c0e4481337713359838eb4e5e5d5c5a7b9f6cd04c07100175563937117b8b438a50d 1658165890000000 1658770690000000 1721842690000000 1816450690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-37 \\x60383f162d1ac270a26fb1dfbd806a17e6e895438be6ad52e97a2f25ddf14bd550a6195b234c8705af127a94f450dcf5160935b60e39bd2d92968498c4b5e26b 1 0 \\x000000010000000000800003b86db29bce8c9eb07a03a8aac80f618de5cba209a37ef63a20ca3e9fc78d3f402043e5f243a3557834e4ea9470be3bd38fad808355eeb62761aa5c9ba188d34e801da4b791a97dc8413df6e619d2de6d577d6c21949f2a5c4ddf64606c7aeaeb01abb7994e3b2c304ddf0c5f87809125d0eb375bd8820d16da932fc1e783cc51010001 \\xc6369d9c98ca217fff053b2a0a308c31f0370707aa3e23998677627ae76cc345eb3a464f6961d07894fb28a9ae3d9832ecb9578b168b906a1a1a28e836c32d06 1658165890000000 1658770690000000 1721842690000000 1816450690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-38 \\x63849354989826f38e3f2885f575db39ec507254d41f0232886973b3fd3fa4f731f88fada4aec19c4c356cbcd480effa3dd3b0f096a2d94a5c54b32d95476e27 1 0 \\x000000010000000000800003c9471616a4e6b4ea08c75756c9650c9aef024e7cb0dfd5d24967cba611ad34fbd37da2c6ccb0a4f389414e81a476bc2d24e028987751d0361e01f1b0a12aa82f5019a70dd0e8be09692ef6954ded633f5639e1b67751fa195b687f4f4273ddd0d28e458a3dd9e8c407c78872adcf8e5588b9df6dfea638fd6f90eb7b58294abd010001 \\xef73f1fe3b513a91b5430bdcba7e7bc436e9ddb7c705a8283bace780c232b14c977c9768d40b8aa2de9821757249c06edbcd85e382109b2d72b45da57d5a0c0b 1655143390000000 1655748190000000 1718820190000000 1813428190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-39 \\x6648e6686a264d7511af0e76d32be7323bbed45ae3ba752f3dd879230bee485ca9e4c4ca443238d2294fd1218894f91c5479778fffb33edae278e5f99061c95a 1 0 \\x000000010000000000800003d4af37ef42fea705852b7bede4f56cd2b13bc1246ef7acdea72e177240a089aaa028fd797107f8c052e9507f7e882189c2e4addc16824a39335c3b4c8f2efef8a58282399aa105ecd9f7e4e60e887c68c73b301a8762b2dba7f0f20c6e6536b28f84c8a5f16aa503e70c40e94932713638bdf02e8053468bb89fcb6e6ada9a85010001 \\xcaf5c2fbc9eb5307d69cf7f8ac70b5654c1d59b39ba7828cd0aae436f14a06c922914d1c52d05a183a4091adf87a1a0dbba5f2514e6540c92bc382247b102500 1668442390000000 1669047190000000 1732119190000000 1826727190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-40 \\x670c396f99e5118cf2324764a94a7bba0ab8aef1716deddfc9cb17f4d408ed044018d4bc8e0f537c26ab1d27821e7b6ebccf89ad8f15b3d8f3dd5127f2a4ef3a 1 0 \\x000000010000000000800003e52769acccebfacc1e3c1fa78653f096a49933a08d7d435580bd4ea42374b4362f394b79a7c13a764e1bee240d6a849f00b4831c79e9082d83368cedd29faa567c704cf7f1286a79be54a61cbe7e8bf36b5a0d6337d83f6513a7d13cf0f5e31bf6a6b69ffb3b4d634c669614f901fb7db9f4dbf7e13c34e49be172f3bcbecdcf010001 \\x9a22384dcdd52e4b245d4a7ba58b725f92321cae993a6e38cdcb0ef1a7f16b87794a723755a0f9f1b956bd2390a2326332400e766dbda1ab969ce999b7a74900 1676905390000000 1677510190000000 1740582190000000 1835190190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-41 \\x67a0766f715680b07db330f8022207f3a43c9ee38c6f1bbc23d450c340ce4540608e60611039e8c7a17c72b96ed123563d45fbb51dcd06afc6124bc4ac29f4fb 1 0 \\x000000010000000000800003bd66469b7758b0dedfecc563479ba1e04318361424a5d6db75bf6946b0e4ad6559dc9530186af60fd8a4fa420489a4b3d7371df6410bd3fc12f5b18f12cd734326d7197f1b173e3fa25fe0b0051a6f81550b16798134fd6f0bfb8960b34b3cc37829973d365b3a80963bb66225cdf5c2de07cac5fc2c887cf7e64ae3b8809ec7010001 \\x4e180b0c16ecdb203055b7d48d93cc8ac0fc8404a09f6346679892da78b318fb0b78c5836f1635817947e673a6d38f80b9a73c6116c88cb6da09c8c37687f207 1680532390000000 1681137190000000 1744209190000000 1838817190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-42 \\x6a5caf61a90ff192c036ef56bc0f2ce8e7ae770611ad232af683e18ff61830db01e4035fead932e580e84d30338821c7250c8b7593e626333aa8203745f28a74 1 0 \\x000000010000000000800003d0887e0014b1c1452b5d28bf13ce844c6b80f3a93e3ada4fb6c6e4fc8a02e073269123f56734dcc226665a0abbb537f489316af14a9ca9b158a06b2872ca96a607898df7e8858d9586dafcd43d0e23e137741328a4cb293b63942f121461b11c3cdf77cc259a94cff787d60d56771acb324366f527d606749a6aa712b5187ed5010001 \\x0204c014eb5483e1d75785805374ea9c425f3b17aa2802dcebc1a63c49b06bddeb764493f93f7a38721c8026ac263713e52f2fb0a7f25f184eeadae3ddc3a50f 1677509890000000 1678114690000000 1741186690000000 1835794690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-43 \\x6e28e613d0b1ad2e14afcef304985ab3495579b4b3b9041a8b091b353139412e8347547acf682d3f6aaadb1e9127ee26099d37937e4536676cbe93e7639e1cd1 1 0 \\x000000010000000000800003a3f8563f45d78b6de1c05cde77caf814a53cb5793b231e2f90c605bf106f859da0add682be6a4ef05a68c94c90350277160e83e4a401447c630bc94374873ea2841b797ec6b98f27ca9e84ae1aeb59c472c59acd3dd3599f478a7e7144029b0d909cf25516c3921df4029be2bfed43e40a2f1ee0b16ec3d509a9d8ee4da93bc5010001 \\xb85bf76a29e3100ad60ba2934bea5dffe3cdd6f6383f9203736f6f68ba64e66ed50029f3537b73d3e1149c07ef66e9a9b94b9d98a7fee5b456cd8918db7cad08 1657561390000000 1658166190000000 1721238190000000 1815846190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-44 \\x6f1822b50c0bd68cf30f4333d50ab4bed92b4dd08029666dce8edb36f8368eb7b0dd26b0d4dd45b377ff3bc758f1dbb5d3922309e135efa719c7a7381fc78b6f 1 0 \\x000000010000000000800003bc4d5e57285542bb3338ab9fd8fbfe60dcc28efa7c37860b48fcc7bceb6c3dc77677866a89814402b4dded1499174541564ce827163668b55100b5eca8fa1d2be3e0e95bccb7edaf46ad61214765b0179a1aba4abdc6523fae2ad9cd840b2408fb6abd62ad2170e9d37a5a9526ca2a2231243b4d718594af93aa179b8a950aa3010001 \\xb968c90a2c503176129436cd344effa9d44df02aeaea638a0559d2f0a266e97d66d4d3f7bd861c8059d65c843462a4f13b69a9cece416bf468941972601b5d0d 1654538890000000 1655143690000000 1718215690000000 1812823690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-45 \\x73c4e0ddb35b98f825375e305af7c53b9bcc449e6849218c11764ba4fe1217dbedb05da4adc06af5b13338c68b84480edbf2eac88cb88809b4a60b226115785f 1 0 \\x000000010000000000800003e294aa5fd656952f92d387671788eda1181dfffe908a995faa320a61d937ce46aa865e0bbf32b6dcfa5f98d0be3303c1f2db0cf5d8241f72e8ccfca14d84f973e99f9fe3db762eb2083a225914e5716ba6f83c06e16e9dccc7668f89ae1ede4644528c0dbe3fb9d1c854840a2baa1dbe5c96fa81922b031825ae15cc48424f29010001 \\x9b1a831cb587570d200383d899f0d81074d7dcb3f3ea508813d36eb91f23f5583f53d84809dda6d0eec937d20ffa97f5b20746bc262e182a0c2223c5bc0b180b 1664815390000000 1665420190000000 1728492190000000 1823100190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-46 \\x77208034d16ea8c94872cbca4ddb4556572799af298a3776704d25f66fb3d848f508ef5fdbf6381e9839ea31678fc5dd763ad1b5f2df74753fc6222fe5240a9b 1 0 \\x000000010000000000800003caad6bba49c2fb6d6f9725c639e313d1d8273418f77829c74f1e1ba3ab3e8df5b7866e869f364537f42d8443f208bd7ff0628c4d39acb0c59366a8583bad375522260edb8fb78d0176bf358476fed6455b27f42bf1050e6b3a5dcac532c3c13b28b3a0cbab5b477dd12a87bfb948a02f83998ae3036e94bdcfbfab0015323ba3010001 \\xf4fb4f4f293b7cd7cfe606980304d1996529a32c96bcbec1d97617d3d6cf4a89f08c96b77b448ccc1c229b2ec7aabfc3243a4db4588359f0ac8fdda1ea8cdf0a 1664815390000000 1665420190000000 1728492190000000 1823100190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-47 \\x78140a6ada95a22d0b44d720faf92662a0deb3bcf7a05e122ff28d12d11fb7e62deb4d75ba250d5e496f2fc9c8e2740eae2a5693c6d17e5d5709bad3c93cd43c 1 0 \\x000000010000000000800003c6d3ec4828c4b6bfd921069367d479d9d0a0aa54cbc47b0b4f4908099a5604be1358e7be90bf19be1a9f99244fc27c2563314017ceee87f36830f0c307cc0faf1bed4a59aab5cda77ccdf5e7352214ec4ce90f6ac46c876c45658eec4460f146eb9abb203de70a6d10f412da90adc63cd88b08491ba26b3e78b5bf3cf8ce9c93010001 \\x95b45024bc9537f144c23f5b14cf12adea896284ef39d0f40dd376feda8c093ca68589695d6ed72eecae1187bceb429932182cc5ea45db9cd4590c4535bf5207 1672673890000000 1673278690000000 1736350690000000 1830958690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-48 \\x796424d6f9ae7b26242f525e8c20959c666b25aab75c4c637266aaf83b57002e7eea3355ee7739989e708869fb380a2cf3d92c77841e480bf190329821f8e84d 1 0 \\x000000010000000000800003b6fd2a1520ec5d57291a9d55e584025b7983a83ec5be113d0bc7f08f34042216e25d8edfc9cd4015e81c5e7e08ebc04f8323d9c77914c6bda985a840d5e709bf1c44e71b003b6482f089988f679703967e13dcfc487e3156ebb19d72026c91c2f2ee2156ab7a28f4c7205f0802c96d3ce4fdacebe4258ab2ea36f75f78273d63010001 \\x70c0c541433bfa9dec0e8a9485b3b33d4f13a7e210b097f7cce21f0878cadb4acf5d5985896c411cc104d74a88227525a1b305e9668a1d8880aec9cd27abf003 1667233390000000 1667838190000000 1730910190000000 1825518190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-49 \\x7a80fae3b5f4b8bf4c6eb798ade668c09fe56573cef0293b30a8abcc0cfdbaf62d32f256ade7400e02c2c89ec4842618e45233b17a9c5c443fe6788ae3cc23b0 1 0 \\x000000010000000000800003c108be76908a9eea54ffed30ce2c91aefa2155e518a999a8d9fd8c1b5fe318da9cff6890074e813d6773682e526d687b411675cad1ac72e8fb46eabb5fed61381a318ff827341e4940ce62a4f103c1f5bb976a8a65281a070adea45eac3bb81cccf264fd27d91771a191edc5addf19babe7d94621cb30c6d44c124a70ff6ad0d010001 \\x123c3fdeb39ec8c7e47d30a611f360d3d4ba82875c395626745c91cfc04f27487963768b21be946632ce5f05d2aa760f0657a1a0acab60ff48c0896297328e00 1664210890000000 1664815690000000 1727887690000000 1822495690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-50 \\x7af8759d164332867f606ea5f5ba9eb90908c0a36a4469f9560085733ca5465dacfa2072ab6e0c5712c4de4b80b9951f8c7e144f6cfaf38fae7f0c67e6fdceb8 1 0 \\x000000010000000000800003ada47d98fe49e8aed8f85a7181bd5ed171fda3d1da044cdadec999b9cc851f42825f6d3894e7d7ac2686d4beeab3e44d56416287fdc22887bf2a4981f3725978d891f8e0a517e8819323f316b05dfc6a8f71eee3b47e36a0249cffd573b7c5d8b7c102387c46e30438dc7fbe18e0e53f0354c177cc14b4d5a5f49f6422169c53010001 \\x7005cd648fda74ffe848a82b0426b720f4accf55d00525213603c8bc5dd72da0073a1920198dec19bb8fe5e5f6b0de6a38e6ab0a6cdcb8ce58f44f9ed32e350e 1664210890000000 1664815690000000 1727887690000000 1822495690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-51 \\x7dfc34f86dd053e088c24edfd2a82ece943810ca9134ecedb453e10b3486f54984c1cd0f331c24dc662381908178f26b481625d37d0fa321d1f74cdf8ebb7ad8 1 0 \\x000000010000000000800003be0394e2f293befe7c99a366c7752b4989291605ad0149bfcc4ca7ebb198dcf6651bbcc569f58cd982831928aa1be987775d628db827cdc336af375f569e4945c28aae7bb3dc8026d63c1f05f5c669ff59d188680664209975f19767d727bac462b9ea4ceb6e7008ccb74d6f9c8ae53e53999e6036704f6de3bea3e15ac682a3010001 \\xe9dfba062559e82f1646f7f949a7c3e1f9189e903f04ec340a653f338565021d9e54b42675e41f8d7290b85fad74da1f0f5af95edcb7048a502043cea21ede03 1673882890000000 1674487690000000 1737559690000000 1832167690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-52 \\x7d446be3b2ef15b3c9b2164902a340b3e494f6644863a6e575445a8faaea032e141224a0ff60a8bf90f470b92071604985eb2c762f10da752f4071052e114b65 1 0 \\x000000010000000000800003f9fa38bed03836237fd5f5921abfc871a0d9d862924c5726795495d42acd3a05bb2da29a8040275c74a4681c3776cf0ebf8ee68177328de0c6709edabae4190099877a17cc824bd8a8aaec0236b8879dd8d56f313a305891c48268e71960fa0223eeee695bf19ce6ccedfef3b88199c4a0c084ba5f11429040682d36b394f33d010001 \\x20cdbdfcbd9be7011589663f3a4b41516f9b11cf80ac4c2ed8b1871fe689c55d2c57ecbe852b86967fe33fd284d2c4fed1b62ab366791a8ff8fab0b4011d2808 1675091890000000 1675696690000000 1738768690000000 1833376690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-53 \\x80a4ac7bbef9435b32419d33509710ac73fda1d8c8d450ebe94eb769d7d13de017e5be2ad472d42272363e1eabdd8639eb0162e9213af02ceffa85e453a52160 1 0 \\x000000010000000000800003cbb8423c26d9361a5d5cf73bd9528e7b74d4a0de948bc412e1d71da873c031bfd86c9ead88d5fff4d79eb69272b75a2ed0e0e07be7bba8fb85a60d2c04d66117efa22a40a240b84b02a7c4611311a1434dbe6123736a987b3950005c2fd3b48b6b866daf7986577444b33bb0b99cdd19e8989b9b5ac783d415bc8360af27615d010001 \\x87266b9c756699f3932248475ec49da376e1eed61af1236858ef037cb454ad8f8b8e231f1c98782409265364c67182ceb499c290b48c739e1fa387021e298508 1672069390000000 1672674190000000 1735746190000000 1830354190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-54 \\x80b82f0daa429980b438201cede63719286f41f8407414f05d2282553459ad2f7c62fef53870302761b46c762c15ce3922b7cc3b83ae945e084944a3a30f7516 1 0 \\x000000010000000000800003b74abcdf8fb6f73c589213c453bac244a3eb27227458be7d3819e91eadac8bbb34df07213ac2c9366bc2100d6fc966caa85e9e33580f06c5c715155b80edf590dcc79d441f9372addb90fed5e9d61c2d6c019188342ccbde9cc7cc57f2f51e78a370d43d41aea9d7504904afbd595b357d6a20aaa227767cf8eb209d3183102d010001 \\x63292ccb24640cd6068cad64cb8ea722219bad800468f9e664d13f8f258e034f21d91591e7c2a96b4a0e9a6358a33685ddcf7f9b787b9038271ec8e57b75fd00 1677509890000000 1678114690000000 1741186690000000 1835794690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-55 \\x8100b851948f7a637030eed0dafab816a57b82ffdfaab0edbacb237ce75afb915fc6ff80ca66e2501aef240f72b8e7d451070b96fd2c7a7d86ec688999de32d3 1 0 \\x000000010000000000800003b70aa4fb84397765266035c3de76304c60d662dbd14042551150e4e20df06bf37e492de5645db1ff61c84f0dc8446d33ad7a0db0e6875ffa1c83baea45f281d5daef9dd378478558a9df006e8dd772304b1663ad35d2ac4f9ea798cf19befa525618a22dd3cfbebbee93f998c596a31ac060085e95d5cc0684daefd21960655b010001 \\x11eeefbca42885b518e4f12a873da18860eae0ed0debf2f9d2fa9b6ddec909e67a32658d898a2c27627c8581200ebd1145e1bbdfcc9cc45e192749e15576e801 1659374890000000 1659979690000000 1723051690000000 1817659690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-56 \\x8938d198a21b051e9192020889b793a1be1903e7b66b8b200f58b120ab675d06fe91fcac735a9922007ea0c9e4a54ddff92b76897afb4832f4e083f69329ea85 1 0 \\x000000010000000000800003ed525fe77ce228d152832f89026e04cc80466d03e5f5f9f66fa06920a8d53e6fba2fecb8bf31f59d66adc1a91aeb93f93d2e806882a91ad54220a252112ca5f85d12fa4006a8357cc3c25fd5f41806d7cc67c5ecafc6ad6e39ea866ddbae559dd585b23bbe8ae1634c9c6dddbb9bcee84bc54c76b01eb6e807e79f6cedcfdc87010001 \\x2cf822ab32b4bf875e6487be813b54bd8a26f9d97aeed65a4621a5b9eadd1b14162081b128628fcb4321f98295fd8877ffe4f9febb5abc8f8ff86a1cfa78f208 1678718890000000 1679323690000000 1742395690000000 1837003690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-57 \\x8d20714c4e5bdf7492e6a36a8ec571d4e336d2efd17196400070325bcb14109906e728e4554c570c2045a4804c6ef505f3f8c716e2b837873ee2fdbb1373280e 1 0 \\x000000010000000000800003baccc5e684a1fd1cf0b48ed4e5c031287f195903b937c8ecb544497dbcd8593dcfc326c3a70c2191439e6fb9dc23bf26f23d1d9c5219519d69d2daf57c8982d0aec79387cf45cc4a20f767a7d97abf8c46740d5b10dd4de43e1d18ac725dc3ee5ff66d4106c9e9e543529fe54cea37cd400248f31dcbe92a7c88a1b0edbe1f93010001 \\x7347050ac36fe623c9e52bb944a750e19557a9ecb6490e0a7fd8e5b4a89a3d35f3a7d03d658d2d10655a9d0c608d78ea36b178bf3d04f081e82824d8bdd86109 1670860390000000 1671465190000000 1734537190000000 1829145190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-58 \\x90e48f3ca16a0999ba1dcd4af5e82b8c8125080372300d2f5fbff48673e2ff33484e7953bb4e215f05f4ee6b81aff9ac49dc73c59c62c0b33439ea5f67a331cd 1 0 \\x000000010000000000800003cf35f3e8d19329c587949b6eb16878c58441931e405301bea62b2494019edeedf4fbc05600efeed359b445d9caf29e8dc139783eacddc2411b6b5125fed2738ab17ee4be2015625e4baeab3a3675e520932bdd6ad99567fc003f553f954cdfbb8123967a9412579326567d11f6c6bcc3d79014833219cea76dd8dc33d8b50bc9010001 \\x7cd6b103279ab43a01a3370bcf6638307c3d603abf028e9c529c32bb81b69d7f4b6679288bb78f3670af277d30e9a185323de71c11dbcf572d4c0e318bdb2309 1657561390000000 1658166190000000 1721238190000000 1815846190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-59 \\x93c0f687a2ca97d389857a50145f77464ca650077467e680f5a523fbb7df080cbb1840de39daed3a1229eb1bca21e9cf3c1698c78ed8719b3f13f69aa2893053 1 0 \\x000000010000000000800003ab21fe6b13485cd79b22b4d37ce3927a95ccfa264fdb95dc7d96aafd45953a104046c2fb60a89ca6cc65859b49e31e4e2d2d2c51b5a9de46d5d75936a3787a88c7b0f006604bdc8a795a9ae2e151a91ec0324defd360b556b15a5c6d37fd981e6316df345df0444d0d91b508f0d37fe31fd64a291740f97ac8ad02b9ce4a924d010001 \\x6f0f10163513f55e5509b92e034c9b9303560a5725a410dbbd7f9f0816472ad411222d73d4004b23767923a71ef4a9fe63cdba621cbfea1f7da47d9c8a0abf04 1662397390000000 1663002190000000 1726074190000000 1820682190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-60 \\x93f456132e435b554e80986f6871ed29773ee87124d6f07a60bd19ce74446088a5c58f6504ee5ba5f74e42a12e5986b27eab5d2db41adaef2556f6d5d540769b 1 0 \\x000000010000000000800003a1ee837596e17c815f459a9d2da3b149f24c0d25574c74c00d4cf077a5c098e98910809530ce1f65b62c9dce1f696d65e0a957902be3b00623ab9f390e0f4be5be95a41cde15dde1adc69c25d8f140ddd630fdde6dd72a722dbc007bc32b15d826fd86b3634be876874c5df6bbc9881feeacb87559b31b4e4affad49f1911d5d010001 \\xef2ac89696ee5a722bcd8a4da11a48779d3b0fb1332755f33e982c1d1594ef98b3636eb85466dc7c2b5b131adff1385b683b691835d86d23c8ad07e5fc01e107 1664815390000000 1665420190000000 1728492190000000 1823100190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-61 \\x97840e3094b9fc50c6e2aca01f885a08289f23f1488890218066dc16c5c8878a9123051e55eef2b5141fe06ba0d93211432f6c7c423e33bd7439fe97951a9020 1 0 \\x000000010000000000800003c1ceccb7bd9526183cb30ab7d61b5e779415631d93814e1a590dc694c4841ac7bd999d384271cec9a01520a6579901bddd8165ee0828d6a19c2995801c16905f20af3f82f47843d3bca08965824b59939c19d9be41bb29c8826c78d5e51bcf37fdfdb6647ccad38558deae74c77b9a924553bd288e6d5feefa3bfbce3557b497010001 \\xebc4aaad2f5d03dd8c4c862726259658e95720b60f4cd1bb1c1c61bd1a348368e8dbbf86ca1ca4124474e4361ec1e393179fecca3e2ec0fb497d5dccb5136f0c 1664210890000000 1664815690000000 1727887690000000 1822495690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-62 \\x9810e6c1af9897bf074c3a8f34cd02aad45205e52bd79d4aa706abc6d84653978a96da8b0403b8c4e2e77b98af8648719db45e655fd3d4c486ebbd24bae5fb88 1 0 \\x000000010000000000800003c21a8b8c128d3ee7163e7344065ffc77971b77caa418852cceb1415941c64f54e79c90f159fd63c59c6d6b5b11f7b1364238faedd4fa9e96ba358b7bee7324cdc5b6a66cc10cdbb2abfb387564a6ac7e2867bb51d3e653e2616b43a1526bfb2d876ff869e5508f2a89a3b3b2ca5b9f2f4b1d108ed5fdb70d6fb5bb22e54a029d010001 \\x90f30892b254232baf5a2c5e81b0c2ca00d1ee691e15065e577dedf181e3de1e8eedacad98cb05284c28a44c1410626363f0853e72209af6187f78d8a0375e09 1678114390000000 1678719190000000 1741791190000000 1836399190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-63 \\x9b28290faa75a4ec1c25dcc965621f83a49d43fcd9b70131d82e72e615960bca4610461b232c9fb3433455cd960bca17341ab2b0e458d35388ed45a85cbcfd46 1 0 \\x000000010000000000800003cac09d6b366e4f9ca02d7c64fe82e038631752b66ec9c2a20af349a40c9dedd3a7576fea3988d753280183ce7bf5801bfcb661130876bece6dcf196886e4bf2bc7b528703149b5906ed8bc0ef1f7d2ef5a4515576783292c131f28da413ac234bf742d2c01f064e5cb4d31d52d7624e3c9db1fdc2414bbb1fd19926e9d69b783010001 \\x35589408033cbfcc5f9586670ed00694e6e21f1291a0a6a31e13d6074aca585a8d7728b570abc5193c67d63934a784b95869d0bdb42e27368a92e4815d11ed04 1681136890000000 1681741690000000 1744813690000000 1839421690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-64 \\x9b6c8b4ae9585d999298b242a5a090be6b538a89e4872051baa96690b75280a6d094a511b5f26e8349ed18e789f1a9f6033391902e01d826dc116aa3fe626ab7 1 0 \\x000000010000000000800003c8bbf88110b4c104e1eb794a9e962862c80ec04d361fab286405658dfe219a9b4799981c74c98ecbcda6999d2b923d6b8bbfb4e6c67eb9f8585fecccd9711918305ad486ff200a4b70eba991b49b1e5c80f9c101c572ade3b0ff07cc130545fb6395c1371e42c85a441a386dc0bf8bdaaf87dc37a598a792547de660f28d22a5010001 \\xc96f3f61d30faddc758498f0ed4b63b68b912089232bfcc25b48d8eb5c4fea53ea01de8f62eb056c323a5bee7069d13adcf756a3a3a1fd39e03c9c3faabafd0a 1665419890000000 1666024690000000 1729096690000000 1823704690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-65 \\x9f30d4a03ac55a4eff9c17f18352ec5fa3f92a387e5ba3ffa3891053191025084ce6a65f0fdf0d8e49ceef37bbc72e1ae48d429a78a8b7fb501b42dbc27a5c70 1 0 \\x000000010000000000800003c1e1490522e10ac11cee49fe48f297377c13d4007d796e3327829e14abf18380a128f172c378b11750f2dc30b46a756e075fed140872af4382ebd1bbe14623aaea758525aa00c9669bb541e34e4de6b6384478a1025a098c9cdbcd89de68d29c763f3a75466f468bc233f5fec3d80b6cfbf6cfd9d7ee2984404f1166eed53a97010001 \\xbe05d3e21ccf2be14b8da6be8591dced0571562605a5c102d946b4f0299de00e3e404dc0bd5b5e58347af6a6e9f5c23c4cfc9836dec88953bed71e07b2829402 1673882890000000 1674487690000000 1737559690000000 1832167690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-66 \\xa2a8a6cec2c0fc4a4bd5aa96bb5bc0da048dde26c1aaac51fdb7c16d96b325cbb88382b5de1590d60f647c83142f40717b097a452da1c43a53df9e35d5fade15 1 0 \\x000000010000000000800003c080c15793d3cea052c50eb86e0bb18c02f3c41f636225147ef68fa64287cf626f3f8a82333d18aa604d59a29efe519653d6d3fd0fb362f32d835133ec9bf40c08f2adc0388b451811736a4c3444b672de3e19292e1fa5841b6f8d6a6b8b2a0d4426ce078234cd6f00a7b77e5360fcedcfbd8e5b210a3acef24bdedd460418af010001 \\x4ffd3ee416f8c1e8475390054bca6c8bb64d1b40e11fffc678d8171ebb363e41c0b9b799cbabdfb8e7acebdf0348cc6afd385e35a13949d2ad6bf1571f4bc20f 1652725390000000 1653330190000000 1716402190000000 1811010190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-67 \\xa69c19ef0b8d47540f1778f3587a0ad526d2c539385306c2e31fe49cb64fe44952a70414d7444ac4ac0252e1be2bf42b52696ddc2251931104db17888c9c56e0 1 0 \\x000000010000000000800003ab9281f853a48c12887277270be65ebdf910a0f7bf67971e2b466c366c9809f6d44ab83c79a81aa2cc7da42113c9092a78db691f597b574a1dfcfa814132ab4907fbd890d0444b35c1221df20c343d85f8b1b1571563b960fd4ef7475eab19718ebc6a937e2c630af4e98fce528a6714e56272b041e314acf64f8126446f32bd010001 \\xb6c1cc3da9ed690b83ca5a8ee790c55940be2d2257288de2c659c9ba8815ce545d816620ab4ebb43b3bdf17ad456d7cd1cfefd4b37f747d7a9738181b6fabe00 1669651390000000 1670256190000000 1733328190000000 1827936190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-68 \\xa7c84cf8db7ba658dcc417c283f633ef0d9519758ea3943d87bd8ca7f491844a3b54df0de6ba9c1194e8dfd994c59eb0f5f0d4d96e55e971414ec7ae4469bc7f 1 0 \\x000000010000000000800003f4fbb39f934bdccf7f1cdf721b3473083b269ebc0618915aabc8ff21bfe146e6e3d594389d1c59adedbef4a13ca8df03ff4d6aa6fffe2ad2e736f5f5549a12625a63be6dd7e73ad41c706849642b631d31d883b34d5f4ddf0099c42aa303f65b93fea1c218fe89bf0dd2da14b3e0f2912b473a272d343e94a7f507315b0fb153010001 \\xcf772fc4e9b74ad7a76799b904e4c6a01e8e84ea1a76e2d2ee6a8d6ae4b12cd4483f5977004b53da217d30166e196e5915a846775753981b885bd27cc06cba07 1681741390000000 1682346190000000 1745418190000000 1840026190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-69 \\xa804768f7c76a602be88b37cf000cf41357a1e60930cf8879f02404cfb6ce66b6f4d24c0021b151895a3432ecc80a1ff8c9bc91eb77d95edfa813cd2307206a7 1 0 \\x000000010000000000800003cfb89ef9d839fc2afd9ddbf23a4b83db9b81607f01c3f0fdad2167994c7994d87912e668ee913a0aecc72a6f62219d0f8cf80e01bb6e4ab9a4a9e4202b1d1dd142daf650d9e6d3af61023290947ab0343d71fdac78d30ed25fe50226ed930a57633a12e6fcc1f7aca25bfed232d880b5fdf33cba6a8bea7fe3cbdd39358a88ed010001 \\x08b37ad0b9ed62a304d8f4a7d03970919798e5b44098767b23802d362c912485a0acaefa8127b69e6db1d5ea13ed15730e9198871c9a89dab7e63491a85c9c02 1678114390000000 1678719190000000 1741791190000000 1836399190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-70 \\xb32422981521a5c6c2f563f7fa3ea9fca9a4e805defaef900d55e8d06d8a37e46bdef17136fbccf84b06f8b040a54db98277396a734418bdb8ae38ca76624fba 1 0 \\x000000010000000000800003ab9c1fdec9e403be5d72b61a9baad128e20a99832b1618d2a4190a086849905638662e37b3c83930c30835b2106921efe95c8cbb8138203ac0ddd3e2ab74f479af2b352ba605c7c2353681a8cab9e930edf012c8c274e976793f6ff9cb7fce60fc79da7fad00011c4f6fefdcc9c63b0b93033bbc6b80e3164de705c0aa674747010001 \\x5af8b10bae19275770a50a47e7fd57391f7652c3d9f409579594a7f70909dfab40a83e5a4e9f271503002e5ad8b3ea725cfc767a124001f4c6794f66b45cc106 1662397390000000 1663002190000000 1726074190000000 1820682190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-71 \\xb5d80430653dc9f62f412a0daaf401df172d03c197f6f1673910ac9dc95bab5897e7d507fb7264b38b78491db9e34683fce1761d95163ea359edd30963110ebf 1 0 \\x000000010000000000800003cdded49e36beedf8d4597e7ad6d43de4ae1d50a4f76e576c32a4f22af209feb7f13ed28045bbbecdb0ef7f9298ada758de485d200d51ff2ae19a1b2bd565ce6d91e7c11bc8020373092c353403001f18a60756f5156afa7a1730187505e70707feb2ae9c5ed4f7a6ab5a0f8cf1fff0d56381d3ca6e28d9da1579d64e18b58a49010001 \\xd2d022f34bb0d27142a8fdfb4837282ccbb58301c6fe1ce31b7fe8ffa090a6471d2ad9e4ca41ede79a7f9404d2ab2576bff8db1d39268670fdcf95604ca0b604 1666628890000000 1667233690000000 1730305690000000 1824913690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-72 \\xb6e480ca9f1a693d4f075bfd8dfdb2fb3fc06b0e6c23e02faac200070a8d878be8b127cddcf99923fe8122f8b2cbc8738159d863039eb8353da149dfcb3c1b3e 1 0 \\x000000010000000000800003fabf9051a1c6b22ab84cdc6939352cbac4dc3f8931afc51c62ba86c5f72dd58b5e7d2940dbc9d8e7edd2450f88b606f414bf3895027b087c62718e2cfe702dff909acf75b51e14eb410cc92f3d47f67073d8c21314ec051724f51a95d4ae9291573027a4ed3a0eda385bc33446048afb8c31e05fd03d348b01b63f0b00bde57d010001 \\xa3effff88584b1a320cb467b90a120a1340a4642da84d1da62ceaa60ba61ad9dffb9b7f25dd69db8b8fdecbc487affc94380da25d5f9dec1dd529f43f2534a0e 1655143390000000 1655748190000000 1718820190000000 1813428190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-73 \\xb818230d317d6ecff533e83fd9432b4dfda5be624c551f5b37a52fd51800b4f3deb74d81f45b8bda8e1694eaa43e4f593defc58649aacef10f4fc74fb0bddc76 1 0 \\x000000010000000000800003a0da2d652fd54119eb9c06d2ff9b88da83ae06673605d68d9516a49ebe4cde00bc56d1d8ae769fb492ad5568f992c61e1347d116876574e0233cef7da75af8bfa952b39594cb66be1dfd42d506b72cf3af2eb143d14e8aa705d5ff5fd720e6e29b47d1a9585c1b1499a39ec44ecf54703f7a79e60f478693edb7a1f2a5604835010001 \\x6f35498570db3f951347ac7a2aa7cdd2ebbad9882539b984ad897421f2aaa8ed4cfc60b200b9dd752e00c0bb63248ae745557b9064870e287c53dee9dd483c0f 1667837890000000 1668442690000000 1731514690000000 1826122690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-74 \\xb8445f12b38a9e48cb6dc192432b0a2afa261c4b2fb895e0b72c32685648fe483f6c38b53988846c734028ad99aeac5897d817a90adfbfb3e94ca7d8f30256d2 1 0 \\x000000010000000000800003b8f8ffaa51a07000b35051ad84eeb9b1ea25bd8167113a5bf4c608ce17b79ad1afa393083bb5d27c60ae3dacf132cb13ebcbe9dde43c76ce887f4650187076eee7bd75d66f65f73c5f572242823a5669e534ca4da09c1da0077b1a7cddea98b9143e4e8ef59998ce0870c8fba594e4213eb85008fb547acf49f4a441480df0d5010001 \\x38b8a1d6d8be0568fd9d44d0aaf44642147b9646c37d8de1158870bef1ce54190c0e56fae8b8690134d7e8d30ad10d6779eeba35b9c1c63c38816eed5d3d9209 1664210890000000 1664815690000000 1727887690000000 1822495690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-75 \\xbc8c07a17b043246d7287448e32bf7203529205ced27f55bd8ba8e1c6439d1bc948130471be0bbfc1bc1727100a1114429a471be5308de7d741515fb4effcd92 1 0 \\x000000010000000000800003c24ec4c96f661bdc502779267e7fcbba6cd35b928e43dd0065225b39303e9c7d587e90a3ce29146744126d09d2a73f974280dd201f869b554eb2fd832de5758657b54e93c144d110643cfb3bf909fc56dd60db44e56685434afa285ebf45a4371aa3abdbcb63905e5dec6aa1ff9280a57f2131f2972718d39209f5790b645b29010001 \\x4ade92e3e080cd96b3b56471f5e08305590bc9baeb3fdaa7f3af9ca443d1749de23778d95d617e8faf5b574f382008495e9eb697c81f9f8f3df4dbddec71740b 1651516390000000 1652121190000000 1715193190000000 1809801190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-76 \\xbd8c429c1e1ccbfd33580a5518ef4a4a52f0528999248786023ced7c51f48bb7abf54f69583a666d7f02fb370a93612d96503b921044ccfcd71189919572a885 1 0 \\x000000010000000000800003f258849b5825900708f1926b81675a9112c2b22f013ee100d53da6e489233bce2d6b0f386bf7aadd66c8b0b34cc04ea70893a9ef4e5c5b115c266d733148863a52ca8191d0614e2fcd89113a4e74c8a7fc39cd01be0e02b39b975fa4dff6d0fdf95b0c94c7e86f309bdab8a7b2586da8734a2d88045434925d19dbfac7b1c3fd010001 \\x267fab8f6ae9fd9aca934d5f7fee12eb50c1c099ecd39b3d7873f50409f2997545ea9691f22b2596e3af8c4047a0ff8f516c84d3394fd946753b4a4c70514c01 1653934390000000 1654539190000000 1717611190000000 1812219190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-77 \\xbf2cbf13b34f7727ef49c3129b45cab33b32418d286998634bc3dd04ccaf05cef7525c1c052085276dd37fac418e7b7a004c32a3a234a435722b6cd9560ec661 1 0 \\x00000001000000000080000392ec797bcf4de77fb84d205ef44628e82f6a8e3452c8fe5337395fb164f660276fde6e616de28ebd8532ad53d3e1aef85077a3592d0dd4f606c6212047593046f5fc94c26bbca39b68f72db69a2c91a858167aeaa3cb085bf25ecd043dcc471d22d0f985343b64b514ce92f943f4d160178d65ec894edd25d1df50f2438dd585010001 \\x18871b266617a5cc18e09c680581e00601889b4252584e60cf34d7662b9a22cb49e028b5a06036314d88b362323ad6bffbb777013e620eb82a41ec30cc7c5a09 1680532390000000 1681137190000000 1744209190000000 1838817190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-78 \\xc12414996771ebee5d8d0d6d57d1a218ff7161ac49fdd1312a5ef0ddc82989eda916cefa35b1ad968f890e2799b4b478959633839a04ac6c583b7e1f18a0603d 1 0 \\x000000010000000000800003ccb9f44977e3953c5152fd9dad4dd58be98371184d034a3c16e15c0213892cdc0645dbb41a3426ac72df32b9a3fe22bcf0be1a4c22990e1825eafa272ed27a9dbc9407a624474d65cfd2282f3e92d7d7c0be9c86afde25a4206aea833fa237a54ce3fe2c40ba989b76cfa12089569dc444be6343286302603b97b090a981dbbf010001 \\xc5aee11c89ea513f03734b552d6bc9b511431acb268aacf0a7a018a3ead041fced7ddbe403e983469395c7d1fb3ce092f8cb20890382ebcd935488a839d4780c 1657561390000000 1658166190000000 1721238190000000 1815846190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-79 \\xc110a3fe368c9c95680417a122b58e96ed839e8eef7b0a3971093953d95a8538c903e79673fa2ec40d43fbdea03f864481ce069ef2a986c47f10e91d53689b4a 1 0 \\x000000010000000000800003f0c9a000167206dffa7b5edb202b8b6e10243218cab23aa08bd10102227957b04588c14ae784841c21f0bede7e5604ff9723be07152fc35b36762777d1c33130aef5155b4088494d0f3032e8399b5f0d18eb467e8c27852916caad23f7abf849aa30dfe7d884c54f09146d38933b64af6e08b223ec464b90d282f24a890858bd010001 \\x2acc9cbd73b71aa947665978ee358e14bb1e4ab6b3ed791adb0e8b8062420612a688cc2e764bd6155381421dee8acb6044771df83f5ac3c3645c0da8fa115603 1677509890000000 1678114690000000 1741186690000000 1835794690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-80 \\xc498e7344b13fa7cd4162fb5fdf7638b5c66e7bc86f7e42169b98879c11435b729e635460d2e5f5995af3cf0bbe7b2af413a3ca1c192662fef212435a28909cf 1 0 \\x000000010000000000800003a1b1469a154ee3024493fe2d3872a31ea38ef8466495f6efb59e72a65a83f594fe8e4e4ab6f69d0c6998f0d8082cace7aaf098fca0a8addd26ccc3be9c7a6224b3cd894314dc22935417607ea21138830b856ecffd442e31919c4b444b1e45b72d6a9969a44cd9df076b372c47bea89a0387b2edee6c32e1d6c168a917238a4b010001 \\x5300abe73ce111eee833b9b8e28a3ba46482fc761619708ca30f6e284e097b743861c3ede92193680d09dc1139e13a1d6add305b925ac92a5830052a513a1a09 1679323390000000 1679928190000000 1743000190000000 1837608190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-81 \\xc5ecf1f721f74f7d8e3d45328c1b904ab3efc90695aeaf2843acfd742ca9d08e6eb51646d26276a25800f3d2aaec61e9500f71af4b19b496d3fa06f70dcafe30 1 0 \\x000000010000000000800003be186c931759325731826a49749f14f73be38a58f3cca92ea688f05fbcd60379ebc1648c6ad14e6bcaaa678f00d277d45fca21f333eb17bd364b8b24762ee92314539b04121939287e5a3c4905364da5b05840de0837017a1548ddd28f25a5a8081cd39e85f1b5e3fba679dafa35d205d58c134f575b6d83d6066a558bfe91f9010001 \\x1a33cdc37a95ca150cb3067463fd2b288a66292ff12ab33dadb6a69c9e19007309cdfd7ac7b3b04e5c0c4ea5578f2d85d480a3adacb05b270c46553110d9c906 1660583890000000 1661188690000000 1724260690000000 1818868690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-82 \\xc51c97b3f2bff7ccd57bc12e283cc3d5d4c300bf29a96dc524ce30df163a020271afd8a1e190b2561f457c7b6bd19498630e0afdfe7e1be6d633e1ca4cfa5f3c 1 0 \\x000000010000000000800003b6d110aa27c28120c4fa5f72ba5a39dc2da18949763d7e8ed45e5f6508230bba5d7626407b39eea0c876f168352c59b806f96827f4426c99120b71e521a2ecf093bccaf2f2c5b3407329280ec3e2dc861a188550a25ed57659a101483ca4f5a20b4d012915e6e07bdc79c1c475c54c93384a31be18f617d0bd09c6d9f3d5b749010001 \\xd71423175617414053622bbfe927374bf243693ca90bafa0e2dcc7711b78ef762dd2f455ff07b397db83348d66809d4e13a7b8a20c50014ec476212e32054009 1682950390000000 1683555190000000 1746627190000000 1841235190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-83 \\xca3caa0dde5fa209d9a3691c91d059361f605b110578f37b13b5e7c0a4b0ad835ec7daa420224afce5e672e68244da2ca94018da87f14555380c33a5af6c497c 1 0 \\x000000010000000000800003a74ccd4272ef439efa1a6356e2bc6692bc324a6cedc217e9f7dedb33fd87ac0ac82d8ac957076edfc2bc79669fc0b601ec635c11ab65ccea83cc7d183afcebdb1621031056701519253fa40dedb20b467900185abc7d2c21b05ea04401867ea0b59620f2355cddb7a233f649c5291842d5cbf5324cd2ccc2fcbac2a34dba7fdd010001 \\xea356fbcb3f1bea1bc5b51eeefd34b4a4644cc16669730f54dec4811fce3a42dd03f6c0b16520bed7cc4686ad9040ead922c29764a64353b57b9d5134ced6f07 1666628890000000 1667233690000000 1730305690000000 1824913690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-84 \\xcc3878803df68c6ecf9b1ff4ab178da130b0b6e23d4dec469de8147bfd24e79ac76d1a2e0c4f9fc031b9d54c3878a0eaf3db9d8bba35216291724c547b69e61d 1 0 \\x000000010000000000800003945f694b0fb298a530bcbac4e53e6627e0f8868c3e14bd0225198454d2b705961d22311d1dcb14d5572e154cd8982d40aaa4a6cc2b2eb2c8ccf310f60c867baca9c6bd5fe02d0437ac462cf3843b5815bc5840ccc079a5276cb8e78720381be7abef8619f96e33ac17b63829b98bd314ea44fe8ef1f324a5b7ca8c97ae06c7f7010001 \\x27ada57bdaf838ae9f4270ed0ecda0213e908fb4b13996b9bf8777f8a8563d87e7ac1b99d73a3345424e217e663efb277fec219e75bef6d573d50d3f22032506 1652725390000000 1653330190000000 1716402190000000 1811010190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-85 \\xcdd08b4b12df50a5414ab1ac835e796369e261e7a343287374f46153bb70e12bf4fb9f8d451ae2b71f6289fe75faf9e31140683d22758c11782d0f543c7875c6 1 0 \\x000000010000000000800003eef2a8d858b087d2d1a2b8fca126a06a43d1497815e9e89bebe8c1d2e9ba42072c3b3d8820a637c2aa42f437606e7d6efd04537e9a5a744b50919dabceef3554a80507df31b669e4eda72a2d7a8aed34169c5e84ee19eb61e7e2bd9a5c03d88ca3d239a90193d123a643f2b1ba672fe866a124d6c6e81a3fd04252bf2712bae7010001 \\xc44cc94a41c77b9168e257ba02707db1434d8a71970313dc4316e775e5551d114ce45c86aa10c23323e17eaa3c661b19518110b12a43ef25566b8b627e00cc05 1652725390000000 1653330190000000 1716402190000000 1811010190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-86 \\xce34adb3905f5b5c41f7fe0050d48cbd22651791c8bbb2347d6258cec8c4fe5548b03bcc6da0bb7ba1a9ecd8f3325758005f670a0440c0e3a4f29a6693b49507 1 0 \\x000000010000000000800003b0a8e4a4294ecba5ee31a80e4ff5dcd8ef3fd71341786c371083dd9ce5ccf86fc3bf7a43a99d674ae01720b0b2d11fa37b8622d3159dc560e058c5e3aa7b728d52b3436ff5d4c768593db8677a542a8f91083a8b8f5c837f275c51c208148b2fddd6d3f4aaefd210b670fbdbe54220ab8d0f84e7467923cd899b5b2c09f5e5b5010001 \\x165ba84f8ae7228c0060586c23a96ec9f24775bc115917e1178ae9688b27409e21876e0258538a9e9504074953a1b5b889a74971c900d46af856863e33eb6f09 1675696390000000 1676301190000000 1739373190000000 1833981190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-87 \\xd210136da5653f8bcd8b01d39ccd317e39e13e1379cf47fc48c9d38576dc06986d9990b86fdf881a18dc62c356f19bda9508ecdbec78e0da08f5d398e4e3285b 1 0 \\x000000010000000000800003beea8be0ec943fa9d1ed09211cad6be8f90aa598ca55dc1cf002c67f0a6cb0688d287a77c11ec32275c3427636299b77fda3519f77dcbf7cc1b94e3c595d906b8558f30a0a58a90818b38b22d40878a42ef3c3db26171d35cad1716ffc8bb70530f2e156a162276a8a846a38a187599ef4ea1f1b1d92582c76535dd1d1217ced010001 \\xc23e6798ac3512ba0e895278f84877ab6f4b3ab4ba60bef24fe9bf09394d343c97ac8178fb6583535987c5b50f25b0dce99aa6a9f67b65a921a030bcec05010f 1670255890000000 1670860690000000 1733932690000000 1828540690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-88 \\xd23c0f1064942e15ca9a561004c35cd9898fe2ace044184f4c4e7f9a9917f469a258a4c7cd68fec956b70d6e99626a6b969b367fc77b4543b1e96d9b640d78f7 1 0 \\x000000010000000000800003cf8013ef56184cfa2479e2baa1ad7929b4f952b2ea5f94e32999f8fe34ddc01dda3738a1cd0375f33e8b3f9a5c5f5639d8d9a18726a9442330331b85965738e8f78479d84789f0eb8b9b7187368561753f53025730f327c336060e703712e13ac50b328b5762b429d500117223e7176e0a44c32208a5a4a2381ea4e129306633010001 \\x164d37dc1237d96615fc7b63b970fcddd5b7d0e4b3f7df9bb968d53fff8c6ce31e1c3edf9f56026907c0ecde6c0198171dfffa783aea4798409a0ed61bc83806 1680532390000000 1681137190000000 1744209190000000 1838817190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-89 \\xd2b866c8007abe116f7ebfab4fc5f958c5beab940129023937e10c961aca8c11b6326c643557f3134172faf763d6627a08d5fce721e613fdf126326f719c7b8f 1 0 \\x000000010000000000800003d3f971ee38d33e51e37ef033ed152444defc6ac8d2711d30e7755bb699a548e0cb04de0b0054c3b7c3a3bd7158be9842fb14fb124f254cf256a8e099e0f736b7d774c496b1a7d16377d5a83d539ee2509ef2c0de18fecb35d59c2696f827c18b272b89320da5805bbd393f964cfc23fef5b9fca5092d5070bff190f5fcbba18f010001 \\x134f90ee908b81a122d769e64dba19ea5c4945f5b8cbc7c42f7004ef59e4b3e3d040ad8a20c90321f70fc4349d8522f7c8342eab00288ca938d9abba85bc4406 1676905390000000 1677510190000000 1740582190000000 1835190190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-90 \\xd538a59cc6c4ca9f6d34ac3533d125e129972f41674d6a3276cec657fb83732a938e02d488352efad5447777cd0f907fb0f47dd1266eb7bc4aeab5c322067ebe 1 0 \\x000000010000000000800003d7a0fee12cdd4a36f61d587b0a79d9eee30d7e09578ff90885ba6bd03ecd0be06d7d0f67312469718352be61b4c52c7e26b1f704a3efb6508ae665e1fe8bc6467a09ef3b22a74cfa53e0429644e66136e828019583cb64757d45b8ceb145d424077a9a966998ca326110e29d57923d55addb79477383ae795c7c06cfcefecbb3010001 \\x55317e817ef474a8752f0d808435f967dfb242d9b8143e5d74904c3a5eabd86a8a7f1f89ab434bf6c5063c67c36978789b5782ca8e44d5dbfc057a3bdd5ba502 1654538890000000 1655143690000000 1718215690000000 1812823690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-91 \\xde98b6f769579d1e5e34e3dcc0ba1b4256721e71e2663694b51cd712dbb0c7c4556c52bf205b9c726ae5434922dc471b290661ffc71312cf63344be4d2d5f381 1 0 \\x000000010000000000800003d34d64afc5571ddb3a4b0c61cfa6d47f2bf310c0a75c9e6ce8d4893126e6f9250fab1a2ebd6b31cefad1e9b7ca3aa91fdf55ceee8b3c8a5daa070d5b8e9acfb794589692d243500f2ec9c8dee86e311dec10c10080fa8402edfd73a98849287ec04eceff89ee517bec88474541d8aab60568bda5ba5eec439bc61c5bb88d96c7010001 \\x55e87abd34fcaf663caddb1938d129ab097f64fb4df10de9fe2ef352ed0a10cc0b134e17b8cc7804f594f1b166792d83b8585b604b1614f978712640c698db05 1679927890000000 1680532690000000 1743604690000000 1838212690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-92 \\xdfe8ca81a5bc280b6e7b5083e1a6763a17e7d9ae4557fecf2b4c27ea33c91d96fc6f87ddb1f2787e4ad330f10efe1bcf56fcc1451e031f9409a8bb3039e9a590 1 0 \\x000000010000000000800003c7d98e017b6f6bcc971c98f677e180c307a4d1d3ea6e5fab733dafe7306a1b06378f23a08281c38692300f83c9082e40ce90290f3bc1761df064722df57cfbadb9d4e6b97b9ebd62ec315932b41d8d94be5df983cbbb82b51c04d2837fd72fb893ccd6e9ce894a26b6da829737e1f2ba1e3b56e0ab0a6a43864f841a376ac71d010001 \\xb2d57d3d81cd6dda060c78dad02f09c521cc234cf70317db022421b83d80c04f5f73d25501ed5c24e5b01e358b55ea365dfb03c3ad9d7da10d5824971ef16b01 1653329890000000 1653934690000000 1717006690000000 1811614690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-93 \\xe03435728ebdc4c45606b67d5dfaebe3cef74d6af70c8af667db245b5a0b56fd45bd50eec829755a65fd8d1d6a1dc295e2028cbd9a30529dfd60d2460981c0ea 1 0 \\x000000010000000000800003d42c555103c268766180b8ffd8a3e2679190a8e957e267755f02ed57f403f4cc48dbe32757d495219bdc94b77e364f322e1c619a5a01d83920ccbbf2086fb3f2d028b2ad14b257d0b75259da1482cb8d44a05e04a61ef796d1c545fbad2e2f2cfa40c30aa87c966cc1715cdc50c2facbeff55d7240cc2b1743634986e161b7f5010001 \\xa4ac905df47ba9d6b0c5641ffe0cf78591cd77be052af2e0cdc4e27a0fbabf044af448ccd5eb3bcadc5fb84d83a1f0fd13c1dc460846010400e6d352fa09bf00 1677509890000000 1678114690000000 1741186690000000 1835794690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-94 \\xe0c8543f7d8e6d86a49ccc71b8ff7a5c47394f66ad54b7477354d4bd83c2aecbf03277cdbecec96ecd79e0772642f3dec43cab637a21a89e02ad431710b165f2 1 0 \\x00000001000000000080000399fb3b0e1df77fd82c8800ce9823a4d172ccd104b0999f97c279f423ce817bf98e65fa1fd0f2774d020f00d7edd19e050e820a5d030383b971f3127e9a0b8ee07964c613114799cef79eedc01e5103eda1caf28e09e3d1123debf7659fd15ddff2dfa91af7894a8e1b4d42b9c7a3006a9a422219fae8eff7e8c6b6559a983193010001 \\x66c6f0bf69df4e1d357e383e1f622c773a349e69a012091805b9d099dab6722946369412a5ccf00b45e2c1cae418afcc5bdee12ebde66c7d0053a0bb6534810c 1664210890000000 1664815690000000 1727887690000000 1822495690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-95 \\xe3488591c5fe9ef6b179727d00c83146eb6e7091a1fdf9b695f6e09de198bee3aaee50d17b94b2cc1d98de4c9cee959e63878763bb89111512e1fbc8ffff2074 1 0 \\x000000010000000000800003a7620ef1ae7a550c33201238431221a94bc98fc6516838281ecd64db32f5485661a9e5121bfdb19e465cb01730aa1a056eafd15aef059184e91be7e28bc07aa0538145220265389bb1d1d426aae458391ee31111417fb2069c260f06088a0f8bdd18d4d9d613231fa9a03ef7fcd931ceaf15933db05d9001f5dbd1991a689645010001 \\x1c0d943cec97fa373ba15d17618d0f04d56130b50e7ff3f101fb3f011dae8a5ce08e30edd06d1163ef228c184640e6b23d71f892f8bdaef6b418b32cc456a10f 1678718890000000 1679323690000000 1742395690000000 1837003690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-96 \\xe3d46227295aea952dfb8079bd6f89565dc1351ab6b5c301b2c29fba080d4af5e411d1a296b2cc276b62717149c01fb246b52d1aa81fe131832605175793cdf5 1 0 \\x000000010000000000800003bec7447e15e1be678a51eb10069246f26f2980eefe5144fe74e540bdea8a62f0ed7a5f8df56287fbc9c472bced61bfb8c0fea17928bdf161eeadc76f7b64962970ebc56107e3ce79c454448f33a85560b83c189b3398df12097d307b6019d8d86a2b29bfc21c341484f0b73be226f13fb3f983afeaae777475773b009ab08079010001 \\xbc86c0d61433166fb9f7dbdf1941c0837b88bd751e3d011d8cc6131b378230b79292e98e205153e045c2d4951307bc7deed8442692acdd8d416779df3f54f40d 1676905390000000 1677510190000000 1740582190000000 1835190190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-97 \\xe3b8cc44334f75da48fe2f6d7e05170c509dbeb04c9e525b0b4b3c964df7d6d383d039a32c49abd566e03db2224c9ae95108b87edf0292c06162ba8b0fe43c28 1 0 \\x000000010000000000800003bfa94b9bf417e6cfd209c4883217b5c2e271539e1ea36dcdad814f38c5bb07a031d8d8f93a02c5a07225675195297ca8c3d79105c160c06fec7d50a0a176da09f29c924b9040544b5610868695f38b800cf2ad2feb7d4a913ffa032c5ec80505ed061aee1e2fb8b10871f7a3ad9b5d1cf753073ca77b96fee101639d6976b0c5010001 \\x5e5dc0551e2c7f08dc8f3fc4bce8df3029c4ee23a271d5766a900d1be231fe64119c2d19d523a8010daf3fa4ad8f893d1557f7b74a9bdfe3e2c2efd4e88be900 1661792890000000 1662397690000000 1725469690000000 1820077690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-98 \\xe48074f797915b7bc18171f266d6e181c099fa52e1f4b061e0b662a2de7428aaf38940a2431a4dd9a85b5df55c97198e0af7278428151844164e27eaa61ba51f 1 0 \\x000000010000000000800003b40078598a1d1ca0a2ac762b2cb7f8c160c7514e7a625ce13d8aa37cf99c3df7be313c2c32d73742c8e468295f9ba19c91fc555a05d01a6b3c88567fa4b5710ae9c1d949bc6cb72b876ac72aebcc4c4a27c6609913efd002207ecfe2e526f37959680b64ff1c495a3d1066188a50077ee7686a3af43b0acb0047a2d178242bd7010001 \\x22f820af4c641d2dbd72d4fdf9012652e689ca3e5aacccbcddd4a41ccb12e27f181ff7a05040520b6134580224ecc59a40bf7514fa9f5df6e7d15da5966d5e0e 1662397390000000 1663002190000000 1726074190000000 1820682190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-99 \\xe520f061fb84615630dc42c547a54a48671c1c2b22ad39fad05bb5b8620a35c4ec99e88af7f154d412fbb343a94110c7e70a3392f2874445243d20823251eccd 1 0 \\x000000010000000000800003c090d39ed3ce6e66f0083b25193e166ec519ba5c07bd6976d40fe2b7a64b3995dc7bfc1b0ab6fca162b2b66efa3a90f68e758f721b8e9d8e7b0be1e9149afb5933f927283fc36cddfcbecd1df0bee1a13e8d4bea71b954a3202f027295ee518fdde60962f56369371afe64e2651b84b8bb996a97e53192f9ca611a4518f6c367010001 \\x20e0ed1c81331966ea701171d577965fd6009d5ab7163f0f93f5be7d990d3aa33c3622bd0049d4e296175ec0d9a9ced6d9f5c708d400995fcd1a587fbdd17002 1658165890000000 1658770690000000 1721842690000000 1816450690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-100 \\xea544efdd4f80f1a6a3130d1e4b201e75f471f0ded68711b8beb183d156e2e1dea46a39211b8e41c4fd971903948fae20a5e22730640366add5bfc401195b5fd 1 0 \\x000000010000000000800003b2a0163913d6563b573411c0d8b942e95b1267b127e97dc4a33b63964d40616952733b41d7351a2b8f64066351f73ecff2ca9974ad2d7fae8f898957c191fbc96289e39492f91d3e2ec93e6e0ed58b32f9dae897ef7718893de510ddc13db05accb4af90c12d1e4130d1117e0ebf2a59a4e5f4decedb98f8b0c0f2727775f4c9010001 \\x51e07bd8b7cbf6f211769f1b03439157dbd2619194d3c8c70df8c008b248803868a591dedb1921db9d237b63e33803f13362407e19dcd5c99998129433f9260b 1681741390000000 1682346190000000 1745418190000000 1840026190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-101 \\xebd033e858c4995082d0095bf9ddcd56a915837838e075060e62ca39d86fc269b83b55d50721c1140c2b5a0fb959ea7dd5d8f2655f8b9586c6e574c44ee8e739 1 0 \\x000000010000000000800003a2b6bf538da6bc3428ffad834a6b9fee4c4af9ae7913cbcf41758019640cd4fbdaa32e970b372272eae1f5f23609d0dca6086fc9049e77bc660287f8198460231a3509a093e7aa669668d6794ecd9e7267a9c8db940f0a96c74b560efa1354746043e590e4fa6cd586d09698a95746b5b398fa27f842c67f251d920540d57c53010001 \\x9f94f8845b8d920c68ad544f82771e3525f08c0f72a3ba5987824f2b51d61be0003b1445d677d58e25af4d6d355cf1864b3209fb7f572cc23f59a1d3ed0e5609 1667233390000000 1667838190000000 1730910190000000 1825518190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-102 \\xf584264a2869a3360584051782b5b49d68e6a5f6fde5675e91c059b798949053fabb13c1c424b76e0e553b5268e20b2e8fca8cb4c1b4187bdd1bd8e2673fda62 1 0 \\x000000010000000000800003d75e97e6eede0138984bd86ffdad706baea49d13d1f770cf668956294ba67b93afd1fae2b7186e82861c271c828a9e9a0d92b75b7240bc9a20864c8a34bf17580f4171eb29aa5475ea958bc1c012f09432f94ac0ea1443778c364b8736a3af9448abcaf97899478688cccf8a8615e68d6805370f45368aabf32717d533abc083010001 \\x7c5e01447e623a235cfcb28cffb488f2cc4f892e4251c1535eb1d4b8dd0bd9b9b6e57155f667a9f154b4263fca7d82a30218abb14012f89253350d4f13984a00 1667837890000000 1668442690000000 1731514690000000 1826122690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-103 \\xf76420c9b32ff7ef7834e5f224bbc9d78025adf5a70f085bde4cb9030ccda9aab8dfef98558744ba79c821dcac1441fd11d61b6b300a965cc6dab81bf8e44a3c 1 0 \\x000000010000000000800003b000f0b9642561bef99f8f201452fcd6daa04455fd18dc32915cc005ebf465ad720ff7cfb1a8cfb5a6f5e12d764296dcba0c50a34f30e306f4c28ffbd44d1826615a1914e6f9bda9ee4a8ca6d3d9d01c464ea71f89fbb05d4d18d3c3dc64708c908f530c38d73b20228b208a23f135526b7fde331cef9186fed592af578b54f5010001 \\xd4b8fd85c2c7fcb8cc37fa05131e90efb9462c1d7bb1303ae04a826e4577a9761896f035befee3ea3f6f3bc880b16a3454e2301e1ab219b49401c36bb3cca107 1663606390000000 1664211190000000 1727283190000000 1821891190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-104 \\xfdf446f1caa09b77e59c11ba4430fd59d7291e040b419bb393a3d6db24b42218e345d91724aacdbd0f6574c84dd8ed84d1607467be121b35ab7c3da2c554f825 1 0 \\x000000010000000000800003e086260cc208f82a3038ddff40c00e0ec9802547bb254d28eb46b6020a5b44c5dcb4e173c87dc745545247d8ede5569d8018749ca00a63a5d2342f247bc0440d133ba2e737c3281e93b157d63f1dd2cbbccdff0ca2944d812f8ff5325d9de600aaf5333a52b750bc62066b4c8b9b743a5666255a331d57fd74fe47c0c4ba1599010001 \\xa4ee943ddcd24589d2cafe5f7f9de3025d4fbe72b50ad33712245c1fd907470b4ecae46ca6ca30eddf2de7947ef992f4fc52c408f5aa5c6f7ab79b1b5e139b00 1682950390000000 1683555190000000 1746627190000000 1841235190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-105 \\x00d51b0dc5f1b5d6537d4f9799f3226896aa528587d39acab2719de6f42c621ac4872a909493de46534dffc01a7ff4228ad937b02c4d83b8a2715a2f045469c0 1 0 \\x000000010000000000800003ba790625919d564e783aae55ef5a7f54fd2eec27cf5c28f58fe16b34e03087f9c7400132478ffc45679748f2ae28455874e3a34ecf28408f482c8b19edc14cbc1ba4b183ba67e2c49d1d9359d3487102cf1bbaf9498bf05c32aae4680984e8a6740e2428727bce1721604157ec93d8099ad27fe5c6224440a31a65ddbbd74f9f010001 \\x01e51a77a64fea9653bd20753ecdd21cfc272c0a59b9c04ffb870f365e54e54c84fca5ea5bbc9ad2191fb2831d30ece1f29ed5fa69429fd796f9aa0b66c23e0f 1669046890000000 1669651690000000 1732723690000000 1827331690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-106 \\x03e50c81cced02f6d6f54c055cc51810259aa59eeb858f7dfdfafb28d7c3ed9cbe6361a6004713490ac37c78dc0d33d089b8b6152d656eb4347c235b58eca0f7 1 0 \\x000000010000000000800003bf29a9c70e6937599e11834287df0bac73b49778b2c2194ff415218f5ce8821013b5574129fadf1d423dafe7cdb31642416c22a8fec46d30c29a4a1dad7cf18bc08fce97c77d0d2f045defcad72f135bfb8efa192abce2bf467b72e1c946ac7702ee657f2b14d9ffe8657346f7d9443b1c9cb21688cedcc9433d0cac74a37499010001 \\x3ee593681711908b4d5bc15bfa73e0b3fe44d8e813616cc14c6d29496b637f67612f8cd3fcbb4d43dfcddf5e267bab8bf14d9b51297acb240eb39db264578006 1653934390000000 1654539190000000 1717611190000000 1812219190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-107 \\x054148d04d8cd76f385e97be6e0fd2706e7cebb56b455f76bc0d96ae04587cdaac98e4aac6303c665e6c4e9854521d3ebd160693351928af64a49959de2e2c84 1 0 \\x000000010000000000800003bacb6b12aeebb4ca5471b54f7441f4a097fd9c9f81d93fb860536b3a9535db28d5b6e66e34ab4e8f811c5eff5e6a8d3b8611b2c24011d82c474cf27693ea98857553e9d20141e531bbf1ca60aea08a7bad8f6f0cad60c4b68e46756c97da8fcb8e87709648ce962c7e5ae3b0919e7076ee6d84e8a1861d70ff6b11ccb1bcb8d9010001 \\xfc9c4a8a10cfa5f21324db4cc6a7897d32eec49744f74dbddcab53d9fe14666a403e5df68833f39644764eca8fa3ee9aef740077bbc6f673ad2b753b46d0eb07 1658770390000000 1659375190000000 1722447190000000 1817055190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-108 \\x065db3838d661ec487e081305333d5798d30344786b4cba6c25a157705bafe882d1eac9314cfd5185c705e0240af72411f6fdda17b7cb1c47b4c5195e4717c98 1 0 \\x000000010000000000800003d3f14629d36e16288583f8097e9a67e077835f087609b7754055276e0b3232e6a081d3108c34c143760e5845a66fd897fb2a4b8d14c9c1e5b722a5c3378c329dddd5dad25c86167ce95d873efb2416a24a385f7e1211c79cbe8a5bea353b76c34cdbb40950b71580a082d7c9320987ce390c0470bbbc3e0567ecb4c0064443f5010001 \\xbc7efc6b10f47ef83b0412cba5202064fcece6ba346de2c80b9fcde19d3649cc34d65a9a6bbda8bd88d09ae9a495b3b459de3cfeae6d82c31382e1610fb95106 1670860390000000 1671465190000000 1734537190000000 1829145190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-109 \\x08e976eb2fa889044212e984fb613ec1c17a8c3df2bcb45a7636eabd0d3a4f88166f78b49fbe09cdd995ee08db05a8e53a04ad3b6abf4f6e77b260bbb6a48d03 1 0 \\x000000010000000000800003b4ca58faf0bfe0163bb4719eefd2560ae2c2e8373379985cd853211824aa55238691188a987ee7c4ec2ceea293e91d7461a226735de6d47746140663ac5cab0fbe49e75a1113cc7c71434e3c4fdb97c52f1f62c22dd25f6c161214a65b46fa16f0e918fa271a6a57f62841f89d66a050847eecdf4f9fab5777ead38bf0fac2cb010001 \\x59ec60d951415b0f50a87803c878a2ace9857b287fa36562573689543ce6b6e3532de814f11a5d912c189650c01b7d2ed407b08c0c4f689eaec67efdd57c1a0c 1651516390000000 1652121190000000 1715193190000000 1809801190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-110 \\x13957de0e5318d3c567a00b6101f1daf282673577054b092207f589a3222bfb322388d92b126431a8b630028c826441effc8fa4f44655793362f75fee9f11179 1 0 \\x000000010000000000800003a1a4fbca158655563d23b2a604541d99ba7c214016a2fe0407cb60950153ca754666c904bb9059b5c39fa843453a8f433ade85befc386b26eb29b10bfa6a659a72b48ece55977beee83b76266f7699306f451526dc602a8c13e8646509d910fe7ca81154a32972bbf0d7de2ea7f30c07fba4fad5b50623f9036604b07ed14ebd010001 \\x93c404c7acfe09553aa5c4a5e49a916bfadeb3f169282811a303bab48ab62a116bb21ff48c8a17e20e6c2aca367bfd6f02965d3084219c985fa87bc522594502 1666024390000000 1666629190000000 1729701190000000 1824309190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-111 \\x16857edc4e271cfb1f6573ce0eb89c25cfd5c5f9e8797fc6b93f585346498619011f1075aa567de809b4dbb9a67a98bc085f47d61f87098f5763a999875bb1b9 1 0 \\x000000010000000000800003eede6846394a3e7328a06151d7ad41d0e201aec3cbccb79775674b1c97f57fece627c63cfd2ca5f211a94904ab1dc6e02368ae3d36f325408a90419998010e53a2279d3410a7fe032656ac7bd6a967bb3c174d5970d589d1dd9c78eb1d5e36e695c671d8f0ac2e96b95ab244f7796605123bca604a379dc33e22d396c9599a93010001 \\xc4cdc9e91fa26f1b7fd7bf16e7497fa06542d11aced45f9499d3adc68bd28224198205981acb01ed76daed8ea33206d61ba0b129acccd19d1535e489d16c8a04 1666628890000000 1667233690000000 1730305690000000 1824913690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-112 \\x16a5e3aa9787b532b24a13a378fcfaa4abd6ab08ed962e4b291d80610ee2dcb4789c30de689a52a730eedd11c38e0e8e78d3912b3790be4e57f04b6cc5f871ee 1 0 \\x000000010000000000800003dc852222e0fa5a8682db49439ed661f8e25399d06bd70a39fa0a774372fb1c5f27ea084f9d3175a94f516e12d905ae49b8e5a3bceedb3a361b9f6ccf63b389ecde7eef5e24b2083bd6052fed089f782f6d6cde962fd59bfa0767ba01d5ea1dead5cddbf6cbe103cf86b24f2910ad07bc4d5c4d5a60995d31d37d241b8100f7d9010001 \\x00e128956a7a01a5152f1a68adb50a625fb6dcfdf080135644a2d7093010f1d3c34e6b70f3eb539e3408ee024688ec97e5e11c4fc3f77f98926e4a46a0736201 1662397390000000 1663002190000000 1726074190000000 1820682190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-113 \\x17356c5521b4c5957bbbd43cbea68599a1079844095582bdd02f1f16ba28da446812c96aeb27a0934a555d26de4527aacf662608ee97264931d5d3f2714c76e9 1 0 \\x000000010000000000800003baf33635dd9e5989ab5cef756fc7f8e89d97143f56f943cfeaeec453c3c8a4d4d97a1ae38e151778ec716e96b8bb38b660a2ba92000c79c55db29369f81e58ab8d0952130d0736e5ba5056a2648e000cc2a81433504e7a4cff20c15e81f868eb252bb41f48efccc66c1f516a751dd02c8e2bb042d0de791f3e113d9a5011ea49010001 \\x7ba06e58f9e85afa3be68015a9f11c0f83f440095cb0283af05a5dde8dd5f1500b4d80cd955c953272d35f0741ac1a8ae2989649c116d965a2f0e49d66c25d0b 1670860390000000 1671465190000000 1734537190000000 1829145190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-114 \\x1845db4909861698aba456e107be817a17f3b3b071c70ff8041dedd8b576179c1d74a796a80915427f61da56d279e17335f0ace3054dadbd5b3665d35c7e12aa 1 0 \\x000000010000000000800003cd5f9fee4ddaca91d6790667d33251d3f0d7111b660ab34684fe74b5679cb4c46af198d024ac21a00e7859b1daad2343974e650cd07e3b638b00e2f93311eceb71cc5ddf3ffa4ef294d59430ff3e0ccd9dfde4505be2b5f56307e840ff5f29135c612344b18216c9dce8a54a80101e9103a4f31365229dea76faea7ef44d1ad1010001 \\x5c76987e80f53ac7cf293fc43136176dde0e7cdccad9c3b5ad322fe846659b8b8652bcab404652d7f1ead3d0a4dd868f85fad5718fc9550c221a835d1a208c0f 1667233390000000 1667838190000000 1730910190000000 1825518190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-115 \\x1a6da4bd9075e61e3d38ccafe54a0fdc60c80a40362783a1b278d9bdb5ed4300bcac4c657096c63841729a854ac0357b7e3d80837b5f7dac7c93e221dbe361c6 1 0 \\x000000010000000000800003d6f9efadb03fb6d827fb6b09e3ca63c736bd6884293c8ab14c4a2375ebe39c89f3e505320b35cf87cbcafa6d5b30085c1891c92da17d752ac39a586f6f8348a7ec5dd27f77d27d9b133f4f9be292e11220b6b33658f587106720aba71aa6402c0190e5c4728f03cf7e1a4790e543f3cf607f3889a608e0ab3859af2a5934e9d1010001 \\xf75e329aeaf61ea0c1fc3c2fa5065ca8e4f1ff2ee921d9a4276e53b8e26cfbc940d4baa97f248cd0a67ed36b74512852e9f53893482f1ad759b59cc487e86201 1657561390000000 1658166190000000 1721238190000000 1815846190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-116 \\x1d017e57685c698589f93357231a0b9f98b91e3c0944465a1bfd3ad7462e2abb1e9b16ec1c5a596f6f9149712aef86a9e947abe3cea927ac073dc0822cdee5a2 1 0 \\x000000010000000000800003cdc74ba5b1c32998c8a38a15e1f3cd37e57afbe10f3d1fc5e47388c5a27b2d1c8c40c71c8e0e55e8662cbd151070a944da4f53cf2654b1a33d4df946fcbbb952a1deccd53ec9f264b1c6bb378c0990ff95514888f9ac161bc2bae3734ecf7d39af84b4522f2ed698ab0bd1454633648d50d026c1d68df099b42489cfc991cee1010001 \\x2a8c60ee1353e6bea039df6dd873faf11edc5d9ee9f23e886cffcaa3a6bdc4422e7c47752f30c706af6ef5864ab72971afa080644c2a6ffe8d1de5191443db07 1658770390000000 1659375190000000 1722447190000000 1817055190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-117 \\x1eed8932a444bb2fd953181da557d0c814bdb3d421fd39127a583de8898672ee2b214cac036cdb2db128fb368ae768bec7f1bcd6a9517ec470b4c274df81c28c 1 0 \\x000000010000000000800003adb03ed771b11728173b3b96933d2d0316416731a146b12fa9c19a5ec55eb1f2822d6971cb8998d186e4132ffdd9411946033d1ec1cd09108e88c908ea903dc740de562cf935793a0673c32c199650fb9276bb80cf183965a5e407da4e6acbd6b7fd3352781af857cee91d9a85c5a3e902c19ac59fda6b511c554c75d0c98a57010001 \\x2a6320ae62d0f22eda345e949af7c66d1df5053b55154fb2a660b4fe23be0a00253c7e659ed06e3203be1af47ab9e36803c3574c1c92eb6188638d2ea4301e09 1665419890000000 1666024690000000 1729096690000000 1823704690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-118 \\x1f99af7b866376a6c7a9bbd1046e83dd626cd682cfc17e6091ed340db939850a49fd33cdbcbb8f64aefe8e172a455d86084fbfc19b1799f7fd82b63b7fa73dcb 1 0 \\x000000010000000000800003f4c75f7fef9edd21d0c97c24519eef18fe4bbbd453d7c68a1d8bb92aa96e48aee22e04ad1355685e6b953be8e9c2733ec5364a16ea826416422d17b187d11c406ba0f7efdc2b7659b05ec70a4ee600eeb413641ba69ca08b830c2f39bea633ea55419a8d132d01f8b9fa2b0d3b6b774cda2eb41a58e85f42ffc6ea170b57a535010001 \\xc0970f34f398d03bd633ee913dbecbad3f1d92a68f501a4190fd6ba5a3778d15eedd34189d81e655e645afbcbb1013645a0ff0624b6414baa5d4c153a7e06e0b 1651516390000000 1652121190000000 1715193190000000 1809801190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-119 \\x230d36540b344a5afef46c38d973f3bcba840de39a7d581ca51acc2af93dc56ba109eb8828f7cf151f6532c66267d863a0c0d9f75fc3716a8cd10923033388eb 1 0 \\x000000010000000000800003b57d45435186a2fd9ad518de38cf8f0ea5efd975e8f73e55d56523c9be13c9f0f0441fda148cd4a681c798ffe0ef2c35f28666695534d285d91a450acd2784e1fc38b7547793836baefc7c3203d08479dfc384bbce844aba5f5f7a077c5bdfff148888202975b794735737ed5fd7ce6c034af97b977c2bbd8fbe6643e62d795b010001 \\xfdd5102d477a423a8cb37c28661f5778e432260b5708dce7de7d7c0776a43da98e3682d269db5b63b99c29ba2e606c1612a6c6b57a214ae32f2813b24fa0d803 1667233390000000 1667838190000000 1730910190000000 1825518190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-120 \\x24b5a157b761ca6f14b2a39863ea3509a5af0ac505e5ce7c5d3814c26b053e01c211f130cfc49fad83ce73cd15ec44862cbe81ce1ef3dad8894b331d62605d88 1 0 \\x000000010000000000800003d9b4f151334f4d43b7af3cc115a7e6342e098566a4c9e346fe85e2e6f58edd5889570a3a44ae264862fa5d3fa51cd4cc75ece7e11885cf7e90fd4c80e9534e2816911684dadb69dcceeb36508d57e99b25c216221c9adb052cbfa300bc9d1cfb90a254f70ccc6a62a6df1dc93612ff454a11d790ac4fc68e3c126de735df2a91010001 \\x71de74acddcd2e77f26fdd2b78b1ee8f1821c8bfba54a26ae31c3a154119f8c70fb4b98a8d72a3e76c4a9503a9531c757383d4a15b958e14bd0bc1034604bf01 1666024390000000 1666629190000000 1729701190000000 1824309190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-121 \\x27fdab3c3d383d329444f19fbe53b7742a5209955a44329b18e62a90bc144a045c86f3881106d23cc8cd2decec693db44d4a92079211ec732b3160d87a9fe185 1 0 \\x000000010000000000800003dc4e4ee126e0e6d3f7858175126431f689a50b4c54e59da4ce9c46beabaae93c7adb85062fa2cd799cb26167d8c1e34d8052c04468268d9dcf0f449f84ffdbde4f6e6505a6ddec97f08bdd099ac521504d90400fc948a15b989c78bac75ad192152261f01fd9586a1cbcfcf98f8d774695850712ea333288dd58b7dd03461ea7010001 \\x9ae4968355ecd8008ebb437ff069d0f190dbc9f03f93ce2f133c77a2a40527721784d74551c4cef878fde074b16626a826a7129eddf3286d37835f11d3f17702 1666024390000000 1666629190000000 1729701190000000 1824309190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-122 \\x2fbd47d1c1b355a368ad46efed994419a7d79a63076be2ad7d16ab03c77e76d452a62003ee0917730477df97880292bcf68ea5e8469663ad46d0bd7a337433d0 1 0 \\x000000010000000000800003ae031ad10d93b14230a225065beaec814735ad3404bef1cda616efadf3202486ae4bced6eadd673032cdd15fdbb85f620dc08aa153aae6b3c6eeff9ff760fcbdd8b759589e16274c43addc5703f799afc42414d35f60ceb652337d7080bb54926a4ba343a11457fd98ae482b26e0451574fc03c86f9330bfe4cc22b97b29eef1010001 \\xfc3675c005e82b07ed6e67328c39c153637d1ae4dd92e885d7aa3debaae0c46963f8acf9d269bdbf96466b91ceb392c053ba8b67fd7f966977527ac0cddf740b 1656352390000000 1656957190000000 1720029190000000 1814637190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-123 \\x31e1c6fdc4cb471b4037b5f11e09bc88e6f1c4c499dee0d4fbe28b62cf7b3327892516fda4cdb311c1e53dc1fd52f83184cddf5ffb9cf993256c2ea7ad189fe1 1 0 \\x000000010000000000800003b02f504d4088bf698d3023307c5376cd6a45f2e0a2e1768b0cbdfacc88e3d2297fcb8a479b9403c250b5c1f9af0d8dd0ed3981e49b100493c738b17a182805f998ff42f02bf46d1160e73ed3163bca4ea67255e02560d7d79d63d15b4f13555c0dbedc3e0ae87fe9c1fb63c44098342f0b4bf7d7c59f5b3c49e89ca255a6f7b3010001 \\x04eec47d40fd464c23bcfbfc6dc22707f28518b9a8dafdfcc822fdc6c55dcfdd14a4e03dae64eb096b39ab175ef35fe6cf8a089e0bbfd387dc28c82b0c6ac901 1676905390000000 1677510190000000 1740582190000000 1835190190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-124 \\x31991f33eb074df03f6c067b7e9200d92bac076fcddf5840efb59a96cb0277666c5419f1cec3de8d4e154765aba73ede3652a5ac6f14e553e6447f42f74911f5 1 0 \\x000000010000000000800003b507d43da0927cc086207637b06595640af98c4c515bf4e411f9cb6b3b6b9db4f43529bdc7313823c1fbb529f80dc60185265cf152295a21cd741b2ed0a7212d683f68331470ec5d4d005e4eaf30c32a81614a0813b4275280d7f7a274dd9c29af189bfb1f06f5bc0c4b6c8a960b4c2758b058eec51f9f50b5baea5e2febaa27010001 \\x86c386534d8d67aac35ca4c2aabbc2087dd4ad122abc0231edd905ed9952eb6d8798672cd1f6fcbaf8890f3ce45877d71161f4456c7080a256a3ffabc1792502 1652725390000000 1653330190000000 1716402190000000 1811010190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-125 \\x32415decffacb7933fa129191d8183ed06d861764073f94ed6004fc0fc80eff3e7e2fce52d8ef67754e3c18b34b77419ee83483d21b294827bc8809763a8b268 1 0 \\x000000010000000000800003916bc2e5097431758f8105533d0970402324e7edb7855c816cacd5fea1e548f741ccd9fa7e0719898ad591292b2b588b4559676d262a3bab1448793daed1cff79383ceec580837278db20e5c5dcd7d1d280cd05ef51a199ed77180bfda9daabbe1418aea3802e082a5541f3f853a09812d233e2e22f2ea21977b801d7ed2d123010001 \\x2d8ed6bdfe6cc2174e51607281685efaf4a7cef5a52b65be5dd43192b7f7b0a6832a6e1ebcb35af8bf8af7d0793d05b02b4b32dfb4bdc80f4decf192b6e7c304 1658770390000000 1659375190000000 1722447190000000 1817055190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-126 \\x339d6142403d8c728b616c5165f3b102b0c7e626aabd309ef803a0b0be9da8f176cef9d3fac3c6a1cb688d60e407175f699cb80ed8c61ca37ae8373249c8d84c 1 0 \\x000000010000000000800003c61a1dcd80f8afa81d7753458326f723eac29b061f65030b1e05dc7942208f3842b130a7ccba412cc8a22bd34892d4d20b7d3b9368bd5c0d0b16323017523c08058cb095d860c75dda98e7a4185baefee6179754cfca8a4f766d63008d4c059dcc2f24957142435b995b6470fc88a1c90ab099a86b4689c8a814f3862e979a09010001 \\x8a9abc50dc93d713793331a89e5846c22f24abf47565c377719e1b0d3475b854935d614b3afd616305c15546b96e8b914a69ab3eb5987e61d849637e6a706b01 1652725390000000 1653330190000000 1716402190000000 1811010190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-127 \\x3311d2dd6c499352f9ec849d6bf6e9612945eabcfcc756d1b77697c92098449323ac8ce734d058d59cc38193463b33395954b12ff792162d56334790ad3a6143 1 0 \\x000000010000000000800003bb3277f4668895a4d644dd25acf400614f81e049e3b80705b67237a0dc0a8045cd3d1fa71bcf01b6e4478cacdf2b1e3d1c70d19faa22b4f6d2d5ffa5688b0eec67b843018bf650f857561153e9690c677bdacd4a43cafd5f14cbed9d4c5e0be13c8f976044cb345c9164d3325c206de7f729060753fd333743c13d1d1154d905010001 \\x417cb45582b135911eb44fdba9ff7e57f098c948dc0ff23d2639c760a63ea1deffcc944bc6f92883c12d3e7b90c1e5e73d3c7fb509508a7a95306cb7c3232805 1669651390000000 1670256190000000 1733328190000000 1827936190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-128 \\x34315c2728c77a5861cb4f30dbd22b206328cabe42c8d76d620912269ddf62a25d740d5b93f1f671df7c59bc878cb283d6cbae753c6e4748d4dad9e4bbc3fda4 1 0 \\x000000010000000000800003ab0473a3130d6b2d8ff66ba2d2940b56d37c0fe6dd081f05b84627a1695c6b3efb54763bd9de6a9d4539c21f24fe758c7d07cf54be29d22f1ca0026fa9eb3f4d8b24b760c1c4083ead93f59b22f3d15feff7181071fc7bf748713657590ea85ebbc55a0be08a724af8343c8fea77a3634f22b6db3c8bf50c222a2061e884db4d010001 \\xdd45e28bc25dadd9a2ee2d5f516047563c8a6ead37e7e4b4c68c1f0e0f919707d4a06dc36a100ae07ea14e1683a21a8eaca60fe8af4026f1fc3a3a74d7fb1b08 1679927890000000 1680532690000000 1743604690000000 1838212690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-129 \\x340989fb94c9c84262ff76a555e0bd6782d409442b42ab6e248fc281833a1c28d57b14ed8030d06d89ed4cbb108e9236e03df69aac1cdb2137fe44a27fa26a66 1 0 \\x000000010000000000800003c3af4f243a4156da73462248fabafaeb4dd7de1e9dda9f0379a9651c5765700d6a25e571b5dd7c939d808d3a88c4024edc49e2dc46c2f638592ed1d1cc4e5dc27b2b89c6f94b373ffb6a08daa268c611bf08a1235df2376a4c1615afadf9488fbab118ad10901cc89a966118893bd69528f0e45c97a0400f79c52803027c2199010001 \\x60833dd586090a074dc1eb95951e6cbb6af6a4bff5cbff84938f4d80e086b7e70231f774a764dfa38912e20b47b4a9e08c0d103e5d057959b8597c868c814306 1668442390000000 1669047190000000 1732119190000000 1826727190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-130 \\x377d6ecb97bd2fc2d474b17690f6deb7471779de07a6fe827801c07f556cc281bbdabb4e987f8873762c0fc26185d65162f18895e64f6ae13eaa23d6b34760a0 1 0 \\x000000010000000000800003b651e5f6ea4e30fa78687583a8d20000986f65cbed8ec85fda7770b5b2255840c01759c25431b2feed203d73d0a7a703a89939fb39e1d584b0844b4581f69b37adab5cad6db04b7717be116e6bf8de070156dfe8c80e4e0f0240481c8d9f76b806b7372f216caa906fd8ac4e228e8d93b66cd71d8ddffec2c59ef6b208ed25e3010001 \\x218064ecb35c19519248b166fe45dcacd87532efe81a422a4705f418a60eceaff40846e18a49a0e102b3402801ecea75ed968ec1c2116b26dbd061bc14fdf90f 1658165890000000 1658770690000000 1721842690000000 1816450690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-131 \\x378d99b87ee4a593c9bc3561fe1936e16395bd58210e46ea715084b364561339168fe4992423e29d09e5530a6c9cec08656c5da5be6eeaa9ad61627e2b3d5d79 1 0 \\x000000010000000000800003c5a5a573589bc316bd04b728aaa802229f7880e0f1aa32a4c9bcb41f1401fc298877a8e583b100ae094308c42320ebff1921de4b20ef3fe0c06ced3565ce98a4d18abd0a837d49f6bc96ff8611054b78576d28127af66ef03cce2caad2c8a451c39aaa8024780adbde45059af4e1c39076078c504a22b60c9c7978e54369b06b010001 \\x00c5f60f8d032ebe6a73010b5dc4770bb7fc6fe0f8159e5f516ede59651ae05f05df8288cdbe34388c0cb8c96f7b7aa5478728cb27ff4bcde3717d38379ffa0c 1663606390000000 1664211190000000 1727283190000000 1821891190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-132 \\x37a9d0f087725ed628b60016dc295603a7a2ee320355f123ea32e1053faeb9c8571ef4637ff5b83a3ceb2efc5f445145a0cd12be3f3eb05eafc185d715ff4c35 1 0 \\x000000010000000000800003d16e0b0ca6a1de122722fd5b8739ccf9d8e0ea83096de465a6739efa0cd2320258a5f7a476f0ee4770e0cd1287473e05c761d22ed656cb52b9ba2f5f256d0f86f292f0334ed0743bff1ce04ed65ad71ad43b9fafba0738825899014a2131d4ae961a3340182dc9a61b50ba94605e945f3f3aa704a3243c6206cfa9881b800cf7010001 \\xe6d46684d46df291e8e80277c3198f02a3bd0f982c59aee3e1fe91bfecc02ed2f0398676356b006c4e8bd3c28a81035865cb23b8ba6203608a77375b49baa20e 1669046890000000 1669651690000000 1732723690000000 1827331690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-133 \\x37016d65120a4aba84a2abe2cb73d0bcdcb1150d5e629f32d8876076f94f30520598cef033278c3130c51251dce1d6467865f3f4fb4a068cb4d21a1778ca4e9a 1 0 \\x000000010000000000800003d55c63db120aa70db00c1cd779c86c981c5d2a705fa9eb78d6077c8128e48f2a6b709f61e506b6a526f2d0a1f95cca9e831ce2a3830dba487b95cd43f3191550691dfab3544a4d165eef036b46c12ff41fc4e1634eb1c35c577d9a34456d691cf58b58c6c6f231cd2e3b47d0e9dc5bcc66b2b3814e6ecef6ed2386fdf39f86af010001 \\x74e401c7940e4f3387edafa80ad8d22186c8ed6c4606d5aa3e22c241a70f2ed24bef3f472122937da7a2776f4d2e920becba01337a7d186256dee83e77933e07 1671464890000000 1672069690000000 1735141690000000 1829749690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-134 \\x3bd9eaa795d46f45a20a9855424ab35955d566b01a944d0cc6e3f892ed1bed3417d6dfc14eb0b78715de68560bb7d604878f740d03a53004ad0b640c00ff0d96 1 0 \\x000000010000000000800003c7aed69bf28038296e5f2d8f4c5fe6ffe00aa5f1e15ada289d023b9b88ae27fdbb2efa8c25eb3c0874d3d4b70a62c861ac38844381fe15d5590df6cd4fe9f624d55124abdb8f3647a13311f84a4f2e74c56b2a5c23d0b5925526220856cd938f0536f6ac24f8188027a9738eaedeec12835400fd2a24ebf1f04b6e0e1fddf019010001 \\x9dc8d57a6732b099e3ae0356abe3e69e188b30576889e41d3de9e830f730e15817cf9696c0a2f3e5cb10b5fe6f117cdf1b388998af1b83caf8e7784859cff90d 1664815390000000 1665420190000000 1728492190000000 1823100190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-135 \\x3d21d3fcea35966f1a0af10cd36376359c92cb6ecf863327edc34675805d715dc47a1660313bf5caf75574fbfdeb8f5b9eeb78e0905eeb1b5882983a68040003 1 0 \\x000000010000000000800003a74860cd002707981c9faac21a1ed93c62b55e5347b1b5c328d7902e6d14890d8bfdc89d21f7d46fcbddd526cd63583fb596298201d06f5fec9f6c27ace98e4623a540995834ff9b3ccd4dee80cbf9b0ebe9191dfd89966ed566576edda7c628107a7eef943b5f6f4b4c9d8fb1ade8f03cce06c1845d908edfa56ee179ddaa27010001 \\xdee376ec6c320fab3daba3502a1bb7ca6ea30619917cc93f49ca841f7f55fa596503613bb1334d604004ff6b8c881d5451e0074299ffc3e2748b0b971d1b3f0e 1669651390000000 1670256190000000 1733328190000000 1827936190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-136 \\x3df18932763d6988fcd500994ba6a263d65a18a252ecb375a809fccf8bdb9b379b85c2db32013b607921b3dbf6ef66c0d90dac897fffde34d8f960fab48f056c 1 0 \\x000000010000000000800003cefa3f36a707b6d4cb5a4fddea7e295705dbec1d1d8ffda6914b48a97bf9aa66da6ef152b6b674d61312f83e9f67ece2d0fd018c23bad9ba73c8378af95945bd4be39945bb80a387902ed6c7515c1cf9125ce878118a0a7fe03097d291f5f2d117967607dc8e76fb05f68a615a12121c4adee177ef0de71d2a8744bf0f102085010001 \\x6aee813ba8ee2820439137b22b2653bd1d0a422ba25948910d2cd262a1579870f6c349636a0deff93a3ffa3418486bc048bfecea8ac2b33c8c75186660d23100 1676300890000000 1676905690000000 1739977690000000 1834585690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-137 \\x3fadebfffdb03584c8c51ead28e573c5e87862ba28ce18b391786cfd0533f3bca64644a6abfc66874105355a7525044e47d2cd1ee1a6fdda128649d2c29b018b 1 0 \\x000000010000000000800003a6de778b6437e8e17181b276f7aa386fadc71e016f42ae20fff3365c18161587d105680c2bdade72d084965d437dca0bb4a558261d65c3d042028fff363433f1f01333576c9dc0fd145545f9d6909a77b4c872f3a54fc04e84ee52ed8ea70b6dcf4fb2d56f14aa1bc3a0a47528060ecde3208d292d15cc96d7d012804cc28fa9010001 \\x1ba16cab3a5d65a0713ee14e8e7453b4c0d8be7c500d6ed7d7eb5c20bbb8c837c39b91e21f10e45b5e451cfc355f355234948bde32cb19af21b60ba501378f02 1681741390000000 1682346190000000 1745418190000000 1840026190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-138 \\x44ad3dcf64d355df08131738cee4e4ff767e9b20eda78ea857508909f9850f38237006454d56a952d72a96af76890e14d801a311007af635deef687e8154f89b 1 0 \\x000000010000000000800003d1d6a1e4f2cf02bf6c58ae32fdb1bb1fa7e179f93b20596e679551b268d4911556ae5d3971ccdac82fe1a592529879a0dc74e33d9dcd9d03168f72f1622dabd459e37f8c1d418bad3526d98cdf21d0a933d9381cd8df713e7a5ace58d78ca8368f54f837e8363972b01d86c5cbf8ecbe1b259ed24a5aad912efb1c3700bc1845010001 \\x76a1c0ac11deedc6b2525c6822f98b722ec20366182ba12f38a2e50b5850a0ac2b0fffde6ec7cde97d43a697bc8019f6c639d64994bb43a82e5ed2cb2620e20d 1669046890000000 1669651690000000 1732723690000000 1827331690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-139 \\x48edc7f0df727aca134c6eec4d604090abea09e1e67d800099bf69d8e2f04c46172e0f2232e94881bffce2e1e52bcddf3a26c56e5cc2ccb695a1a3fcf1b0d464 1 0 \\x000000010000000000800003b48df92a36bcedfdc094c9451c60c9b121e5453f8f30b6f9b1c91603573a77cc766ea37184641765ea6dd9c030812264f349b13b391e94abf05054a26b540a2c5e8e02149ab5d4ec240538413c166effaa0b9098b8a4b684d2187d95a10e905c6cdcc82edc839c0e44770504998b74c3ba33b42bf5145ae47e1cccec9bf3e15f010001 \\x6b9e77b3f294ff8b0c80f5adff7b6a24296a1fb47290a8dfafc0a90403e0994bbc8c7226718f25307c8662427115482ea9dd10c4c524bbb0c7a35e4bf5c19b00 1672673890000000 1673278690000000 1736350690000000 1830958690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-140 \\x4d218fcb275243db25bdd8c95e327dfbffc47e191ea84b400250a37743b6f26e3e613c184b114b092544e868ffafcd334551d84ec79cde4b5048120a83df1e99 1 0 \\x000000010000000000800003a9c641fd5be9c64d723b65883ff8e480eb395c765c81c7fa282bbf66cbc1f22a9d76a3916b4491dc4201f86409771a61f6f4bfa2b184d24dc1b8e24e75b29a265bc0db45aac83c8f9146cf8bf0973e11056ac96cdb68d5b384ce85cb8039176ca4c5ff96ba5b2e08fe7ab25028615a0d81d2c8097f12c63b4be03d15b89ad695010001 \\x2e3293f0cf3147d71877366bc95922e01a63f551d0186ab34966b871d3ef688930aaeee845b12eb2e745a52e755b44e585a35208f85acd0360abad328ff6d80c 1654538890000000 1655143690000000 1718215690000000 1812823690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-141 \\x4e39b54a5f63185169d61ec41417c9aa7ca68c3f613c74bf3fab36e43f536cba6f0dc018aef79ce2b1af6666b02499d7da2ba4aa21af974eee77560e589e4f4e 1 0 \\x000000010000000000800003b2e431c95c45bdb597d4f5362d7300a7feab5a81dd18915614bd6509e950a8e3167361dac8003425428afd8431e6d8e90cc25680eac99c0276de71d6d4b18413713a9da8dd4f6c6f8b251b075bb45837687691b93172c61262f1d1d8adba337decc790f776f3c9b55860307181e0ecff39f0a9b33688ae3b38d66614ade7ba2b010001 \\xa00a1eac54d3010d6b2ba7ecff6e816f2b0aefd8319793ef3796bc4115284a74f60f2362325a285f30f19520bd5f7b35f12b3bb6b0f49f55565510e68a4caf09 1653329890000000 1653934690000000 1717006690000000 1811614690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-142 \\x4ef13b581ce1ffb25c039026dcfd2cc345178ba7a0a2a6194c6727d8d643220438adef36a4f3bf6427c0e9962ee2f4dc86a67c5cd3a062a26d8a310bbe0e6508 1 0 \\x000000010000000000800003bfc5b46854e6994ff61d9a7c51652bf7b24d7527e2457d4f351d819a1d57d17f9cacb4c7d91e48c0aa2217a21b4587cf82191068f8a711604e87edcade5695fdd5c35819a12652dba6483ec3aabdd4d09b55e407fc0d74dec1c3f22ccd4df80086821ec1791e7e0302d2d3c2a1e9507edb65ffc229beeb076b83c36dcea7a497010001 \\xe6a14a35bf4dfdf5c2c13cbae1a5c4532d96718bbb4bc5e834087f68bc6bba2cc989fa04eccc733f1a4709c767a50ae736807dca99d901562fff350b18a99706 1664210890000000 1664815690000000 1727887690000000 1822495690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-143 \\x50c9854b5ef87cec847cc8489593bb931bda4f6e3693aeeac203d68dbe4202336b5a8717570ead6b6ef01897b8f36b618686a6f5fefa2c5222c92bd1fe85f95f 1 0 \\x000000010000000000800003a1732cc6a3ab85e3d640921bc0edd35fd2afa4b06876be8bfb0031748bd36d9a740f90597a5bd1f1842376e547ce9e175938aca5fd8569529965c0011b91b87893572149217e34daebd6fbb6d1da4ae2c35c48714fe62ffa5fa493ec0ffd8b8f6008edae6c9dcadfcd0d44e2a02f18c851cc4e648c7d6a4e3970f3f64c79e451010001 \\xbef71031ce2016b37c97b25ad1e1df17e3e31cc0bfb0e66ae154d4b6bdcb983db6c4dc9590b164e95a92ccae3fe93d209916e5d6875df48b8edbbd0d4349f00d 1656956890000000 1657561690000000 1720633690000000 1815241690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-144 \\x503926c631cba6973f836869320d79cd1002501b39e6aaa402f0837d5ac3cf8ecb1dddf76a287de49e173d42694f051fd6e6583eb8b15316f18a6e6691c621a8 1 0 \\x000000010000000000800003ca8c258f8818cb1cbbd4ed6cb6c69063713fc20326898062c706f2fb26e4a0793685887812a2735ee18df983109516ba36287bcd3b242cde3812a728b1746911d1c5121f0bdb81778aa24b9932becd6f2046163e0884ddeea3ddfc6c82bc5a75d6d987281f8b4339f1cba28dfc299d9658941c924fc5933ebce74d7d352f8ebd010001 \\x9b350a5cd2cd6c6b10ed288da168dcf0ec19632b198e112dd4e46edfc30b79f06264a3852c4b4b08d47cbc5f35b9ad1856ce642f0fb0d2c43e38b5c232604207 1670255890000000 1670860690000000 1733932690000000 1828540690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-145 \\x522981b4d7dbfa2b84ee28db128a6808738391471e54e00558f144f452ecfef9e88196f3166e8122b0684d934a0f319bd7616d68ece5d36ea04ff233f41d60df 1 0 \\x000000010000000000800003f124e57974d8d6c1bf16abfc0ec97cde68ac3f6543f276b4ba7654775671f858bee470dc9162660b11f5176d47cf4d567cf3588511a846ef9e4558527afda13e0b67e35c47b47cfbb4f3fbfbccaef3881cc0537e711f8e070c983e0212091d8d40600deb8d19d83f2a02c3fe29e3c92abfa8e8b226856496c12d39f932f50c49010001 \\xdecb7e485c72d5189943f1d3b83c8b7ea282c8a62e54706cb11015d9e3f9f2bdc748d10532d6a2d8239fac994432cb0bd8b6e384debbeaf1bd5257f519187507 1661792890000000 1662397690000000 1725469690000000 1820077690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-146 \\x5429a1d02bb438646ce1353cb9c0953889b4b30582c72dd97b12c27d6dab633f7812c9a2eacdee725577e8f65af16e60a6019f1e30f88206d498865f7b3f5076 1 0 \\x000000010000000000800003af0b77be98f5d53864f6728d7b1ef1e4440d6e76ed7ea4d12db1f2998cf47873b474d23c4b7b7412b1f90028306d47772ba99047f49d4cfcbffa33cf266f2abd26359d591778d6361e7d5c30f187709cd8055794f0e0bd380a37385befb9b925cee88de404f8efdaf4729ba5285520fd7af00cc3e6f44b691eda689bbc6a7a99010001 \\xd29310d526bbc622e0a9274711363a9fa3ee5322b741d84dc8b4611dfd169ee1b595889dfeeae1ece9dff64c0d146e97e6654faededade8074c1808856d39f04 1675091890000000 1675696690000000 1738768690000000 1833376690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-147 \\x586119b77bf656768932c7cda08caaf154dca33280167918879c9935567402b0d2b320c89c55ed351e98db94165a98db98aed771a2d4becdf92335ac268bd20d 1 0 \\x000000010000000000800003be731f63a335a7856dbf6ea68f3d0091af766be7e193c79595d2e8f906c4ad9eb218bfc7c5a6047963be00823bd32cc9ce637b0bdaf51109c28c15bac34694ab341ce4755423bb643f3b876243b3fbd6c4d86d34d2f7ef5f4c71509dc0f1993c61a2ce7dedc1178c71a637f7d3301239d9651b2cf9b4ee798ddad228019d922d010001 \\x597c5695748073ce7eae45e7079f6571666e81861bfb1668f529c9ad5e5b0eb21461d7999275ea8184717dc4371caa6fe0d6e44cb90ef0869b60e5e4530d680a 1665419890000000 1666024690000000 1729096690000000 1823704690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-148 \\x5a696df6556da5eea34fc23410e952b01b826c2d150cd0f9b1a539fc77b46eebeda7762738110a3053989270f262121ea94d04ccec07864c069d0d53444fb0b6 1 0 \\x000000010000000000800003a764061e797ff17c88ff647fc217ec795ca64f2e5267dabb2bb4c83cb28895214f8484939ab21ff0878a61e28ede57489d6b784f283c6a3dd7bd3bd615c7deeb240eb7ffbb55a6404d81c9bd1a7dc008db550ea7d218b3e484e9fab67d22f7da4eb3196c0015d46e4de7c780e15cef75a0e5b8806058e82a43d51aabf21c24dd010001 \\x27bbc44b27c53d9be0e648341608ba85c3b3009815fc510cf0471bf66109b6d266fc3a39c4c72bd6fdb0d833803bdb333cb7df07499476db4a404d5e7bf20a0c 1661188390000000 1661793190000000 1724865190000000 1819473190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-149 \\x5a3968c8705d3042f8e0c0a6af6c78ce845767e2c5118d8da200671c1a9ac67ccaddaa55173dec0c9c9d18f4055856ee7c45eb72831e96ead1046ab6ccff408d 1 0 \\x000000010000000000800003eb9c917dbb33cc2a7996f9133393e6b9f7abcbdc5f26a939473fcbaa0ba53df83e1e7017a686cc2b123a14d3cfe9f613a78a0909c873dcd26258c1ff8557a158b7680130ba00e5a04b0b5adc6d668d2c3aea9e64a1d387104f886824aed90088a21372810779dc89a10809197d9abfba1ea2aca9080ace89a37fec5e3d6f3a75010001 \\x89d48c491904c82e06e5c1ad26b0bb1500e9d7008ca23f131bac9ccf292cf9f26a9fe6b18ca2a9e39a30cedbe560e0c0b7b878425cf700055d45d84d03c22b0f 1673278390000000 1673883190000000 1736955190000000 1831563190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-150 \\x5fe1f37dc3734fcaa6fc4e8a15ec65e2de2966202f28587d8e94d5b9790a57ecc1c5da7e0b79e74748dc6442ab5d3a8b88cebce66942a9e71e65828d02d989b4 1 0 \\x000000010000000000800003d1e18b0eb0ee39f83763f9f47bbb21d5f526cbe271fb0640d78acab72ac845e745104573b8063c0dfb2d7e30c520fb36f5f6c2d9aa57215fe8c09d3cd118512d1255214d4d284d21c37ad45ddd57a913f16458c4ff3cbafef67607f3ed360be910e6c13b01a23493d64f4b7b68f1c0a4fe3563d70a36e279b8f6aff819491619010001 \\xf6dc4883be106249789feddac18347b57c647ebd7defced59ea90feb1faab8695932392dde0e736feb50e0ec0057ea083276becc72e46c0dc4b3ea6fe52aa407 1673278390000000 1673883190000000 1736955190000000 1831563190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-151 \\x6191405ae21df846f7dff380bdc28baca1380de5008f14060af00b5f6e20ca48323971180ea0ea7ded573f4709078a60c87e9e657ff1d3c4346a6e30af0f2240 1 0 \\x000000010000000000800003cfcd87b780f3952f72125b102827fce268fc9358899acaa0da32f69b692e1116e8993b1c916ff64c63478e495487ea9d756d313205ff03d3d775d7949b5aab2459882dcd34f7361ce5e20812f9f8052839119ea3f3f81acecad81a36e2aee73370daea1a6367ad446f507c43f9b3202b0645f5659e2155029b7e9c7cfb76c545010001 \\xce68025a379d828743fa2790ef3733be41c07991c32f414aeeade141a1d954146cb46a236af8b2c6bf879a4a0254709ce48f1dab16afcdec0c60117232daeb04 1675696390000000 1676301190000000 1739373190000000 1833981190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-152 \\x62a51f04c730929565ec24c9129a87b7beaba8c991bb2c996383325e6deeaae92a7281bef1506620756e811cc86a6d264539d10760a355b9fbf8944c1df705a1 1 0 \\x0000000100000000008000039adecb706e46c246bb28e86ebac0673424fa13a45508c314cd78dd9c9ea38cc39e487a01782835bb66023b1126d116d9e6bef7d426e04c1941c98847a51ba9ef3e4e282533c6a7e363fd50219459d192b8f0599ae0251fb7d89931538d969a171e17315014f256a538b570317ff06c2059778b1af67328d8a691cbcab1e77df9010001 \\x8b63cc015be3f940e7c9c9783c8053442e9da4ca16200c6a73af22a76b9e30df8d129b8b1cfaeac139bf90828379caaa1086362c29aa508ca60a7a2ad4de8c04 1651516390000000 1652121190000000 1715193190000000 1809801190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-153 \\x6635cf103908fbbb5e62b2c8b352d468702901504de2c1f4ea8a527b5b2f09ca3f03d4e781c71d1b23ffcb26416ed1d65fe25abd49b554860e0138b0ef8e7f2b 1 0 \\x000000010000000000800003bf72642c6bea71744087b3e295eefc433e8fd188a53662d47a14f5d675a111e99dbf34dee2cdb6e1db23302e579eaf28cbdb3d60b87e52de8d1adfb9d22ca60dc5ea18c5350457b67821c01bc854b3db6f9cf9f85e40e257e77e7e27498dae346603663f67a4c220488ddb1ab429e01a51846c3cb1ab1839b6e555906a1a6e41010001 \\xfac21dee67cfc7767992d2d3e77a6aaa14c7e17d2e830bfe784d149966cc04dd795dbc25d35a4a979a2e8ac9c98d62aa0293ca2880c275cdec77680f2e71350f 1673278390000000 1673883190000000 1736955190000000 1831563190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-154 \\x687d710c04401577412ae894e3bd3944496347126de943657303b1522a757a2e07787d86d27cfb6eb8f5c753fe3de990459099b1653a3d2db57eab813f04f57a 1 0 \\x000000010000000000800003cf8ba00e327c6f5d151b31192e90985d8c20d812636959089f0a1f4c2cb4517ee1406eb584c19b2b793da94ba19679e3e2a68b1a74b29606d1ed03cde1585c1f5da95da82a794a8d54a47fbf247a690abd109dba18dce741d5e75edeba67595aeb6bc62bc1cd3c651ded9dd57ecdc7609dbed11fc6c8e9c7a098537dfcea3003010001 \\x52633e53828e01445a53f61835b0a450872bdb2485bbf33687da9f88fa5d4fd2640570d5568b0e4b1f445047fda13398a8e0b835dafc3fff81aa2493800de20c 1679927890000000 1680532690000000 1743604690000000 1838212690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-155 \\x68c502ccf662081c6bbcf330bb5d641a6219ed03f464032f3f7daacd6d946f0e65987b561eb24a8c2d847bef6d2fcc10f5f60d9b6a343bd1e29ad620e7cf38ba 1 0 \\x000000010000000000800003b094d1ef15609fe9892391e21cc317fe3e354e1c8c56fad401ff2c19007a20c71ec1712824e8367f86f6c04a4be219935a6d4b5435a7368624d14587be1cfb03bb0554430a255a7e5ec78e8d5eb679cd47ae3fd4c583e2acb80d45cf72271285ecede0ee762e2698e32d3b4fb54346467d7b4eee50c50fceb4a97050c48382e7010001 \\xabd0452e6e1477aa15a33d29caa7636a509cf3b9f6ffea7a6241e8444a0fc3b0dca6c3b58714920b9f253f4817e2c7fadde3483b2307eaa74820c5ec6171d404 1662397390000000 1663002190000000 1726074190000000 1820682190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-156 \\x6b355a720471c650eac9cea55a7598329f46585ac0352a736ae9d713d6b0fbaf61a45abf62ad4868d660a372d88b49e9cc4f8b2651fc6ec8c78e60534fd34eb6 1 0 \\x000000010000000000800003dc2ebd20c4daaf18b63e045d21270c0dc251fb725429ba40eedc5238dfe40ee880ae3cc21d4054221b279f690608ebb22f9e5d0803f3adc7a54885ed3dddd992193d67f43c4ea994cae4d180a42cb51940008ccf43bee0eb08486cd901dbde7afa808d0af60f817ad3bf8c9c3d4fbff852d822532ab9f8b54d704e4497e1c073010001 \\x4b8e8ec51755e777faebb1a1b09d523839d04fa4db44d44d11a8a8f6b5f97a7bddffdcdc2a5fed3501e8bb3a31da7614606aa360a464c5f3ceecbf51a6739303 1661792890000000 1662397690000000 1725469690000000 1820077690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-157 \\x6b9554c124cfbcf5e812259ba7a9830068f2538e443bbbf4fdde444efa77b6306453d0ffabc235c5d351a76d0372ec70ab8867408d8e3025c7cc63d1ada2fda0 1 0 \\x000000010000000000800003b2b374f9510c40ab45b0aa6ef0ef89f4cd129b1eed0fc9e1e970fac61662b15bf577fcb698f19bf6a33eb3e12e591986eb40fea9ea59c00a0d67c180de8684a16b6a55f78e944a47cf421e448a5e7c8f0ae0751c1324581e084ff32645e69eae40a8d551ed35a0f127a9717ba7e1d3bfb1dddf31c22144a595bb951faccf4a3d010001 \\x3ea5c816a6efb62db2ee9a3521e61bb50a6243bbb8a5a9ffd6831f9280817edb860d2892d7b587207bf9e3938e7c490cf8ec39ae0c38e281d6360d23784fd90b 1655143390000000 1655748190000000 1718820190000000 1813428190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-158 \\x6eb1a3de7c191af210415259ccdddd4d65c0e4c8ed8e2c66ef80b3c6a0b5e1b758f2b90245881e32fb4f53b7b01cfc51c6e5520ba30013a74b325c853c4fef1d 1 0 \\x000000010000000000800003b84bd60cd5a846ebd0ee5549df468839cd086f022212a20c20bfaaaa6c5ce3ed4c806e028779b27863f7c9a5830826d71f3e048461f433fef321a72d1f1c85bce77efe59956c67df7298d1ef055e32d7dd77c6a0c4f5a1013afd533518a47da8e5c8f817378d73e8acf9fda029e914dd701a97ff1a98b6bad8e0b3fdfa31e091010001 \\x373e84492b87f68a1977c3bee6eecaa16c0cb1983c5ec4c34976f5e83d8e6af84d6fcc6eb6772116bff084a44aea08a376f00c357b82a23dac2011faeab9db06 1680532390000000 1681137190000000 1744209190000000 1838817190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-159 \\x6ed95bf5f84a72c23833d6dd9608bed181e9ee8aa9aa137fd16ef90979d7b94dab6b3bb4459fc08e1e9e8a555de60ad6089b719f846558cdb722946459a21af4 1 0 \\x000000010000000000800003bac24394d0c9f1503449bb50dab05430b9dc80d139b7f5332a2ce1e8bac675eeb9effcad4002192096693b66e19b5d745682ec1d354a6b8f0ae1292e7f671cc039700fa110527ee3d0b825bbe20edb3f42c0345c89d3970f9f28bf43462b18a72f3868119c9034eb216f6be06a00cfdfb7364d93c5c4dbe0a45ea062056e13ed010001 \\xb244b254939998064ac2549ed552e8be4d16d9979f69eeb635c182638025898d28cdfa9c87e62c255ee0e76e3f57869e8cd1114fb3186e7a41472bf2a7237607 1676300890000000 1676905690000000 1739977690000000 1834585690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-160 \\x6f3da2446085b5c23c4c6c4854b65ec61318d4e4371496d94b57688f36323bfeb60c09f4c6da4fc65fc8cfe30de5197ad5d5299d70de131601e4f51157d14c08 1 0 \\x000000010000000000800003ce85679764d5d74e86624676804f5c3bf8cb5508fa7c4839be5c259cc8374cf1b518940545a1810e7ab663a309e2173580ca75d914d0e116394540b9d3cad7bed494268966ebdfc21cf9a582974ce6820533fd908b9ccb2d8bdd10c80f639c88a28e149e87b20997c3ca9652c297f7efd7d5d17d21688b524adfce41e61f4fe9010001 \\xeb64145cd3c79f5cfac072328db8a4c10a1a150dac53ef3d5d858960c5e548801a873e4c42747694b5c0c9ef213fd6a32f0137764427b1ee58391079a4924f02 1670860390000000 1671465190000000 1734537190000000 1829145190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-161 \\x7361f7ad77237ee7900b2c21fd3aaf6f7a505a48c6cd57770fb69579d2208a526108fcdb2367f8f03d23c62c494bcb38a440cb27fae5ba62074c75541e60b1ce 1 0 \\x000000010000000000800003e4b1a1e4923ac2f318ae321f3a651730fdca9505103974431ccc7f6a205f733353d3fd92459fe5f6e4de1b72bc79c689fc154065b3371f3a5f215e4a98ad0840764094a188d206a60ec941606a808ea417e0277c618726573369092de7160a38d1a5f2fa2b146aad780eb78914c7a079e7ee1439f8d1a35ea036ae6815dec15d010001 \\xfb8489dd6369f4c1cbc7866b774fd0b742abb4dd96d1c85470b0a59618896c9c76c1a2393ee39e6b9fc9cf3102f23865b4ba4546da7112c66bc1d10d9f774d00 1653329890000000 1653934690000000 1717006690000000 1811614690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-162 \\x74cd75482418128da48bfb5cf58eb8b8394c9abb29d45229d5bee859844b146f732926f5d3ddd7ad08f940d049381a001570601e4cd2eb7f47e3ae9b8684d78c 1 0 \\x000000010000000000800003ab44e3d160cb2f39a145f9cf5b4a7b67ff7e3e3ebb5531ab47086f5c651a839f83491674b14017cf8fa3bbfceadd2354a8e2f16ea7d4e9aebeb65c3a46d540f5d12bc00dbd43313e25fe8940b94d9c6ba81ed7ff13845028964bc4b7545470e2a015bc9b82c040be34ed7bc320d32ffd07d5ca02f975dc96f8296d5db04033bb010001 \\x7bf1f8a2b4a1cf74649e1f24796bb8d5fc286eb94c7c9559e04e81db8810b1c906dcc024e8edcf92f9cbe0a3cadfeaa1f5fb99cfdefa3564c1fa04027c9bff0c 1675091890000000 1675696690000000 1738768690000000 1833376690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-163 \\x7919570a5829dc8706b93188d639c871d7daa5f0adc0cfedad7eada9eb2fdfffb18902eff6d2c23a6c7634fdee77e0c3aeabffa4e9ac50521a0030a2e5705b39 1 0 \\x000000010000000000800003d4384d52762ac9a7c3b047825a92be76f3abdfe9daaf75414db1d3c7be77a0498c36e798eaf74d3da75118082b192053bd32c2684c9d9673884e10a738dab012a19b44f68387bf1a3216b33dbd9dd4f758fd4a8222be1ed4bba5a9e335e75491d2fa596f99ac230a89d6afaff48121f6c758fe2294daa8f6c0ea036b0e1e4111010001 \\x45fb039d2996d8543aac3234e2d19a4d7dceca353ae71ba8d0019eccaf79b48cf55e5d167847029fed091f6a505fccc64691d476392558818387defb54f7ed0d 1675091890000000 1675696690000000 1738768690000000 1833376690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-164 \\x7b1d03ccc9cf362e9602e5a4bbdd7cb4f31e0cdb68bccf52f29347d6cf6213af99eb2c5a86dce2c01004a7c600f317f41fcf7fa639c5c66f48f321871e538f29 1 0 \\x000000010000000000800003c8aa2ec4faa0061460c70cc2041ee57a4a1032886884eec66f346c0a97413753d89c6fc3f0cda290a31bd29698410e4ae992e897d044c930c1c5006317bc4330075433437c384c8bdf87c07eab5a33620f07fd2fa9773ea2995d6910308d367f4b1ce0ea772a0073210a384cede2af31cc14f67842f57ce8a5f46d77211febf3010001 \\xd0bf79299ff8f83959bd8abae3171cdcc303be20ce253cf573badbe97d74f83c6a012cf44979994b85f7559465a31b229212a588f62c68ee5c123039a3c1b10f 1659979390000000 1660584190000000 1723656190000000 1818264190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-165 \\x7b8dec626935fd3e8eb509f3cf613b6c4eb0af168b0275e286d23c1e804e07c66c59f1be4d77914950ebbe53b52ec67e9a7ef72892b2c8d18ae314fcc86663be 1 0 \\x000000010000000000800003ce7ecb7d2efd629c1331783fa547746006aa2ebc784373d3c693345db60baa0251d8ac44bd89ccfaf3e72d234e10ed62eb1f9096d2a04caceea7ea3f36b09b1fc5aba603e494a46d8464781143d3be2de7c79a881e1ce0470ea806e9071d1dac59c406f59c3e0cfd51a6aef34fd8dfb683abbcc069b84402f03cf643a397aa1b010001 \\x43b7802128d58ec63e7947681223de83172e7aadfac4597200249c2fefe8c5c2633e92ddf7f8b919f32ca59b51173162a6bcb738967785cf943396ab76aa1906 1665419890000000 1666024690000000 1729096690000000 1823704690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-166 \\x7cad359dc2abe2d27cc35ff8e6fedb725daea684f8029460412f2e7791a6e5e2cce6935ceb3d63cd399d7cfd60016f43328ef0e6c2cc27f0754f871469da5966 1 0 \\x000000010000000000800003e91bde5e5376459c212d5c9554363f05df76b6ee94237de1a4289aec35c875bf4a2852f7cfbdad980f2faa65ddb57ec27be25f78e1738471a460da90905479d6545f6a750482f1dc8d65ec725c15a57166e87146f9aa505d2b4444b21ce51129f993a8227139ee8e9c97330a38ed00688aa443b498e48b0e53d7ac6ac543ebbb010001 \\xc71b7f68e4f009b612d273933b1d59d9c5571427548094e7a5289fe85d0c40feaa15626c02532dd1467740c9cde6c971de1b333ade99b78c5f7b738eab1fbb06 1663001890000000 1663606690000000 1726678690000000 1821286690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-167 \\x7ead6592a6a4bc22958e180d3433533e62df75c7bbc750887a48f1c507f47536ad883ba79eff262b775ce2ac1920310cf293d688861326a0e518e6eb1b876a19 1 0 \\x000000010000000000800003bf6e22b372cdb05031fcd489e8bbbed857e054e23156419a06922064aaaa6352f4d38556beb2af1a12678f827a67ee0d9017847409cb28170cf921479d699f9de033890b7318b2e3d4c3873d799e89ba0d89fe6796614dba4d515e13fd107a5c28c1c576a68fb5b8a23976975fdc6d6935e9bbb83c6e29945ac1a8eb3aa657cf010001 \\x3edc806b30efa36caedccd245afb7941c712c109ef4d5ccd924b0cde2893ba5535a6015992bceeb88f93860b7417c86e8afffa7f945aa6fb87951e09c0d34305 1666024390000000 1666629190000000 1729701190000000 1824309190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-168 \\x7ff9a221f3233649876a9f028fcb3578c111449e8e4a45499e741daa8a6328a6d02d7788f5d04d81ff095aa7b2a3bc1427d3ac32b74ded595c726ed114fa5460 1 0 \\x000000010000000000800003e5dcd0a4bfec9eb4289016c836e1d77679eeb70056363b4b9e056db5a14c9526cdb744d75e7eb21aafcc21b079621383cbe8fd9d811529206f0f51f7f5239ea7b510efc7cdc51c1c0c68ea150723847cc0912a85996b395a6e5cd92b8e2718c32fd5635c1ba60b8606ba1c93be0275fe892961db244543796c0e8b118dfd277d010001 \\x7cafd2e86923ffdaceb08aab023342f1e57593638d19a1932c3c478a88cff5d94297eb63fac3d09f9036acafc8c71dc7f8a06f19d5f845a24da291fcd8a86f07 1658770390000000 1659375190000000 1722447190000000 1817055190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-169 \\x80b52e0c17b6e9e7afee59d42861868b7da94cb6d296ec4bd83b904a4322e65a3c06a302641472dec9a748a524f72556086da30e988cbf71480c616b6bcf365b 1 0 \\x000000010000000000800003a9ab52ba6babd88f5aad42b46d78a7d66a5217143e095fa163780e95611322d89a11713f17cf7b5cc5e430a3f1d4863d4d47497e27389739a1ad9af063c974e07210aad7eef3939c1e2c73748b9a9581161ff2639253bbbd1d1b1877ebdce4e0e276053a13a7f8d42faeec8f10cfe05e81a4b56d4d264e99e72a43f6c92346bb010001 \\x6286fcd25e378858c1407aad840d039cdaab7d2b542e4a408d9a779556f84c8088fefb02312511ca41a68dda7c7f3f91c5b173789d71b21d5f93d9226125b30c 1679323390000000 1679928190000000 1743000190000000 1837608190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-170 \\x8025fc8a1f3e7fa7d0032fc6145c7d69dbe283dc8fbcbf3d74b4ef0c4af61107f565cafc052567afd17485f679c49d774dd6a93b357a1fcc723ffd5f51b9fa88 1 0 \\x000000010000000000800003ce40d8bea51a63cc9834f85aa6d40c1905507d829fbb53f5eb76f2069ad28e93d625a300799d43adb56af62804b3fe0309dddb2f31f811abe06fdfc4071fd75c6a4cbc747dba351289a45e6cbd60c540f05eff656475683cb338e59566f6c063cbcd931891abbc544de6773fef7bfc29d472a9d76c17e2b20c33de3ca12bf381010001 \\x6da06584b8e1a98a85c005774a3ea55ad167a005477bd940347c23f6a3e71af7146dcdd4d5be30add3e97cadcf2c381eb78c9753832a8c45bb66fb7570ddd203 1682950390000000 1683555190000000 1746627190000000 1841235190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-171 \\x830d712af43417276b9b0fb079941f644482bc3de4dbc632ba5300b1b9049905cdcf1f6c8dfefd60d9874da9aac0071252a91953201e02e5438a476347b77c3d 1 0 \\x000000010000000000800003ae3a2bc52a38a51d6abce41aa82c1b7ea4830abcb21b9ccaa008fa11fbd6954a75f6120c9d47fa5b53da85773eb2dc29f4fbdf68a55133d2dd38fa4eeee59249ee993fa2b1d0196debe43ae449896700b55266e61d0160869618c2c9c878621d0835d43e6e666ece0612786bb6daeb6422b8db99937c4a30ab71d5080b4b8b8b010001 \\x42331c12921b09cd870c518dff05cc7ea341b296ec28f5d1eb810f87d5ef3e407945c3bf1c8af7337efba6b8c77df50cab6c6482906734f4d84e169fd5492f02 1671464890000000 1672069690000000 1735141690000000 1829749690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-172 \\x8655445d2fd6eac3e5d347f315b2a3787fcd681c909cbcce50a34e3c676b1146e64bef619c6e4d0bf95332fd4fb8710d48b695ca4106943ccb67bae6dc622e5d 1 0 \\x000000010000000000800003a1987f033883da2a3146ba189c03b8bf54fcd2a2cf68fc8d36db4e4a92f3ab4906d549eaa3237d7dced6ad48efaaa2d170612c4cdd287305fc0738beec30cc2aa9c4b51b8f85a6d83cdee3966680da50f6a76406f33eeb680bea62666ac69a3e8f112a0a576ee0469ccc8f58ebb724ddf42d9d2ba680c81e6af0170417875885010001 \\xfdf6274fd702dcfcdce52e41ded2cc691c67db4e3b45bdae807a40764142de3c43338c646a83fa10eb44edf506c894636e4c66f042ba3e6280b928c47fa2780b 1670255890000000 1670860690000000 1733932690000000 1828540690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-173 \\x8a81d42582f302023c5ca32f7bc8864ca682c96daca7d1efca4913a76e231818b41326f7d9419427a2c33d704c07ef18db485897a790063ff580632c9f0cd840 1 0 \\x000000010000000000800003baa638a5a9a7fb313fe601f416115a40bd080e3d3188e715894102d125c39a8c257ad1f98dd66ada10ac5dbaeb2300812f29f7830580559af604e27d9d520ef0e9244d97b584481d4f14a7c057b6ffae073f9aa3877a470303bffb98912e809b323a0d0779a3f906eda4abdead466d9516ae6f165208a5c523da2f184750c79d010001 \\x0b991ffa48d7ca5b548f7808fee12a1cf4917f82bb9d496f24266b0703fc7b98d14de7c4ab1a1c94230398b23ba720978d666789ad8f4b4841e0eff1006fc002 1681136890000000 1681741690000000 1744813690000000 1839421690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-174 \\x8c69618275c73c0512ca844e308b24c9d7130a884b96a5d13da5100f44c70904109dbaf16a4a6ecaaa42c0fbd343751ae31d767b02758b65da0bbf19bb3cca34 1 0 \\x000000010000000000800003bbf793bd7b8d6cc658a01551c525ab7acc0daae405f011b4b6e5a47e606e117b65320a04553816b0a667f77b74b04958406e011382c7e36578aef72f22ad9f2df3e3285d453f51f57a4685da47dc096625e94dfc22d5f91041f82fe8aaf8e3925512d1e808a05bdf9a06ae9af43b48ebe9821795f940e3a61a7645ede1810221010001 \\x65633b09dd5f0123b86b234d9d1ce4c7545a975ca5ae70f3051212adbfac9c868d5fba99facf93df8b229c621ae4d11540a5797c92dbee77510e1c8de742aa0a 1678718890000000 1679323690000000 1742395690000000 1837003690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-175 \\x8d85512fc573ebf8430167f74a29756d6aa50379d587336f439a7e42e3b361646e72eec485116952dc6b0391093bb06c76a7ce4b5f57cf77275fb25b804022ad 1 0 \\x000000010000000000800003be5ba18f9bab90b6ffb71a74bde12da2aa7ce5f8d1b5ef17276bdbbdd3b8fabdafbcf2435338aa480ab0d245c310f0eff9f11685dcd3112b0f74d3e91b2e3efc711931e780ed2b41acd60470c01f262d2571b038b1fba199d0edba4e639a241526d7b81772e8bfc1706a581278e186bcd539b9651039656fe51f9e5c8a9d3a89010001 \\xb40de38782efdf6754eb767590e97066a371c8d9a436d8cecda829963c23712bb2c5eeb2f8eb86c94ce4a79e5848423115f5c18a4e529cde20673c207693c409 1676905390000000 1677510190000000 1740582190000000 1835190190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-176 \\x8e69f5822a980c2eb392f3a6a47baf16751fabafc250daac131954a4b680948296836988e24be00c0ebbe6d47687a426f39e0c68c9bc4eb51a6658ddafe0cfef 1 0 \\x000000010000000000800003bb5bc5cc959f0935d32060e09d5e8937ea72f7badfbea9a20340e764b2f3fa2fc0db7d238d4eb042a01444682599d454e9fc0d3179263ced391fcf2ce4f7a318a03be77e0fde62061eb0d77bcc34e621217bca30757354c3dc32a7af126ae83b5652b85781d2b4e85c681cb434b41bdcadbb60c47df47bda473b90af7c27e405010001 \\xe2e65e21c5a65788e37722990dc8069b631c69098209381727fb239b7f1af170fb0773d81ca6b0ea02961c5c0e273028bed17efb4d164ccb01b5a3d8e54baa07 1659374890000000 1659979690000000 1723051690000000 1817659690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-177 \\x93ed89598f9478486be48a30401bba668996651581bbacbbf3970de39d77144290690492bbda6b25a2178bc93208418baa5b051e02a118a15c0beb9c491d8294 1 0 \\x000000010000000000800003c08a461763c608300610f05131944945ab95ab44939123ac057b9af8f4261127cb4e9439b9f044ecf4a651e7505dd83dd052df1b19b428de177cb50bdacc81f12d8859ab41803348340520dedebc7179d08cf8528ffb5305dc69079cb0037cc90a58c5d6463fb4171db28daf91ad5bd052d42123721bce8048d84056040b599f010001 \\x6ca9f075a9659f4cf99164fdaabdd35c02c854905e820013b3b78e40f5d6940820f2143e7605935d25f6988836a1ca33cb6bee537dbadffcf93ae12261a63a0d 1665419890000000 1666024690000000 1729096690000000 1823704690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-178 \\x96210d046d3c1cc8024813a9b60311b99fbd7166b37c9d6bf9c4377b88ae34e7cecf5903a19964260df9427d7d4e18899aaeea4e709116a150ecb3cb8a878325 1 0 \\x000000010000000000800003a9fd7a2879c5a22ddfdbfc50758b47b4191135195d9438bfd4f8abed9d216de71fb0bd74ff8c2ddee934bfbb7d3086c2d21f5eb87e79af8620125137bf6bb7572e941abe17a45a4acb93d3dfbfb6703fcf6ee179411dffd5fb856f92ad83f8db697a84cad2e0f5995dad76883e6bea34329a402eac5b5996cd65acb3b58f4b8d010001 \\x12333046364f71fc225fa4ba7d93578163ed6bbdd7776965837991695ab584c7e6129e5a0652174535473fd2e6c07c3d45e3e048770cb8a1671216d8f5c87909 1680532390000000 1681137190000000 1744209190000000 1838817190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-179 \\x9bbd84ed51955db2b91d278bd762116f294a7dfd6cb9f3de4911632d73618d7c495a1c1c4d9ede948cbe203bbee93031bbf602f26e82e3d54b61da818f59965c 1 0 \\x000000010000000000800003ce6a4f62e71c998c04906213f89741ad21c62275f7fe055668d5bef4ef77ccee4cec6d8fabeaf58429850068189968619b61c5c6801f0d67f13e05af5087aded6ccae7855435f3f8f3b5c455c23198c72a2111022c66754913237c05d7b3c865ce7283b500f68d751666f04db6482085e65e7b23be2a220e4b86f368cf421597010001 \\xe239d1208a484baa7fb5467844f3d2e551189e0fa6aa0961098ebbd3231b6a7d77b49a266f67406eaa6321d5d6a9bd0464212aa1a1657bd25a2ce2cc0fc4b70d 1675091890000000 1675696690000000 1738768690000000 1833376690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-180 \\xa3b5ea0030b7a2fbad63c9cd1831baa34abf5acee8cee93081d7913fbebc5df1f2704395bc5c02e21e89a225fd30a142925675d71ab23abcf4a5254c09e2ef92 1 0 \\x000000010000000000800003e70060917ef227fabbc8bcb73eb6e697b51563df7e891a770b9d0e04d30a1fb989d8f36e8c7f5d793a9c4833a14c660c9171b03a96d88f99f646b61a1bd7d07ad0592793fe61a9c6b33fc0913ab3ce5b8f19f6653b73f7ee956b480f349b54973d0aee9c4bcd8c8468afa4266bece42186b030ee564e653867dd33206b5451db010001 \\x6f719f784ea6de2e3955225de7adadbf6310fb4ca4d418642a73715764bbc02996e6ebd52ab55eb429591a9b42d455451db8ed0f96937d531b05b46f0a63db0a 1652725390000000 1653330190000000 1716402190000000 1811010190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-181 \\xa6b9a487e842b4dd1cf6fd254fe5f5cac7835a8a12e17c577fba00133468b04926294e371efaa7fa70fcedad84d704197f721ec758742681355693ab55d137b7 1 0 \\x000000010000000000800003cf3d6a956a6f90de6aa7ad7825320ca11c0c44e3ae2bbefb23cdf35de336b5d134fe40f43db1dac2b4843b236505a90c5d837a2ab617ba6b6d78e926955fbfff26b90fff21d976bc50d70471cc246acd5c38506db046e5a052b03e2590eb59d539334b4b3feddcbedd664907c920a9001abf20f74fb4b225efe41cf066ceb8b3010001 \\x9685cba9a89ff4a103583f693a2dba030ba3fa1d7926885fd155180254f7d913f0b4d332164b6f2f1fb3a9ede779ff452774cc146011765e37422bbf39393a0d 1653934390000000 1654539190000000 1717611190000000 1812219190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-182 \\xa8a51ac2e06b710580ecb2016bda2edfb1668e919476881389b6bb58b6298b453fe00f1f63c9365622f5e06a53950cdcb59afe767c985bd37f9c34f36510be40 1 0 \\x000000010000000000800003a414e310d526b30b361b80d29f2aabb9a967ba6ab1ff21dc91ea165a9441bdf982eeefc99353abaa1642d90f9d271bc09fa0f96a1b0983c1ae74c9668c4368857748779050f464e3149e47ef7a8ed0145221e146894c000ae04048a35d129685c0a18c999d6eaeb860503e0336e0a385563c4b4715f49eeedda6833f857f8ec5010001 \\x72766ff16124166144b92bc9cc266e53c6426f380e108457d4af2f1cf3da007ba104a589e49811e7f25e36c3047c8fbdde163156eb2e8e4e428b8b62ed526e0a 1670255890000000 1670860690000000 1733932690000000 1828540690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-183 \\xa899aca356b77f98c819dea99114d256f3034b28a88c83037a6778033343ba30225976df82e33e925d361078859aeaa77906be7e99db3cb2ee29ced1b2f49661 1 0 \\x000000010000000000800003cf1dc61d0cb27dacbdae5f46ebc681900ca3c5f6db2fb4aec5cd8161c291015928c97834c821292dae9321eab08f0640dcefe86812b345177d4c0b584d34ab2cd3368012b85e14d4704e47c35f2125fc7c800b9059d1f695200df1cf5c3654991a01e3402960ac31714a9ba8c3f3a052087c5e416edf1183218a64a887768e47010001 \\x8b2b6ac57cded09a33fcd3e361486169a218033505dafee49cf5217123eb82edd5624ef3bebdb5e3c374339acee4d6412aa490628325516232ea126917b87603 1653329890000000 1653934690000000 1717006690000000 1811614690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-184 \\xac519b84c0f0dacb27724936a30ef7f087031519923ac6a37a66e3cca6cec13a3457a3b19375bc3cad91ee520f453c358ea8fcf008767387739fb6e24a28e3e3 1 0 \\x000000010000000000800003da5c81d4444aafb84be9dfdc7d6804bd16e5cae54700a17a24ae934914a6bec92303424f183a00e5ce3162249a17ca2e78e6d4f9cf26b6e1b0b5d63b1e533b50ffbcfd4cfa31cae83aac2ebc4360505ab44546627fc5c64ab013500cbbbeb3bc50cd1268cc6d3bbf2c308bbf02803171b7bc17598bc4c9c9f5dc919436f76553010001 \\xcf2f0118983000c16eaa9b7e125c1db11b4bdd701a1b370b924a237d2a3a5b42a16ebf4fd4779830b02a046e86fb40577c0e12dd27ceacc5e9990a597fcb4905 1673278390000000 1673883190000000 1736955190000000 1831563190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-185 \\xad31e829ab44a9fbfa844025af5f0aca40efd3df74586446a1e575e6243bf04c4fadbb0f614325744ddf144bbdc23861213f3f12d35c0a24d60a75b126841749 1 0 \\x000000010000000000800003ec1212a45e95360c4ea5eafa6b404909be79e69490306cde18f0779ce6ec3ef27fc24d013ccc9f05701f093225b5adcd5b27d1c3039a3d34962df4446737922b058cae83c455d6964789c95c128ef9843e6c15204f3e4ceeb7b1d8ee1a171a40677264db6a9aada1c03005114a6a4423f6d2b05e7aa74ba9fd77a4b000a68fb1010001 \\x66bd7a34fbaa61db40c94e95d7fbff0edd926910a095bafe805be328151c51024db6a0b434192599066e860b843d99a1d0330cfca375d80faa32cf7a1177980e 1656352390000000 1656957190000000 1720029190000000 1814637190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-186 \\xadfd8ff7cbb955c4172b531f64a4d7bd342f762eccda820158ff1e2ced4898aab13162f5ef166ddb1c2d29344d2aa503a3ba46e4f1d0de6a186e2d072c6b1a03 1 0 \\x000000010000000000800003ba133ad78883068dc67ea2cb4b6fde00b56f4525602c3d99207690a19a2d917e574bc996a2e1aeccb0231820fa6864e60c25d6463135f4849db57e290e453e5a987d325bfa76cbc56a5499f8bb73e8376196175c36a09182236438e7bc4d6ce7a6e9143269a348924b6bac08e9c48ff567ec49a7b8704a405a476955ca4edbd7010001 \\x37daa68f2071b09a387cf5907961c1681008ee543c6c8baaf61e0c0da2f94915b69515b04547c9b9ca9679bb3fad0780f7ba39e6bfa28d037e5b5467bf014b04 1661188390000000 1661793190000000 1724865190000000 1819473190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-187 \\xad1daf8e7a4d4f7b61264b9456b0668626601d2a6f9c55a4e393c6ec9824682a90299178a608c42967de21b5e38f0f28b6353acc2c2a00ec9465de1bc0eefb83 1 0 \\x000000010000000000800003b7d13b6c38dbcac80d99f1b11f19e1808720f177380d4427232c66d2451d783d0f0861dad2ed62e1e5c3dd7d79536fcaf84ce55cc92f119cab7b75ac5ed6142551c97105b608869fe3beab51795ae2917ae936e426912db4a803439d103c096f439cda22da2859ab99b2816a12168208a595ae235224e6fe0692712ac2b9fadf010001 \\xdd02c826fce08ff82b70e38e6280fac56a75c8c342c8229aeded23e133dbdc62711015f2de1f3ef3931c51de5793d5954d59764f4285a4013e8d9cad2031c30e 1660583890000000 1661188690000000 1724260690000000 1818868690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-188 \\xb765fe0767eacadfeb44fee53031f641d30ca830ecfbd46386b2fdc1803ddc37d490b3e54ab9a3ece336a363a6f3f3ca39c0409de496f1ec74364a1b1338bb24 1 0 \\x000000010000000000800003b76441472fb97aad6806966fcf22cc61a19520cb16810480acd22c100166047436af3503364ab6da473a2d5d06a4453dc23024be8affdb1625b7faf6e9654a6b5a0c0382284e2f31f7dd12f337072310c56bc2693496b8747544858d97d2c3fa31cf5cc2a4dc8c8a95485d62f00a1d60a915185fa90f5bfd1cb4f258ce941f1d010001 \\xdc856df6a3e7a8ab111189208b202e851b93a843648ac76d16fee209e7914020aae3bee118767b215f27d82ac8eb0d8207503ec3d3d19eb06af65b2b1a0b9c00 1669651390000000 1670256190000000 1733328190000000 1827936190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-189 \\xba25976233a477effa17e4c42c5d60db801a3dd03639f4ee9cf89a8dcad44c5e63b0302389800e7f65b6fdccadb8dd55e4bb270b0467cb2bb65d507d3f2a004d 1 0 \\x000000010000000000800003e06db897c5712fce1b591818ed8d696898b0b33390170aa50823bd06470dee1451885084da8e6cdddb35d62bde860f7cbf76bb25335963aa20ce4c4598aed801e6f2849ffb7693abfb1926655fd480c94746f99a5fd8f9802e7a166f53bd9bf0cab51a660e2f99c6a5df89985047932575cfd7e80217f77840e9389c52cf19c5010001 \\xf40a9230b86c3131f6df8c046bba5b49dd44c999d8c92376eaca36d3392f5f5b947927b35f640e514ca8867c22d9da7f05aa775680e7af82d2ae1916e935e102 1661188390000000 1661793190000000 1724865190000000 1819473190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-190 \\xbfc965b6ef6d21a53c0993d7dcfb61a794b0304fbbf4309307b2e54f441b190ba0c8591d407cac9cdec351f34549da169e95729296ac37cb3193fbfe0d9725c6 1 0 \\x000000010000000000800003ccadd0d9f636b405ab52b6edacca2c0a81f80081c9c74afb205a9c2a22a437b3d0b8271280b64f6472839bfb4991a8f1d3532f1bb9dac5f9c1868f3fae274c970c0720e812e8540f09034ba1e6c135cda65468f96a9cbcf46ddb3ab5cc465347549a5dc3adee143430bbecb5c6f62901d96fdad51646d1d5a21a27140f2f1a27010001 \\x7b9021c53efa26b7d2be3d13e14e8b35707e531451aa09d2fa1c8094d2144ca2c47728095f6443c96a48d40cd69a6ed98d1b195f243029005deb2f63422efd0f 1680532390000000 1681137190000000 1744209190000000 1838817190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-191 \\xc5cd07c4ac756cf075b582f7faa1563ff82cdf293ae0795ce7f1011b0dbc8d90723b517a658132a932a13c657a6685d272400f213d3d80a40bdbd97b001b90bb 1 0 \\x000000010000000000800003952541abc0435a86d1b0f1e8403d25627f38b86473bcb0c4f04612b5f7b03a9d5a9a33ce8982150ee16122ef95e8a739ec98639d0c2d15c45d7ef58d016f86fdeb8944cd8e3bdb34ce30ce687b4c48c8b70defa1dbaa3a8a74f334fdd5e0c49cb6adcb9522bf0bceba48ba62626f57a2f2f7ade3dada0b2197181a2c0d3689e3010001 \\x27b07189358639e5416762490d14e8c56a544effe8738dd07e0605464581e91e496f56ee59b62d2823b5ec7039464cc635f45f690add1fc37195c94332d93f0c 1674487390000000 1675092190000000 1738164190000000 1832772190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-192 \\xc95903c744b7c2fb300964903d66d7839758e61cbc99a4cadd909a5868230c5f49a91b486e8ed90fc181ce33d1966fe9bffe9c45f0e365a4a8bb7b89c1a05396 1 0 \\x000000010000000000800003cc06e614a3deadb7e37423c5258447d51fa8918b5e6544dfec251e6aec3f7572601188566d756b10b1d34b41bf3ec0d8ba0cf86a6b38e1a514601c2a7b2177da2991ca3d98280db7fc48a39c4087899206bbe502c483eed5768231abb28ff825eb67d68c12a82a75d9a9de534a3bc062221f5bf70c18b7e35b4d60145e972437010001 \\x2b8ff6bbd3a6773803481ea77ba8fd3072f9101a5e56e9414df7be3128b1b583455df6c9c880cdb2959cb4ddcab54bd01073e8a90d86bb8101f71853f3696405 1672069390000000 1672674190000000 1735746190000000 1830354190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-193 \\xcb817e50ead0ae3557bb7d58f984b0961a0773f5798dd1acc96915f6e9ba7fb4b806ee81158542c8376031965e55ee33842f9be3f061fc47a3bbc9cbf9177ee2 1 0 \\x000000010000000000800003a2f521316fec42639c40a3e96ed717e3e1178cbac333c0ccee474df095c0f25fdf43afae8834e85622bebe01da790827b85efc795dc045e9c07b8a21fc25a289cb1b57e9ee54ef76cceae0ea237577ec45cfad4a30ce62e30fe8b8a604ad7a61f67f221ea8781e43bb7f5dcc87c0a8496732a62bc53b004340b657a168750c49010001 \\x1e2fe0b983e05ad7740e92d44d6c4ad71a8d8c35263507c3a7acffdc4724b4857fef961e0b84e7c301557f75a981c335b2e52eb35f0b67128ffe1979feac7905 1664815390000000 1665420190000000 1728492190000000 1823100190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-194 \\xd0410f681aced873fb5454ffa718658017586ee558bfeff60e3f06da4d85ec073a403440c9fae44a2fa24ba69b0dcb508629e100812dbc555479941a44e95f15 1 0 \\x000000010000000000800003b7bbff6a10c9c29d95bc214a7ae19883beac3a4281b95ad9c4ab3fdd7b80faa6aa5b799b87987fc60e0ffc3f4c0357cfa689a96d3527b83b3f6f62571849ec3f6a7e5b3880f0fd1fc763f5e3f4820ce789a056ed648e281e201c5985f3ed8c6f2eb69844f8d361cd5596b00a13b6a6ab1c3fe658febec77e9883f37eff03edf3010001 \\x0b262444bb9e54f693027f8b99059f60606f74c0b9192a5162596c5b25a8053491494a88f126955e563a16e1009a4ecaeaa55cc676691d1db141f74ea96d4b01 1672673890000000 1673278690000000 1736350690000000 1830958690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-195 \\xd7edaf9eb2bc42a46295ca4dc288361123c27a67cf55724394489f0e80a898c3ea96aae9cccf033c42ba89ce33106605398b541f95aaefbd8a2e504df1fadbb9 1 0 \\x000000010000000000800003b58d07921b683bade8fa3cd6fd024a24829871c7f2ebe215e82ebb2719fe3b1fcd207dc3a77e9fae64fddd7b579df7ed199a08777d2ebf65665fedaa40e42619a26f91841635a42d4b7d7ddf44a37ae1237523babf82c7f269b3e2bb5bef37c6b31e3bad0d535b50423e033e1463c765301db0c5af77f281e9442df61307836d010001 \\x17d16aae8d7fd107964d59b90a05f1f1f454a6dfddfd92d3787e07d8dd273467824babe205485da74daafa00e37a459231f627ab49a0c357b3e2557bdfc7180a 1673278390000000 1673883190000000 1736955190000000 1831563190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-196 \\xdae119d876f120973b799d8e4190d3e7867f7337f3c5eb54db5d79b819827f15bcd21978b946df7c0f761274e66e3547257985980cbbdb7696344bbd05c1c0ee 1 0 \\x000000010000000000800003ade20cadd680aa55dd391937c91a0eeb7b8f8ab4e194bf08afa02b89512636fcdb6732dad5e963e79946ff87b1260dcd388e8cb33f5a527666026812e007e4d15550bc6381e8142b91567733625a917984db61bab92367c02e2a6bfd87f782c302a2cf73a745a635ceb38f17379a70b84ce2a917998b3b3a2aba9257176d2bd7010001 \\x9af3198a7a615149b63d5770df192f0d44704b58ec39091e15c7cf2f1fddf0ab3572cb4fa2665591f8859f3b090082ebf1508f9fd9bfccccf3faa0539732d501 1673882890000000 1674487690000000 1737559690000000 1832167690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-197 \\xda410d45bb8951ff2d82d6456b618d081f2e9ab6b58c36eaee16f7ccb5ad78ac6afb3cf8fd12e644b8ca80ee50a42c408fa2dcea44544de1e89630d70784234d 1 0 \\x000000010000000000800003cc2223b458fdad18eb1a858ba83347c7db928a8f8cea068dfbb9668fc441999bd1c6918a69453eda332a625977360d18acae04fec95fd615af8f968919babf2ee687db7b43e912491b7be07046cc7dbf780a4ac61d6a6fa48711a0dc5be54f7e0f3ae2233e949c323b1e2844db00f78354ed855ff6ff052ed30f0d3ae0e6930d010001 \\x221e94022e31ede4018f198727c75e5d2878ad65f4d5a9f5a90986c8a2d939633867c59553349b2fcf99e49d832ae839aa1f438c1714550807db98000d310e0c 1660583890000000 1661188690000000 1724260690000000 1818868690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-198 \\xda51c4364790694f93b7663048003fdf5c531726b6932222e1b380dec55b31d64b3fffcbdaca7b674b43929adc4731830de4a550df0c8a26e752f42791c482e2 1 0 \\x000000010000000000800003c9fee95d9b89b073bbd83ea7b5bd0625736436173204e0ff8de35e4900afd9bb39666338bf861c0cf4c67eb8e7e61e231cfbe8c03e6c1c3ca028b7dcec2787b8e7e69eca1cf17d44af05bee20e49f01b95061e73adedc29a6d36e66ffb8a946165e30c4da7777e78832a6fbb2c1053c4f1012339c366b6eb99b14c76fd746ee5010001 \\x17e33f13d0883a8341576e45d775db31df457899db7e4747eb3de292552afab16b05c68d548cb258b16999cb2dd27284e9f14fddbe1bb16b03628f9a2bdfb001 1675091890000000 1675696690000000 1738768690000000 1833376690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-199 \\xde71cd9c75a360cd3e197d21829dbb8974646408472296892edf90230462606c1de928a6731c7b51fa459de3e5ef7d2ed3026ac4ce266796ab45508431359da0 1 0 \\x000000010000000000800003b0ea5b93c8df8e9ef9739cdeefeee2407f7f66c7868d28804735351bd422a343667a13b066e1c035e45919d3f53858fe8c405320d8f0a308243b999d8c6ee9bf9b5bcdd62b27b1533b5515777f92181bc7ed814baba06fea81956b291ba11bcef3d296b1913a02044922048f718372bb9b18973da3f91d5b53da8f30df53f1ab010001 \\x77eb45c2d2ca47567935f763dd24b23ff8ccc7aeb1486c9eb370e93ae33a3b195d7994d157c22374188f1844b403741f3abccab131e28cfef9b8a8af86e29d0e 1664210890000000 1664815690000000 1727887690000000 1822495690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-200 \\xe91171dd9b69841dd15d938352255152ef10e83aab39b73a8c339cb3addd7ac9a3b829735e95c5ae072ecf313971665dbaa726bc8025daf74eab13ccd0f64e94 1 0 \\x000000010000000000800003b6b40c777b6dc2d9c226e6ba2f20cf181380aa83ce036999d046c6765fe1b02b904b094ea12c631b5134a8dfa8941d06335e0993155506eb39bd18e77556b10b9d417c870a3b582f22b2fa7691db3029b05ba8a5e1b32b1021f09d31b1f4c15d6b4fb9b2f5437c04fd0f318a3495864790610e0982bf39cfed6207bbbdecb863010001 \\x89d411bc99bf7bfbf28a8738aa09270ecf4aa323d5652c47e96b089a4b8673c21714830509de26ef44a152322c902cd0c4dc59b12296c6ec41d078785ff6070b 1665419890000000 1666024690000000 1729096690000000 1823704690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-201 \\xece1bdd8e87cb4d4c1d9018d051f9221dc732ead43108ae714fab52eaa80f75535a46c2e5105291408ade74ec2b56c4627c1de0d2c5679e8238c1b6d74b60d8b 1 0 \\x000000010000000000800003d94c9e2ff680eacb31319ebac7518334911212f3c1861baf9b6f657cef71c381d508a4a199385a296722ca26740eadac50094bd4d791a2d9ce60e903ee7c636bdb4d73a2e9b9a980a65d4adab5a03822201f848f65719763399e1930782f20ed4369f91852c97408bd3c34f6acc5b47e2be3daa5c77faa63f7e722037a41c49d010001 \\xaaa5276be512fc689f1b55a44ba64adea24a2d28ae225d01e6f26bd1cd15187594af16994163584a959c9b7299f42bfca24b3bd8bab842d281df4fd3abad1108 1681136890000000 1681741690000000 1744813690000000 1839421690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-202 \\xec813b3af6765d6965384d4eb8dd6cc1adec540353f37b60335afd1650eb488445f116a26e449093764a8a21ba6c7a4ff14e32e5b8cd6cda0eaddd63d2718110 1 0 \\x000000010000000000800003c175eb4dc8b213d499627b1d2d904c38085fd53546f52638db8bcf5a0a871c6c50982b18c69231c682fe99035b6cba284bad6bb03fac657cea051f08b070b50081061101b0255fe564955114f2824b065479632c09fc2202081d17b546a82e2791a6b641f6122c5ea1e091d3803279efdb8cc31d54f52cd6993cbdea3c660ec9010001 \\x37bdb9397f050ab8af4ddfdd7b8cf503a5f27bde8787dbe35cb53d2049128ed5d14333cad965a512872740e605088a71bb3fa164710afca1611a7b26392fc40b 1663606390000000 1664211190000000 1727283190000000 1821891190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-203 \\xedd59333313f03e24d7c1fd490a544213828d502ef19ca311fe8a014c87e9aa73933083e5721046074ec2b1007ffc43ecaa5927e5407c980fb56edbfade59289 1 0 \\x0000000100000000008000039daaef06eecf30b2788715cc9f4bff1ed061cc70a93aa3ebf60db004e847f034c9956603da50f3d16456e8a06b611e949b4c3d2bb0644dcaa32f04068274a2a5683a5d7511c6c60888b3e26660e4b37acc26a68575a5dc847eb3235ce92b4f29ea203bb932cef9346ea6cd45d38fbb2aea395a22b40c7b7427039cf4dcb43899010001 \\x08709643feb08d682e9684bb0ce2e935f0b966b2ed276566d3dfdc096d8e5a3806c59bb993441263a9c5206ac98b48c16cdd3e34cd2554d27b3b688422a9700b 1676300890000000 1676905690000000 1739977690000000 1834585690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-204 \\xf2ed4e68bb3eac329c11443934a3a17419dff158ef8779d756c7617a63b1d4f9355e5af44c56c1e5bc0011205c807b63b4af88db999be6733ae88ae5cc790046 1 0 \\x000000010000000000800003b271504f2e5e330a25e91b7486f1ca4102810a1d5a9c9cb746f139b3b5093b24c1d6a189aacd8699b3c2724a5db40598175df85e83192a8086fa59003b9a404220829250fdcde329a3e0faf1db3ef319309131399d603493b1f9de19884de2fd5f286a24487c8b9b6184849f3e847a558789d8c80ea24e93184b073e472952e1010001 \\xfbb0d14a634af2ce7f1f5f7a42e671ff03676385a9480f2ecda9327c2a68dfbb867c3cea343f00ab37a0b482ee3c39105f5af3f72174e0b899f69418700d9c0c 1675091890000000 1675696690000000 1738768690000000 1833376690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-205 \\xf2b1cbcf94d531b6b48e4c7efd2248685bf5c0e5487dcbcdb1aad516f1e485f4e9ee7662f8d7b20b64cf97e916b1563b1e3c0a6393da582908d363a8001e4f32 1 0 \\x000000010000000000800003cbeb3e7379fffcbd94bc64a5c102d9bb38d97156930bd698040a0eccedf4e8e60cce0325ef480fd5e653d434514ce6f598df4b51d1d29cd2e1f893706b85b5c4b8924ca3b8d431f7c2f57af6e4781cd9ae1d04a0a90d567ed0f2e114493e8ed1986025b8f95a25304b101342915d6293e396177ecff08e7b86cbb75e2c3011f9010001 \\x647bf32ada549890ef044c2f59ae16627ec94bdfe3455ac630797b1db8b03a6babdec680ad85cf29480fca87b1c2d69a20e3bc735d3778e5b56843a6d1f76406 1658165890000000 1658770690000000 1721842690000000 1816450690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-206 \\xf645d5f97b2caeffa8aac271139abd079ed9365aa8316e5cc7b1876b9aecbf1a5bac14b605aed0096f1dd5ae3862113c9ca7140ece71f11591f9ee4eb0b69758 1 0 \\x000000010000000000800003f57ee99b508c1a83dcf9460cc8a17f0d417ebc14d8447e01e036a748f0e824e929e83528d55028b62067e3571e48749b86b118c10e3d834e547538a4501e916ec0f7c4f507386d1096b683f9d1ef31eba02821a81aaf59fab9bfc336d8a8f6954e77019ee4cc0303f7ce9d1a318651241c90f939c1098ba86900cfc0beb6a5f9010001 \\x7678bbab6d77b89b6504021e3e1002fcb7c54c83c05a164cc8bbbd88d138e6068cd6b7542c89368da80625074f46c122e336197bb906b01c3e6131ad43939101 1661188390000000 1661793190000000 1724865190000000 1819473190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-207 \\xf629afaa7fb030aeaadb1608bfedd8e0068d8c2c3d04a289e0ca26b0ddf715ac802b39d0f26458eee4435183163b160e8ef1a62ec3b404d2d49b61ebce486dcc 1 0 \\x000000010000000000800003bfec9dc09bed86ee95e9e1972d4924053853912729af7130efd32a2e64e9e9b75e7f785b18eb1fc242be9d6cccc17a829a5c6e3d32d17723b46c9a3371499c7b2b8b86709ac0cc43299db9d07331062e2f5e14474b45ee6c83b7e9389a17928d661a3bcf0151669220985657ec6d4b9d00e98384ff578ca38e3c433746c05f49010001 \\xaea240a30f723ff619eb2fdd15d4557b50a2015b1c6592273b474abf9c00a3da4463ddff2186c62b9f676aed9b09ce596a83b3c44b33cad2c6fc079f094ec409 1667233390000000 1667838190000000 1730910190000000 1825518190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-208 \\xf9c5e11fa3ae57610de04f835c1d1c27359fb58f1fd92d5eb44f24c6c463fec156a24ea0197c6bf04f620a219da0cc20c836e202ebaa79bd17ed8a94978797b5 1 0 \\x000000010000000000800003c00241c7cdda399033ab3fefdb051c3e27eb512424d86ca1ce9979777b8b1ff95c71e1c2dd2e5758b1d8fc849ff7d62d09fc1686e676465edca1c1fc33ffd57c0818c41d803c16e33448c749318661c8c381d37dc8b42f362d94fb79b761a0b4bb1cb0dba28f0b02edb041bb75dc8f23a3146a98d1cc1e8c9972e9d3fe8c024b010001 \\x8bdfd0ca23cd064a359053c2e0ee99b52775d15afce390c68940558980be9586fe4985a933ec0c090519272d22d9f9cd24b59edfa09749e70503b51b3e83a40a 1657561390000000 1658166190000000 1721238190000000 1815846190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-209 \\xfb21f800fa3a6d102ad3dbff49317b4eb5af77af4d00825137232ca67830b72d200037c73d242e8887de6235136a56061a8d0ac73860d4790c407812dbc37a6f 1 0 \\x000000010000000000800003e6da52bdea40208706684e30bb7e338ce471c93fb02249ce8a55402211e422ce887dc86967ba41f1f00c52edf5427640d12e6704fc17c0b825f552f03de00df016016c48613612eacde80024c1f154a2a669c7a351015d90ebf7462bc8a2519d6f9deb72bd672115403899eec7eb9495f0b6d8241c6b006ce325d9a79b4ade03010001 \\x07c5abf98b5fee80191079ef30a767074e269748b666bfb1323f723eab2e013f5ad39334ffd44964364a3130351eb9508bb05efe24291d568cd81980fd97d00d 1655143390000000 1655748190000000 1718820190000000 1813428190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-210 \\xffc93955ae6a6856542427341d17bed9bd9db3b4858ab48e48645d3e86c84698a6253da05c5f23888570103ec95dd92231fc8346d70d8418a75349ceee35e432 1 0 \\x000000010000000000800003b067fc6cecf9d885a70be4c81d08370e4c7a5d4e7c89e25cc535947ea3a706c3a7e4de11ad8081b90f81e099d7f0358856cf049fce68471f1362f82d7ba60e9d4c21fef999d308af7b2b836385d13fd2908dc40d922e62cd9754c6c6d0bd6f35eec42868adc4db5320a694406a480ed82a656f195cdeddb405b98633c3eb6b87010001 \\x5e30f85df863e399b3120d1e9b93a74f4023d8bbcae80a735c1a00550a23a868edbe01a300e18594be22b8ccd9657490840c32c12e6412274572a03f58a1ac09 1652120890000000 1652725690000000 1715797690000000 1810405690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-211 \\x012e9cd2c3aee45f6536f2084ee18789cd8e5bd273f12d853a23a3ba1571d0f52376368c74ce8ec7ecd3ee687b1e7a97070b31cc354ce6e6620eea28e5869629 1 0 \\x000000010000000000800003b861e6a10d45f7f894edd0830621c5f5abae90d4c684b782e518a63e228147fdc4418a5200c29f20eb1f4044205bdcbe00cc443c5acd586b1b9f0df570a8a248bc2bcbe92e2172719de7ad1ec4d4dacb156a53ccd6768a80b598bc31dfb5f07838b8be81026ee684d11d94854bd8b34ac4aa4f6367257f74a0d55610b0970449010001 \\x110fd92b3ef13407daef4dca1935b1817490fc662f92d2020adbbb3e160041d22f308fdcf4c160ed463e0d1baad17f53e9b180441a4b59fa80918ca6cdfd220d 1680532390000000 1681137190000000 1744209190000000 1838817190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-212 \\x026a3d4ac34e3b34cad93b4899579e6116004f8c831d22ed2c9792c683db410f563b840fbe05d11e998d19ffe68c7edfc530d70bb068aca511abb0971a276ca7 1 0 \\x0000000100000000008000039eb3e47a8bbeabcc882820b65f4af7da9d9264694b4ba5958641c26994c6c058af601c0b3ed1bc0886770bbbea5fd8f2d484697812b53b62018f9b3c935598f8af71845fea5d5e9dc7f98542521bec7dcbe1b05ce0faabc8e45ac3a714374050d0841e094fb3173cfd4992631eaebe2328c938bf7075746999a0fc4208a3b58d010001 \\x149ef7e66a005c98496533ba89a433e444ccba3e028bb2e3afb5ab2533ec67e2f1468e8901bc40e5ab012e90ab4034349777e08100471caf0b0c852052fdbc00 1653934390000000 1654539190000000 1717611190000000 1812219190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-213 \\x04a21689817343c60f3e7b435494792a2d7314d1ae6f5be6982f25335c1dcc42914670d144420275c34c1a82621108eb80cf72e06c0e6c22e3ce5249d957319a 1 0 \\x000000010000000000800003e5a6d29db20f0b63c8ce94b7a42400e9184f354bb2aa5198929539dab1f6fb6cb9e41e37728d387c8865f17b1a97d41505cb5e783e2e64039fd089f70bbdd092c436dc28a0611b4973391ca00073536c6d659ed7d7910a586681143f94e9867754f3cb984a0842034a1b3aa8448a7c4efb9941345f39ef6b70af2b2902e9147b010001 \\xd9998e7118909e4577f4cde4abcef79ce02eef2405070abf1972ca78e43e967b74a99f908af29f7d7c8b4c213c7eb7b5e8baceca341012c6c6dea7bf13d4d009 1676905390000000 1677510190000000 1740582190000000 1835190190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-214 \\x048aa407a88885c0e289a2c7a9506ddf4fc36bf2913a7533e3745cc88a900e061ac8fd3143406067e36946b0822875f00bef20286b56f364aa92ee4a1354c29d 1 0 \\x000000010000000000800003c39612e051987e499355c2dab4bddcfab5f4f60957847422b83e924062b09e281566295876c78ed80a9af14b1e4254f6c8e39d6b30efb8784c6bf109de4539a51d985b3263c88e4bb6bfe8fa05d1e9445e699297c9e906b2820dc1aa3533161ac6ab4ca2b516fd7f801958ce5b472b3e0a5cc38fc6c60612e2362c3d12beff4b010001 \\x30a68254b0780542371c59e6228209fd75c58f964b472a3dd5567920e60dde70acef1f313abb683f3c944395b4ec1fb108d3480dcc036f2344cacaab8c23f50c 1670860390000000 1671465190000000 1734537190000000 1829145190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-215 \\x07eeaefb8816aa8b0ff65f2bbe7d9e755384876331ae272f3b553a597caf769351d3a78e3cadbfb37688962ec0f5b5a8080ab436c86f6b96983072b725d24413 1 0 \\x000000010000000000800003be09fdb63eb17194d9562b7f3fd3c862fb07517d1b7e2d568d495159e149d149403a24c31dcf16b6edc696fbcf8076780d47af358129ac34d674bf234963b1bb9842182388c7e769db7841c29ebf741d1c6b5dd8e1009da5d4248ed404a08b2b2439edd8cfb0578c2e730a4e7fd9c3d7d5ffe939ee40c397b7c86da5acea2139010001 \\x1f373dafac974d390017493590c3e1293ae3f18060b67204c1141bd53b9cf71a61ddf8d1bfcfbc6a838ebf6d36d233f33388920e0751c392523f71dd0601720f 1658770390000000 1659375190000000 1722447190000000 1817055190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-216 \\x07d6b2c4c2c57a9ccf5f68b016e3905e56ffde52d862643ecb0e938988da9337abc2115b4e3c2d8cae83445bc95bdac421d67699055332fb6ec8b5dcbfd578b8 1 0 \\x000000010000000000800003a687c8b1880623f5cbbfbeb2c4009e2c8f1337d65e7b42cf1e7fff6dd85dd797b157b0c6c47b43fb1dcf0551625523e1a4047c696efb0e59ffcca1a58b28e5e1ef571eec579854e8a4c03b392bed056f293ee0279be718cf36513396ada2f14c11c69d61d8a6a99a09ee8a253804843c359048206dad0a10528645c86eae3977010001 \\x02bd54ea040b23b39c05d1ed3219596a136558698f6394b628ba5e4f1b496f1a630611ed9e1a04f62cd7857ad0d3ed3841b5bfc50ab9fc99fbedb02f55f4990e 1661792890000000 1662397690000000 1725469690000000 1820077690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-217 \\x0bea98efd2bbcb92e38d267fbdcb7f4c0cf029e41d7ccd9104474a5ba5241a5b0859e635a43c32f7c894dd66e310d8d9d42d5c4556d1fbf6922233262e11492f 1 0 \\x000000010000000000800003caf28b7b81f2dbba78bd8e6f70a1bc4e261d3d55b5ebfc9992eef381a7f62e76f27614a4b74e72a8b8d0f7603d58ecb76f4476602b28ec163dc60b70b3c5b46ab28ecc5b26ba21ec569d41fb2ac6f0469290354b36965d8bc998aacbf77bd041b88b8f39bcfba701c332bc66b4652a1014b97b29b32fbf6e6e705e52f3323a0f010001 \\x5bb69b653bd94b534608714c161afe3392445496af4fdbaf64119c4f21d1191fb7d910ded99c59efa969318daed7548b5ed1dc60e598bfdaeccadee6ea647108 1659374890000000 1659979690000000 1723051690000000 1817659690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-218 \\x0daea73c18e642e1bd15cd424865d09245f6b4d7e50514ed5681ef2e6e0cb3d7bd3ca789c5648e2c0fbc62fc795e6bd6c09cfc2005019633144217ed0dd58631 1 0 \\x000000010000000000800003e55e6249d8aa4eb9e51b1b2f0409a8447380e515b3ff9bf9443c0fb83301f8d69e4fdabda03bd6ab84011ac34f22ebf090f1f78c2be8abd01a641ebaa978a5218eeec9cbb2fd95660ead49faa5c09b91a1a3a1df0532c4a18ced40797076bc8fded00b1363bdad706d21af404a8f9a60576e8654b3089042ce3b4a80aa07f0f1010001 \\x2e9ef52a54b704147b2172f2cf5b72bfc479bf61ec98d40d03b3e0cab4e051b75ae3b9860333720412872369836f3e9ff32231c2e48f3272518f3aef8f04f50d 1676300890000000 1676905690000000 1739977690000000 1834585690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-219 \\x13aae4e9a0dbb470d6381de92c6fbfbc7637e26ace71a58d1e00b1396f684372f38097bab6630c8ab3058edec9a0b35c22c6d9724a4f581eb4b4bc7c375c0217 1 0 \\x000000010000000000800003e6d10f7984296c984cbbb3ba411444fa2a57f494de5618165dc2448be6dd92c642626726dd3ed757c24088c409b8cf840c5b444534b206d63ab568a576ad18b8321149028c7219a6914b7140c3770bc7bf7938f763b47b20a088fd3335bd152af7de763ab0987ce821dfbbb35f2297617d9397c0d96ad86ec1957bf345b3aaef010001 \\xfded99cb1718b1de2fd4dcafd3cdb14bd638bc7fecb739592c18118ebc11da7b5caaeef9e7268708d3be9bdea5cc43ab3b808afb51ddacaa3003dd2b3c9b5007 1655143390000000 1655748190000000 1718820190000000 1813428190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-220 \\x13aed10e8b3052ff31febfd3edc4a0918fad489ecf73f84a79e74360330405a26b208a22d6868cfce6e06602b907579366808f25055b7492f3e14cb04a56ca53 1 0 \\x000000010000000000800003b4b27306da3fc0343f23568a1a1fd09712e7f6e49f57d7e1261833c21fe8eddcffbc2a965ac997bb252912031904b088b0b18590464a7bf6ce0aded6e3b707303e2ac7ced958934dd5bb520ed02b2d7bd7c35dc8d29c22951c28c7615f6ad1f2ae3f55ef241d19dd10592f328c129246ff8c54e0736e8c4b47a317dde6845c3d010001 \\x64b8a43e387ad600905136745956a574ac9551ec4fa1db475241b2f64f14946b3d230821060ee34544dfdab1b07bde53490f55d1d07d1d28c3f3328444509a0d 1666628890000000 1667233690000000 1730305690000000 1824913690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-221 \\x1682a016b14d2c0c3de009d18e1baf1b1ce6ba574b37bfb477fb1c00450d3fee5fe9d48a9c8f0948b02322997430dfe3be90ea43e15424c013867495926d8907 1 0 \\x000000010000000000800003b5c4784d4c6ac1ac6031a1072ddc5ce7bd1b0d999d1a662c3b12a045cca2616acfdfdbec92c0419c5d6f81821a98f98df6066b435a87c37cee036f25062e929bb63360c971696543e07e5b015024035012cd5d490123686e4d949e1c0aa760fe737a81e99e810ef16552b59cf4394f217714bdb81853df21dfe7a964a73ed5b5010001 \\x4cce3000081e5eaac44229e08e54a15686e66421bef2aa06a84f19e694e6a4e132664e3614dce4059a1b129dcdb72a542f30c6a748e564b93f21a8c6d0f65409 1656352390000000 1656957190000000 1720029190000000 1814637190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-222 \\x1eaa333c50483baf1087d3f95a2dbecf13bf597cb0d0675d3d89e4b7d15b9d73de85a877999c1f95b37fa6584302f6b283070c749f3d5e1f4b9bc16a9b805b65 1 0 \\x000000010000000000800003c02255621afb8462b0ba03c24aa3d13375a9c6d916cafd9a453514d19fba23d616e052ececc8fdaa28d6d7485f4208d1a777f86d9a37c2f2eaa2d56b9e0ace7c65541ee1b4f322449e7df6cb484510cc9207ddab448cf64b3dc65d15e45826e35c83525563654537f8a2e0e3b2e3c7e9c8d94364bd72a72c2c35157fd0b059a5010001 \\xa9bf0d89031c9695e977e46701091787ea101552fe841f14b6822c6e7d998c4bf985f6f163f63af367f3d3ccb265e86caabd0231491fa35ebd51641f77b4540b 1651516390000000 1652121190000000 1715193190000000 1809801190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-223 \\x1f7a416d5d28afdd728756ddf08812686edef077cd8b625f0a81c79655f0326d962e30738c883727087b1bb6a1fdcff5f77b8de31402d39850b919762a15b41f 1 0 \\x000000010000000000800003b5524a9053f658d1aacbfc0ed5f495df35e87167cb3f05cbbe3caa41de645026ac944d8108d793f770b22b7de9f15ffaa1b7204479febe188d41705ee573d8d26580ac45ecc930828a02cd5d54e1e455e7ae96d113065845496cb4fd83a45efcfca839f9f6c503852bfcded90d74b6dfb19f2ce6895d7ffcb40c95133c174acb010001 \\x307bf94bf129dbdc84b9f1a2787a508a5a8021699992dd415944cc8ff1bbb6fa13242f30676f4c3fe73174bf67431b2a8570d31a43d4d60125c6b98a22ceb80e 1678114390000000 1678719190000000 1741791190000000 1836399190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-224 \\x1faef17bde25859867e169d33b987a73e5e5de7486b48ce04d3494ace69d3d0adfb6850d9ce3f0606f24c54f390237386ae42495c493125e1a07e917950f87b1 1 0 \\x000000010000000000800003c882a4d88341b87e6d2c99945785f7b08a204ee6d59a7ce3d8f5883f741a5fe052148d70ae739885aabd044cbeb46f131e24394fb1e3218214874b314570bd243258c3ed3c3f05c1ea50d8663f6132989c9525076f85b4e5999bda98f260f6c10f765defe9599a954c391fdfd07daff384d50394350fcfb52ceb263addb871b1010001 \\x877fdf7a100c752b61d65179882d5374303963ea5207ebdcfdcbef764f171a0fe889879de34ac36cbbfdad7b26a3b471f3659104432593c2ea0bbe16e357df07 1659374890000000 1659979690000000 1723051690000000 1817659690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-225 \\x1f569dbc3e04f09088ba0954989cf09c02a2b10f85c9ca30e10440eb2ec195b56d48804922fbd94624868367aa3c1a54c7f626db63bca431c2d342f939302d58 1 0 \\x000000010000000000800003cb401ec4b797b9f3eb0399f77cf11674c5a784ae90ccb5d0e916b3eee0f2aa8a2c45fb68c0316613ad74faa55428c8c9cc5e63977848938236f79e252a7e4dc6d1ad2205a7afd53239654db3a782cbb79c668c47417f1d16547b566ecb93da4752e293b4d733f30514e024574165dbc14ba9d39dffc2709522325754a3fdcdcb010001 \\x4f808fe6255eeeef823dce1f5b51c5e50f0f7621b92374b7c9bffa90f5db7816945931fedc00451aa929ac82eefcba6213b2160f4d38df12333266d0d46cf106 1656956890000000 1657561690000000 1720633690000000 1815241690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-226 \\x210640fb75a3b6802c7fb08f2c6228ba33c29f107bcb036e0800488ed5b12ae5fb073d64758a6b10f1d9621c1fe883d8c86aadf9f23b0db55569d205ce88489f 1 0 \\x000000010000000000800003c0b994a608b1bebff80038f36316f1252031ad696c42794a1fbbfb8a3da625732876b53f1bbc89d2f897a06504b262d0d21b9f4cd5bed4f371d8f5e98e552017664ed5b4f5b08e1bcbbfd392f3cb8b9940ed7aba45cf1822e96eca5bf23f9f83ae5d0fec51b263e8e4dad8afef07c7a547ebfff899afd5751936e872b37f5e75010001 \\xdea4e34319376e6cda272c1713909d9608713bdd2adc033522d296b402480165da6d304ae5bf92a68638a14f7f100766af82e7bdee53a98e342d46ac4255ed09 1666628890000000 1667233690000000 1730305690000000 1824913690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-227 \\x25b6b2890775f7098b7cd7cbeadcf8628363f747b10f11127101103de072e24e17da0e8f1b2abf8c0c7f6315cb149f442a2b3a85d431e7bf8600465c2ff7cef2 1 0 \\x000000010000000000800003c0b62b6a34d3cf492d241dff034c7e8d9176b97e8bab67b382a3685697658f316dca314bd382318ecdbc73eb4b1941bb6469f1ff829a508bb075effb5d624b771f05b555570fb9af6d4218a5d5bcdf395152c66bb816318c40c7f963c3b69df0f408199ccd3a414159f3cae40329a31656765ba0a1bc16aa1db008659b0e2b57010001 \\x6a3e43c9bee090e4025b72fd8a44a5b49e1232b41a94cf745991656667653210fc53576acbe20045fea7da2bbe4be6ec2469e2c6c6c5f2a748d00b0291348301 1682345890000000 1682950690000000 1746022690000000 1840630690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-228 \\x26863c7a7ada5f775041a39230dfb1eae8e63530251a4a455b1988dc1da28e7763b77e13627b64919359ee2a965ec3f4414593e0b5bc5e7754aacd33eb31fcf8 1 0 \\x000000010000000000800003e34af8b2dbdd44257bc071f7ee6b891db02f4235ef6d500fc9bda3b943e5acb60672f0a84e7b68a2dc41737d225fa9cb71b918ce5b820cdc1b03731cf9f375ac9080e69505b448657b681648e52ad5efc71db1ff43ba70def6baea3df168db380a0078a7b720864e5135c9cf5f5c428691ae4ada9a9e1e8fe38d720b18c4e8ad010001 \\x2e5923ea33ffefe5104f1f63a1fb384d41639d2fb60c5e871cd29ad4d92b427fb3ac850d6cb4b660f2a7a2f298873f6378fcd764afcd09e8bf0a9ca5d0d7f707 1662397390000000 1663002190000000 1726074190000000 1820682190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-229 \\x279ac1d3eb35b928d19bc8a7e15a96daafc535f8160081a584c322accbab28565dce03a1d4cb79b1602eac935ecb2d50b156bfd84508b44bcdddd4bbd7bf6bd9 1 0 \\x000000010000000000800003bb075e19365050643eefbda9fe562ee69173ce0fbece475fc2d70e613fc086e1f0d7084d45869bdfb7171735a78b7bb59471ec255018a6f5cdb13591961c92bb644601f51ad4219953c9e5cba8072972880c950e38c3e64d182c96813e16dbe63c3615dca94e1691685b1ca0e90bd2eb06c309ce3424dc95db76e5540d146623010001 \\x2d280c0f5e8e7d8b6ba5d8b70c968ea6fd2b0c207453d85033a06de3e678b630915175d1e65bf7f029b9cfff2ed962ef3d814e17ef38e075699e0a6eb4669404 1663606390000000 1664211190000000 1727283190000000 1821891190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-230 \\x2a9ede394457aea44c6514b7fcb567d92a3a9e43e19fac3461ec6daeef4c9dcc53d80ee5a60bc4ee8c1265a4dcdd7955a2e320772047121c07a56357b51a243c 1 0 \\x000000010000000000800003da364bb739b4e4936261248e05323197db9a8a23862a1f999708012437327b186ba67cc44324c14fe2b1a498e0503d288ad7ac4bfec80ab56f931f9fa9e6d66f37b5251ee20a9cf28d6d3e750a5327e7d9b2432261f3282eaba031838ef2aa145ea951f74329a5ce6722247c28926c852e1e8e8912dc5ade3267beec0d6e0bdf010001 \\xbf8de60505fcc868fe82b9dafe79134822698651f659e60cb327a4ddef03fa55e2c90dac493141541b7528933655c998d31e5acee02400541c74c7a63c4f8605 1675696390000000 1676301190000000 1739373190000000 1833981190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-231 \\x2baa2345537454090ffc2734f790ef1c3d1462bd867c617b9d01c27daa1a25fb604306f6bd5510d37f9ffb6dd4f980ecd3b2918d55cf794757704384e9ebf2c1 1 0 \\x000000010000000000800003c6bf03f6ef2576fe9968a00a0f1414c180945540712f991653dc1104f70dd82b1161bc6a005dd097f1f589a2a88a47f08b86d90ac4fe7b4d74b38bcacd2bf0e9f254a9c4e5ef92e6effbb37531b76541a23f57762f7562b1592ea9a361078e944767485d46b16fff93c3c454db6d2613074dea20eb8aadbd23a55e342dfdc439010001 \\x07861f5a76ccf02c42630f48923aa967f0cdb6f1476613617ff2579d886d230d010aea507ae115fb0fde426da3a041c07f41908932e8b78272165ed21ba89508 1669046890000000 1669651690000000 1732723690000000 1827331690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-232 \\x2dda74b1a0f3de8f8374289200921f8f1a9f8932cd05325bfcc798faaff4f6fed7dfc1dc3e3c86741c1e8ae70802660d5730214b7e5e3af32d79ba627e510896 1 0 \\x000000010000000000800003d9d1589c68ddd8510be95375e13423b0b3f4d600a0d2bb39e49d1cf6286bf7ddbe9d5744750eb103a58394eff6fe031661861f3ea2c69d08a59389074294ce0cd5c7e6bc7e23db40e199b338756d37e2999427cce2d7bc9f3e86a2f266d5d7eb20f45fb79554cee9b4bdea03b46092f6ec48f4f457b8a4afcb29796df0295e3b010001 \\x28d9fbd3e5cb57ec2e5f9269f94eb6544d8046aa0a4f6137e2ffd3ee1e18e227e5d693414caef9664d1de4ad57c5cebbf8d4915a82cc39e0ebb1a26628ef1f09 1672673890000000 1673278690000000 1736350690000000 1830958690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-233 \\x320a9668cd8c2ee3954cdd0abf30a0bbe59fae284f2c1eabf4a6e9f191cbf5a97fa8cccb56c8af0ca337eff2ec83e5863383cf8ef56124a672330d049bb35894 1 0 \\x000000010000000000800003ef8ee82387413b0386c31bd16cfa52388f5bcc2f863a2f4b75cbf2737b7e8ffcf71ba00027c49dc15183c2e0f36a7e0d6454a0305668eb671e61571cd95b05727fdf4770d08233f2ab48ee66dd279d08c9eac87a5b55db1016d70e0e71b63382965c105e8ab2b03a86ecee2fb5d04173f22eba81019f9118f55436d1a9515a73010001 \\x53b097665fee960bcfc017d3963cfb189ea65d86413016ed2dc282e98453d5c2c82466efb91a8ad90bbffc028a552023e3727873b54ec6ff45216e725ffb6c0e 1673278390000000 1673883190000000 1736955190000000 1831563190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-234 \\x33caa548352791bfaf96f49d58953ab2cb3a57a6398097056559cfb18bd30b14d031d4ad69ce4c561e2d525f1269ae5ee33de738b8c80a5a25ba2fb6ee2037b4 1 0 \\x000000010000000000800003a5743ce05b05f4c98dbd1a0ea0e5ea080e406003212ac7373ac6f9ff119cfff1c2290cdcacd1144d0bceb6e34b396f7eb54011b390c31dda70f37e4adb8dd93e0cb36170457b7f0f91434481473284119cc13e3d66cc1e7509bcf06cf9da6630a7615c720467700172a08ea8f90a72f16e882eb7ac8a77e33afe927049e7b5d9010001 \\xcad3f0379688d61fcec06cf01a5409a2fa1a13b9ccfab14ab23d076318ccefcb69a4d2a6c936cb4cececc36e8560a70b2dbf17c1b3d1ad46fe016ba40339fc0d 1669046890000000 1669651690000000 1732723690000000 1827331690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-235 \\x338a826aada88bb6c840e0f45e367131b80ede7f8ed5134f01da3b113623ae7d10f0e7476b07194f73ed616c7f6bc4ef465b251f4e480647b8cb77becf45f4cc 1 0 \\x000000010000000000800003d8bee65341f6b5f2bd90e85b01775853555d41f6aa81e37d300646132f6cb0e4b587858c09e08332431dc97f70bf8d65e950c35dacf7e6c831a9d74a3838bcdb7281b88f132e4a53e952106b1c0f0e1b7fa7adeacceb1110b78b78199d8f81bdbc99104d8ddab39b2f888dda57f9b5499f6450330d9e880294db9a27066a5f13010001 \\x80ec98ab18408bf9f65c1415e4d546102a9b74d493ef1012aa3044c416112c746a4f0871bea7886d3fd5d7ddae5e29696465559f6053149649ede07657c2d30e 1663001890000000 1663606690000000 1726678690000000 1821286690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-236 \\x38de80e2cdc295644a2154036c36c2b7f44c82216aa298ad1f6205dec99e9c4b6f321e1be9a793a254be3e1ec812128e0bedf4abe375fdea48559334fea82bae 1 0 \\x000000010000000000800003d448824ed087b951f464d447d31b82c44b75a2e389b92ad67969d7f7fe4dd75551b8079200ab802b98686b07af45acdf62ae5774213f24a22f7b8ac0a329750b5605242e37e21a84a4dde964f4c7413292105f4beaeda166f785f3c7f6630ea1ea6ceea98f65adcf058a17601d8622232475668df7fb2a059a00f6d32d341371010001 \\x48cb80aad6e504a7f7cbd0d95bafd904f0df6cb0862b62f9993382b0655a12d6c4ab8960fbd39aa9d1a7a41788ec608e0c415ed90af6523920e24c5859877f08 1660583890000000 1661188690000000 1724260690000000 1818868690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-237 \\x391a4511cbc1c8f12e70db0174531c991a7207da33ba5a0354872b26973074b302b81818c87dc339f4bc9088b144972989ee23edfcf225cd9ee8fe4617c821df 1 0 \\x000000010000000000800003d147f4afd0746bb15b03f5e0e69949d2054db3633e2a0a7d7ddeabcffa6dfab1e7ec25aed1705c69cac0bf93406637b782391c9edaa324aeef728775399e082a5ac53beb334ffa623126bd60f4dfc0a15dcc77948f9bd41cb8781d634249238b2b3222999e61c676912d87ec2cfad588c2236eb62518b0f58f0698e62cac7ec5010001 \\x064f1e1f198d7d8833050d01d8997b52fed5d0424d13be41a6f1e4745d8b5d05027017c77c4fef6fe784c6faac661c387680ab030529939681355495626bf907 1673882890000000 1674487690000000 1737559690000000 1832167690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-238 \\x3ac2628e11591c638065cd59b4766a87b850b2b2b014791eb6f947c74c2d005dbf5bdd0859bbcdd3c89540292e4b9361b82f11872ef216d59d01b2875d913aed 1 0 \\x000000010000000000800003d3be496ad2c97f161a34a46c461955d65cb9415e4bc8106f015027c5bc1653caf6b4b5c5770ae5ff59f54957b1a4a2bb6a4cd6553caf627a644068e804c3245268f755f534a91f433dc2052b0b4c12ee58d297ef676434fc9687621838eae1aeb50c9ccb7c10598d2fb4434ed9649211e9b521b586835670845e6b602295807b010001 \\x721ba89732cb6659a472a69198d08c1fc317851e7a01bef910a4a090ac8bb887806ae082ec5275f179f4b31f79f54a7f742dc0432ca136d28668921f60d3ec09 1664815390000000 1665420190000000 1728492190000000 1823100190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-239 \\x3a9e3e00345c25460efdda05ee68375bb36e0ad83a46be19bc147239a517257d8f87c838b6719fddde30fcd7b27fd967dd3f9199869f0ffe97301776e225551e 1 0 \\x000000010000000000800003b8fcdad92ab2d4e892bdd50ddfc2b7213a955ed64ed7a25ff3fd46689b4d70e2e436d19e96d072ce49b3f0fde64265c610f93024f51cb3ebd3d8a8f8b40a73798ff6161004df990140ccb210e3d2b3243e54e0e8654555aa4f7995b27e087af1f5f9b39072ef2ad9c7be0494282b26bd4a8d8c7d1839233ee11ad253febaefa1010001 \\x15dae91d9731ca621709b60df56008e9936a1dbd635fd4993fbdfa728038b0db38d4ffb0a1ac85e3cf0100ad997219fcc0932f43b6a290ab2da39ccca15d5f0f 1677509890000000 1678114690000000 1741186690000000 1835794690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-240 \\x3a6efddd58efe1693f69bf72fd7129cce61f185240dfbad30f876b98d31d24e997b9b26935115daa2d80a1c4692575839d1601ff7a5d030fee3b320d0317b665 1 0 \\x000000010000000000800003dea17f9290ede1985094a4c366d88b366debf9a6265052f3d23563d1204e475b9cb25808b9450ed1315f0c80f44f45f3f443cdad5a4aa16e53883c23087a2f403dc81c935bc6feac2f30a49d6daaba46eb8c57d595f4b3d4a772a21bac21f1a63f8ef1690a958444536ee599153a7707189788096964a59476a6de8fcc2ca725010001 \\xa216400895d2965bf6b9e2422ab1058d3912ba874dbecb11333418b621e62ebd5def120c3f6972fa4d77e4539c7d56452a87cc5627345c5f84b3aa93efb0530e 1679927890000000 1680532690000000 1743604690000000 1838212690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-241 \\x3a0ae4c77d90d5b3aa68ca52cde90ca639cd009decdd2f34522a76ee573e9bb38e7e55806591048e4a1c9ab61d53d77f1ff31c3327b7197c93c5037cd15298db 1 0 \\x000000010000000000800003df042632daaad48360a3b7d436a8b198e348ba384fcd16b4d2782f0835b51962cb6275d4adc81779e7ef1610a9147f857b34b99d7f295ba1b6f619e6076931ea194f7123933631052515f9185d2d7165a5bfc8cc25413ad1048ae06a12034f3b11036c0c2ae196ac316602ad533864915920f2872f0f8c5a3ba988943d2a50d1010001 \\xe3df8e508468a987b8c4d3cc13026b7a992d5abba9f7062b06a5eae676b0790729eab65ed4ec63e1dcb2f5cc4a8bf45ed0d302fce62fdede5323e20df210dc04 1654538890000000 1655143690000000 1718215690000000 1812823690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-242 \\x3a7a864ac79eb92fb56e13626a4f795ddb8dea82a060c1d4fc6f950e3c7eb2693f8e9902dcccabdeebd0e400b51748c9bc36eeca0eeac45ade3fd29b03fb5df1 1 0 \\x000000010000000000800003ee594ebc8dc6be625ffadf5001cd17cd79bbea6fa7f53a14672ab204fe770dc7f2d25ba026502c62d1c6649d2c313a94f249d54b18f505979e2c58df952d8aadb77831aa16bd8a4a79a62f8011f8a2758f1fe7425b7ec5951ccac507c0c37f4ca464b51213a701bf5ff58dbfc313690d99d4362c539f9bba0b0f6c840e37b63f010001 \\xa4f295ec4cb3ec9511835f473efe7c0b1a538036a15b208057a0dc11387e8dcacd639bb8f8a49f894a74291e41323f484d9d8fa4990c4899e1b8fb444575260a 1663001890000000 1663606690000000 1726678690000000 1821286690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-243 \\x3b2acaec6eefe7253ccb273bad4f76d3c037f4606b8f36778eacd46039228347ea178a0e5c3324fce9192070b3a9854e8a48c0ece9f513031462f9ad0dfb8b7a 1 0 \\x000000010000000000800003b7fb823e560774bf305202ffae92b80948058de35067c63bedade1df81413f5be29ed7cc470ae608cf4586be99cdd2e5d5f074e8cbb1c68a232f437dedafbd3b21121dbf0418b80e3502389b71e13e73b83a7941bce23cff5bc2e0cfe5ce9a95cdc4bfbb22718afab050aee635dffd1fbeecc94d45d99b1ed038fbdb8b81bb03010001 \\x1e7e7417b8c448684230c81982a97f221479c6a27b8b56dfe5f74a94228113419564655db0ec27ff65667f9331d97e2a557bf9a3b7c266f141667645fed22208 1679927890000000 1680532690000000 1743604690000000 1838212690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-244 \\x3f0ef61b4206cc211314b74f11cc40377694317affb2a21932dd8d50b80abc655e91b4efc028860264f7447859a5a5180e6fee26593316d560845599fc265bc0 1 0 \\x000000010000000000800003eaf13c931ae50d64e7c13860d8f7bd493bd9fbde114221b456565cc1bb309b0f5180265979208f4416435a6bc4f71a6442da0cd29356959acdce070f9cdd5473cb2e6a6bd937889ac3d4e871597aff51caa387afcb59754766755b77924634f9bb23a26068be105cc2f17da24fe60a8f19c9ec56acc737fa525c70d5638ab2a9010001 \\xfb82c5e862900607de24103a07a0f76323480c019155c0b68fe36046966336fdfad565a6d3a647b489014c4cc42bdcc5ee290016476cb9830d789233bd2cbc0a 1652120890000000 1652725690000000 1715797690000000 1810405690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-245 \\x407a11b5282e5f4bbb5b6a6d0e164e50fdd155fe1531300eac5c3281b87358c952b51b665c82f0213f8fae7f594a0462a6ee1330336ccfa1ccc733e6cc36d47a 1 0 \\x000000010000000000800003ecc2e7ce66cd5f6c5db92e101f8645bc075854149c16139781e1211720442c6c1fecbaba13060f3514aa864b079e9bb3cae2352d079ed88d86880f0eafe1c256b4a5220da6fcf0c8b979ee52b2537162c3474b917572e5ddc18e58b34bbc600302d9e1d2d088e2043756dae3c009947b980370be76dbf0161f213b4a3cbc02c7010001 \\xe62942762e47abe1c5d8b0b5d3fbc5d67415ceaa25c2645b69647d3e93f60d5d84be1a78e1c4bd1d5d5d47f5ed4e4252fd9dff84f3e0c6aeba4982e022460f0f 1669046890000000 1669651690000000 1732723690000000 1827331690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-246 \\x41727ca0c889f466a6cba2fb09885899e7d067980142206481013052d3dc81bf086017f725fe14bd05df413627914d8228c48b4e79b3af30628893128989caf9 1 0 \\x000000010000000000800003bbf9f5f537943565c0e051292a009119c79db240b1c3faa8928fdfc6f30a97abb5f23ccef8db5fbade10a21eaef9fdad85e293414175c0774a3e4e036f5769c0488b576f27239fde9a106965e33f11f511c9f888864d487168c9cc1488992d924084810b860a66c5a1bfc53279ae9dd9773966b644162bb9260e37f64aadb3d5010001 \\x293c47a179110590743c64a135360cd55812954bb2dc4d7ffc23db64d83a27357b8ada7b87f08d4ccec375b808a3aedc15be7232d0a270134062472d288a9f0a 1682950390000000 1683555190000000 1746627190000000 1841235190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-247 \\x4392288f1e0a315910a8077a9b4338558b6300e47fb8b893c8fe7ef24bc45d835338583277560b4952fca7ec24ae4e20c3b372d66e8ea5d4f015cb5947738512 1 0 \\x000000010000000000800003a537a8f15b52c5ce1ae7818499ac55d9bfe77436ef260c20c6681048ec71c6179b5a633c1ff5031c63e9cd23752b4d6ba61ad3ab89d98726ec38cbd96491d7fe92f1949e640c0ca5b67ddcef1f6e70c4e76f5826e1a6f1234f62b4dc6257d8948c5e2b3c6568b8111033152d01884a3d8e365c01df96a37bf814b6e7f7aa787d010001 \\x2eeb437fc7104b8ac22a30222839f74cdcd66d4f8c39fd86a086b4d7ad4b2c7a6847e4ba42f4e17a32effd50491a7637e8a10438e50a89fc882b56e1cc2e8b03 1682345890000000 1682950690000000 1746022690000000 1840630690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-248 \\x45b6aef94ee6962310b798d6f34e2de702c7c40125af8798504f7660ab49339a95cdc570387851d2f27f4e24301276914142271451105f49e08a523ee23d34e8 1 0 \\x000000010000000000800003b98da0d69e0da315b5c21d3061f1b6b8035918a42895063603fdb9a11d0de002764911caa470ad2c32382cf2dbabb654dd0e5b7d65d163ec07c38f06dc39b59bfea22d65dca846e0aa01ba75b5052bf79c9ceff9d2822265785c5359aaa8433275ea06c0ed49baeca5da556a193b8369e2c0e4f668cee7568b046b96d2e6f069010001 \\x5b68b324eb259ce3f2a778e7d49d33a31c1d5b118202a7521ad7d812fe55a6dd3de8cd92afe71dbc19219b79539e6797673edc25b4586abdcbc4cd98abc7130a 1673278390000000 1673883190000000 1736955190000000 1831563190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-249 \\x459a86bae8b08c9998b1f7b88cb1abfb4f53f344dde949706ff7fd94de6c84ec2eba5234bf2772bb553156ba1fd4a5f471cd8f8ba36d6a1f809723fd17607ead 1 0 \\x000000010000000000800003d35f79b60ad123423b770955ad1e8271ee827135b1645049261bb9850d82b953bbf47967ec5bfd78b3f9be102c215af71223bd684aed1c4b21c31ada54737e10bc9c86f5a64159386a4620068ce88fc25468b1ba2859e5bb8e9705e34912a5e3790cbf98e03878783bfd9dd4b9bdc55c0825a4bfb4af3d09c6461745be4b1add010001 \\x57a19edef468425594fc49ee6e6018febe6f460fe3e6413fdd472ab82b1085b2ae9ecccb71cb726574a390b9f42f76cd55e585917be4eca95e15650f19902b04 1658770390000000 1659375190000000 1722447190000000 1817055190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-250 \\x46eeb825c01cde9a3abebd74aa42d69a1f5d4a6db49a40a1d6d6dbf02b78cc93ead217a7d45417d2abe3c5ceff695866a265da2c9036107ed0ef48c4ac3577c2 1 0 \\x000000010000000000800003ce02ade6eeef68c78761f8e9bc01e79f53fea3b2e77f083879e6355b5671a6a0c80f619edead6fa60199a2e513bc5c32c158b5026b3355100244c159c1d5ef164a4abdf150c2121f98bc6c6597d0b1144e265a2f8bae9d5c8c34924c8f81a5d533c658f7ef8c7509e6b203684e5aa74cdb1cae8148513fe6de09e80cabe29117010001 \\x6bfbc19b8dde109a9e0867d047d21dd2c7c1ac1c21a1eab8e76a966994a01cc7d6514293b32504fbf30007efdd1ad4d528ef390232427bf3f0b2e2a0b603ba01 1654538890000000 1655143690000000 1718215690000000 1812823690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-251 \\x49762322f1ef75ad0ba091dcb991535b7e7c76fc6ad60655796785c2f470f6ed1b7f65ef6401a7707116dd0d6cebd594e51c9f54b300458397f90360fc88a0c5 1 0 \\x000000010000000000800003c3562caf32c33688523c846a4628d3fad061c7831098f95f463b067c887904a5d147219fe3600ed47f8d28e2e9fb4982b0737e5b6747db5a9195bacf16a7021f9221e41ffb4178a80140b7a7982c04c74b5f36deb8609ba767543066cdabcdf252d6cda9795853bab3bbbe5dece32650233bbd810663220504e8b2cf850d3715010001 \\xeeb0ea8112fd498a68da68088132305181a3704b3c628747b6a9186a40ff2b421470be60c09e1c1bc9d7cf87af959982d3374068d6ae5dbc9b51bdc7032d3205 1677509890000000 1678114690000000 1741186690000000 1835794690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-252 \\x4be698b9e11e89404928764e9b46e43fe0802aec7f0e543f1c898f3415c804a4eb200bd988185897a7453b60dc07ad71ed24395dbabcf712bd0d5050e6c2f454 1 0 \\x000000010000000000800003bb8b242d8c9ccd5fc820c98cbd59759052609e4b15d9de48ee1b9f144762faa7f0373de9e2df5b508f080b34d4e3bec66d96412fe4a782fafb2c8b9722822cd916d004b1d4c1ab116df4bbae49823dc83a7b89ab1c2ebfb8e49a3a566e75a5e38386561ab3e1327f05dfe9292a482e41ac832282aa9a8a1a95079c63a055b309010001 \\x4e2bd69869c4b79e952458e1846d506664cd9d2e7e4cfc3be953fe594ea89eeba6d239e5b1744535b14dbd3e1b32dbc4852250b84b479fe822ca315071df7c09 1681136890000000 1681741690000000 1744813690000000 1839421690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-253 \\x4eba5cedd38173eb07dc81e0f7272b994fa3a2e7d0206e5e386a2c0b8bb868e9b0e3fdcc66e9ec785f8514f4f5f82d12e6a3bafcd8aa549dee799bc7fbf02d2e 1 0 \\x000000010000000000800003b4eca8918fa96115ce36ca2e6c045b0fe26c7662e9962edbe28e0bda4263de3d9d9ea70ec5efa1272f92a99dc9a36117f7e33369ec006f0c5b2b3d7399ba0d6969dd80472df53c49660ca3775470c6b84ca07d14297d8b99298300eda0cbc057e4f7c2843603fb97da1773206eccd06fc91c68453ebc30ceb75862f57919386d010001 \\x9f2621799e3344b70d1dbcce35eecea6ccbe47a7d0ec1c47b8c67e31bc7259daf6989dbe06cacb9f24f0191cec00270315ec61fed875c22e8b6eddc8b910f706 1672673890000000 1673278690000000 1736350690000000 1830958690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-254 \\x50466bff2da4d46552bb7140283939e3ec6f669669234f3868376c3e9061847e7c1539de15e5250906443c7d405fcdf8fd82ab559acf7ddff50d8d60427a4010 1 0 \\x000000010000000000800003a5dc9cc9c8b02a9e634706792e471aae5e12df0b5862659a5abb7a17c5117ff79b989adcf0501bff02cc88671aabc05b1ce5eb682e1a39043aa3dba0cd90bedd10355f2cd2e54384f85937aa9e9eef988d5398d24a2308f60b3117c9333d014f7270572d2f3a5ed0d9fbcac116843beb5def5af3b26de1aa7620d813013b92c9010001 \\x132d680524ea3295ed9be00ad9bc1d7cfe49670e44239684f71a6eca200dcc00bc467b64f5df170beb4ebb9cc7bf4b7a8e484418f50d52151518f5cf7fe33608 1681136890000000 1681741690000000 1744813690000000 1839421690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-255 \\x5282d2868abf5ab6b6db0887eea83b6b3f5576dac6239c8c4786a16e483dcb686869d5cd1ac3b3c96cb3f1cf46bf1277a2487926c1034cedf94560dba72c685b 1 0 \\x000000010000000000800003e2abc7ad096783d518275fe1409394698aa7b48aed04965c899e12811ab18bea275eff9355aa20e650fab3c6b40a35faa5ce042ab706e1e73fde76d15927efd45dfbf7a33d8c04ec7cc7cff96dbdeb3c3d3a8f14ad495d5860c9dba03793a59899a3451a38754408569bb7e90ecaf09e5eab65b0c63ae7aa4a087fec90ef6a39010001 \\xd9deccbeec6c6d71721b3d2e9e7b9f64591725c71d91092684fa385807cc32718713efcf76048e64bd44a4f3cff2f7e69668b755a226ff52223e6710bf659b0c 1673882890000000 1674487690000000 1737559690000000 1832167690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-256 \\x54564544d3e1ef5c9c0242a5db9496f385a1140ea2a534a70ba3ef215bfea0d91bdaeb0d4f639c1d75fb1a8b836ed2f15edd99b5f637483b4768a3f6f6944e88 1 0 \\x000000010000000000800003adb5e3407893101faef42eea3bd35796c16a3988647b6d2aa7b86948e545eba929ef82610ca3c789dc2f4fab317a2fa43d7fc0cd9d3958a79b251d686f9edb504d70ba990e8fa3fb887586464502485bf761037f15161bfa08e8ff2616bdb0ae5ee5605e400356a709fea0c06d1555b785cf5fa2faef473f6bcb5e6697254d6b010001 \\x30f7ce9458ed95aec05b6d98dd791fb0d1b4e4298ee350ec38baaaf20b6e2b24474e4e2095c471f097cf453b201118ca1b4af0871ea202df16710b46e1293b04 1677509890000000 1678114690000000 1741186690000000 1835794690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-257 \\x5456a7bdcf0893e8b2105177899d58942d92bf9541ec45aab3d1d833f50b759581ac50d702b0c166482e526eb7e29c84101b20848c525375479083e70b3ce15d 1 0 \\x000000010000000000800003defef28b686b0479e085f7ffe14b7577696cb389ff3d96b0018e3df598856f3e2ea88fb4a4b0fce82cc5424e5817cdc457c78865911d9cfe7da0bdeab5b1fcc0d4db93947751d6f0202a11a48edf39486bf725ae00c094138461b6f3fdbbcb7475be11e66e0b0333778668d919704306d77cbd4a744d6b537db975a703befa33010001 \\x8b7cebf880585e8655ffd87527a24df72d9383169a0ac8edffbc5a77b4fb37879d8f321206b894b75607c705e2357b564beff518f7342fddcdb794557514600f 1653329890000000 1653934690000000 1717006690000000 1811614690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-258 \\x574695e2e53eb43b59b1aa414596ebd44d2321962a4d1b0dfef76dac6442ffb3e009e1b0adcb91935c3f06c2932b04e3823c0ade3cf36a4f1fd8d5d265bc4798 1 0 \\x000000010000000000800003b197f5ac349524f7d36ea816ffc6378d6f9cdc0fc9cd5043529f50d09a2b7ca99dd2dd3ce890140db967d9a9a780b41522e8dbccb4990fcf63f22519418f3dfa5d131fc4b6a6ecf6dbb391b8763b5a4f4e3cbd78ecfb166057db8a6207ad7eaf1461f1033cb3d4301188f4d5b28c96470fd016d7a1a05bfbe57a9d8eecbd73e7010001 \\x13aee9f506737b19ac51b641c76b0b0df50cffa86f2d696d247dc0cbca547a0b01174f529e11eab0003fa2940551d36d1500b9479f8a7d8867618936c08a620f 1676300890000000 1676905690000000 1739977690000000 1834585690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-259 \\x571e7d86e6ecc7474dec6d8280aadf17e79833bf90cb5beddc439a45f741aedc0bdc74cecd317e853a1aa2d48d2ffc204d8b820ca2d3ff82a785cd43e240a64e 1 0 \\x000000010000000000800003c5d9828d1aff53038a1ebfea50987f629935782a9415892f33e7548baeb86d34c1533fa4389c92134c931e1091bb08f90971f07d7f3bed297614f1e11e67e1aceb17273e6acb3b9f1dc0da242412acb3f0fd686bb1d1da8329d48f3a8f5fcf9ff52a1505afcead2b6c3c405a4b24860b1f54fe6f8650184d3ffa1eb3d53bd4f5010001 \\x2b83df3976d2a73d011462e0be4731eb0172f7da7a883ffa9080822425e122e0bd544e2dbf17659acc64bc494e45ce81fb393e665f9f64d774d48a0520eb7402 1670860390000000 1671465190000000 1734537190000000 1829145190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-260 \\x5f8a0b3a5e299104dbf2833e17d7f08d4cbecf36864e64f5e82c876f339bf0bd882ba47fcccb4684da893672b341524d67b31daf7699412b4b71b70992312f45 1 0 \\x000000010000000000800003d471aa910301aeb9f108651b9ac940012cb6a813c0b2e63229a5fa35670ecfe3bc642613b59994535adb5c458a73c002cd9b37367a0f5866baa7b6b243a1c6e8f5a4a7c4e39c6d1719d25d9092f1625093f6fe010fa7af222340cd00ec8e3be2f4cff3b5cae9cd3f3b2a453fe601bb53c77f16aadd1dd5dee4abd3a60bc6be89010001 \\xa1bed8989484ef851bbd17be10306eb3a6c8773826176fdf132583077cd366db8542fc1233669ea2650c366953c1936a50d7cc93cfab3a09410867a2ee2f4604 1682950390000000 1683555190000000 1746627190000000 1841235190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-261 \\x60d26a427012c73221356cb63fb028c520c8d80acabfed19bb8400a710726ff515238ddb7e8c0cb5b559713a2624d2c2478df68d432d8d3b0b77792da5fff0c0 1 0 \\x000000010000000000800003c48341dae5133828b448be6d82627382c8acccb4d3036ef6236e199c3646aa0823155fabc3b3a61899d6b03de8028c5b916212f337989cbb96f07b330f0aaa93d19d7d51dc53090df9c5e3b886ca6b0d7c7948731a55e7e3c0a557632d54c295f901216968b05678660ad9268246a1c7afcc45090c9bd69b289cf37711c0e2db010001 \\xad374a035da6aa117ae927e9e8b6c753e67ac9492da53967135f3979c59d7cfe92be20bcc0dd120cb11d2f840e5a281b7e3815557a65ca91e07b637f98c4ba07 1669651390000000 1670256190000000 1733328190000000 1827936190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-262 \\x637a25692f6116815aedb53385ccaa8c833bf8383e20de045315dda4b0b32df44896dc772dbb15ae4244577ccf21cf45ff44414d9d48ba8d1a7d9068d5638e0e 1 0 \\x000000010000000000800003bcffd9108e5728300bd9291cf619d2e48b10fb8f3741e544cc441e3737049e207bf20c3b72e872105d3b4d4749868829e09ee0ec5f35afeb5e64f9575bb37228a2120a4e1b136c9115252897ff7112ab8bf62971d2e2e68207bd840aac588b76679f142e6e2cd334e85a96acad9a4c2bec977a2eacda9544005bb4a4bf710065010001 \\x7114f19f1de238126f13f7b58dd52336be3afba7ffa7078750d87e0fea15a3dad230f4f5d984d3ca86975d4d4a079aa4596a7489655ffa8acfaf85ab2d3fa70a 1676300890000000 1676905690000000 1739977690000000 1834585690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-263 \\x64da0cc8355741f195407e1837da26d001ca5020083b7fe03562010643b3dbd41d76073101c9f414b194656384adbf4842a7454c26e2019083cb3eedbd941846 1 0 \\x000000010000000000800003a06c05a7956769697f119214d247e1e5c59a74659a62fa1c75d3bd489dfb14b3965a5c9f7d38dd5d00612884b737473327a3f554d4df4486b5f8a1d66544b05bb5628ea4e5ad6267528f7ec701329511668041d59234a49fd8963ef453e77d2afd47edd744999355d39d78a0689a698854c922f35bf934ee61f836aa848338d7010001 \\x21786cd2501d65ffd3d4f46536deb25ee9899fdd01d47c94df9f1db6685982ed5ae2cce1282180c5ff927c1e61648bb9c871328680d9e9a6b52f435788ea8e07 1667233390000000 1667838190000000 1730910190000000 1825518190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-264 \\x6736b544a1cb9dff71cb65e66fb56a9ad3cd7afb67fd468dc5197fc48b94e6c0e02adbf21ae4fa8845a98e2e59cf4702f78506262c515e0adacec68c6552cc47 1 0 \\x000000010000000000800003b8173e00a3842a4a49357a1ff645d301c8d7a068b4b676a989e303053b512e394236e2410c3cf0caf4dd5ee1e2f2632fc54746a4c9bb37f19011cf06f56656882bb1f21027b42468c4149eb9bd2b1ff52af201b29678c4b09b17642946e85f7124abf509f7878bdadbb6dbd59869bcd853936fab6bd4ec30faf3a45669433343010001 \\xdb098986235fb8a2b1789f7f78d69380ef4db4591dfc9b22c1440f20b24e5c24c05abaab34c964aac5b30f4649f13e63de6aa6bfb5e90def86c10afb0b21d600 1667233390000000 1667838190000000 1730910190000000 1825518190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-265 \\x68deab112286e15cfb159a76a8bf9388f383181c4816c31eb27e46d4bc1583b0f7cdc9c33a708185e77b1c5969ff647a917252743a22bf07760d71c5587217a3 1 0 \\x0000000100000000008000039a33f8ae693c0b2b67ab3308a5b5c794260b63ad86750a3bbff2e7b2395bced6b3527e94312a0be6d2f3e2230df2c5891781a839db5c0d5af76b93468a3944af5818997a304f72536a050a3cdc8570574fa5fdde36923ef04c09bfcfa027bab33a15ac3cb5e24df89ac5b87da2fe082ed3d58dc12ea7ba825a1e7bf53fec79d5010001 \\x9f687f631d768fb9ff385b782acd5af2da1b2790cfebeb5802221dab256bc904a74abf87d1b9b8be998b9b50465374f30f8da0f403884a9fb9153bc32d2e1a0d 1682345890000000 1682950690000000 1746022690000000 1840630690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-266 \\x68eeeb5d7c6e1aedf52991450e428c18affb03bcac0833b58c3cfc2bec22ff1e210455715e73bd43866ff1b225927d8a5c813556dfe88de720a344f86973b757 1 0 \\x000000010000000000800003ce782f5890ae5592e973051af72789c2bea69f6de6c1ca45ffe5730803d3560e37015272a8814ce50b9ded5a774ffcb3a89845214ee0703f3157e5f6adc3edd3e1558366bb83b983143b7bbb863ed113448035a0b0888c20a1a1e054a142a2bf826cc9d7f5f9559da9b1e8b0680d1b74b1bb412837ea4b57c2dd819086c097cf010001 \\x3fb0fef527d52d4595682d0eef6edf91ce3bc4fd1dfea8d3527ac9b3874af9d47e5919f7abaaaa35094378ddf37a0c1c7ecba0f82438513f199244f4db8dd00f 1660583890000000 1661188690000000 1724260690000000 1818868690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-267 \\x6ac67f9e85ba8a6bea1002556bf18ee5682a82497ef204623ca6d37c6c8df19bcfd976f82a005d879c0e87f73dbfffea32e5b30fa8cdc413af740e423fadc5e7 1 0 \\x000000010000000000800003f8927065fb7ef7138505c41fed13e3fe5042f6c46e508e415cac0f62bf9857fbfa2179c5535155ead2c508dff8ac59407067b4482de12d16839f0aeeec46f76b2452f65e3df4d434d3d6a85e0c4f1fb3d8ea48c57c885245ee85c40e17f42a4e21ebb29932e52ba838892ce003870a46e5893ba61363cb5491d9c90b71ae781b010001 \\x03fa6066b103b4d574304b5e6de46fc58b0a855e13834984bda5529179327c2b3d1a879572039c36f3175ef1274caab981f1f7bf1954b7db4e2c227b8af8bd09 1668442390000000 1669047190000000 1732119190000000 1826727190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-268 \\x6bbae4334eb1aa1d82373c20f67c754b0ff2710e4d8d4be03515bc1a120b88c53e0bef6a34221625f4d766ac359e3bb4d44e0f2a28702c1142713b601d4e3af8 1 0 \\x000000010000000000800003c8520aabedc1b60cbd65856bf909db4929282ad27e1bc0d6aa2c14a80ded97f15ab34dcee756c1f82392db11500188810866009e2a259e7e47663506f24eb6510f2585507103db38266a7f6c8efc019ec17b58c8915b5421070f15a5e392af60b82ff6621c4bea7ca7c9deef83fabae7e24618c93eab23a71b4c3f15e29434a7010001 \\x995b71b4acf0981a5e77a1b525e89ea1b45d3f37130dbe4285d8293fc6e0b4b8cf5405b44ba82322fe0dddebca8145d3915d89661c0a0c03b29c47bfa16ffa01 1663001890000000 1663606690000000 1726678690000000 1821286690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-269 \\x6fe6a2772179fc768d9a32d1552d2cf0cb847784c9910b1cac6831805797cccb7cb6ec472330ab1083d3e343b60d35b30fe93951cf8f27061cba02988c4aaa62 1 0 \\x000000010000000000800003eded61021e419e4558d5ffd935e089c6212fd1a42ae4536f66bb4030c4512e63b7c998b298d026b8376d81eacb31cd17c30602effefdf9661c7d6636584138ad227892909395e3b596f107e4029ef25dd53485f5d04883fa9d8671bf9f68677845c90f8f2e29e0bbdd84d2034fe07db59d87e2e63972dff4230ced6a96478555010001 \\xb2f378b8d112cd7f31df71228850c4472e7912def4a2a065557c8bad7a641514059dccc3d5ce1ec1e995bc92eb5b53a80f01b7a79003551060cd82e0a3b2310f 1664210890000000 1664815690000000 1727887690000000 1822495690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-270 \\x725eedb5c86ae9515482b90e6f7fc4357a330bf3148a28b8b0cb34597db05c869466e9808ee69cd22fca565070443b518b9da0fd1aa21b7fdbb0f98a26321d86 1 0 \\x0000000100000000008000039b62fb60e96c51981366134e59d860fb52abf12ef500d2da6a5b6e6bbc090ebdb070dff23909a5bcc732f3eb9d7cbbfa2ef41336b030686247ea2c26b40ff0f5f05caf1de159544dee41b04bb7a3637ff7369641d1803ab307d6701957783afc46fbf494baf50b792f7c3d50827f5f528ad6c4d746c5bf2fb031d55f12b5d451010001 \\x9e73960e407b345486c3d28411c7c70ad3ddbd7eb62892cf23d18e7df86cce52cdf7ae53addff4181233643cbc9ee461fe71572931d7f848eeb11c781e3d1e0f 1669651390000000 1670256190000000 1733328190000000 1827936190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-271 \\x7346a97810e8f37a9320e7e2b1de9e8e46e385940d53d6b836d93e82ed34d6e324738c1132362381ce112f2fc2be9dfb931e5c28d00907d6c500c96f99b598bd 1 0 \\x000000010000000000800003e0b0680868ce1004ccdf979b0312efc7f40d8ce8e3a28449e069207f45e8f0c620b531c8b96da8f3843356b41d9ade5239ff7e36a0776cd6ccff09c72fa12f38ee0304e53df6b2b064d9d50314dac9182ba0598a3fcd53db973f7d83a7dbeab8b07fa13aa99e887e5646e71d292b3516180e3331efc2ae61722522018db574cb010001 \\xc7003097136b9f71ac0530481ef530a8a0234ce48b43f2acac441de90406bf32578b3e5437361b297b6d38e206e1c856f1d0f0d8c68363640b6cdcaf2e2d4302 1667837890000000 1668442690000000 1731514690000000 1826122690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-272 \\x797af09728527c2b4b8149c374a147ef04ce136ef5c642f874c5798b099fe6fe14d06cafcb777fd96d8da59c14e7309a3ae547797eb69664bbbd04f2bf825bf7 1 0 \\x000000010000000000800003e41d33ff21311cf22fbc96d69379364f3b4e8f01ac1a8d3fdc6fd0c0f74ad14ce756d882a7153d90f75938c0fc6bf1ef9b684968c53d6879e36e6a3a8ca7f0099623eec8382b5348f161a961ced1f950a5fb9a20cac8b5c18a56e7156cae6dbd15b8cc1de578003f19f8b338f712a56169d5381a235961f4c0ca0ba8c2ff9943010001 \\x27bf72b60524da8b8456d51128155ca03ef3ec3e50cc032004cdac653e385c493fd2db6f869e0744d9ce2efdfd32679f57894a2f6eeb2e68f7549f30e947470d 1679323390000000 1679928190000000 1743000190000000 1837608190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-273 \\x7a2e17677d08fad702988101c5c825bcc92a94b0052057a11a0d733c42aaa17aa431d00001444a559891aecc86ce6fec15d809efe1ffd9a98d656f883a6c093c 1 0 \\x000000010000000000800003bef451a54aac754bc11f1a2ceb88834a0c151ce4fd05f3c1a9db265ca05914bf498ffb717cf59c22e0df12881a1247034fe666565406f5d30e73be0692340638ca4af93a5d26ac1b4e1fb99cef955446b65be1b2d47424087008a0c32a7dafe90e9e8d90fef8cdfbff08e1cb560dd7c99e06fbfdbb45c01a01f69995cb58d573010001 \\xc09f2d6aa72166defd6792bbb9b2937a8377c572d7f5dc5b3caeda9bfff89efb91020aa57f35958a43854379b9cbbb4920f475de36777992be4dca4a6893c604 1674487390000000 1675092190000000 1738164190000000 1832772190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-274 \\x7d32fa498fb80f2677c4888f17a2eb8ae702bb0eb42efff6221d20d1be2ac58a00b4e84bbc958f06e491798b099b3b490106b6f4627b7c577ffa7ce685c7963e 1 0 \\x000000010000000000800003b64042f126a7fc64401cc12eeaf5d56ef7fc8b5fdca0d63bcf6ac584c7d99931f439cac3982152639b067d14d4af21fe5560a6111bbc77a6627a059746f01a2c0a8621f5ae2344828c29e2a10bb5d7245714026ed43feefa84c3578ddf51f7f692f9a3a0738fc9a62db5251a23a1e1865f1fba4bbf62cd93bf2ee9bcbe90a8ed010001 \\x8938636a81c70f961282d1a66fab60723ba6777fe64bc4897bbf96debaef6f40d7afda9671b688cec64ea943d4c3a0f5f3ea5d334890d5f41efef53a10cd460e 1663606390000000 1664211190000000 1727283190000000 1821891190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-275 \\x81a298836d289f8e8ec1c11072c0ab26fa31a9b207d6945232b72cf67e17f7cd4615103561d3aea8dd1cda77ec9a1f7157a99c544382f2b062937ea83807ad92 1 0 \\x000000010000000000800003dec6197ec5b8bd5a69d92ab3ca7dedf8bccd1c11ed46105a823b4b5c9d357ba1cf3286bc3bad26ca1edc8acd6c9b283c2bfd1010a4d62717e4ceb1865c96d5d8ea96788c43632ff820866ee0cc366ff87028e74c04a9086a83fdcf64871cd0c0c1468ce1cd495cb44701870727f03a1cc9e32f5175f1cfa70bfbcfc978636527010001 \\xbf448d21fe05dbdf797c44897976f7f66548bc73cefdddb60d6aad9b30c898513ec8b45ddf79d135a948ac3d69a239185795e4cc95227f77295674b27b383a05 1651516390000000 1652121190000000 1715193190000000 1809801190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-276 \\x880eab9107c2330e8a6fc11b8aa2c90c66fc51b8cfa928ffb6090ce147df5e90d6c8eb4dafd3a0d83e965b60f3b42a71a1be0a3b61d87d380ef4557bd70d30d1 1 0 \\x000000010000000000800003c4d1c734ae196f0b8236dff16b3fcd35bbbacd317c0269b12335f758d71c4119d04bc3afbf8248467d3bd98331b94725afdf7e46c7353a910c2405f41345fcded817d43eeff7d48113086169eb1371d1a5410bdbdb02a2c6fa28b25a8fb7d9facf0e108dbe0fd67b6a504493b90c1b54405c024f49b0407df8c7031f8ec09d01010001 \\x3b4bf337fb5087f7efb4de4529536f5c5abeb32ff6c67abf486c8d07a07c3175faa057eb4fb98d27eb47ab9661f9c8e47900d05abe9d1497715535332feaac01 1682950390000000 1683555190000000 1746627190000000 1841235190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-277 \\x894a4659db515cb7331510ff26db98894b158b6f2555fe22f6dc971fb89b6bc19c7a010b1765cd7dc795f3a183403ec473e806363c12b7554e2dfb1acbbfca23 1 0 \\x000000010000000000800003b6d3fe241b424dd6cad30038f129b504bb10a4c01711766d3adebdc8b58428a4593a5d703326c55f18910ae28bad0391b8c6acf217a1fdbc979a7017dcc3a13a23f6e3aad30281cfed5ede1424f5361482dfaf63f19515d052c7cb977302ece747e3dc406485c946daa3be795aaa8a68da7d17233bed36a56fb1d29fc7e70055010001 \\x92b5de78b3215faddbf5f4e8cd028fef921b0e3f7b4a9a917fb028f7117a6d94db07313eeabb5c2cab38b4ce3e8f35b31df719fcb4c755e98d5b42046c8e7c02 1668442390000000 1669047190000000 1732119190000000 1826727190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-278 \\x8ac618a58442d37424ceae1e4b90cce15157a79424b68b63645cfcca40047b8252dccf1c75891326b601cc00a0a8bcb72c1b3c7e1a2bb3e3f0c4bdeebfecc872 1 0 \\x000000010000000000800003d172a1203a0324dba7888dff8e824388f05d71723f252eefc60210b1ae5ba8372ec2249834bea0c479270fdcacd504ae9e22483aaacbc32fef8a542bae3f687b8b6790e6f405eaf35e07b9fbf7e6e6181b78f8fd4d80ef1348066af77ab0a48ee38c95e362679811db0a66d54cffe2ad51d14d14aacc460e486c46c580bf24a7010001 \\x2d5fba07b56579386097d68358a4d7a7733f4825c1eba20e57ea4d7001e2aaed320f04fa7fda0b4ff8e82371e355917ef159de466ad97cf840375ce5971ca70f 1673278390000000 1673883190000000 1736955190000000 1831563190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-279 \\x8d9a0f4ee275205f68d35654e4ffa0bc9f457243f36502602ed87ea3c691f6e0b1636f324b078ac804ad1329a07d80265d787f3f9ff930ef3dba99504e2fec90 1 0 \\x000000010000000000800003b66823050ef2e1685f60d10e6fdf8cbd30a582f1fad39fe079c4b2381dbd2a84180988821f3d8e7de67f90dbbcbfd11208c71e5c1a6ed7e849fbe60514bb82950d27591bc15cd91967c56a445f6ae8f800c8226edab403dee53ab485f228581694da5b7f58cf6fffc242fcf09b667a43542e07f33400bfb58fc2f200611b1a57010001 \\xae917eead4c8bec4377065ea49b9813175fe1f173f1cf32aea693c1ad0b9887d504e671358db08cdd62f75c2138a145b9209378fb54f2fafc57a46e215b39809 1664815390000000 1665420190000000 1728492190000000 1823100190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-280 \\x8f7648fbba638f8bb66215f7c23ff3a61d58afc950fc30fa972d8c8a770cb62bd9d2cc077fc8d65ed0c9977792972697535fded1c8ad6c5d4d969428d71926a7 1 0 \\x000000010000000000800003c3c18d0447d7d7b560abc5d864dee0a08d872ae7860cd144396d7c130a6870cd1f40099891d83f893fee2e4727e37ee2bce5dfd9f99c4374c43e357fc20a47ec7bdb95c71412da816a77491b75c1e438f076d04f478b0a78797da56374ea14ec70abd91d87897f44dd96cad601624298463a22aa5d45559b7a27c2ecc851a845010001 \\x99a144a11fd335b21a08b69275f2cd03a6d03968032d8e559caab73cfd1236ad3f187542a627a1db8474f82425cbc831d545595a0ed7da2775d9ef45a3370e06 1663001890000000 1663606690000000 1726678690000000 1821286690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-281 \\x9056757e96e4eef014c86f93e96cc509998dc593d35f48dc05e8de462b9b3ccbedec6807bdaa51ba26b03b6024d314a075ce52a65393b76e2a3f201b0c6bce15 1 0 \\x000000010000000000800003e9ba68975466c1cce9800877bd99807d7b1434c908ebfaef9283157386a848ea557629db026a80d468937c7d051d1976aaa3199b8a06383bc87733c0a232ac1ea10cec0deb8043880db76b2f13ce399f89914310ce2c772ed9be4460925c2fe004b1f36eaad35abebb942888322f5869acc56046ac4cd65499e17e5cfaa0392d010001 \\x09bc35b4d96f1fcb5b142c48e8afbbca8c769fd169ce1ebd7c536dd1f677a65421aa17368c257bfaac9e7bf938f1f2177ec7ee9e884488dbb95d02baff2ad502 1670255890000000 1670860690000000 1733932690000000 1828540690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-282 \\x9416d3cd931c6a8d2c258308ebc379fbbebcf3d09897959bca6374112badf858883b887bed677454e634d1b2ed9f371aad85a7082009bf6861d53dd457f75299 1 0 \\x000000010000000000800003c9b1467bca665772d7d5ae7fb659ba73f8709071b25e68747cc3b9de944b594702a2534b8611ad317b4ea0c876cf2529359dd2a2dcd11a6312c8d9fa3adcd9bf4f7906b194129498798e69dc7d5272389776645e0fcbccb799687ffc1e6d451436c04ee04a9c010faeb26a5e35bf85b29fdb838b6cc0cfea6019373aa3764d73010001 \\x558d4449c952d46c088fd533e60bae13f3ee9db2e0af8eb59fa75feeddb664ecd090e8ec2a6effe698cee305044f4a385fc0f5a4cabbb40f0bfce0ad16dc430b 1656956890000000 1657561690000000 1720633690000000 1815241690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-283 \\x945ae261cde10dc647af3a8e4464784b09a42975ad1cd512469638a2951f0b285fb016b47d707613f28d2982f74680fffdcf82c616173bdf159817481e488bea 1 0 \\x000000010000000000800003ae7c56e8255de611acad1969aa05e84fc14304bc1459a28e6fc5296c9e061adc555ff68a457cb5e6ff77a1f71fbfbf0ffc7ec2f2edb24583e45e0d8d39c490468481c4bdd6094aaa02394a1de2f4f0e43168987029f0ce0bfa63951565a62bcb5a15b8e7456b11e62e4855a366963b6bdd51c137b2c405e219b9db4856043469010001 \\xa8c9e5b1b58cd0e72941c9b4431c694857422e6bc4742bc3c774940dc32a1fe412ab558dc40103ad79b4979dfe13c7bd4906ef0e0658112e967bdd57a39bfd0b 1661792890000000 1662397690000000 1725469690000000 1820077690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-284 \\x96baf7242115497e18bc963546c2a48eb810b5d3fbf13e8634ea5cc1f390eff482fde36ef646cec107de97aa6da98d41ef042cbe69218b5bc3ce664afe554f9f 1 0 \\x000000010000000000800003b221534c4eef0f293f00557cec013e3327eae1e05a4721355da2676f4e2b91958b78dd0c888e6b591372d4feedbb2a66ed0d83175c790a33995c93911a7d684e33bf8153d610db577887f510b5ab52977fb58eb20d9fea1dfd4f08a1db95bd4d31cda833e9473916954eadce41199f21f5e3f47c1b7513e74dd718c993128145010001 \\x6c82ec441d7007639bb22137a5da7833cbf03b3a8c5c9a2464d3b55d7a84d00e44660a3f35dfc69772095c797d32b08e85579aeb8544c473beff248ab0dab80b 1666628890000000 1667233690000000 1730305690000000 1824913690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-285 \\x99ca85752e38acffd343f7675e67a7c164a0844a3bfb85266827222fecd368408138cba11e9b176f34b97e2717a3c558708814640634ebb86cc6558efdbf1f21 1 0 \\x000000010000000000800003eb034746415bfec0ad4ebcd10e00a7f3d77070a445c1ab58f85df7cb35eb63c06f9ade1f26d021770edca9fc636b3df72a9465a4558263fea88e04c516a8d78aaf1c772ff1d208eea1af00fd9aa221c968081baa366c28f4af9952c7ab53dc0288933e3c07292e1921cf2bf1c66aaf0053cb51afb7667e76ec3dbeb64006f45b010001 \\x4a518ec63f087b9ba43bd03919914aa84e09600ab0541b449936ebe72a5dd40d4976ce2020fbbb98a18bfc8ec5107636996c22e08e66fb1205175ad1c804c106 1666024390000000 1666629190000000 1729701190000000 1824309190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-286 \\x996a1611212283aa781b5fb8c9aecfb812f2ad2103fabbca62b6b50165ac0a64fd2b248cdd01fec619d7257c96d0197354093de2c6d1df9b27292ee712aa2703 1 0 \\x000000010000000000800003de7dd5a7142e081ccfef4c93f2a12f7ba5da8441139465e68e32f76b6049029b5ba99796220ce7c1a6487daee53d19fc756a5e1e235cd4bcfc9dbff65ed6f2ecbac2ce70bdf07879bbdb40d8a622ca237a7ae6a1393f00188a4f742280fd97269be4158408ac1b54a8d648cea2f0bfe7627312990e23925513c45d84c5b7a4b5010001 \\xd1e9b130a482ad63c43c0f8cbf32b03152b0058c20fd2b12f9ffca582d9a2fb0b6a805339234e4d5825ff5b0c92d52d83f4da43e2f315abecade0d553ddc8903 1664815390000000 1665420190000000 1728492190000000 1823100190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-287 \\xa5524399b57dbf4d1ee78c73721ba52a689887cbb4d5afd364ed997b4bde299000d3fdca1490171d9356734b0cf125f4a7f4821a9737f223eeea1adf8ea08084 1 0 \\x000000010000000000800003e5bde262ef0bbf3dacbeeb6695199f8fcb54409dd630655be5857dd097733c2b13b2fb8b86020210129be4e317b37d6f749424a5e91e9d55cdac96d469f6f03c59b678d26022fb6b317d6008ea54281a09ac6fd2c1ccca16621826075fa7cbc556ba5f0d1ebc1b9b632a3501bbfd9fd2f26cb7a020f5c0c8d234f1c1c43a41fb010001 \\x1c8a5700ae4c0bf202c15ad30aff63fa13efb36c08c683fc7d94e22d85ab13fa326e624e818089507fb702a70c19b9fd45d5e5f4116733b94746752d40359107 1682345890000000 1682950690000000 1746022690000000 1840630690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-288 \\xa87a5350828de107033e9df2bd04db89260a5ba0de8332c5c057cf22607073e8be33f3175195836d0f192a79f659e4213619388b35ac8e1d51429696bb2a69bb 1 0 \\x000000010000000000800003bcbdd09201e399e172734c75336acb8d7486adda3c55deb49af0397bce34ff064ee878d8bc34b6a22e4aed743fe119859bc27baeedc31b131c2f4a24d1bff8967f0645441acfab30f8d6fff10acba5e759a3193021110c806e4bffa4a32c4fc0001d050c10f6a91d5fbeb919a7f86950b8a611be946d3457421fbefc0e1daa95010001 \\x10130da3befc25eaf1a7940fbb34cc02671d7e51893be539d0ffa45ff2266faa9bbf227b1c44c183117b4f73737d497b84e4d3b5fc05b3c2186da4d972405906 1670255890000000 1670860690000000 1733932690000000 1828540690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-289 \\xa87af666e6cd0a1e5bebaae42616a8c25cc0f7b8aa0c8323c6be05a1988d6b3a71693c0e79c666f8c34295a3fcb5e0fcb2369ce4b6a0819b03f5323815d0f3d1 1 0 \\x000000010000000000800003bb6d04e307a52819ad04234a52bceb01e3f97be5b352a38ffbe1b23a9a483463fdd83497cc19c399278d450f7ea245dbc8d8e3955c9059961072f0523be161791b5235c6807052debaf5292ed1a5c12d06e53efd5b1d4046a216aa5dfd29613a3d3c6b2546f2cb22f737939b44f7524100fd2676f33e957e9c96ffbea2f13b33010001 \\x77b595c15bbaa7809703b5e2ea89397d53fac3a6de403ff96ef5df1d1327abaeed21b21d7d33b404ae9b6829d6d0f955386a6206cf29671b5727d94bfb92ec0e 1663001890000000 1663606690000000 1726678690000000 1821286690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-290 \\xab768d2d800ad091466e93e1db603bd0aa9a85bf67682b8c3f35b33eb41b0e98be6be14e50eddb9c35aa4a5cd454cb7f8e3c53c28271946c9f2864295259f4ec 1 0 \\x000000010000000000800003b710cbac5645bd47ea3da1624d5994392aed11d66fdb90142eddd56a4ccf282353a354f229bd1bfb7291d04406345bcd2e94a3cd116c308d7100599503ca3355fd0183b9bafc91e0a481c4b8b5c509e29576429e191130f1435963abd051d3399e9a732ceb9895bd96c5173d66b0468384d5cdb9fe3a4e58944766428c28c797010001 \\x7d064913cd345abbefcb6dd39b21a466469a93bb070e3122476ce14a76e98c9340474c37895f8a9a2cae081101482a0c2f6b0d4355ed90003aa6bd4832c9ed0c 1673882890000000 1674487690000000 1737559690000000 1832167690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-291 \\xb276d70815969a9511e497606e162f312b5040a7af82d0771411f52d4c36c113cdf3a8a5948d0ab752549ac5eeb94aedbd4764aa1cfe1db149e03b6947508e49 1 0 \\x000000010000000000800003df5dfb8ce2b22d5ad7d1ddba694c19007ad8d35ad9833b2c273d4ecdc22123eb22739d35bbc0218a6d094d73ff6e66c9541bd70ecd9db6161d3b11b876cfc0b5453a7ab627bc9d01f26dd6d95a98cbcbbba91ee07aea06a49a2356b10893746251b6ff9b8d406f73ce15b8574ffacc312c22091c1e76c5da175daa3fa5dadb7d010001 \\x9f0a142bb64984dd1d17b61b9ca9aa10b50e5153853c3a36e9059c3329e6f39c31b524d896f9382ece255040ebb2a8feb113f0d575a141aa0fa82c287bef6404 1656352390000000 1656957190000000 1720029190000000 1814637190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-292 \\xb366f9d4db8472423ae08dbcd0332d985ecc128622d301707ede56efe04e11ffed1724b0b2b11b3542f01b1392c40043b7744b55b268a646db5953d9d6e2c22a 1 0 \\x000000010000000000800003dbb5569d2763f06d1ee4623030cd25af7cb11ca3c6c50ed79934c71ea430b0c3e1a9d6d703f54d0102d1056c323b167607ba1e33976aa3a7329e2196a822a3892c25cf4cd10c58c820c202ad3e6f3afd7282460c598383769428fe7c040c8725191f73dea4366ee5de87c658bc4633379876d8e5050ed0f4e877e94d98e736af010001 \\xc9b9ec9b438b87e5dd26b90a1e2d3f4f3f6d3db82a3afe35f6a111eb5f7346069c09079ffaf95c5d6a33afff6ca004c5b4254501456d284fd746b754ede43d0a 1653329890000000 1653934690000000 1717006690000000 1811614690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-293 \\xb7b62e9dcbaf6daf8353f999b41205433db8381994bdfab71052471bc2eb8009b4accf96b31625edb29cf1f133072a3cc636ef8a7115c782b4797761a2d0f62e 1 0 \\x000000010000000000800003e9ef9d28eb8e2408570c9a654aa4fa04783c9740e693710d43bd241ef29af74772d364be1a811409dd98fdba5a4105ebfd67b940ff53e99a4f16d0631e18efdfdb0631a9d2785683138a304dec2af70699cccc0f4634d31b201203441438ad5b12beac56705164c22ccb2998324f413e4e75eceed287d05f17b0347502a7352f010001 \\x1f64981969436c65eb835df5d4c4fb3eaee04786ccc57f33e3b6198a583b4b1df395fa5873fafab036e94f82128d64cbac4a59d46dadce2451bb35accf4a5a0e 1659374890000000 1659979690000000 1723051690000000 1817659690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-294 \\xc1e65e73218db6c6bfe68d0ad8dd91c9bb08ba6b925883bf84cd53303a4c27b8394d56180125c8f4a88b1994b03996c40c4af2a5f1ece94b4b1aba236af13e18 1 0 \\x000000010000000000800003b79839fd6567301b86f66af13bb91b8f0ca5236997d812892e587afd794db90fa68f0df87f7434ca13a33f669e3529c59b50da70125ed3466bbb008d5560140a5222f0f0bad3733e925ad91d5851b4877b5258cb73fbd7b6152bf876e3fb5b7905fd867f915148c54c8adb02968f6bfd28369d9f582e3db8018c8b011829abf1010001 \\x5996df29008bdcb3458adb278a0e4b40da662f0f8e5cc05df1a57b474a015cf93d5700dc969bbc7577c1b27b5936ad76391fe99a0dde48321ff17c886984ed0a 1675091890000000 1675696690000000 1738768690000000 1833376690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-295 \\xc11af31113fe50df16a2c83ff80ce1ab656b936cacdacca932ebb8458980c9c59f335497534ceb687c33e312f1bf269f6acfd199b509b3b9fb3264cb99a78d40 1 0 \\x000000010000000000800003ab62764d171c8994ce60491c31b5f9037bc5aaf8dc5571b097e19bfa337c3ab148f42860aa040ae2d9bd935390ccb7e2c6a418dc03bff2fd531a3a08e4a1b39e1203783623470e4b71ec372806add33a1fde80ff5632f054b88b07b868034a43c0881cdfe02cfbb88aef55eab6d924cacb4d80ca19cdf28c7633c0c4ee102aa3010001 \\xbc08fb6a4f1f0be42e9ff76cc6a2ad09ca5baf00c283f2e3116db84d0e83312ca2b436e565e5cc79fb516802a870efd5cc8a2dcb6f12316f4bbdea274d23180d 1671464890000000 1672069690000000 1735141690000000 1829749690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-296 \\xc2020736cb49de494cee844bb600f508fe4b7c687b03394dd99958130cd367fb44a9b1c55e1c58667a3c9fcf20ef888f393626ce5986d7881eaa2b4a36ba5e8d 1 0 \\x000000010000000000800003c803626e3a1a539dc95294c73243ba028bfc10a1ade0c9c82e09e360f6c50fe5143a18532eac0d733989ac5b3f799d8075738777f3483b74bdb6b351dfafaf679aa3a8bfb9f62b884fdac7c6896ef418f3d6827c41984e3a348a2d859750e550f7c57cd44400bb238d19031397730aba8173907d8bfa1d39dd19c30c40395caf010001 \\xf491173c15443293bccecc98d199c3d8b83b8cd01f3110093ca43af1480821e0d536a4d7229a90e5f304677dd2044123c0e63d8e094926fed5c35f219231b300 1681136890000000 1681741690000000 1744813690000000 1839421690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-297 \\xc346768cd7b90c712720b6054deb0b7bea55fb74b0536e5d952f4ff820b6369b08525507972335433708ab8573559fb108b7f44a6be1385dfb09b1f7edeba253 1 0 \\x000000010000000000800003d9cf6d73e0e5b773daee0f90b26f14ccc40a9249ef61f6ea19919d6474fbad40527b675df1b97eaf4a70f297a80ffc6c514fd4f915e8b487ed7885c6a0df296d931205a5bb6f688691bd2c4a11b408dddd3dd69ec06949b4c2b04cb12530eda3fc455f89424740c89ef80c27f4907438248a60c19fe93555979f335bc53cb4df010001 \\xb4055b483d978ae589fb66f7055911d78d59f519cd4ba85b1fcabc3c8d4bd9cfbbd43d272f5819a1ae6907ea3868d824e14ccab7688ac2dd2aaf72f99dc11f01 1681741390000000 1682346190000000 1745418190000000 1840026190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-298 \\xc4b238ef691650ee3c63804d4b88991e5e709ab87bf00d4b4eeff6b63d16e966f4d15bcaee6f166a13e93ecf5a94194ff154ed5d993e14af5b22e01d215b590c 1 0 \\x000000010000000000800003c65cf8ea8fcda3bed8b85b229679acfbad6b53b2b2c3dd1ce8ea3f8a05143f73fbd2219d2db29687db1032ab501d48b0a7e6d32e60a6bde88058cf382ed40810514a64299fc5fbd0971d86631aff7d7da7030df0e0ae45ea56bb5b2683c2da266f3795f604b4659aa2116327b0605121032d34759cc2835fc7a446ac4b553a07010001 \\xa93d40d3873138bad2f3db5f461dbdb04aebab2f02cfff018d33a8ec760536b3298e930d0055f5949a4fb79b558c2f22845fc732caa6e7db27f76013faf2ff09 1680532390000000 1681137190000000 1744209190000000 1838817190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-299 \\xc46e56fdbd49ec809c357e2bd16a587cd0f4cbb21795fede06ba3dbce4b612e80c6dea2b6f09d6ff261cf446027cffb7176a86616c834485f1d775d4791c83a3 1 0 \\x000000010000000000800003c8df1e9704bc04e3a8163d02a9c220caecba45a25383b08a89a450bb380e70125478cb10f1c27ba6aee2c9ca979e4b8d984f05472d2758c273df68d12755858d5239baaa0db72f477983048c97de016b195a169ed6b44824503a53a89f91210c3e1cf8d029eba513efbb172b43f4d1994295e2b5e92515db71c70080cd31b637010001 \\xecadd83d0e78edac359db3dc0eeb7c9ac6d905c757fcc2be391728faa852d888e20a10f10603750e9ae5ab420ccc703bd514cd928ae319fbf4945655e8be6f04 1651516390000000 1652121190000000 1715193190000000 1809801190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-300 \\xca02e97c611897b230c3005dc082381e3555870e0d672a09d3de729549ed29f78c2dcc12fd56df41ed9730d0fa131285a09c039aef2b91c135e6f85dc77f32fc 1 0 \\x000000010000000000800003c7520d999e6e2c0de4bc67827184b863df1af172c86adc65a0e5acac4fd25391f69e457aa204b484831a26f65dad61d7a520efa0b41dafaafcc4201de78e7a06727d8cb68d7a1855f9c0a26e977265f8c8b45a4b22c812cd00aa6d341533374b03fd4a3c2ade336b68a955efe68d0110928e6272e0cd700ce226cfd977796169010001 \\x99f429948f13a5d1cedf9f1d3f56735940588e8eccb055fd029dd2a807e12bbd1b0fa10faa9f52d97854bf619407339d3c93a3b6f70856a81e1c63afcfcc920b 1659374890000000 1659979690000000 1723051690000000 1817659690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-301 \\xce4eec0ece69024ded55349bccf6fcd97d7e152eeee6bcef9676bde4f8b4e6efd09fbe77f4b9242b03594752cecc2b61584f344eb7200b347de34b8cda5fe034 1 0 \\x000000010000000000800003f48d502655a759b514524cfa4c01030177a8fd2611a48c674b706c727e81bf9bcbfcae09489b3018bcb7cb2147fdb74baf068d1abd1cbc13bade85134b080deae733bf7855ebae37ccfc1bd22efc3c6dd4c24774813c38ce495d6b376770aaeedc6fe6c3620077559c5959460ec263e7b7c96170ae806af17e2033419c9a6a95010001 \\x9d1162c99f75d47c860afee3bd12dbcfad45cf6016f3585b0d0813e14b5dbca05bf54da90dc1c9fff240076247cc101fd387ea1af7e38f4fdbfb419d0e30830a 1668442390000000 1669047190000000 1732119190000000 1826727190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-302 \\xcf26e70ff7d2c99bb52286a999ec94c0566179e80067759e7fa2d54b57b3f4d51c478f4eb22648cd9cf1585cb5de420df53205100699a7a23c6cd847a910b3f3 1 0 \\x000000010000000000800003cba01d96946980fc2d5a422b322997848afb04a9a45a3ccc5dbb56409e72feb994461730248b2e07806c97c856babc5d8b37768a8ec38a2a36793c54c917312efe80b7aa0af937e72242ef62ae1b900a9f7e7fd27af39762063a445bbfb770d981d1130e97531cee2c7a296d226cb6d37b22f84aeda15a63dab459c504c7a437010001 \\x982fcb075b9603886cfad9e89797f2521d05215faa18537ac2cab19ca4a39c15de06d7330c0bbe381390d1c706c4a6f696ea57c272712400fa39e2f81abbf905 1663606390000000 1664211190000000 1727283190000000 1821891190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-303 \\xd122aa2d25eca70e9b5b115205b351e703906bd1a6458cc5260ce0bd66cdacc65bcf41aa7b47b0602d85e693042ad35ae91e07e61963d6e25fd2baab2fb7fa7d 1 0 \\x00000001000000000080000398505b5ff8d5be7acdb1360ec4988214b47ee7b8a4ef25f1dc63d14b8da24e0c03e76e17081df41ec343d1f319de9b48162eb300d39883e251bcf64c418a0d1bbff87c68f015b09cf0ffb817eacedc789b4d29edd8717b69af491baa7951b3322a82c5954600b064eda8a8a578b99685da858125ab98d0598751aab75a61255f010001 \\x7517c9f0c7bb7649c58c94c8549760f487daf26daee95e3adcbb063f3ab373355039d208c3bccc1e08d506f7b391af857d8aefc8fe3b50e61053fdc1f7206307 1681741390000000 1682346190000000 1745418190000000 1840026190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-304 \\xd33605e4668bda40925ee3ece3f20e90df1a26042d14f08abc178f8a08c419f23e4497b288598f9dae36cd2925e23f732120d54b5790f2a43e58047df060abff 1 0 \\x000000010000000000800003a32961fe30fda16e7a5aaf28ff32bee50f3a5969f8815782854ac96e55732b1c0d12e9f342e8eec42f3556c57919e55d14d7184452787c6a161914be74c855c7c0a8bb5bb1d108dafc62cfcab1c49ebb5e269ce3c8b85c1b7e9d1917c2cc9fd50109ef8caa67bcbbb39c00f5b889da6acbb9be3d72cb71a2f30e804c3011fdb5010001 \\xe10e9746d52f90b4d041c141d9dfac4bfac78eecb1cec455fc69ef1e8c3ea97fd9af8703c7a5fe94ae050272e95761d331ba3ea10956e647ce9c55947966010e 1655747890000000 1656352690000000 1719424690000000 1814032690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-305 \\xd726297c74e984806fc5f0bff58ba571c9a0716937d080118fd975471d75a26634d92dfc62b4a74bb592d24d4b9650f1ae6e7a83529af58db1bcd58ddc567e3a 1 0 \\x000000010000000000800003eb910587ddee50f2bb2d9428c73c85d6aca050f741c33522053769c076602e9d1002d9ed470715e63446a4d315b58d3a06fccfb5bbabddfad992f8bc2f9cf16afe9ecec0cc878fdaee37652695756e23139c607016251754e76d0e8b32a5a9435d912f182c7e76f549541fa9e2456ff81cf6a2caa83341eefe0f9432d75786bb010001 \\x4b485a953031c77710e8cc816bb30bf83939349c916f2778ba91a0defaff20cbf500f5c76020f1d955dd8673da0a9511eec6d8ecc2ead36e72b5c4bf65c3420e 1658165890000000 1658770690000000 1721842690000000 1816450690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-306 \\xd98a9137e145d599eebd679544698e63dcc6270234f7ed158a4267a9f9b068e155990ee25bf84c32b52331315034d588a08497c2b8dc8dcd8ff17ec9ca6661d9 1 0 \\x000000010000000000800003c063f9ef2fa554c8adcb463f4f2c16886bd0680be07badf27109b072c7db86955566bdc221352932b26e38b811a3fc4e5ac0e5435a05883cdb284848c178e4afa6fe2603916c637ecede48e8fbb10619fd33d7f4627171e4c49af199d5da033e80133f868b183c2c3efb0acc1f816148b6057c21b9d35415333d48c8ab3e652b010001 \\xeefaffe299e23900e5c65ebad5cd6265d13ba901080cb604c61799a24efa2bb68b3d5d75f9dfc3c0ffc59b67db6d4bd526c9534e33c867adc2206c72abd26d01 1682345890000000 1682950690000000 1746022690000000 1840630690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-307 \\xe3ee712c0ea298f59f3eb7ed1610a437f0f5545a7282e86683dbae7db5ac2c1788ebe56f18e7d3dde0b57b7391ebae02c55c91d9e6c44e6f2d2a6bd2c6a85073 1 0 \\x000000010000000000800003ce3f1cac8e822857ba130dc294994f262147203c73c7b0ab7bfe3d5d168e05a59ced159bcf588d88f38f93b3a17c8b5b12ba49cf67fb923b0e7f5bbd8137ce1b319eaabf4407308797d5faef0f1cc7973be8c5d9fe1eb2fa5065d4bb6a59ed5e7097914606c4f6d6da3a7d12141149bfb6e4402e1f328eefa61ab32952cee3e5010001 \\x7ef00d53dfc1343fc0d02aa49a8fb9217159cc73ae6e8c3889ba47358b386cb553aef335203416f9982a9593b0c683b751b081ba3109f791cd08e1317e6e6d02 1657561390000000 1658166190000000 1721238190000000 1815846190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-308 \\xe5dec19b42a77c5129fcecc321ed32c1bba2ae0507cee541d0ee28852fc2dfbb59c769956855d918d043a9084d961b92c4598f016c44370f4a4d4a1accdbc5ad 1 0 \\x000000010000000000800003db9d84189b5740875cbe490edceb9eb5bfc6fea1988240515b8e0efb3b2068bfb08ad7a717c2526a88858524f891663cad172f4bc7cb1c64f9b84acd753ceb7af54a789069981a31087b1941d97a7640612e71f6d2636b196de394163d17799de464ffc99c5a5ae18260a94ad47aef91209e769d4d5fdf34798f7e11f64e6f23010001 \\x0b7bef9476ddde65f53e3d8f59e7de5afe739a02b068555eb4576e45faae59d70b02f0c7e2656f92b0e865dc837dfda080dd6dd1967dfa5f8e7dafc418736204 1652120890000000 1652725690000000 1715797690000000 1810405690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-309 \\xe9e21e5df241fe2ea7487131c691d7505cafc8e8271ec381a9e04627c0cd07076bc0339598854b7b5eed61f6ed67f3fbe37a74f02a8ea100f633460feee6c6d0 1 0 \\x000000010000000000800003aca08cab834229e9c60339692da75a12843c58cc2cfdac8c2f1f56a41c66e27632e68f79aeb5c730f539cb7f217fb379175d5ec5744c92fba57cf6e6273a8a6903097e396605c6246a4987a4c629d4318d9998b2b762ef1e6646038bd46b9677f5ccaa3f61d3cbc5cbb10a120cd6bc915e385f1a48ac40d43f7da7778a8cdb89010001 \\x208d88a9f7d53fc09aadadb1636273c7699a4ad39733f5c927e8e227453b0235edeb42a4f0d60e34a804e4c0df67c44452f9ea1b9bcde2ecb35a8b633ce5a00d 1653934390000000 1654539190000000 1717611190000000 1812219190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-310 \\xea7665e6885ebc4055be11fc7445c844791328d5723036747ca4bbb51e4ecd4f6a920a45dfa9d7f72d23ada92e83e00f2ad1d80ddb16353a53b10fccfb3e5e20 1 0 \\x000000010000000000800003b505e1c1ff348fbf8dddf652b4138f467f9f2960e55df9859d512fb00a4488da62cb0cd646060b97660e2dbfbcda34e036d083cf94d24630f74bde838b0d7f1dcb1ce71dd214decc76ddf79c4c67682c48097af1a926f6b82833825504fbda64d16cfd1cca533f4f28d0e948c91290c8b7b180f867ce01407f7c4f18642f7de9010001 \\x7afa962d5a842a2d158c35d03e18a7e4a767d94f72b7164216801773aa0c724c17214c4be2f70ada39824d77b89b2c45d9841257294d5a987d77327b58c9bd0a 1678114390000000 1678719190000000 1741791190000000 1836399190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-311 \\xed2a6f79d965ad7f113b7a5a2b4b61c35ef6c0bcbf1e1aa8d50792d8a9b3ebbd381772622d302e8d49aa23e2e6130902a4883dabba9f54cfdd04d9a24ea3f4db 1 0 \\x000000010000000000800003c069c187735b897dba17aa34065abb94b5f07cc544b0158e8172838dbc57d9f41fd234893a54cf58e3f9ff95032b550136e2edfb292c811d9459615f098373829be437f893f87522c0a82da5e9dc6bbb6c0c68acc0dfb4e2c2271883a4691d9e8c2063c9e85a3e57e40bce770de2d367b7bc245650128e699204f669e9467e8b010001 \\x2f3aceb6013916497d1ad9e4d8b79ef184dbe305e2cd212b03dd5c3e45b667fdc10c92bc7dfdc93811c16ab5858356a7194fa3bb61aef623531336c7f0b9ac03 1679323390000000 1679928190000000 1743000190000000 1837608190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-312 \\xef3efedac69dc39d2ebfd4c6e1f161a56b67cacca766ad509a151fd5174694bc03a54e9366cef74f3a7edf89871310b46de38c8369daa888e686bcd2f27944ad 1 0 \\x000000010000000000800003af9e97ebc2bf1094774c5a73e09531dcdb608382fd0593fa5bf79195137c9c8ea938643ab5dc2c99ec15ef6759e735d9cb12d74ace53d426dbf1e91b46dafc5523e07bcd52da041dda16c741155ee1dfbeae2682b9721daf8844e5be3f218271f815f5bfb528ec6170a10c6cfb9aeaab6be9e7acaa1fdd154617186ee6696005010001 \\xdd9f8536b8397c4e1c67266558ac4309267952ea4ebfadbe6f1fc213e0a284cb91c436872ef177925690c7ef19187996004c2a85940ee7d97aa894ad0992ac08 1671464890000000 1672069690000000 1735141690000000 1829749690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-313 \\xf08e70d24ece0e99b2ec042e8824ec6b6db6ec940161b4cc2988a2af05bf4fc19bc91e784ccc64b30045723f1e892a42a1c2b9e7fde67c639c721a13a6b5fc45 1 0 \\x000000010000000000800003df98fb2533fb0ad6530066be0e9bc0b9cac1c175c56ee61a43d2fee5ad7f7a3d1c9799caf0c83c2c6ea72c4a53573f6d1aebf322596224f24e302628e4e18a39bf7562f6d7e31d41ff1e256b42f24ca7acd2b423c640903a67ba2147f57cd518239f3b3304d550fefe09f137bc7d5ccb604a320a5fb255925fb3f60aca06244d010001 \\x9c70c886b1ecac902f7edcdf73d9f2320f8a5b83e627396bf4efe24b23a486c34a34983efbafaa97d4a9ca4d38362c36fc94e08fa406dbd44645dfeae3da720f 1671464890000000 1672069690000000 1735141690000000 1829749690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-314 \\xf4b6239d3fdf7c9600f29818418e294ab943a3dd4c3ea5698f7f8f64292055d1ecf238ac783746f0415758f59e02c8fc649a37f39fed671af4c4f3697c7f36d5 1 0 \\x000000010000000000800003ae62a44b37b343d65b175ac6c59431862937f4c99a944e1801de7196f471ab59904217e0efd1eef8b172f6c964782c0acc4fc5546938b47c010163e50a9e72afdd36101b81f67de85b2e2d664dd8a584c633091a5d3af61601ac05819d3c5a1cbb4acf71d0492b5c160fd5b17b1ea2d534c528c8a99c31d0dc8e3c6cc1d57383010001 \\x3b0c17cc76c29ebba84a43ef8a5b2d2f34524ff6f231ea2d045828936ad1c99d72bd856e446a5b3a9b5539a1897990b811bc6747528d193106bd613bc99ffe01 1672069390000000 1672674190000000 1735746190000000 1830354190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-315 \\xfce2b987241273b87c06a6b7106cfc0cbbb4d14d69b4277a42e328c66d2b7286d973375b77043c43e290292378385e80bd81aaa4b6c40ba1fb7c4432c17742f5 1 0 \\x000000010000000000800003cd592650f68bd8ea6b6d2fecbef86845ba51dd09fb38a7d96506bdd92497fc1f092ffae65567ca4f689ca8b0b0f82388d649dde3457284a0faa4aa62758c20ec340f37e27f6d77eab47d5c6b3afe366713eca5eb434d5f218a71c63e986dd5d9f344c9f85f82e66002ac9e490fa94e0186c3906e6da8a6764ea62f2a6958ebe1010001 \\x31622bd293bef3322689caa929bb22537e21ace7904c814af13cb6e165c1c6184ea2e5ea319569abd36d07c32286deb7948a282bb45dfbe24498cdacb2e62e01 1661792890000000 1662397690000000 1725469690000000 1820077690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-316 \\x02bb3b5267b5f9353fbdec2909d7bf4b52ebbfbdaa6814f0096120bf960c9c590acc8a626e1d8919f143246bb45917049078f2f59b3b3b5d9b03576914444282 1 0 \\x000000010000000000800003a57f58f88db38fd1f96d149d8dabe1b40b6af5d2383f44f689ba807d47176ef7e48f75d8ab73811e9e13605f34167b56fce5e5b24855fb5ce86818254cb267df6ee13f769724559ef1df628461cc9d7505bf34b07bdca85551b1ebbc6c4715454c84b465a78cc7c0af37d7516b091079126cea9cb1fb173b763ce31da96e5ce9010001 \\xbefce3e35f3e7463791606f07fcaf079f344fa8bb205ec081b4302283b9a9a8b63d585b621108f1328119c60a1722fa88421338f18f6b87eadb1b754b7ec900e 1670255890000000 1670860690000000 1733932690000000 1828540690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-317 \\x055bfb133e88d35c427a24f10eba0260bbe18bc39927094126067fe21cdb0dfa63a1a58bcfd0fd01753bbd3c0fea2faa26d31b0445e93fb0e3e16e6f6b0b28cb 1 0 \\x000000010000000000800003a0b06a521c24cb826fc0359cc7c566aada558e26f676bc6401e2deab4e7bfc3db812044e29ee6e4433e846c52de38869dc80cc0ae75fdbddc5fbd178edeb7294a1695c21469d3ad98777e56a9005e64eb258dbe387f9315c2b8c5b5672f23e5a703aaf72f1b43f505e79b575119714eb70e7688d39a559e7b1ca04e935cb49a7010001 \\x13e00406ea6fe40165fb5e3f51cd79286d5e554c11a52c1cb39adf134268891f20bfd15e8912496e02ea0978b227bba6b84bdc26424262a45e163c87808dd00e 1672069390000000 1672674190000000 1735746190000000 1830354190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-318 \\x0757dd1c1b0d991fee614f5240d56e7cc5823cd9a03f772849fb0681a9b8829117a481e514854cc411237604fc6d4070c2f3c01f75bf72fea2c9cfabba7104ea 1 0 \\x000000010000000000800003ea19c7a1ca86aeabedc6a4cb24ad684cef1d72164b91867c8842ab0a073be079ba1b0024ac7e54dd0b5ab621dca976874eee240a9eb861e1cd10db9f1af53ab338234e955e6e4351703365adc597151cfabbe642268b96828075b5054544811c11d0d2a8c88637a2b9dd5f1f0c86f78e81eb972ff05abb9ef0263c1bd31af93d010001 \\x42e92af513b9ff605d6802cb259ecd109877525cb0cb4b8b4ca4c83e124999d95696be95971dfcb8a9a4e5cddcc40b79f99141ee9e2f5d1d1c731f9be629810c 1663606390000000 1664211190000000 1727283190000000 1821891190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-319 \\x0aefefa36dd7ec756d01167f44ccc8c263633e5da978e627c63fc90f1a043c4c33902c5af8cf9ff38e2da2b12b42794cd8496004603a8f9bce2cfd874e67de75 1 0 \\x000000010000000000800003c8e495fd92d7a9680d1e512a7fed449492e87906c4cbe872f380d1cea5b01240732bb30ba20a46fdb541fbf90314571d736fb790077ee5b3a02b15aba72d9bb15a081e370bc12c8542b39b837d643a40df83e57f2d33ba1b16c14e4838cc11216b172b9ea455562529318ebdda43044dcf05bad6ec8c44676f3d5493abcda715010001 \\x1e57f41f3c9256971c4e5b97dfa8b65365a04a3224c6604300bab6ae1c6a39e0efa5a951cff332541ade6412df19813a5dbd12d55458b723034aa644e67d0500 1669651390000000 1670256190000000 1733328190000000 1827936190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-320 \\x0ceb4f00f5f4d7e0619314deed250ced4215483af14d6e4c5d5814befdf5080c072fd05edd10eea2c87869b6ab72aa8c84c22d7f275af689e3fbc13a96b7d285 1 0 \\x000000010000000000800003cb724724dfe03f37db4710a86bb00b1746530c901c8ef8b88ee97cdc48dbcf0b7a16e80db4dd3ac84444f22c394c35c1aa6d125a3c85ac7904beec702178fdfbb625acb6bbcaa3dc62da057f0b342a458754114ad1503d60a569f926bd3893d503e441a8671790c237c43372ab214b51135aae2d560507f525a1b281037289c1010001 \\xe7dd45fcfa337ae99a751ebc632a8abd96fbb78a050ee8f2c70df618382b12a81ccd04df3f20353ebcc0ec6e47e17616c47dbfb31da5afb3037b0478d10bd30d 1656352390000000 1656957190000000 1720029190000000 1814637190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-321 \\x108f8a7a5ace0d085edc201beca4d9ee59702617ef78750b7f0a986d3dcc5dd8ebdaec2547f44bf451f465784966b691889a04740b81bd5a9a074328ea6a7656 1 0 \\x000000010000000000800003cd04e188f1c1ecbd6d9e32c7f3a34398456ead72283f3fcad884cc18f7d5eb359727e462f30a8c13bd16c7cf25568635886e054b64d972666e437de5b9a93b88da41631896158087b489aa54c0d1c67f97bde28e0c69132dea685523a7e203e6ebb6a0f68be21bd5d3df3fcc1febfa48839085b1ab8097f8d1eadf2a409e94ed010001 \\x056a529f02598699f10fddfa6b91bfdb7aa19e2633f4c943610e1c5e8f6edce5ab594ce651ba52180ae7c2cf2c1d6273922681435cd9f45f3de1485c228c1104 1670860390000000 1671465190000000 1734537190000000 1829145190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-322 \\x113f027f1933dd70a63dbcb44e23185666ce8ae9af8de21b994501e6665f2cfff5ff940ff117e4fa0fc5675c25151442ab0929cc51fb3f42db6772196bac13d9 1 0 \\x000000010000000000800003c70337cb75a8678a3a7a62a4f805e9d75e2f312470379f7ffd67892d5e63b70d7e7394c0229d74d8c4ace1e19f20f070fbc9222bb63acb0d122c62c6c237d208e0919c9fe70774a8abd2d7f6fe6d34ffd9ad6687620000506a0ad88e6531d40193bb868e67f8b42b018d44ba05790e99f9ae917384a280ca9db9ce56abddf099010001 \\x7dbe1429d568155e6d79787af0f74c117b0d105526af728574f9c5c5eae1e7eab04e9161b5450fcf76f39c5c1878e384367f2c499c9d4c1cda6ea5654506f00b 1659374890000000 1659979690000000 1723051690000000 1817659690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-323 \\x14637413a9d4cae245bc9f005d7379ca5b01472dfe4f3bcd12442eb2a0b08daeeb920c2c91a25fd9f1454f7c075f19b62ec0ac040195ed394979976e52579457 1 0 \\x000000010000000000800003b5c300f73ec7ffa20d8b2b7ebd53d096aa1cc5737c20447702474e39730c4fd3a5cd986c9645f0d23f664767082e0339741f067c43c4da86f4353e74bce40b543515fcd57b232ea46e0c022e4f5cd1363697179e992ee9166ea3ebae007445bf48888b8841b7a14a45775b1ef34b5e2ef0f735750203730463df61a0ed0ac893010001 \\x4f1b9f335b3b1a64b750290618ef3ae0f89a9f5b741648d5edab1c8322f44738507f9795abc13fa602f334913a6a2d6a32050ce18b487ddebf3b41ebde0ed304 1671464890000000 1672069690000000 1735141690000000 1829749690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-324 \\x18d3be54e7ac49b0160f0bbab709db9a738aeadb9830991c882f6833a7a4a0493ce6887831ae3fe3f7ee6fd9f81b8bd98772231abf7fedc8503fb0eecf3b6388 1 0 \\x000000010000000000800003d02dc156a553001b26e0f641030d464d124f633334e17d6d3e5d0d02b688c74069a0affaab59dc27cdf5b0576605bafc261d495cfbc15da78e3c79ac5808d664cca8dc5577187a51b1c426341315be45f9af98f8998928de543decc5e15c789b17802150723a40290feeefb98fa0861db419b1950f6baf6d2c348bec7dd1d003010001 \\x7d2f684fdbf497b5f67a7881ccef3aa06c51ec0dbb14369cb7bb960f75c20b7c1805cb0da40050f91a726aaa81f66f831432fe9034cd4612c77c50ddcf880704 1660583890000000 1661188690000000 1724260690000000 1818868690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-325 \\x18a72fc0b5dc44ac2be72ae4b78bcf79a5481ee6a24bce352a5e9cd395f3a045153d9c42da4fbd5423fd94e4d26a7b248ab613cd84fadd90d0ceca1f666e43a9 1 0 \\x000000010000000000800003af7958d8f7043ff5170b2899bba89ae9f7adec986d831ff931cea27efa3a910dc4808e3b76ff3c546551297594ff727e44513535760c06ad3491021fb31ddeb3881438de2fb1c2798cd599e5f67f221eefe6b4d9c6a123facd190a8eec37bf56507a9154b3ff1762034e1110387d449a7e0bdeaf97e63e338b600e841fd8d1d7010001 \\x78bb7a8bd95cf0ae3fc03895a24a98bc7964e01742db3e362f8c206cd67149063bf95487fef0f3a92fc673ee6efe61bd007bd61776348e060b969d87ea571f09 1674487390000000 1675092190000000 1738164190000000 1832772190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-326 \\x18c771e9db071cd2d3f0bd169cb71c8b5671ba7658929167f94a302bbaed6266c655da79de66a132e1ec7775138b7469abaa4d00947814f73b847a70b16fe3fd 1 0 \\x000000010000000000800003b753b539029bbbbb99b8c57e751a660a67deedef9858a9d31a7c5c34a90f086563e62337f8c3c628a48765df9999f6c0b3f9664c2828948ce14f66dadb3bd256f20ce595739fdbb18dae6fa567841b9d0ec14ebe33e230b8335b62da7570532c6f8d415ac04aaccf53a8a5f6c35ff7795d7bd274920a70662d24e2055e99f1d7010001 \\xe0ad7d556e7c73f8da582c3bd9987add19d6de63469185fe8fda1f92fc8db562edf3b1f784881f238cba3fd25fc91b8ec6658de710a8fd509fe9cb93fe14440a 1681136890000000 1681741690000000 1744813690000000 1839421690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-327 \\x197b2c0948c259ee1dd66585ba564477a507fbbb615c9ad7da9d6b168f326c1ac7a4051899150a651429ac3a44661e1cb1ff5d66bc5e3810ca07ba8eddfa39d7 1 0 \\x000000010000000000800003b20b58e2522af21a3089ccf095967e87166160a03d18d72617ded582266fd8783a1904690895235e800a159b171edfd5c845606dd6d11ee36c063bfea95c1d3988396f7125c962a45d82aa40398706a145036619d1ab0eeb97677eccae95fcc88f680de290bf158a4dadd61f10ff37c46af312405188ad61d8dda49ddc04682f010001 \\x9466f29c609739ef4b83b324b1ae614099d389163b7a0a819f7fddbd96391a3b513e3f9bc3877918116b54a9fd8a1024b1742db052b487e23786f81e6a5cff0b 1672673890000000 1673278690000000 1736350690000000 1830958690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-328 \\x1aaf52066a2030ea117526167db83268d2a5c7bfb7dcfb62891aaedb8c46d6859bd43c2320cc568007fcb970e4d6db5742812fbbc521a41bc2b54dd4da2d8b15 1 0 \\x000000010000000000800003c0efbeba403de79882dc9088915f51ccaaa36f3e59175c2ed2c415e6bd87074e0c23d91f18d0d5f06c111fc83636a3b462d71d4d74fc01d85d9392690f7ec30dce76b788340f591a267b353e155c7981fbbdf730e6c73d91e217c7fde8313081b56d43ea8ab8c78efeb9308cda92e7968dc8929720c0f616d5f95c446d1a7f4d010001 \\x9a524fb666aaf487847d3dd7be7d61afe4366dfa6ee16fed7ea139bcf80ff70eb2dddc72f57e20d80789ee235a347bcd58b702915265e0a7c30e0346e3d20e0a 1661792890000000 1662397690000000 1725469690000000 1820077690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-329 \\x1b5b6e48468ff61fef7f80727c57b75d8485deb4d96ee1ee9af60be826e41d53c3e104a935612e934a458d37daf8c163a6764854a0614b13a1d8127b9e6aa46f 1 0 \\x000000010000000000800003b262779b96789732d0866a8a4f298b09f188da2e7cb61fc8c3b21622ee91a0a0e6e673aa9d0ee343e3a56c2d5e888178c2729762df380169675a875b2e7af48612b1db5d15b5214dedfd92754dcf7960821c53a1084af26aa669252a90e85c44f0911c7477e86152ea3ab39b1e59faa64bd1660a5762acc40407c691fcd53fd3010001 \\x9ea04810db181cfbab4478a6242e911c76e210fbdf28b9ffe86b972d56f5a03297b5019adf1747c8be6f6aae4f125d8285c249f40a9bc3c998d5f17bb9610401 1658165890000000 1658770690000000 1721842690000000 1816450690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-330 \\x1c2b85ee42c09b368f05cd45042e2734ca39458c06ce1c2912a6eedc6d7a7c154e81dc1aada8d859a44d8d899dc418794270c8306df982b2472f35d6b58b7627 1 0 \\x000000010000000000800003aebfa125aa497b5740d47aca8969981c0890816be2e16a1eeeda2d34ee8ddeff293f787c8d7ced0e2c094c0db5de32dfb57616c1dd68439372de888506d64692afc9534f08eba1f7bf6a1661950f687385cd0c1f4062ef1409b57de232e5dadb1c7c6d34e96d31bc11ab920c51b13e20930e2927eba3154b5c5f0c8a0ef4f3c7010001 \\x39269f2eb19f7323beb7f0e2b2b25ac649bbe0d28cddbc2b7ce7a946058204d5cd80863b34fca535c1dbacde7706f858bec8afd0eb3240957506838d83891908 1656352390000000 1656957190000000 1720029190000000 1814637190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-331 \\x1d57905c69b7365c4dc1b01517e7a07d0cc96d06ad296825f83e9d05ebf400c7f3783e9c423874284998d6557e0287a2ce3572764c817608a3b0c0c0324f1dad 1 0 \\x000000010000000000800003be046189fad34fd793b5fdf5871bf6509785d5d599b710b159210e7570efaaaff5a09d3134f883c9cdb5e54bb6b6cfdd31047a7c5d35a7409484db873738f9dfb8119a3b1f650a01914f09ff47920a54c3daa1e58e4454d403ee258188ee6c2d31bead9ccc21a529c157da3a81384db8a75e27420cf0c3fbabc6bb07efbe46c9010001 \\x47d1782e5343d63a5b9456b3b5e90f04eb6bbcb55d82ea6702d2179b534665730bb128494416a8924a9099eb0c3feeee087efb7481de45bb8d289e811f546801 1682950390000000 1683555190000000 1746627190000000 1841235190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-332 \\x208fa7aa9e514b1102b9457cf5992f6c76f25cfc27c0f018c5f24e9823f125dc455fcd34277cc29ae2701a40b5ecf67b2e5ae3c99625be6035bcf2e6b6dc740f 1 0 \\x000000010000000000800003ca0efe18745750c4555f37c235bf1ed1a32cff4d4ebf459f0dd0e6254294766a7d98b73165e817403ce08d6009f2308d7f070d35bb32954528357434b6288ba8c500cb55990af7e6b7a1a8b637412edf9b05af04fc82969de03d2efcc430c495c1f7d73aafa551fc1c8a5fc1d8848d448e641620cf14b0d3433c9c3b7044d113010001 \\xef799892d71583fe4d7ffe5b6d15d5c2d780747350a73ea0b44c3320523e669a5a1cbf2d2d880dd8cd96cbc673cb27fb797483df9a2739cbf20d9383b597bf0a 1665419890000000 1666024690000000 1729096690000000 1823704690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-333 \\x227bdf723aa728d568ba250e5679df8b0f58c1f5faba80da6d2c131b72a8cea80db65279e2682fd0ddfd93982e1044682b07322e487122ee7882884d25871260 1 0 \\x000000010000000000800003e9087eb08523d1bf0f4b77f36d3f0a332a163bcd2827e68df5e89543881f79a6b0662d16c0aee05f6b50334675377250e6b1acb790708502209d5c2c3c85e78e3c2e655446b418c673fd2837492f4a82a66801d89f3dd9c04143f9bf8c119ce87220c0b5fd8e6b54d5fe3d0223943b180111cf1d0774c245e9a8c0f388fafe81010001 \\x014f7d2f5431b84614271ba4b58f2018c66dabd019e7fccfdb0edaa1e9bacfc02ef595f1c3b0c8e519694733cfc1b8285dbc586a4225dd5792bdd0a4f0287408 1672069390000000 1672674190000000 1735746190000000 1830354190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-334 \\x2397bb39e5e18dbd843141d776423c7cee7301164673fe15668dc0d3f3651599938e4b90f7d3ad419917051fd6db871d214ef229b705455bc70a5b03dc077a04 1 0 \\x000000010000000000800003ccc34fb4c65f7c8bee974fbe88340fbc10d65904f66933c37f188b874de7d07b1bb044a1bdb28f0f1e995b3db67177cfa1761a2dd555a2428600e568f306dfabced54777c120261255f54dcb94c3fb5f68e7a94156f44c8e648ebc77c8cc24132c228a8767ba8f2b4e86720d6aee257dfa6d65076ee092b551a6cb6a894f8591010001 \\x16abe100db2a00044731f97ea6954621ceb279926899120f147df4d4563cbe4f48d29931fd1dc9187da7a16c600be5fc4bbba3e66c2bfed55f43a9b714724303 1674487390000000 1675092190000000 1738164190000000 1832772190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-335 \\x2a27a64f91e8e6289dd8fbcf5d85a2135d1932c50f51e8ddee36c6877754755bd01fc99c12573b04c583e086f5b194af0b0138a75dc01980eb7d822dff497a58 1 0 \\x000000010000000000800003c6d4f2927f030bd29f82e2b3c35129c8f42634fb2830c9821dfaca0c1a18726698a1cf1781cada739a06b116c6475a8c30e1b4885cb050805ac633ac532b193f9d100e0cf72b7c7707e27484a6764ed6b96e94a5a68a4ccb61cbaf7d08061687c4bf4ad968aa6a9c2570b769c06c3d5c673b2700b6029de905ffd49821af91ad010001 \\xe8111bcd0ebe9c822fe395c5602f20d5694af12f953b4f357984b5a4fbf76493dc9666c6da6f028e4c1fa738f197dfe5b36f2ef39758b3620d643855bf6b6305 1679927890000000 1680532690000000 1743604690000000 1838212690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-336 \\x2b938dc7c978cc67f4c23d5ec5be23c08c1c01767058eac91676272b10b73eb016196c0e361a69955a957f76c593350e6df2e0d6d57e24a6f1baf8ba68c1b09c 1 0 \\x000000010000000000800003a03a7b29c6dc5c7755614d0d5e0a7f5afe7c5fc88556d2ade0adc0f98f18057a6e58bcbb6b6fe1d66deef3f349a0eb6ba55d2510a56dab01a5289ad1f1d32a7d184990894f29717387b18bb0906bf321d23164bfe16e2daefff2aee9295157728f058f4eb87648469273e0d1517a1b436a533d944bd5ee07158d53ab280b939f010001 \\x7cd1bc1088d7f73b318d37a3cf8a038908d0d13abc1397215540778a5c99df65a47d614f252362b927c1026013223fdc4d70c6ce215afd2bd54fcb03685a100d 1681136890000000 1681741690000000 1744813690000000 1839421690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-337 \\x2b136a4c7d8a6dae99978cb1f5656ca669949263e7cafe560dd920485734ad40393833a2be0586abee40b92dc965a7d460086c3f32de7a1ca70a5b95b4c4a3ea 1 0 \\x000000010000000000800003c22af53ae59e48a9398994e9bbd20ae80576102802f829dec3794efb34b7b2d96c42e43f90ecb76cb819bd77d7bef73ba0ce1914c84cb8f926d3556332af5b49eef3178935f00d3379758df6cd13d568ad034115b412c11905e3fb36683b0603188c2d24a23b028d59445641cfd741c55b6aed62355229a5240b694f0d39227b010001 \\x6070b87af6bd4674c0d677fcf8e2687aa3c19ef34e762b7ad640298509ba14f5c406f11cf641b162f5e6d3a387de07c445fe1441e074172f17003b8feadaed01 1672673890000000 1673278690000000 1736350690000000 1830958690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-338 \\x2ddf18d3ade2eb2368b5f98f3c15f89db2c595cc768613ecceb2d925ac8d8e06e4eec99cfa5205fec635172130caf5e4a1cb338fe1f2376ed487cb129656ed17 1 0 \\x000000010000000000800003d909ebcc4e75e9dea125a2705034a71a840f5326cea170f7facd2a9a4e24e24c993c292747bc4eab67e199d271c8006c5f8b268a125aa121053164f04d7c4252bad7fd70a50d94922fc3568a95efcf8e984185bee9ba6b7a7196c9164120839073899de01167f5e566863dda48e3886937dec7db1d8715eee85bfebbf5c8655b010001 \\x631b17dad1c755c605ecad2e335fa9c29f32a06e168f9776c5dbb265dc9c767b8661123594923e259ab75c485d42b225dad68c0530ddb921bd0bbe829ca2e90f 1656956890000000 1657561690000000 1720633690000000 1815241690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-339 \\x2e2b9196b41537d26658d319055bef01b836889b1b9a5cec27e0867172040bdf2523fc5c09905077b4f013c3d6e800f3c72c030862147638a5930a81b03360b4 1 0 \\x000000010000000000800003c4a80b4cbecf99056cb2a6aacf0d0d0b2c9b75b171b5f76c746904604b886051e701b252b1996e4003e12060ef372249c09e1e7261590dc563f8b60c45b977cb1b38b11dfdb09fe3e6e6c21ebaf33497f554fcd466e3f0f4c0927c7f8c5329efc23af872b9e46e22bf2fbf156081cfc6c256b80e073be0151c56111ad9f9a3a7010001 \\x48804824be87c8fb2195819e6200626db39a94665aaba066aea26881663aca4c5a65e761c715b3f4bd0851f19c366448bc74db73b70756a8b855604fbb258f09 1652725390000000 1653330190000000 1716402190000000 1811010190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-340 \\x302b7a70243b81a088c220b9de975c1babb8b6a9121cf3f6c1fd2e43bb4adef920623610b9159f24e562ec21bc27dd1f8e40931b4079f52b4605803aac96dc9b 1 0 \\x000000010000000000800003ae74ef41917faaee86f94ba7657980d5916864805222a79ef72fd392e0610339045c6e482d66c8ee8586298c6a8864f1be273d0c1d8639687e7aaf3543bd89e3675edc7ef598657e583afd49bf62c5034ddda9881f3d94e9fe23d58a5f788232c4160c7d8815449a1bc20a33e62895019cec0322b59c7b74e520abc6530e1201010001 \\xff3e801b8ff06d7775a76a780b4327a4f3513fca283a128b358f836d55f75ea44c6540b80ad02218036684ecefec6906a19b6ee78bb3c1bf94f2bc16340bf503 1679323390000000 1679928190000000 1743000190000000 1837608190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-341 \\x32afebe73b770f9bfac0985a6eded216fc7c4f0abc121049b5e531eb3f99c660eb34e86b34a2f3bdc146de5094e0fd3ef9bc6237c470a916cedf87477f633e71 1 0 \\x000000010000000000800003cf52226db2d4a692a1c0fb99de3cd431bdbdbdd8942a1a2feaec70144e0921e300b2dc204109a7f051a10212271c9dfff66acbad7c41c81a7f031c0d6486a0f2fbda8a9b8f481dcf07a426f4f64ea572fe06aa28567f4cf7cc88ba27cea55b740b7348086404819d870f4f5de116fe6e7f61467d19f35bf3f0b32738868b290b010001 \\x325c3da84fc141ca113bf6afc5e643458909c40711252d0de4056f921a9b579e331a7b3fee81e08ea8c46253c6224295ff8fcb57b14a97e08dbfd8b3f1fcb50d 1675696390000000 1676301190000000 1739373190000000 1833981190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-342 \\x33172291b4403e4a09832c00ecaa625155412f114afd2abf8e571b21425ecaac459e71d19baefb37d18d01ff1de17ebd68a8ce150b78df19811754c0a9786a8a 1 0 \\x000000010000000000800003c005d6b4edbf83704eed39a484c792335f9375e245729a856a947c923ae0b0970a7d132a76ba71c2867af6ca8d19ccdd54077d0538ae5ad9d92c65cbc46937897feac68d76a7a7267d8b82c5fa939cb45a1bf7e667bf594483ab1c4054ed5132461557467703ce636c02331154507fb07f3a4b64267b164e325adf29db23309d010001 \\x0abf5811310177002eeab748f7a193884ed553e2f629232cbb55e2f3b76e0871eebbc08e9479f1124fae7c4fd5e2160ac6c543bb5de812edcc06f1b406e37505 1653329890000000 1653934690000000 1717006690000000 1811614690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-343 \\x34f39c2b850f6d387dde0a19de98f9f71faf405aa8fbd2737586fc1c1335c3d71cc80b012cd08b8093d9309c50a226384ae7fbce271baca11edcba53caaff144 1 0 \\x000000010000000000800003a0046e3bb12c06d192a70e1331646040092fa32ad57ee6c5051eff3e236d265eab8d5cdc598a786d749eff804034143f3869ce2441022ee53a650a839bf9042f73a4c52bbba1f4e33910193deb7ab869d9a93bffdabefaef7ee1226b4073b2369b63b0c1554a8a7eeb9578a988b0c1b8e150de65b67b5c2150b651e6126a80cb010001 \\xfdc4c2b012535c6a2fd687edecda46565f2c7658962ac6e331cff95c1d150594fff044bda4aca99871c160482b9d063d125bf4b656658f27a87100e02bb0bc02 1659979390000000 1660584190000000 1723656190000000 1818264190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-344 \\x37cba9ff604a525e879b2027826df06a9a1aea0a5f73c7ffe619d985c136e344c6b7fb023b85c105b86304f632a900fe63ce26460377a405bc4c6fc73d3661c3 1 0 \\x000000010000000000800003d23d66fa853043c2d1f8b45811a8a32f1a47c53421ddfd0120e7d379ce58a007eb7137f57891be81cde4a829b5d4677b2126a4038decbc600ec79b5f468536a8bd43f70c5644832a96b62783fc49f40b64cc1a70baa861ef5f9e369c9f36c914358d620030017c9ad18ee861ff1b0a74664cc208ddb388435a9ff57643764df7010001 \\xadd00154617d7f175ad57cca26fd29603bd3654c311cc293cc1086b04a4dc56306f342cdf662a6f29c01d5a51be29ac1a5703f11b920c737fa29d539c12fbe08 1675696390000000 1676301190000000 1739373190000000 1833981190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-345 \\x39a7d1805e43663cfd32a963f6b45231ba2069df440d7634125dc95f7daeb6cf7108795d55a32431f4ace70cd7400389a7a8e24c3443415258260efba74203fc 1 0 \\x000000010000000000800003f9b1ac2c639284df36f128b76b6315e665d822eb78b4d655baa4c6e534a6496cd2ce9ac278cd2919c9ae18d6fbf95bc7aee5b7d7d4fe014fe02fc6daf33593152119f53cbd4874037feb3552765af748621552d6c153e7658c0ad00ae78664bca7c8e5e8c8caa32376b2a819abddf6b7a7567ccc2c4a4f6c281a5e0642a7e705010001 \\x1b9d59334387bc69615fefa4a293cc945ca40fb2ffac061866c751c9dbfbd127ba60cdf4f9baeca768a05aff7a18a95c75f07c32ba2069c02c8e2aa60040fc02 1662397390000000 1663002190000000 1726074190000000 1820682190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-346 \\x3b731dd904b5f142e2cf3e5ad5317dfa746df8f5185481d939c4c1514b0a42b5715348252ffc6d80e98dfe593d9a762e313c760ac81451e085448cd89ca8c787 1 0 \\x000000010000000000800003efcfcf494f100fcbef09ac0aac98abd74a5719af8b159ce2beb3c01f01b9efec99ff245b2299e0940f5d894d075576f656301ad725af01ec40702d841020ff6b944c371bfd0f462000c82a82bafe6326cc04d7e455fe5181e3f596e480a50aaaa71c3775f6ec0ad9cc09f31be8efc916bde128d9e2144ddacdd9ab009c619a3d010001 \\x8c22c4ca907c7301d700f2177b265331969feeb048bd0e5674acca0d1730ebb747d9dc1008e32aeb685c29563abf3e117fbc574b2e22180609d35fa75037400c 1652120890000000 1652725690000000 1715797690000000 1810405690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-347 \\x3d9b866d794045d008181bc43f5355f0b050cac733b3892ca51767ff9610df627a89d09036908793314f311dc88cf9b61651d31fc0570e64250b5e04afa4d0c4 1 0 \\x000000010000000000800003d34f534a71aefd9016c3b6b871bd5778a15913aa1de3cc09380412b9ca6d54944188cfb5ee2a3a840a97ed7929a0704535c1eb8ccbea6836c57079ec123acf75d284de1f767dd5b5cd16217ae7d26941a5d5c4359885509ed5b55c89ce06c2a5ffbbc7cd7e62cc1d16a743493185c5dad213c5f616a7c3bbc7df547263d95f5b010001 \\x2afceec070382b427257f5d8d4d3dd947321bed046781e53a18380f77e8462a68fa74c2eb1e12bba073dff888e0662c7fa3030882f34e6cc46045a2afbffd402 1654538890000000 1655143690000000 1718215690000000 1812823690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-348 \\x3f6311e6605fdedf47fca8330062823e57d257e2b63dcff89c47a2ec330db825c3253ef374e97c66a3ec4b307cdc99594d49160ef58bfc0e33806c3efee0e813 1 0 \\x000000010000000000800003aaf3d793b98b12abcf579f011e84d4af8e3d508b3daaa28cb9b1d9efd86aa2d21e038eb7bef6f1c68f62be4554916c977b365f8458396a3612f8d47be96adb576de6d4b1bace52bbd72567c4d6d89f0c3cfba854d8dfe0e966ae66fa12fd6d5e4e15a9b49f3ae755bb5c62a035905dec09ac7c7405c965b06041e84295de0adf010001 \\x858c109c874c0c4375646b3b81ba56ef8fa78ada2c39966f0d55496880719508ec17602f1ea9d9a76bb6ba5c51635581ac088e1324eadf722e722866bf5e0902 1655143390000000 1655748190000000 1718820190000000 1813428190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-349 \\x41c7f4eeb32c84c0ea6cadabe10396f09c42a088ac6840cbf9625bb1d3320f801b02851c9679e9dfce89dc15ddfb05a098c2d82ffd321213ec1e631b42b00047 1 0 \\x000000010000000000800003e3b43732d884529c67c1ca84254ddc70b6d55961e34f4f49884d5cf8562f33ef63065981db02a5521b01b8eba35e85bf632f1a6f1d9f2303763bb9219b7ebeb43b4497fb679707cabe1abe0fde6c5a6f7c3450a5754bc1e5b36c0cd8b384dd4bf94af1a855a692a89544e4a8c4e8f0d030d58f9ac1d8008f720c457049d8e9b9010001 \\x6dec0edaeb05f8af51ef74a72270d00426a9ddf4f0895c17ae761adef4336bf07ba8463923c196c9c7cef0b06d6b0e5a000521c419eff3c18e090bbe1d13a108 1677509890000000 1678114690000000 1741186690000000 1835794690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-350 \\x44cb89741a65137acc95e01514efad0a7b595fb444f2a842f341c15b75242d3ec46ae0255771e0f618db292746e7dc34a32409867e123a1b806d61159b44c96c 1 0 \\x000000010000000000800003c691a43a94be0babf85d76bbfc719b26e56ad36718fd35517885ba05699ce3d9404654cc83cb6035c732b9a562b8d7c748329d4621fb281114aa79f5dd8ddf85dcd58aa699ccf0a22aca8a210db2ebf8dde6581b6b64ad4212ef6f069fd52794a7f4ab425d9fbe2e14b3966e8923b0acfe5e8164fffadc22857bfe74fdc803c7010001 \\x5547b9cbec492d792410d16ab6240294605e3affca41a5e7db80561c2846ef4c5dd474d3774ca4b0b545a165cb3b1c4fe50821d6a0c58cc9d20dc2684ce9d70e 1678718890000000 1679323690000000 1742395690000000 1837003690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-351 \\x464b11d43097e8ec7dabe0feb964845c9620c40295143bec5334cb20599d1163eac6f6fb76720994428a53ef2c02bbd7f5167e2076cc2f0913b680b8b633e821 1 0 \\x000000010000000000800003d0b73aa760ba5e666475993e65106538c7c746aef5454e0ade74e9af13a5aeb7ead43af72288a4e2078af0362f3b6c3cc23623b4705332c7c2c8818b59f3dda3517716021057b447426c15abd7d6d76654f20c88b0b02b0e2d63711b34539425c8a7ee638162e4347851c7bbeaaada2f601d4ba25ea4002607332fe39b800443010001 \\x46a0a389eb44c9168f680d83a3fd6d5f3b65b4c924332ae8489e40a91288daef17b3dfdee9dc06f48ce84935cd3d396b029aa78bccbe07b2bdab1b20380c8c00 1653329890000000 1653934690000000 1717006690000000 1811614690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-352 \\x4bebc5c8ddd64f96938ac6e82600a9dcbeaaddc709540e93dbef247e3a238d7a779e2ff71d8a7feb3a816c0cd37c50b36a6263703c34180e3f306c45d5f01e64 1 0 \\x000000010000000000800003d861350bacd3f48fd2b6139604b290cd3855fb3ffbe270f49a5c04f61a32a9dadbba6efa95b58aa9c46d808846c4caad3c161e3c147ca65e65824aad653ad1bfca30fff04c6f7a23021cde583675e32b7dd446c4c4789e8306343d587288ac89db04cb95613809356dc02d4acbc77ef036706d7ce8e7ccc9fe8cd644e019f00b010001 \\x127ad0fe15dfae289072babe3d2f2a0abba91d3d0b4abffd0401e9a089d0c88589a6a43c586105e47e93489cb61a93427b3d5db680a864f7dffafe77864d6305 1667233390000000 1667838190000000 1730910190000000 1825518190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-353 \\x4b03f5efca411012ba2367150bfebdc6ca6ef58c1b22dea29e27e0a5a197a4dd429fdddf8e999575e584d5a7524967bc98f079d97b602243cf73d8738b204907 1 0 \\x000000010000000000800003c5d9e550b5d409c54266f86080c0d15dac5089185d238f07d1951b05a9234d5abeb70346335dc0c2c08a0021bc7390f778bbce447f1472c15ac275dae4c20b447654bd21852c652b0f79902921c1beab59980b06827a7addafab588c1ae3786ca41ffa2228f521049a1ed58b0fad738313a9232fb20ca1afd00343f11579f341010001 \\x07a3dd1aa40bd09a09a077b5b0997c2979058ce299d05afb0a7ca51a4b902786476b99770b8daa9f3f691671cc745c0125d345b3e30e7494fbc7f1a554dbb905 1673882890000000 1674487690000000 1737559690000000 1832167690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-354 \\x4b4fbd22bf9a30fec831eda7ecf153aa06018327a6c4be1e60283fa413c3de239b60286aa90ebf91e9d68d9861d09b49ca497540ce5a9fab0bed17645770cf26 1 0 \\x000000010000000000800003d0a18ac2312310a8a07934b8c9656385643b057bbf0f72af99651eef32e8a512f1dd130635417fdca6dcdef5dda0fb8fe36f3daedbe1ef0be3d826104be1f40e86e04f11a0b8a31a55965a66858dab3212a08cd8a4e1d34f1e9f76a20ae44d605318a30a02b66f87528312b991c85ad275d3f52e6b5ad72e4960007ea2a1006f010001 \\xdadec52a64228c061cb848d306cb1d00415e3bebfa67d214080c5a075b79f9b4c66f685b1ede799c923131fe217693be1d197fcb9550a967aedea8a005dec80f 1661188390000000 1661793190000000 1724865190000000 1819473190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-355 \\x4db3fe4d2219acdde5f39573464204d955c857c1f5d8805bff7d5e13cffbcebf59ad1e4226bb79d407b7abcf74ace227ac0b3fe24711c53d76317d6635f6551a 1 0 \\x000000010000000000800003d94eb4137cad6a2d1cef51de67032017266fa769af86f0eabb728a07fe2b86a56c7552e1faef99657c7298bf59a84874c2a3f288e8453dda0e906a8de7fa19e600681f4af4d49a3139f494309c97276dcfde8bb63cdaea7ba044c3aa99bc708604179e4f0d09e02e36d8eb32b963fa7446a8dc0fefdda668b8f64a31bd188b99010001 \\xc923dfad84f1d45ed4e06bf1cabf76c38858fdfbde1023a180c2b6354830d0e05c99fa76412b58f7c8024a6d7bff9ccb3bb969f2ed7b1ca606616a7c9ec67806 1672069390000000 1672674190000000 1735746190000000 1830354190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-356 \\x52a75ae48a0a7d4996f3bf9f45a1d461fcd739a7fd0ba941d3c735c70f5ebf598c2c965529dc8b0fff7ef635c9b278a9d2301ec78c19a61ca1a92c1c6fdbbbe0 1 0 \\x000000010000000000800003beb97f0210fae103ac9575078425191f8ead4f829aa28a551b042f5bcac246c66e059b608b18f7c34aec4d81094f70ab32455bc8eea978174b2a0f6dbdebd64ffc0f81039511a59984e2bc5ab8a4f550301df82daec4d85fd499d84a93e8486d2bed1eaae77cbcacbbbe747327f1efff594dce26ca333dc4b4a8ef7ece1d3b91010001 \\x49aa0cb286be0cab974754c9ce95575b3ff575c6de96f60edbdaba01b9be70bc822bb188a43407d4e9719441d11233cbaa22859f1fb2b0eace0dac6634e2000a 1666024390000000 1666629190000000 1729701190000000 1824309190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-357 \\x56d389a26c75778f613c4a5f30ca0c085cd95ae2786fbdc985557ce67bff7c57bcf876060a08e7dbb5bca862ad9a162a1cd41076af9f2273ba8e9206ac75afde 1 0 \\x000000010000000000800003bd8a38090e3c190855f21b3c4b8718702b100dd01d90c57ce85781cfa00b4aa2c719606cdaa9f1529712a8bbe427c48891c841bebb631c7dfec6e72168f3dbdd3a266f1f95e0e0188cce283127e6531bacc1a1503f85cc6298a3b3c5c9f2d60f0813dd3150adef2a4056e6ff8fbed6c378159749f46524de3de67789e9f97fd5010001 \\x25bfeb160594171fd27e00c9feebc373c113c251e6ada9a9432b9b1d1d2115d7e858bf75a142645ee1dd3452a7c1e5420dc5ab2fdc66d36645dd869394dd5204 1678114390000000 1678719190000000 1741791190000000 1836399190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-358 \\x59d70f6c59ec618da82c8ea2200db5b44bc8561d30102ab1c9fec221e2b4a6dbdb96ae27c3a9c59c77d53beb0754ddea49ced3fc942d0e11bf54efdb0c2dda46 1 0 \\x000000010000000000800003b81fa69b42eae103bb18ce44b122d889aba2d49cba8aca088dece74544ad5f61226b21fe406596e952ce0a1260e43989464fda9186c02d5afbb68cc8d5d412e7c42b582dec3d25a2ed19c86d6a3ed90e5ec65ff8fef72a64633054abf69a46c476341f6bd59af32f16592af276673677b1dda461cf441af53fa243148af446b1010001 \\x58c0976b0ff4bd7c2744a37799a1255775efaefbec42ec2a26e706fcc826b16f4e418bb902aefb1b7c8c71bbbf804d1acbc694930a4611b69a39b008f107fb01 1666024390000000 1666629190000000 1729701190000000 1824309190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-359 \\x5ab7e87e5419b314ec21197a23aff8f021422e34d2f583d824d893871ab3c74bb59a106f09cccc6194b911308f27b6010f9d425f3e7b89176ddf94819121c5a9 1 0 \\x000000010000000000800003cb0626c61d3ccc5395130259014beacd8b2411f0610e040d914ef2e6f6b2833397b9ad947803480cd4327748c00ea274fd6e9e75f5ab7d04f1d5b7ef1f3307c62b55f38789554c8defa743f3603667c7c4a2f0c8988c4ef35336fade8c3485ed447348c88ce507453b1605c5c9c415f0a4a796140158c3d2143469935019bfed010001 \\x7d59e83f54cdb4282180fb1aad32e3a029dc201c2fc40df01d56fb7ede2bd0ce2de76914fb7c6f0a1359990588fa94390b53c9a2e1b01b246624622c0958a20a 1656956890000000 1657561690000000 1720633690000000 1815241690000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-360 \\x647f0491be5c0ae87df1c6079b705926d0b4e4e4a291faea410f81c3a4a8f71dbecdff42c02059c1da9f46b4946d7ad1e009e0d3e3b2511590fbedd3c3b85b73 1 0 \\x000000010000000000800003c1cd0062268b404fdddfe4aa6344e1c12fb8834071b1f6b879fe9ef30dd807c2ba483a0efff9b4f2aac6e93f45e35efa58516fe29e9f736780169f938d013cd0632c2c0c3fa9eae5a2800b03b88768bcc03b75248d6b6d61ca649b05cd8ae90e2344f4fbd8f265679cbe62fe60295444d7b791483907629249a9bca382251f09010001 \\x13f446da003e94eea478811225265730f4bf877fbcd687eb9825ed5caf8d88a3fe3551166ec3d52ee31070bb5902eb95b57432be1f6f0fd26f1aa7d8a250e009 1678718890000000 1679323690000000 1742395690000000 1837003690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-361 \\x6a638151277f94ad71b1d2899cea036a6a707bc52b26f0f5a3903460a77f0ffc9fe3564bc6771785050b10de96c7a2766db32b991c0116bf630a08b25a35bc29 1 0 \\x000000010000000000800003e7075929e0d4dc9d9ea56e0e8c77313739261aedb86da7711028cb7bc7a9e39a82aaf79436798355c85f9f69926967c2aa9ae6aa27e2f919df0a04adf41f3f92eb99900e5670ac2e78c3286f28a15ba22f03a4729d5deabd60563ea686bc78753190faee12c343d6aecde19b5ce21240ec65c14633769ec86ee934fdb2cd35b3010001 \\x8d6791ffacaa3a4f9bfac6eefa1189f4f6fc09f041f027483a1f126930db79601d55bdea422d37985db044a1d9f990c613b099c1e672f4caa87621e180948605 1675696390000000 1676301190000000 1739373190000000 1833981190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-362 \\x707f55ccd0a6c6e892d0126918e42a4c7fdd48c1c6ef4de9f1921803d514d97ba9503c64dea4d5b80c23d754eddd6519dc7b39adff021179962b629c330c4cfa 1 0 \\x000000010000000000800003b800ab781c2ea05b0440a57b3cc37baaed6671eafa18d9f952f97e804725d37fc75e05c4faa7ef2c1eb6467a93962d5c7f2fa30e1ead9ec3a8c7a3ced16028ee00ab05d7a5c283f04c1e54100a2d3ead48c5dd2f296143ff32347d80012eeb37f079f9cf6943f0d138297db261255606e059e3c206f7fb12fbb30d3e5a94eed9010001 \\xcac668312808e62776ba934b4a870e99737d96e3b3044964d9f8d61a4021f5d7e41eeab5b92f65d8583d95ee5d0ee3ed5a364318d12d318184f82d71d7998100 1667837890000000 1668442690000000 1731514690000000 1826122690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-363 \\x73135ce22fe072b1d9f0df142ba5f87b5eb5b0ed4a2393c0d3005c2e39914c035a2541b9beb1a063658ec7747b1ff388a951286771444460bade91942e2a0b3b 1 0 \\x000000010000000000800003c3be444386997d87c901b41c03c8ecf01f42f57c21529a9dea1c6188af7bd3e9f7ca9e6dc53a6d3594c34936f0ae8ced8cbfba52b58bca2ef6fb19ea18660664ef23532220cab36697f91460b1e81f3d40abb5804b76304ba1673cfe1c26c2ea68f9ab5330894e604288e5786c442e56ac6812badacc19520aad16e7cd4af065010001 \\x3e49535caa2ebacde0e1ff9a30f95b0ba0d7f06a8c5c2dff77d4ddd6f38209790e47cfa79a6fcf9671ca90ce1182184b28162184ab73a7513499e1e6293ea409 1678718890000000 1679323690000000 1742395690000000 1837003690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-364 \\x77f71993b270fea3dac389e471a9dd2b0a9fec7ba3c305c96f5cde3779d611b853edf21f393881262ae308c36d15f98f369fc6d4ea1fc699f4a02e915c916e61 1 0 \\x000000010000000000800003e3928ef7e563f84d74cb3739b345d1a7037ce555e3580019e028dd94f02723839bb9f6d7cf6cdabd4456c057e1d6784378aa989d5242f9ca58fdabbc809d6c46f0fea9a7fe7ab23d73c46280e3ea31974ea277396998e1b5e0e8b5755e3aaf9ca14daf495d0812116aef49d0bae07fc569d887cd8ad160da8b9d66507793d7ff010001 \\x966fcaeb9d5c6400a3c8a03720c0e4f4dce1c776b422001ea802c30369bdc866328c3d103e8661cbf1ba985721bc98a408056f36cd12c0e427351e9f4b43a40e 1671464890000000 1672069690000000 1735141690000000 1829749690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-365 \\x7a9bca70f3848fde1b313043664394ce4f82477d8d7c4f958a55b5fa78859ff3a2cf80022e391348df22ca3ef86d64d554d61c52bde8ebe269f5da42fb55d5d4 1 0 \\x000000010000000000800003eef5e65463ae224b478206bdc7bf2f9f32931ed0b3e5acc49dd3bc7126816a03ef75a56c09b96c8892a48d2b6f2c97c4a988eac8c09b453cead8fd71f0f82aad5fb271f0b872555f5f0681c7436b2d78275562b20b81bf13eaa79efe816dcf5750eb05ab4daea108cfe99d1ceb981a61b2b66b542ae06afa4c8f23c29a470e9b010001 \\xb244bcbd38d09724082b10fbdffbfa23145676fec8d262c9a9bdd226b70aa7d5c41c13102d270a0ca31dd1d9835a9a1f17ee7864f968ca1aa30597701c4a2100 1676905390000000 1677510190000000 1740582190000000 1835190190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-366 \\x7ebf119fcc61a85b56944c4086ea8374e2f519f210a1b0b1a25c2db6636d23225beed192041748aa002b2849010264616cf48b3487200e1ddfc5f02b083b66a2 1 0 \\x000000010000000000800003d85220193e5a8f598e2d419e5271a4b30d0ba990417183efb5d2c45d5bfd0f73ff43ab97c5f151fb09f2c2cb3d2ff5f3eea8b24ac50be35c013d204fc1cee3c76e63705fa337f6753f10ed7a0e4e4317c2bad404a57d6700ee44453c00a648acaf641f86642d5f340be4ccbfd67c55afff8383c05e73ce946d18ae9dd4fe7ecf010001 \\x79c69bef6ec6736a2a0e1c1800463dc501ca823593808b0f39e811a95132c1f2a45b677f5b1a316c9f720c8b01b2664cad02dd575d205106f88c81609c963b03 1669046890000000 1669651690000000 1732723690000000 1827331690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-367 \\x80e3852bdfd6d556f688495e99feb615f2d09495162846c8b1876cfd405dc7bd66c0f1aa6b0298ed2067e128d29629ede22127fc19a3e507f88cb81d77c30fc9 1 0 \\x000000010000000000800003aec7797f40d0b908434295bda4616ac006e83ab82142d8e8fca4548745b5f5ab45d9ebdf8f1a11dcb323cf7181a020ee77bc92a0dbe21fb1471c2c87679b3b0d9322f8590af63df75f42149650abd0e9fd403ff5eea1dd5b33e251bfe7d20e327d296f7dc9d978aa1db31e172a380b4077970afc16700ca4e31c42a5b5161ac3010001 \\x0a847803c037227cf72ce8b238e68a4891bafe33c2b681bf730523385223fd2b4b3a0ee38e620a86e4bdf69a00ef7fa0ad827b594381a6906095df878d5d2f00 1665419890000000 1666024690000000 1729096690000000 1823704690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-368 \\x8027f2fafd786a917b7fb2863aa3110a7f8e4f772435f4bcbbe155af3b25cd0ada0c9c76d9beb24a6fb946b24c217b3df92b3c51c764e7693631de638a1bc305 1 0 \\x000000010000000000800003bc85a41cf64409b1e63dacd85ec85d365d4c401abf405df508567dc1c86f52d8490216b5c344c7abcdc7d4fb50a6cbe8bf516882231435e176be88d77b883cbc0f2b775443649346b695e0eb03e85207e2d1193901aed4321827bf7ffcb3925175cb4d1563fe93cd6c6c381ff7b3d4e23d53e1027d8fad516053bc0b8b1a586f010001 \\x5fb968837f34ba8fe7022a0bb8f09b5624fb8476a4f90dec29f11f4a92d683e91514ead90486db2fccc9ef02531ba92f0278eaa13687997ccd2fbc3e7b0d6f03 1659979390000000 1660584190000000 1723656190000000 1818264190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-369 \\x80af521776f9a40e65126b16f20f70dbffa03fc6c4d0399751580440a88ef35bfa1e83b486b1168b9116d064f1a4c13d6dce44ab30b0c9b7e4a15585ef6395b3 1 0 \\x000000010000000000800003b722c8569bf026848eb783f3a62e8ee5147780cefb80e828726254c730a26ec8e2e7a0255631c1a94885685c96b8174f6ac5259114ccb134a86d76fed6102432d9a4bc00f39ad8ae2e83c59c61a17d0eab146326f10d4cf21e8fbacb6186fb7516799cfae2dab19950123f7b1d8270ca1c31edeeba0718c813d8b5da1eea2095010001 \\x3ebd536d6fc850cc10bd14f7f5ffcc198cba66d0da5f53aabaa6a7b20b8b6a86d86fb7c12770f254cfe88e7715297042f39ba3535c41d6cbccb90193c1cea707 1659979390000000 1660584190000000 1723656190000000 1818264190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-370 \\x84abe6b0511374ac3709eb959d32236e6929cb93b46a3e30f19fa069ac19b56b23c167ee36ec227bcbc8c3fdab07be2ed3b92f673bc2c1426807a5ec34c42c45 1 0 \\x000000010000000000800003a3c2952851b47381e177e513f6097d90b95bb6ce9f1e52b986dcf09d35aaa721cfd9b614020a30e7e071c842bae5695adb2996762ddd7472081db645ea8522cf2c5031784cab3a2310b357307312c4ca5ee34e4641abf3f3b792f73f63203d49763b9b024e2d15828edbafa791b599d7582bce991964e995d2db86f5e22b988d010001 \\xa2033f8a8e35ff264cfc59e51774a0470ddcec3626abdefc440c79b465b3e58e35a91d5e102de5df6c6f17a4c67c983e0805fad7917dea5259ce5165835cd409 1653934390000000 1654539190000000 1717611190000000 1812219190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-371 \\x88a7e9c791ba7b1c61852bf36bd5c639f85cbbd306cc728547e9c914bf128a26fa437b86aa3860ad5d0343ce961b5c34edc153aa6f68609e9abb6e3af9adae33 1 0 \\x000000010000000000800003a66f03bcb46265516b0835d8c01e527c392a8bd8a508e953ee08cc5d712d1504e79b3bf8d9c6cd22faf2cb8e3332b9fd59cf0cb92028a46232c615bb6393793a2afe7a29d19d4bbeea94c9518b2099b86eff6a045b5d27630f5e3dea51da3947604c5faee2eb7a5a14821514f21cab8e21e650208b1c3064031c0e9b99353add010001 \\x1fd34d621694506a551658bca05e12748745b714241998e3bdaf01fd425f1a95dd1d6b380bad651e71f16e974467acd824cde9a979b6cb20c91954d916839b02 1669046890000000 1669651690000000 1732723690000000 1827331690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-372 \\x891781c9b464c40fa18bc9dbced8e25f4c701275433f961640b01c1cbdc4753a8ed3adcfa4830664d4d175f652c804ae9adbf21e77fd4256387ef315c71f4af7 1 0 \\x000000010000000000800003e9169c9c49ef3ab39bbad3a892c269a63c3a2dbd31a5b596c7becdfddae3f44367d9f1572b465140df54703f1db8730b604b44d712dd806fed380e3c8fb94672c1c7a82bd0f3f5bb0e6a7bc4402eb76481d1c813c4bbd526fbb21dd247f6b9b31a213e76d30e039d2e00577032549e91c6fb9353e21021123836896d06f672f3010001 \\x5684b5f21352eb2bdc533e4f9cf4ce4cda533b5456272725edc34a8c465049e26d8a091f9dab7f0b03ffcc7dce8d87818e2da3246e5da051da8094750debe807 1661188390000000 1661793190000000 1724865190000000 1819473190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-373 \\x8e03d43a0615c9f3b1133e7e5168f7c4ea5f6a9fe011e68e1843b3c71018c4c5c49661cded022c54db88b2e360676bd2e8877091153411694f36b57c4c046d8b 1 0 \\x000000010000000000800003ac39141e95e24327ee11706850b1dcd40d070bed783f15e1d0c8d925e1de896218ac4d193710da5e12877be3a8404b13cea0eda5ce3ebd6c66a42c645ce5037d16126920d90e16cae44db73e67c509598efc9e697aad4e5e5b104cadba405292ff313fb186f0b7410ee5f2bc8de10c0d72cff8aa80c2f49b7d8f06c6f9bc4875010001 \\x0e364035cfffc3d500ae43b44f24b127b036b9357ee76ea5f13316b23d56c71a32da9c41866e9de7411aad0d7d7a972a4362ee97fc922303e3bc4d11b131a000 1658770390000000 1659375190000000 1722447190000000 1817055190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-374 \\x900bc19cf81db220ad878f9be02b09900165b241663d3e48c58abe33a437a0c6389d7ca814c7ae3c9be8929d04d6a37e2a0370bc1d0c2bb6189bd214158d1e5c 1 0 \\x000000010000000000800003c2c836478ce2ea5f6a5a492d89f758b8626b2c11af76f988d06b0ea6d0ab067490ad4ba4f0f54935c3e2238536f111724c6a91aedf61e2d1395c6a029a39107732ccc3ab2353b38eec43a0b95a4f9b82ed72a7e320f3fde782a089fd8716eb9cd75512ebc408d277286082241576d2723baba0921dbc0d2ca9a8d20832ec943d010001 \\x03065952c722e8aae15fb1c2aec840b19ddc9576866c32a7e532c215e726cf9ea9d56f513ad085afe6658eed304e4e33c160b2abe59dd29bc7a28ae19c7db002 1655747890000000 1656352690000000 1719424690000000 1814032690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-375 \\x93d3f17e3f19942e6ea911b5eb4781039d02016e83d3c1e66ee3f7217ad14936e95deff4a2e6024bacb15f773ad10211d11bed51936ed511afc8081e0a4a296b 1 0 \\x000000010000000000800003e723cf239c412ccbf739145589f99c9950fa971b61f180b6357edf544fb7b51f9ae48f7f2025693d9ca3726a4fe7b8c15f15dfdac6e3aa857f5e28dc820f32013193ec0d6839a68ebb07d6556d086055a6501ef5fc80138aa760b70b69aa0dff9203b2d9d1dbe9b4d352b54ff30520c55789d083ff20ed92cade0889808dbdb7010001 \\x5b039e42f6c44ece22d0ce8a04cfd048e4dc8bb9e7ec9d04a3365e16cf8f800a16334c64e4a2ff136caf6ec0a0355bb0b49eaf9f12b010afa7b394db6381e200 1670860390000000 1671465190000000 1734537190000000 1829145190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-376 \\x97bfb4452a9ad76c60f38340c34d844327c79eb010a5cdeea926907b83a64f13daac5dc7cea5ffd905cb440471a269920191b7e082d6687e908eeb009d26db19 1 0 \\x000000010000000000800003b07b1457af908801bf349cee6e95ba5de63153264a7a84c84e6cb340be926a324589dbbf810de657c48700e29e2ece4f90a8925ba58032a1d60f7cba6e1fbf70dff9638c8712356ac29ebb13d6dabfdca626967d06930002b317900bdf72a9a60cc255107231ce3757f03e7163e7c37faac0dc599c8dce026574c900c4ab7993010001 \\x2f503dc1d794e680fd815b892b6906950f94ec3a79edf0865b15f7d99f4bda55f043cc97e12d7111a7628ea815587c6f3a8d5d208e4158b363328a3d30810c07 1652120890000000 1652725690000000 1715797690000000 1810405690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-377 \\x9c2343a33206c5071ae45fd1fcf5474cf880187714b9d5066789ea3640315c45b95bdefdaca54a1eb30a3d55ab7aae5a6563ccdb88d2f3cb217d4c9bd5504c02 1 0 \\x000000010000000000800003bb0e032490d26e5f513f0bab772e184e03a844b1cc41d77a830abddc1e3ef3de0a813b65a1c1d4e364aaf217524cc015aeb4a4e1bb911ccdb54107a4b985f851b130c1fe2087a20053b25dc54c82a990f774cd22e9d2c9a1239f0a35751a7c72146bdc4bd6dba5cc37bd22682fda2edcffa5ee64a6bb3a51dddba5e11b99a555010001 \\x116d9a32c3c9446796ba25b5674c3d348622d61b6fa67c7fc8c5f42c65e37cb857e2099c8de901ca5d8772c92bf0ba75b2584c312887a54c4c2247a40d274705 1655747890000000 1656352690000000 1719424690000000 1814032690000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-378 \\x9c9fb6d0226505132714c131d60de478e0f54e5f5b4d37159e235f47025243c73460aaf0b9e6daf52f57690db00016d0607ed6eb8f878c75bd5aec080fbc9b80 1 0 \\x000000010000000000800003be9943e5d514163ee9613b519b0e7f1fab07bd6207732cd08d14184ff0174c84f7f7d5e2a45444890eb168ad4947b84f315f857891938963ae8e5e6efd7a5aaeee80a244343459b909604d6083aab5ae7fb49979af34816273a058beef1ddee1e903c3d63e77aafc653dd69967261de0a19d2135bd592a1c7dfc796079b1c3d5010001 \\x88ae9c2f2debf72d1eb19f310504d0fb5bee98d64437bd075b74717a3a3e46b16f1abbaf9cd01cbfa9da5f5983e2acf8d95de12447ef8991338ab34e2f136607 1681741390000000 1682346190000000 1745418190000000 1840026190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-379 \\x9eb301e4146f1709af1d5dec834beee57488e317e2a8bbc5847e00f0ebb3c994dbe26b042ee9191c1b991241d3d925d04b8f9fa27608ffed2f7d317cbbfc2393 1 0 \\x000000010000000000800003b0580465893b95f33af9febb6c6e23d20f977340bc5191ece326a2df94c21e03868060fb2458fa0560dad7cc29ca5ac239ea228620b1b0442d8e218b010a0c6a8040432701842490ba2866ed3f01dfdd551a6f833c1e821a953d4fd5fb48ab2054814c0d385e36166b3beedd6f778c83fcd5e1b946f09e0c747e2f9d6d5c2c55010001 \\xe9aa5537ab70875612e322c195513830f943f6860c4d90ee22d9d72044c0cf3b76dbb2f7678da66eac12569db8dfdcfe76ed948bd3a1113d182c9c82bd972b0a 1678114390000000 1678719190000000 1741791190000000 1836399190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-380 \\x9ff7fe431fe540ee9bcad478e04011b5ac25b5021b209a749f9980a2591898a0545ad161342a198908c3a066ec083f39176eb0b674412df5ecdebec92c5ccbfc 1 0 \\x000000010000000000800003bc3a3f547dbeea09fd86c7645c97324deb4d020f2e5dda6001d3dd63a820a4f8cb5ade8af4bc4fcc72def5eca98d59941bb2b9904fa893d12c717048f36c975968348d43eb38684b29c8176b727e4c211ba80c18722346f2058fb7bad77c7ccce3c4397d83220238c5521ffd64cf449ea1c9ae086afd8a6220e0056277b2af51010001 \\x372063417a70e9072c887dacf8a8802b1ddfba29ec6865c6c3829a98fe168d05367727c9e1c0c2fa04d6979e35393a4ec04f3c7b7fb8ba214c25e63802736206 1651516390000000 1652121190000000 1715193190000000 1809801190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-381 \\xa6ff8dd7fcd3c1f855e25e0412438c9c8e891e4c6e09a522d29cd7cef2dc83c5a398bc68e7b5e89cc5b592b0c089db7b10c3270078fcac200fac661ea8d0cb67 1 0 \\x000000010000000000800003d02b6ad344fbe2a940fc949f213f794b5d5dbe54cf19dfcad744f0714fae8d2cb00040b78ab2dd92e5ac7d06703289f849d00fe159562f743f1543c0dc4b195b0ca171f53c46a506d165c3188de11ce5cb9f6e0e0c777bb349f7cec2c4f4664bded3413f5e315debbe2705423a30facdbf2ec677ffcf8e18ec8d02593ced51a9010001 \\xf31c270d52aadc07228594104d027083c685b5e419680d634f6c01facb9af6ccb0c43dee5d846f05d4881db4331eded2a73e3b9143e8c979ef91ff296b793400 1655747890000000 1656352690000000 1719424690000000 1814032690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-382 \\xa84b9e12660de5cc923c7f3b2e7542dc019b15d97417d78e1e6c8ef6c7a39f1dba6554e1118f652df8c356499091d9726ae292121640d49b668d71154c7bba6c 1 0 \\x000000010000000000800003a97a35321b835ddc6241d9921218adde8927d7899efdd909bac933044cafbf6946679c1f6703b1b13e91dcc72038d1daf837e41ed9ecd2d21ff373e6e3ea570c61c515ea8442d4637949825249b11c792756b84395c9298a3026d1c96b6e84a11da245b8575fc43f081af9600a994e278d5f8226169a8bdf611c6aa8b21a626d010001 \\x474209202703600a4d69a2400f908fc6ef747c4f165f119943d0c582249c1f1bc2599a28090c5a4c242a5160865230bdf608ddae1d277d459b7495baefe56707 1652120890000000 1652725690000000 1715797690000000 1810405690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-383 \\xad9fca2a7d4655252e2584f8a41481cb24a65f4df9700af534c6cd34332e59a7b2a12b5970c5ab9b5870e2be7ac410e007b6ba3e07de1b5aabb444d54215a25e 1 0 \\x000000010000000000800003b31446f7c439d8dfe4ab51927682e451f05f1507feae716f49705143d994cae7565386a02d405679bf4e1cf1728e6370ebab4dd17ab4d805651f249b481c6bb0275664de642f2fb5bbb2444899fd0b8aeeaa3ac0bfa864f8ce2158a1f4a75d6764b9798e609e113bb0796cf566bd1693669e44ebcba257ac768a5687194d9043010001 \\xadceca98a0710d0cc2c708639f8ba7eb5416abf57dbac017c5ed433b559b69dd27461614268c22cc29cbd8543817c130a19f35c952ecc3655e45298f9028e205 1656352390000000 1656957190000000 1720029190000000 1814637190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-384 \\xad33a9da668e68c4f867c65825a58aa5df13faa121d878a3f8bf9ccc3ec2577dba44b2d76ddc770b2f44c05fc45f1e211d78806ed937d5948c7e7f73a24b2ab2 1 0 \\x0000000100000000008000039ce5fa44a84b89bfe63f912cba062e5a662c6da02bb1f39ce25224db0dd4a314cf3eaed8813d7adf49c393bdc86c6cf7b437d9ce9d4fb184c907d6f298b811f0a234ddce19d474eeea007b341c252c3b38a314c4857c70ecb44a7e7a0bb0c1b49837b67317253df7c4621685b547b5759017b27999821c995f04971168f789c9010001 \\x0a4d133aa5b61d3ac4a9762ecd9e7b1c554385422f8c6f7647beac168d0330ae4ed1b3b4522ca5bab2c3b13de1d09f265d271628116aca6ddb553a38caee3b06 1681741390000000 1682346190000000 1745418190000000 1840026190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-385 \\xb29facaa2c741836e7ab62726fa86acc8a1ebc6d4d5679ebb3fd607661c06905b4bbb5577a4fe529ef89e17f958a6afdf18ca1bf324aae7a8b1fa6e872a8cc40 1 0 \\x000000010000000000800003ad51b57752a3bc822b41bdf4b002890323a0bc0e36ca81d44e369205467696d5451190c0609c081c38a97e35a59a5c482328642503783644600ec26cbd04906dc54d396d0d1abe4a6e92ecc453a2fbb91afadf5d2706162f03eec2e381f7e9fc534f25e6bdeab831336f8fc484e4acf74cb29516448c5b05e8d33fc22b59a413010001 \\xd3fad7e0aff7e3f8cb0ff85d857aaf00eb357562938737643a800c0d022b5f8b7ff4b6cef01ca45640155d79db7b3cd9ca920dce529ba409ad6514f8c4440304 1654538890000000 1655143690000000 1718215690000000 1812823690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-386 \\xb46772ab06272f57135b6220e701c91ee03b9863eff5f97418e02f9828212085839de7e3c6c9554a184307bd9db56f2c3878579658b00016537d6d11d5457417 1 0 \\x000000010000000000800003cee24eba5740fa95e471f5f735ab131e8a7813856c0005f5b9be2c333e496fe5566ea766b2d0f09225c4ab6693afd999cbac60cd163aa2be02934add41535a3671d472e487193543589e78f3e98cde23d5403b704bd7f7d87ea9a86bd71c41638b9c00b87142138ee1aeca5b42a1044617dbccee5b7cf723cd7605200ac104dd010001 \\x300b4888a982da3c9cc39feb3f522c2ef4c9578df4ec4cb747fa734122989b1588e7950369e1a4620c7b47839a1226f4a0f22fb79cf16ed8950ebef31fc2a70a 1676905390000000 1677510190000000 1740582190000000 1835190190000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-387 \\xb627ce8f0d184bc9c7f82c8ff94d307ee385678982ce63857cbb2d004feaba292c7f0da0e4dd5481a780664e7229841ec5cd839b3c22b0c73c304c86292618cb 1 0 \\x000000010000000000800003dfea19a96ebfb4654274853cbdb74a336c79dd37efd309dcaf020accf47d92a439035f2f4a42021eb45cd89eb0e39fa3db34cdf32697ff7a4269dca87da66c3be3dd725d20d3ec5c17702ad849ec1d2b6097c99a13a066dd8925b1c1553d13fe038e467dfea808217ba6d99872d282321b64de700113517f0685b961a4d0ce93010001 \\xf091b6e83380dbc619d9d4ed60bdc8a3dec96bb6c232067d88243d20cb3745c091d4ecc6114b1b4ac312f3413916cd616f15a226f8c556bec913a59d83bd9604 1674487390000000 1675092190000000 1738164190000000 1832772190000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-388 \\xb61768dd82be473152151b4d2048d69bdec860c56b9466a502dbf058700c5b9180cbcca647e69555e90aedcdf9a61275b5594df159e0d77bf46e3329bf08542a 1 0 \\x000000010000000000800003de0ce9debcc485cecfceabc9a7b209474577008ee2c2cbcd503f2ba02288f38f4d69bb0cc48b6806d25dd6dd510f56be253758e001ddb2f26222ebff3c1c20c3575518d3785d50bd5e6a3be26b425a6bbac51d356f63fe4878f88944bdff6651b4edaf99c8a5cb64f26c502e60d30efbb96ed20c61af1db15529a0e92a4f9f79010001 \\xdba2f54d15e1f119bb7eaa1f724319537639e41c8f5c595bf110495c2c26d6a631d23d5d507d35e061039a152d19b2ca248ddce82a848df3eed80b88e669d404 1673882890000000 1674487690000000 1737559690000000 1832167690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-389 \\xb62b1649f9a49b83bc01b423ecf298c2b6fbd5964898502fd9b47bed55dcc912d27fd6cc88d6932f6170921e5b60a7bba275a89a5eb01f05a8ffa45273c0d962 1 0 \\x000000010000000000800003b70851e5ea1b42454f292fc75ed791438d250e828baafa6b49f594c37fcf31c98821ce8ef15d777ef8d63e1f81fef95cc05327b2e6a0d5190269efbef2d12287ae0aecb7144bbc19c80bdf523289ed4584e036c976b06af21777fd248191bd33d87413190027787e004885f164f920b7a64b74eeca2e7ee76944dbbad3d5b191010001 \\x9dd2b64ff4fe96387a3f37c6197e2a68f48727fcb4584b185078844535d1c08970ca710508868aae3ab9b4f02ae9675e16c6b5eedf472888d3e2ca54f367be02 1657561390000000 1658166190000000 1721238190000000 1815846190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-390 \\xb7b73f99c01cbbd9b0fabfd33ae9338903385563d718a5620288f1dc86ca6c9ab0c71069f9f4a39715e944f413d8081a234f05eb7a6dfb38dc900b27323ae021 1 0 \\x000000010000000000800003c5189904ce30a5f04ae306a750497edb0fd4811a418c891cd1b047ae5ba30eddeb939c17e5ff731dd7248d9cfde901c0d9f92c2ec4172b342c5b6289451a69fe6878df40f5921c2a66869695b0c6d43c779cc76d76eb67e83426287bca31e9173d5b346d8c438947837d88101de57b882bf85773a5865055633fe38817920e9d010001 \\x4669be9557b5db18ab554718734a5430172502c20258e7cbf62fa6d7f999f0d864f24dae5534f0037dabfd60ad3a614682a9cfb1aecabeac667d246f8467b807 1678718890000000 1679323690000000 1742395690000000 1837003690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-391 \\xb94f77dd672981a9d6e6e667f1ce1aa58018026eb6d2f5aaf3596777d64c1ab1a863d3403d80e20c97ec39970a1d690a5f8990f98dee3aa6e63209bcedc0c603 1 0 \\x000000010000000000800003d2f1006e9ff1fee0fc569186ffe3a60263c6020d143ca26aa6764974037ba8e82376069d91893ff062b7b1867fad9730cb6bff002cb9a7dbc736f06e3dd5930e09c3727bf25c3505538974c6dd6751ff29aa5c940b261ab728f85e40860a8ae0a80590931ad314383ece12de2af72e438beccf046f26ad4eaacf1ed54e5e51ed010001 \\x5f3a223a8ef2f01873fe7b7b3f81bb2126090fc291c29aa05e7eca47c93248947e9e6f3a3eb5cb2a235391a628ab4a00eb8e9f5d93ba258d1fd0900286a5220e 1656956890000000 1657561690000000 1720633690000000 1815241690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-392 \\xba331db60d6f74d03fa9690b368a811ce05d3b89d159d40a3f176d9e99880e7bee0ec56e816f1251e33d9095c1483810cf48f4a430138d107656605a7b35f569 1 0 \\x000000010000000000800003cd4d8c5a3b94317a1bc2267023dd05104d1e086e9efba2e927825b21b23188b9883581b29eded874b53064f066996624437b055cc0ca2fcf10ce174e0fd1a814d3a701f6b4b0feacef6460cf65c05b07b8723c8c293a7e9038cb2897678b5794218bb9739ee1d0c9e2c0a5776e2117bedfe4b367b1f9238fb97561e85731da5d010001 \\xab475d473bd597d7ac951ef10454ec1b7295e8d0fb837b70b48ac66b77110f943b75e05289ef1586ee64bd36d79bb6b35048c8656a1e4e74bbd414a104fc8101 1658165890000000 1658770690000000 1721842690000000 1816450690000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-393 \\xc08b468630b98341685893631256d349a56d2bbb9d2c8fafb91a5ce1a3a50471dbc7a7b828b8c880cf205ae6affb12208f0b30971e42914878deedc662907c08 1 0 \\x000000010000000000800003dd966c1d156a43f8a1fe2656722ed30b28ae8274f776e91d01792fe0c8776aaaf8f27ad5d181497700213d7af9bdc70fb18f42668c787b854c379259c6cc3a63d0d682642b77277ed49fd28ddfa70cdb14e9b9d9540343648913c3d431dd156218f63d79bbe0ffbedeb422b15701c31ff9e482edda1f163586162349373798b1010001 \\x787a2eeea0e22fbadb7a0368dbdf0850f192e1d90dc53eef8f7a7701bec8707e260db387317913ada70e8ee25ce90b3046559d4a0c063052a5900ae369d2db03 1656956890000000 1657561690000000 1720633690000000 1815241690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-394 \\xc2e3dbb90172f70122aa6eaff6961348894a80d1d27754e864dc0e22041ac9c88c5c3943a72641a5de88e8db60c3abe45460616d47394fcf037eb5ec12d43181 1 0 \\x000000010000000000800003ddcebd7c8d143475a05a16db1f5ba307ede35dd75c95ea94d3be42e0dc3e7ff3832df5a2755ce7cda1705df22365d9a34b8107453d81fcf38a57c34f6d3b96aa2081dfe84c8a212860dce3c9922f00b3a5fbc32c669388750ecdae1189fb72dec8a6339e31f268ca0cff9a8d1d1158c092dba6fdeee29fd3de3a6f8460c990d7010001 \\x6fc23dfe8a077a826119b69481ef606f3770981313f0d2fd5eebaceeb76959bba87d73cd06de800b3a377cd8340d83f3bc37716acc733e7b0e02cd7c82cbc603 1657561390000000 1658166190000000 1721238190000000 1815846190000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-395 \\xc3fbeb52099bc6d8df57590289a45b6257c6d0619f0a30438b54447fb1da82297491b473d49af5e78114dcd13494008e7e61710eb4f6fc804339a617e257c983 1 0 \\x000000010000000000800003b719d287e123baaeefbfa9dfeddbf3d1e72c680e570466a1246e5345dc264eb26f61aad728c103e0284c49dce56ce2c91ea9020a4fdfe538572e93eb2f0a76321b648264cbf5f359de58e0807178b2753f0ffccbcb15c25e6e687f2d63d60ab86b4c19193f9773db9d72ea3bee597bfbd0b19fd2ea849625bbacec528e854f97010001 \\xb778ee6e53c6951b58ec4170e233b2d5fcc95650505e12855bd7d677a0a6e419f1fa65beff1bf79f637646ec136cf71d7267cfb072bf128ad0a1666b6b0ec60e 1674487390000000 1675092190000000 1738164190000000 1832772190000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-396 \\xc9e7ad6040efacc22fbdc477f289810386944b413309461342e603460f6c3fc5f2ea310961c1cb6231513f1a3bfd266c0c47b5fd487251e788a2a3d123b1281d 1 0 \\x000000010000000000800003b9da07f70f304e305e8a1fb94e0ae80ac2c22053dd97b54caa7509934cff5086c20ea9afb5167f25cf0ab46d63083de0cea5a1951827577b8434ce62b1dd2a4dbc9603db445968267a770f0196d48955fb2ad5ab2d13f4d1e3baec9be4ef4aeaa4b6d4bd7e7fb3f132a8b005a92c9adbd1f4efcf9a4a1bf45b94fd876de19a05010001 \\x7866a6ca728153cb552cb9d74ddd890ba8a76283c4127744153dab5b155c755489b853dcdc4e6846ad733bd66a30c88c9f5d9f8e32857a5e162ef5023d0cc807 1661792890000000 1662397690000000 1725469690000000 1820077690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-397 \\xca3314e35cff85b65b394b484b9b5c134cee8dc932549b0562a5fb3939c901594ba248b3915a3217ebaaeb2ebd7a4c2786fb73dc01112b9ae005a7b4235b40f4 1 0 \\x000000010000000000800003b03f33cb99a64d527baa4bd92808a015fb58d773300ba9a5165d30fb0e4c1d20a3a44f380acd941c4b7237f4ed4daf2d2e339373bb191485ac29a1ea0c235efb15be6cfc1e644d29c54de40a45a8135d48352d7a854ab5d7020af122de6b68ae6a839f1fbf4eb21244305fc00b5cde278a8baf451cf7f820e2e96ea1c6ab51df010001 \\x1dd1cf90a49b0300d2220992f5cd3b4390ed8db748ebe54c71adfcc4a6d14879130a0f5a25d5b990d521b6ab72490740aa3d464b8b81f8c7899af948bcb5c00b 1663606390000000 1664211190000000 1727283190000000 1821891190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-398 \\xcc77df80a38b0b3749d1aefff55b436e28e2396a1b78353041289f31122a3d0df117300e61be621a533423c69f573e861178580efdbdd8bf4240bb4e2b1f43c6 1 0 \\x000000010000000000800003b89a472b22ec1a95d53e32283482e635c8a7982cfd1c8d5f6eb087f3ff154b6e624fb877f63f311df93b3790e9ac65bcb7dd30a74c8969b6f216baff047170a2079e1735b25b8dc82a1c9da5437de69ab147c5d7849989689be182bab5efc5853ab7ba147e349d96d4a7cf714d53ecf25795ae5889c80c95466a2337bad64a5f010001 \\xfc11ad007cc0f97da6cd7be0e334984541b2b16ff400e31e892922e98f161c506fcd1066851f6f200d2f198ae3b2dee4d81b5b56788ed59fe71549a2f5c4750f 1662397390000000 1663002190000000 1726074190000000 1820682190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-399 \\xcce7afea9c79ad97190e013705d75d50c32226fc7d6cb467ef423a74901ff3ef1507f6aaa028e0187f902b78d47b9505d42c0515c07e787986205a0ed7dae81f 1 0 \\x000000010000000000800003b2e6c3dc5f191494f76631797576269b1ecdd1ff6a7df1b6362efbd78ab99afbfe758bc13559dc9efeecf822196bca676b0d97de078caad5e057f1905c557bc39eb4fb4878cd748ffb2b1a718c9db60f4d904347520ee01a56e606acb830c62da30dfb00f6c95b691df7fdf42d42d8cba287d500c1e986e022df3554b82ca943010001 \\x4bc30ecc83b41dc7787856f85379909f86a190dadbda2cabbc8347fd377486ded0c1fe0adf740cbac6701f37bb39be09df345b1821902617dab93f9af1d8f907 1659979390000000 1660584190000000 1723656190000000 1818264190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-400 \\xce6f855bcf6e106e1868c1e27a793c4b740d2ef92934326bac1d498f4f9982efaa8267a574dd31a0d944c99c819138825ed9e3e5a9d5b93067358e3170badc1e 1 0 \\x000000010000000000800003d6e1d5334445f956848f2cd9717b14b88e627429753f52ff6ba1684df4da2878ae008b5ce2a9c8e1e509d416f7c3121808e4f6684825ea4fd176f21cff1dc346713130a34ce6516ab01a6505a135f1b9aca163adc44829e6952c0f6357e2eabc9e874e7840d0b01af533c4c4eec43ad725a62eabf4bd97b2ad3c09422ff78131010001 \\x5e39e940b06087fd964cb6833d0e5c88cd8c553c78a9676ab49e096345b28dff7b0f094c76ddea4a7684f9e3f1666ffbfd6fa6cb0a0e19c8e9328a215b323c09 1653934390000000 1654539190000000 1717611190000000 1812219190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-401 \\xd3ef74be92c78c6627a0b98c0d2f04fe3529900142989a5dda7a30cafd6453a7c720979aabb8f7eb9b6300af84700580daccef8cc576b57b851689c4a7b13f1f 1 0 \\x000000010000000000800003de8f2f3d6610c98e87a87bac14e1ed6f31840f21e657769f9f59c3cc8d883f0db9ac7bbb8f6ab5485272230410163718996e29161f6293de2fc609e34251ea4886c19c284c10ba18206391583a20b9c2fa93e67d5ab9b516652ac5f17755c791b2100c244032157fc7f9329a4c73da9db7fcbee175ec93eaa70391216546185b010001 \\x85cdfd3513363c80f9a2579e5c90cbbb8494a2445b85a9eda3f8bc019f1ad6519617c3bbce76234d93fe0117ce02099236e31e25612c5054c79ed4391198f20d 1652725390000000 1653330190000000 1716402190000000 1811010190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-402 \\xd8d7a86c1542276b9798f17a8c79872ea3ef9fff457401b39ed843d63e9c53cdb66dc12c65d9a21071bced6aab7d496ced62080a5f2210f95a3c54f52ae67ada 1 0 \\x000000010000000000800003a8a44d2cd247c0961a196a25d51760696e2cf5f157df6f15184c034ca1a57a4bc2b0d8c33becca59654909cfcc395b6e2207bb97848d9c3168046ef80311620474fc42b96f10acd38e50135f4abbc1c7c6d91b00a6689329852fc187039915f69747cb9cf2a3733e20dd020343b2d310074361a089b50658b60d938c1ccd64cb010001 \\x1265a96df664cea6a7ed8b8d059bae6743f47b613ea71145bb74a6501a3f1cb8ba1591d62658979b72437e2e49ab4b0e3bf0505dff8d5ab3e810219388666c08 1678114390000000 1678719190000000 1741791190000000 1836399190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-403 \\xdc83c4f68e2c434ada0e7bc92d1f3eac843ebcfb201e86b0e01583d2557919a7078fb72e9fba844e080f665b5a47375e748eabb45a0bf1b6148409e9adb6cf32 1 0 \\x000000010000000000800003c47fffaac6a7c5f091ed0430388d4f270d7d8f3d7f63bae322db5488dba90069a5d9e5872c0fcd745365352989434aaf284514188b7ddb9c4a146e19cb9301b974b95144bd269e0aa0f2a03808ffffd22af8d02b6bce63ecffb58438b01eb18cea420b3dacd894d91638660a6dac595f73bc662dc2c98ce90cc7c5abb91ea179010001 \\xba545585494b1d1961b02d4c0d5da65a1991ced384a5746c9fc376ec62e06c29079af2aa785783bf43afcd75036950c095439183dab274bc157c9ab3e1308d04 1659374890000000 1659979690000000 1723051690000000 1817659690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-404 \\xdef77e194dcfa7e065f0d7a9a1c5e3f6e4fae4ffeb3973a24ba8434de2dbc10c55b5b5c078bbb608797ef4c681363dbf5c0e03e6900930642f428e746999a8f1 1 0 \\x000000010000000000800003bda4f57e18135b1f3198180ef779e797162561da57681d1071856273a3c32a9334438dc7764b07c5ead5fc920e6e84a29a34772a5eee5e0ef4c5ea39bf3d05abb70d34f9f3bcd987f3b8b6091de01627d9778e7c007e3d73e8b74424ba96ed4e1a128b819e9f6feb0c3072ac8e96c36b74b57045cbf8e2f111f641af5277d2c9010001 \\xf237fec1c2895064107f73aaeb0283c4f8e74d30605b0d050dda819b27fd8a6994258c53c450972970aac77488c0f2b6bf4d62d67717f3c005cec7b0ddead703 1655143390000000 1655748190000000 1718820190000000 1813428190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-405 \\xdea7caa3ef6fe135a42ffd159656f4ad35db8d5f2bac567211682534a6a082032733ae3adace3afa184df666fcb1803770456247c55ebdf39d18e32c24983900 1 0 \\x000000010000000000800003e1b66a4879c61b472f599b00300aeb15b4ae50ab1d1bc5ae0ea8c1792df548a2cb0431627e41d2fd523868e4b29b108c909f2966806417c889abb457c8b53a1760e82f61821561bcca989f213bbbfdf57f03cc3248831d6e53c38154dc3ae0b40447f021aa1cd2bfda0644a0f3a26b44250928482cc2dbd85932f9d84e51d74f010001 \\x8d269e55912efba8b1095d856bcf10ebe76469b609252b2354f1be4c0b84c84bdee57c402303f06f550e0dc97a432dcd51b5a5b0cd2b1bc2fddd49f0b907b60d 1679323390000000 1679928190000000 1743000190000000 1837608190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-406 \\xdfa3e6d03bc7faac809cfbce2dcf50eeefaf24e4c16967b0545aecccc7e70524ea53813912e0e6e60b2e1938a97315e90e7c61ef504f2c332f361f08b922a022 1 0 \\x000000010000000000800003c1735865584f2ffe074c4484c60d177c69b33550bf4589cbc41d59b5b8061fe212ee8dd162699fa1b5a3cbb7dea7df188c91a098077d1c93a822a0689ca8e37f55055a7ffdc3626391c5c721db23f713b65ef3430fc6f0fe6763b67e1cd841097bf912dc93fc384c3ee3b28e358bbe8de99ade8d5dd2066b647b4cfb5923fdf5010001 \\x6b1cfa68e20ee0401f333383ccf9118728705505612a6caa5ee54d52ce306a3d22c4e74bcbd32954f0b97d151f79f46490107f3093b105a5f1801c5d5ea30d0e 1674487390000000 1675092190000000 1738164190000000 1832772190000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-407 \\xe1b7f0b863caee174e81ccfbe5bde712c4b522735f4abf45f7a804e72623a72f431fe73100a60b69c32d04cb4e23417184ddb00763c2ffea87c99aac16260f4d 1 0 \\x000000010000000000800003f8473cbf60b493b1940ded7204a8e60f4d042ec37ca659eaf2850381159662a293d458f586f7707fec5a9fbdb9f2a379683a7179e06ec62f55ff36a07bdd9ae53d67e5399eba0b788147d4b821ee1fafdc826597363098495c0bfd5353b27cc6eb18c078edd674ae6791a67212c70d2e321a8a114c645c8222760a21c08b068f010001 \\x07d26d0c159a0f8fc034528f727387f20896a84b2fbae447ead337ff22df31d0f0e0a080186d09fda77b715ce0593bfb43382d5021538e517656f4b85f712c06 1682950390000000 1683555190000000 1746627190000000 1841235190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-408 \\xe13f67fb8ca127183e0e53970337f0fe86963a9c3e6b69a3a9b1c2bbdd0e8bbad8650dee5b9c6fdad0c75068031ba4018f93894ee80bec309d86093c035f021a 1 0 \\x000000010000000000800003ac2ec02e74b276ffb14d0da426eb2da5a659369b549c80df3c2386be4bd02f9cc729640c0f1c70fd1c43824f24592f20cc72c5e24a9193c4f6656e11cce63f615f69cd05d277e9cd8cf70982c165ff51ec84ce389e07bedfc3ee0e0116713c88b64b148bf4b26bd4b2b66c42c6e1e4100f5b10b88d0eb5b5dabe780b5f2bbd5b010001 \\xd287127bc765099710c28c9ea146ade106cf234de69c884790e873931da127480e552d21727d6189c12a29b977d0038ad3e9ca0bacb0f6d4ef9eb06e87321902 1675696390000000 1676301190000000 1739373190000000 1833981190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-409 \\xe4234475e4a9238a6e2fb54f81d0d327b957b15fc517d948926198e24f999d6efa9504b5e1a09d5f545764c9acc4072b40f05fe4715176cf577d5ef039b09ff3 1 0 \\x000000010000000000800003f75cdba60ccb1c93e2bb8ad2d19c0413e676b49b75d6af6e1ebd69855e0c03ad3e89ca051740869b5674828de780639b4ef9694d29008aa876c7cc83c59b06cf1d0054e3c1c62faf590cf97dcc5b21086cc8c8d6df2c41f52a7371c4ae0e5fabbd6c237f54979f465092938880059cb3927cbea285c862a6b2271a3abfbad4c3010001 \\xcd4aa8467add30874b55986e3e7173fcbf7f61131c2d103d0733b95c63667afd5cc8758cf6b26e8bb589ca1ccfb1cc1e28a0e3b61cb5b32de8b56c963f431205 1674487390000000 1675092190000000 1738164190000000 1832772190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-410 \\xe5a3cee713bc953b837952f1e3594dfdba78f29c531439a2bd9cd4b5130d3c3eb32729d8b7b07cc6a8f33d42c60702b0d6b91f953bb44f1bf2bfd71050e1d2b7 1 0 \\x00000001000000000080000393b4215f50bbb8f23f7369dceec00eeca622cc67d13b28bdb5f6c02fc5811d1e5941027613de0d8e9e4eba5226640819b67fb1b2c2ba366442b2329b4575d1d6ed956881ad14651b682679c1701a5e00569071562c38e52ed91c9fc45a49e96255a4bc74a66844c33bfcc413a74bb9585f6187ec6c14924d4f2058a2c5a97f85010001 \\xda6a6e34686e57829fa437818e56efa64d615c2e2c01ab934c8dddbc24595473f7b33cb3312b4ab52f4103932076c3b90a5f391b4304c45c42b8de64b806980b 1670255890000000 1670860690000000 1733932690000000 1828540690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-411 \\xe6f39d3b82904744c886b0eb120460e995466f579cfdb14d3439f680a683da7593c545a9722e45fdde094b06027c6c30c29ba180b621ffa28a48fcd76b39c69c 1 0 \\x000000010000000000800003ddb5836d18ade98b2f2a20bd5ecbf130075940c44353d436fdf4998e553b8ab0eaa18deb7addf8d937403d086c9a53cbb6573b6f9e277998814e17235e4ae2f13efb485a23d3983fcd2e77cb1b1b8df90e327e389ba12b035955b95a86b6c24b9e50dfa730f0467dd658db93bfbc5e83ddda94b4431d69d1f19a1d31a840cc4f010001 \\x05df61a29cbbba7e73ff951fa20e566ff6e53b1e9547ffe4ef8800e749ad0d70c093c50295b1074161e827761c228fb84a012ddb1366b46d7420d3c675265109 1656956890000000 1657561690000000 1720633690000000 1815241690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-412 \\xe693126b5adf585587a60dc4f53d729f6a1064d40615d1a6508cba12b755c54730dae77c6a353bfa3355b3cfec0a2d36cd1246f4b782675fc56e6b5e54c2097e 1 0 \\x000000010000000000800003c69ed6a99d0e17b2845fc86c04e185de1e9c702bb6250e30de8f56bf44f09949ca7061e6cc51d097a25f4c0164a68ebe81bced938a22a152d07557ac0509adc72620173443f6803993cca63629ce718a0e31361af68be8e0a82dc93b12d8287483a335912ed340fee3e688ced1b050174114c36743e4e162e37b1b1471f8534d010001 \\x9eeb3939e6b0af6ac423348e9833f8c00e57c7dddf73418e47bfd488b993e2ee66c572ae99262d1f219b4f646eb2672dc03bd01bb8584e3b36a65ccd7bfeb209 1663001890000000 1663606690000000 1726678690000000 1821286690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-413 \\xe703c4c7c0bb34a28a661dbe25373b82666dd04359a3fee464b207af1477490bcb5363e95bbfac8be2d5d66aa74a3891d10353a301b99119fdc2347fe30dd70a 1 0 \\x000000010000000000800003ab66483a747b7ee9a8ec341092abd84886034e3b4ef7e94d5fb17517f8acfa95c3d6edf01ea87a4988c57f691d306c4b3e629ed20a4f70d834ee14b96518e11a3772aee14e5c7ba6af5a6fb1d52bdda562c881ce59c6ef255d3f38bc489b683e9bda42458d740146c88cefdaf7b0c0e272b01b9ae463a275343ffe9667166e13010001 \\x12bcbcb68c0fff86ee1c7de244f3f8be848200922036cb0258312671bc87977e5eaa8826e00bb77a98bd284d39e73c0cb5f5aa666abe6df75a566294c977020e 1679927890000000 1680532690000000 1743604690000000 1838212690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-414 \\xe807be652653384efe0c9b2f9f648e844b9ce1266fbceb8d4183ccac37601dbb3759128b883baafbe84f1ea3878380583cdd55a692acaf2ff75a3fe6156b0af9 1 0 \\x000000010000000000800003c34bb2f2f52b6c67b6d73ec96dd4b21857690ffb6e995a59c5512bf45cbf4f15f30c61132f7e1a9b990987978443e0761b22976d103a33ac84b601938b35acb6f7b19bac2278317034beff3c87b8855a5ce7d2a4f5d7528b6bbb6660be49120b3cc85987dab16d034ca936b8d674b25e3997bc4304e5fc6e55c8f12556b7c75f010001 \\x0b9fabc5da9cc5830d7567ffa99d3977bdf432e4fa9a28f0530bfe5347f40948eb3994e581eeaf57c331aabaae9f1d55e964d8637a78d14cd89063e50b69e10f 1654538890000000 1655143690000000 1718215690000000 1812823690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-415 \\xe8ebf5c12616123e57cebedec39ed26d766dd8c3dd38d98ccc6ae9ccb51c1a5c5b737bac0c7de2e8c338209982e9142dfba0cf085242464c121dbd50487394cb 1 0 \\x000000010000000000800003c7e10a500344569d07cebd06de28a84fc295575318ec0712a02f6eac2ca42a8ecd3f141a098ae309dd8475d8c74a6f56aff232746310c6c9b3a46c516a57add6e7751f39c2932c75918d3e5588fb61914cab03dc46430508c3e73959b3465cc4057306d9e832c6ceeb83dc3470085e5e2406c47f1f3fd9139a0f33c651c8ef31010001 \\x8d5cf183f99715bd9fa0cab741474ed6c9255cf8ece1a49830649afaf94d33b38814459dd744edea3cb3883d2920c8a9c8f141a8dc33e5cb5e34045dee5e8e00 1659979390000000 1660584190000000 1723656190000000 1818264190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-416 \\xeaab0019870f9ffb9c43d0ca04f4b541038a2a72e04d5af690f21a415ccaf398877b93934b2d6ced4eb3629a46f6f31771a3076a1f7480023e2bad7eaf95f308 1 0 \\x000000010000000000800003cf325532c47952dec526ada0d3c9909a36c512a158b507436d000d7355bd605625cc70e05d85a0fe934bfd50a87e96db3fedce3348b877341b83b382695f406d1db437753c74c8e717cd5d6ea9bfc7c27ee2e132df12af59c187a3972ecefe88bcb8a130bd00874ff75fac52847d66b5c14924059fefcbf9b94696eb7fa00681010001 \\x3bd3a932c6eb2523a8abdd746f41e81364c389152e3489398875c7563a5c06f032b26db820282c72261199cc731b98a05de8bf8095e1340412bbdb5295bf1d01 1666628890000000 1667233690000000 1730305690000000 1824913690000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-417 \\xea1f070c5d0eb5bc9364bce7a8cb52ade84bd36c8a27d5004ff5c8883d747234b03294bdc60058fc68cd980826649bdc1afd080fd5c34542b61168a40531a003 1 0 \\x000000010000000000800003cc2c1e0aea11d0dfbae890bf67cad9d1f1212b5a4cbedb68a89711469edc27fdcaf4b46d6bb7c564cca878f954a7d1600acbfc99568a5a1801af6dd0a643a216e2809fad29ca6b28ed31ad1120c105a386bbc418c772027ecf144fe2b73f9d766f422a265fc179707c344b0b9f049c11276123039d8ff965d8fd4db22e8ba605010001 \\x1d9f2c21d3f1b80e543d1109e0d3c0992ba4b2558cc85c6b107b27ddd3bce0006630116b4f431b68b9689c58d3a8e636ac8962a437b937d2ecd6b226339c3a00 1666628890000000 1667233690000000 1730305690000000 1824913690000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-418 \\xecef17ad8e533dd0bc8ea728ac2df416c4d9b75b6afb24bfeb0d1bc530913f040b8dd6ae353b36c128d2fe4b23d16a138c1d2002d738d576c44a2d8a5738c4c2 1 0 \\x000000010000000000800003d257036efa15fd8e3e1894286f6a2e1f47b7e077102d8ec2b9949a252a0f85abdc74274954fa2b9018a7650e4dbb71c2c1794e9ba445dfa9ab1eea351bfa110938874f6f979a4e8b387a04c3e062ca3d9b0d3e9bc2851ac1da44167ea34706b4528cd428f94fe066a9d95d589d6c1cc4eb7a5db8c27fbcfa461e05ab20517025010001 \\x70289f4f13b801ae4abedd19929ebdf2738a424c13848e931122f330b3882d5bd0092ec825b90a2a3b9f7316eab7082ae4c0818af4c785e838770297c7e4980e 1660583890000000 1661188690000000 1724260690000000 1818868690000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-419 \\xeccb91d3d3d6d4e14a6cf1dce65526c8d02f82942335b1af9592900fcc8e5901a4d44a2dc8ec11fa921cfe27b656e4d0cb9ab3cc4bfb6109029b78d66fb5af9c 1 0 \\x000000010000000000800003c7c536f78e71b1eec2ba8e1051fbcbdfcc39fbe8bb27d8e6ca3eaae74b38527eb866b670073d3208467979d77f0dd3a42614d9889815e70499e00b75956a91af650e1c807cbc323b4110d1d87119aaf75a9c8a7b10ef34d9cb2ed30a5cdbacff996d9056e6347ad44c0a04896b0586859f9323971878f505c150411283bcf9bb010001 \\x23c1fd467a429efb5a314365c41036bfa01528638a047e3330e63c380a8a141f968a9b21f9e1f77f822c1f06def3bf02ea867750c43f7f0b65ee6db9cbbcdc03 1667837890000000 1668442690000000 1731514690000000 1826122690000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-420 \\xf12f5c5a053294a9d506dfa79b3820043ae683e94c00e00b139241752d35fef914589e973f108d4299f14a6bbf8b9e8c83f175466acf9fda50d8ed87505035e2 1 0 \\x000000010000000000800003ab096c553d3d171d8bd288644256b39733cf7e24b0c31f926bcb57695758b84fc507153ce88dc6f5da3ba57bcd49997f00666317da3602a70823df659797a63b914a7af6e48754a5e136b726658df1993e75564f5809a1a87ca19804acb7cc021b410afb35fa49c652ca90e383a50a44800284d738972647496a4416ddac9a8d010001 \\x6a56e76e1902a1cf293db72c30cdbc82b74aadfab3a8cbe6ecbe1de3774d31f4e5c5149c916a12a18a9e72e7c5c83b65c85251f4be5ae2768db82180cf9a0d02 1653934390000000 1654539190000000 1717611190000000 1812219190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-421 \\xf2877098eb9e5e4f3ffd63501f5686e656977f3831123d6f63ec63389258fbf155a86cd30d001d66182e6f7c3b30a58663ea9cd4093428eb5d9a32c0602e488b 1 0 \\x000000010000000000800003a361b005dc0ae5fb58e7766471ceb29f81a5d19414ad6c0c06df3ab7efb8e032ebbb7f8158fea5c83d398fe7c6a800294cb11a4dd14e2d74ee40e503cb294fdfc42f785c252e2e696f598e486497f22ffa9fe06035ef1aa6deea84e10cc9ada423054d2ea1f82ddebcd5f295533614ea226691faa2d77b3a718cb65001c1a5e3010001 \\x1121086c01db0d00695f7221e2a4bf9239fb1a99e43bd10316182c4893d0e902686697ea7d2f31a53abc51b12e86cc97d93c7db8860319a48542c0205858d207 1668442390000000 1669047190000000 1732119190000000 1826727190000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-422 \\xf4b33fa27d38c7d90b73e7025d8812630d6b14ea55a0c95b60d34cde12a66394b6f70de3a1580e85fde178d84f3912d95085f1d51184e0de55f23aa9e246bb0c 1 0 \\x000000010000000000800003e039b77ca3f351189ed82a35b947345976c0b2b975cbc3c95846e48854bcba2d803f31d98c22da644bf13ad0eadbca9f350f76190296963f3643cb6fdf4ddd0c66fb157dfceb0109d21ea83a83c7988dec64c55f458dcc5ac54b554854fe8c0710dbd4b2c1e89e000ff050218d5843ab3e17fcb06b461d30cdb5be4a6e66fc6d010001 \\x2e093006921bc1ed93282aee1701d58125795025208955007311b3acdca801ba7545ee0261c858fe9a1f22395d420e1ddaa2a248c2a5d8d54435bb96b1d5c804 1661188390000000 1661793190000000 1724865190000000 1819473190000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-423 \\xf55f9b19449793c97f6926dca00fbb74490f7c35fb06f0acf2287987e14935097c7c48ef544491ae68eadd99c5641ee5c32fad42f4b304951219882f0900736e 1 0 \\x000000010000000000800003ec651e8ee6a588857484502baf8959874d2713d5dbe3d5f0799059afba88c2481cf4e7f176e2a3509f2704442df8f685593b81f2a378b80ebfeb03d29b861f138426abf9850a1eb0ef203de2efa95fad6809c258020c203b1fdb3337692bac934dffe84784535d67de9ad5f75ffaf31291177453b78c80d3bb2954f0a7062f2b010001 \\x32fafe11d86676ca3fa854268d1de7ba8e76319ac5c1857cc613c5092b9f87349c341163825c3631eadab5b9715c3ae7f24501ef8fa1b9a82c92f15e17579108 1667837890000000 1668442690000000 1731514690000000 1826122690000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-424 \\xf5339ea2043d2204cad54b1d4153184cb6a4226e034a7516f03424dcd83ed00fdc89f7b7b72f17750a89d24bdd077c72ef389c8d4b6c5a84816e9000a6205e49 1 0 \\x000000010000000000800003d9130390a3c09d489f165ff6430d17458549543d1e3a447a95983d3174725fdaccd9601b03f4db9746962cb6f6b998f30ef5ceeb02f94ed7b441fcd0335bb78620d8ae7d986595820ffa29e15267b291e3be0dd23dbe9e9d8b317cb33c058d81594b391b5dd574a60b68b5409b65569ab98ef6da1fae9a91de459c8a31d3eca9010001 \\x74b9a381dabcb1f62a9703c055220e203988aa701fd9c9c84aeca253c10a3998efa0d3317ab206af20e0d98ee37ac35acc9996fb108bf592e4bd8412d7a1bf04 1681741390000000 1682346190000000 1745418190000000 1840026190000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-\.
-
-
---
--- Data for Name: deposit_confirmations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposit_confirmations (master_pub, serial_id, h_contract_terms, h_extensions, h_wire, exchange_timestamp, refund_deadline, wire_deadline, amount_without_fee_val, amount_without_fee_frac, coin_pub, merchant_pub, exchange_sig, exchange_pub, master_sig) FROM stdin;
-\\x4d049dd5bcd99bfb41c56f63447c0a2058d61a5ad3852415816276131750b2b3 1 \\x312702caa88ce5e161ab50bf5f84ec046f34e35885ff7357b8ed30a70a634c854257b4a682af97a007566506c16e7b1263d33468d65f45e6cfee1f35ae6d6813 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\x4fab48b22917badfc1e350e125e5d856b58803dae378443126f2dc71aa916ad0d9b39ad576e9930741fffe22b29813c426b12953a4a9da9ffab8bdb4c29ea8e0 1651516421000000 1651517318000000 1651517318000000 0 98000000 \\xe48798cfc252c42977fd5d2c5e2636ee283969bfa3e92b48777fea185d0f6f59 \\xa2c99f8af4e9f8a1054abeae456732c37feecbd7fcbdbee9a33e39f0d636cad2 \\xbbbb92716a3d74d45f05685433cfe62279df0657f2d54362341120f5d1a4b687c51ef26e346f04f83096689fe1d5edecdbc29ba03800bd73e25d37bb0cdbff0b \\x8e352f9e7b1dbda4e3dd96c940287f6fa15410430ff4fe0a3f1f4978c467f837 \\x20f806d2fc7f00001d491b7feb550000fd84cd80eb5500005a84cd80eb5500004084cd80eb5500004484cd80eb550000200dce80eb5500000000000000000000
-\\x4d049dd5bcd99bfb41c56f63447c0a2058d61a5ad3852415816276131750b2b3 2 \\x5c5700ec96e5fc731ad79d3ef634c8c04b899bcae143b8a66a3c4c7d51bc2a1d272f0c9773071e46dc5ca64dc9db23b0ce47f1c27d9f1894aae9c223fa8bca6a \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\x4fab48b22917badfc1e350e125e5d856b58803dae378443126f2dc71aa916ad0d9b39ad576e9930741fffe22b29813c426b12953a4a9da9ffab8bdb4c29ea8e0 1652121256000000 1651517352000000 1651517352000000 0 0 \\x036509e108ca700c89abf5e7bc751f1789aa13d65eec048f4ad8e9600f2d2a42 \\xa2c99f8af4e9f8a1054abeae456732c37feecbd7fcbdbee9a33e39f0d636cad2 \\x9539b75958fd108f0895cf8b90d481efccfcdfbaf9b06492121081de8ba5279bc28ba7efd16b056c708c2408d4371fa300df9993a14fbf5be97306f5e5ea5302 \\x8e352f9e7b1dbda4e3dd96c940287f6fa15410430ff4fe0a3f1f4978c467f837 \\x20f806d2fc7f00001d491b7feb5500001db5ce80eb5500007ab4ce80eb55000060b4ce80eb55000064b4ce80eb5500004084cd80eb5500000000000000000000
-\\x4d049dd5bcd99bfb41c56f63447c0a2058d61a5ad3852415816276131750b2b3 3 \\x5c5700ec96e5fc731ad79d3ef634c8c04b899bcae143b8a66a3c4c7d51bc2a1d272f0c9773071e46dc5ca64dc9db23b0ce47f1c27d9f1894aae9c223fa8bca6a \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\x4fab48b22917badfc1e350e125e5d856b58803dae378443126f2dc71aa916ad0d9b39ad576e9930741fffe22b29813c426b12953a4a9da9ffab8bdb4c29ea8e0 1652121256000000 1651517352000000 1651517352000000 0 0 \\x1712a4ba2c33dd8f975f1232eb31f1df66bf971a1b79f809841cd0031ae99017 \\xa2c99f8af4e9f8a1054abeae456732c37feecbd7fcbdbee9a33e39f0d636cad2 \\x81765513b26470e6de0fab1b29d8f354f7879c9d95582ef3182af5ecf33b7da3f08512223f60be5ec50a61788714ae6bbd77572d57c95dd04d317cf74603b20e \\x8e352f9e7b1dbda4e3dd96c940287f6fa15410430ff4fe0a3f1f4978c467f837 \\x20f806d2fc7f00001d491b7feb5500002d35cf80eb5500008a34cf80eb5500007034cf80eb5500007434cf80eb550000b08dcd80eb5500000000000000000000
-\.
-
-
---
--- Data for Name: deposits_by_ready_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposits_by_ready_default (wire_deadline, shard, coin_pub, deposit_serial_id) FROM stdin;
-1651517318000000 1819058408 \\xe48798cfc252c42977fd5d2c5e2636ee283969bfa3e92b48777fea185d0f6f59 1
-1651517352000000 1819058408 \\x036509e108ca700c89abf5e7bc751f1789aa13d65eec048f4ad8e9600f2d2a42 2
-1651517352000000 1819058408 \\x1712a4ba2c33dd8f975f1232eb31f1df66bf971a1b79f809841cd0031ae99017 3
-\.
-
-
---
--- Data for Name: deposits_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposits_default (deposit_serial_id, shard, coin_pub, known_coin_id, amount_with_fee_val, amount_with_fee_frac, wallet_timestamp, exchange_timestamp, refund_deadline, wire_deadline, merchant_pub, h_contract_terms, coin_sig, wire_salt, wire_target_h_payto, done, extension_blocked, extension_details_serial_id) FROM stdin;
-1 1819058408 \\xe48798cfc252c42977fd5d2c5e2636ee283969bfa3e92b48777fea185d0f6f59 2 1 0 1651516418000000 1651516421000000 1651517318000000 1651517318000000 \\xa2c99f8af4e9f8a1054abeae456732c37feecbd7fcbdbee9a33e39f0d636cad2 \\x312702caa88ce5e161ab50bf5f84ec046f34e35885ff7357b8ed30a70a634c854257b4a682af97a007566506c16e7b1263d33468d65f45e6cfee1f35ae6d6813 \\x09f2f0defeeab55e120a6f2b658bed3b93811843056fb19e49f319155ce93131417c97899e5b19106cdb601f32b0dbdfd6fcec19e1d32fc5561a732c00f42706 \\xb04cd571d47d7e582f93924046291041 \\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660c f f \N
-2 1819058408 \\x036509e108ca700c89abf5e7bc751f1789aa13d65eec048f4ad8e9600f2d2a42 13 0 1000000 1651516452000000 1652121256000000 1651517352000000 1651517352000000 \\xa2c99f8af4e9f8a1054abeae456732c37feecbd7fcbdbee9a33e39f0d636cad2 \\x5c5700ec96e5fc731ad79d3ef634c8c04b899bcae143b8a66a3c4c7d51bc2a1d272f0c9773071e46dc5ca64dc9db23b0ce47f1c27d9f1894aae9c223fa8bca6a \\x211f79f665f033d80f1bc992688d4fcad6433b7f2e14ea92bd89034ad32e57a480550ba9ae3eb5368b7daed2bc7d89391c3bb13d3e46d9b20e0cc310f839790d \\xb04cd571d47d7e582f93924046291041 \\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660c f f \N
-3 1819058408 \\x1712a4ba2c33dd8f975f1232eb31f1df66bf971a1b79f809841cd0031ae99017 14 0 1000000 1651516452000000 1652121256000000 1651517352000000 1651517352000000 \\xa2c99f8af4e9f8a1054abeae456732c37feecbd7fcbdbee9a33e39f0d636cad2 \\x5c5700ec96e5fc731ad79d3ef634c8c04b899bcae143b8a66a3c4c7d51bc2a1d272f0c9773071e46dc5ca64dc9db23b0ce47f1c27d9f1894aae9c223fa8bca6a \\xbe10b886ed008dae3e138c4fc05eacaebcb9b28971d7e41dee4b853963be0ae47a5069b6afc354184c159da38f035451baf0092fece3871eac1d28bf8abb7b03 \\xb04cd571d47d7e582f93924046291041 \\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660c f f \N
-\.
-
-
---
--- Data for Name: deposits_for_matching_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposits_for_matching_default (refund_deadline, merchant_pub, coin_pub, deposit_serial_id) FROM stdin;
-1651517318000000 \\xa2c99f8af4e9f8a1054abeae456732c37feecbd7fcbdbee9a33e39f0d636cad2 \\xe48798cfc252c42977fd5d2c5e2636ee283969bfa3e92b48777fea185d0f6f59 1
-1651517352000000 \\xa2c99f8af4e9f8a1054abeae456732c37feecbd7fcbdbee9a33e39f0d636cad2 \\x036509e108ca700c89abf5e7bc751f1789aa13d65eec048f4ad8e9600f2d2a42 2
-1651517352000000 \\xa2c99f8af4e9f8a1054abeae456732c37feecbd7fcbdbee9a33e39f0d636cad2 \\x1712a4ba2c33dd8f975f1232eb31f1df66bf971a1b79f809841cd0031ae99017 3
-\.
-
-
---
--- Data for Name: django_content_type; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_content_type (id, app_label, model) FROM stdin;
-1 auth permission
-2 auth group
-3 auth user
-4 contenttypes contenttype
-5 sessions session
-6 app bankaccount
-7 app talerwithdrawoperation
-8 app banktransaction
-\.
-
-
---
--- Data for Name: django_migrations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_migrations (id, app, name, applied) FROM stdin;
-1 contenttypes 0001_initial 2022-05-02 20:33:10.426664+02
-2 auth 0001_initial 2022-05-02 20:33:10.54251+02
-3 app 0001_initial 2022-05-02 20:33:10.634903+02
-4 contenttypes 0002_remove_content_type_name 2022-05-02 20:33:10.653143+02
-5 auth 0002_alter_permission_name_max_length 2022-05-02 20:33:10.666261+02
-6 auth 0003_alter_user_email_max_length 2022-05-02 20:33:10.678521+02
-7 auth 0004_alter_user_username_opts 2022-05-02 20:33:10.688539+02
-8 auth 0005_alter_user_last_login_null 2022-05-02 20:33:10.698676+02
-9 auth 0006_require_contenttypes_0002 2022-05-02 20:33:10.701434+02
-10 auth 0007_alter_validators_add_error_messages 2022-05-02 20:33:10.710821+02
-11 auth 0008_alter_user_username_max_length 2022-05-02 20:33:10.726919+02
-12 auth 0009_alter_user_last_name_max_length 2022-05-02 20:33:10.736815+02
-13 auth 0010_alter_group_name_max_length 2022-05-02 20:33:10.749678+02
-14 auth 0011_update_proxy_permissions 2022-05-02 20:33:10.760192+02
-15 auth 0012_alter_user_first_name_max_length 2022-05-02 20:33:10.771497+02
-16 sessions 0001_initial 2022-05-02 20:33:10.793458+02
-\.
-
-
---
--- Data for Name: django_session; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_session (session_key, session_data, expire_date) FROM stdin;
-\.
-
-
---
--- Data for Name: exchange_sign_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.exchange_sign_keys (esk_serial, exchange_pub, master_sig, valid_from, expire_sign, expire_legal) FROM stdin;
-1 \\x43b2caf21f1f69b8f3d39ddc818c831240c5b13543f3622ab5e25ccf5b0aa67f \\xbfc068b73399671267f80e7a2db9367fdbc0ad85408b2256bbbb552e8f1d2e699983118981771876612c6fd9b4958831dd5a7fc44141f0612451a8c3a0664805 1680545590000000 1687803190000000 1690222390000000
-2 \\x23b4dc4c9aee3e39da1377d4f71c695a69260b97f6c85e1d4c3f0d9f2187550c \\xccb45322f4e80ba85ccde353fec15d5901ffe50dc429e3da3a95055dfd815e18d1a951a1e7bc09a9e0393684dee4935e45e7112b56d0b2d58fbda6688d55100c 1673288290000000 1680545890000000 1682965090000000
-3 \\x6e334214c767617221826ff543e90c523e117283184336d9b4def326c85a6799 \\xeba1ea62e47559c9135214af639db088ec74f5efab74848a76401d8ae3138f0f5c1a41495c8159a8f4b60e3e0c77346c083af0a73769e1bed8468b1fc8d58307 1658773690000000 1666031290000000 1668450490000000
-4 \\x8e352f9e7b1dbda4e3dd96c940287f6fa15410430ff4fe0a3f1f4978c467f837 \\xbe18532731b429ee445c8b367e4d56ce354f1f06384fe30567806ab41b300889a5dccb672b47953482d4506e9fe954188db1f3591429ef8e6b51aeaf658ab30d 1651516390000000 1658773990000000 1661193190000000
-5 \\x536a7531cbb6a84f720ed2f8924090d29c76c76a70cc42598f88bbea8ba124d3 \\x94de65944f1aa5105e8fa5a333b3497c8ce3e74178277cbd143362ffbc74176cd8bacc173667376f52312784b815face6e7277b85e639cfaeb94d2a94446dc01 1666030990000000 1673288590000000 1675707790000000
-\.
-
-
---
--- Data for Name: extension_details_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.extension_details_default (extension_details_serial_id, extension_options) FROM stdin;
-\.
-
-
---
--- Data for Name: extensions; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.extensions (extension_id, name, config) FROM stdin;
-\.
-
-
---
--- Data for Name: global_fee; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.global_fee (global_fee_serial, start_date, end_date, history_fee_val, history_fee_frac, kyc_fee_val, kyc_fee_frac, account_fee_val, account_fee_frac, purse_fee_val, purse_fee_frac, purse_timeout, kyc_timeout, history_expiration, purse_account_limit, master_sig) FROM stdin;
-1 1640995200000000 1672531200000000 0 1000000 0 1000000 0 1000000 0 1000000 3600000000 3600000000 31536000000000 5 \\x0630b30ae08868c844ad1915c23eccfa307ee09fdaf19390afad81c6374e22b7012297193f2d51d55318220b5081e4b1603bbaac023aced98155fe729861610e
-\.
-
-
---
--- Data for Name: history_requests_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.history_requests_default (reserve_pub, request_timestamp, reserve_sig, history_fee_val, history_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: known_coins_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.known_coins_default (known_coin_id, denominations_serial, coin_pub, age_commitment_hash, denom_sig, remaining_val, remaining_frac) FROM stdin;
-1 152 \\x37d3a4338f21aceaa932c76a56290b36329080e26e1ace64b91e9832fca0522a \\x0000000000000000000000000000000000000000000000000000000000000000 \\x000000010000000048bfa9d9f4ac973a79f254e0d8d3b8cbd5abd23565fef5917aae9b4730c72dd6f3cec7a3fb5aee6add77822c1f2e6b3ee2c5d977b57d2bd0c338b135f70461e25609abda8d9e997d970610f3b1dcefa90c1f0dd24e9348c7a8b9a2249c39da96c4be1a1961da89a2e75f168616af076bb92d468119463aa291c4b06d51ef9894 0 0
-2 222 \\xe48798cfc252c42977fd5d2c5e2636ee283969bfa3e92b48777fea185d0f6f59 \\x0000000000000000000000000000000000000000000000000000000000000000 \\x000000010000000005abfbc7e5412fd8e1d8ff09a51c50d7c1f3e5224caf37e4ba2642a76285eba04e030b456d449807d2dfdd16b726e23811d5273f870bed0b45e3d506f84e6f22b0eae62125716bd79124e50c894815d3e01c68ef42bcae4affc03c2f42fd10fd477fb77233cc336b1b2b8ed6843ecf5ec74b8ce7ea2cf0dca955841d0fcca919 0 0
-11 244 \\xee727cc81498e5bdef42a2877354ace3d26d2e69d9db3a21d054144c1a58e93d \\x0000000000000000000000000000000000000000000000000000000000000000 \\x00000001000000006bccbcf0884235b97b68191377e959671b1883d6dc695df564af5d52b83474302f309d9586806e96929f33145b9c47beb5a82affaf7247fa8b0bdc660511ad3b7e4b84f64a556a8b36508e7668e5583e2da3db3e3b2c1ec5c2fb04bf07d61755a6f46de9ecb0eb424998527328526d37c30463e51857a82841fe5efe2b1982a0 0 0
-4 244 \\x2c2140d9df871ef4c412156e9465d8415015dba86d8bd09d1afaefb352eaf94e \\x0000000000000000000000000000000000000000000000000000000000000000 \\x0000000100000000617943b6718cf3fd3f2d15dfca27c91f6e925d0313e70a719c7921e1e5bc650064406891c51e1d0a6bc627ad00119fd8658a5dae765d2edec31e08d5431f9ea25d68af54b8773f3e08a5501557a10e1227a512b6f25fa1f79525afe5d08683d4e83188c775c16b0753631406ae9aa1f0e7e5fdb1f887ba6f89aa52370ee8c8fa 0 0
-5 244 \\x46a94bd60bd44fbcfd1ff77d5dceaa6e1d8fc7fa98569e757b2ce0bce8d5147c \\x0000000000000000000000000000000000000000000000000000000000000000 \\x0000000100000000d4b999926a1cc09ce20a8d7f3ad53159e71614a52d79ac195c1c89fe926fe6ab47c9a740a6fed99acba126bd3f617afab34c020f59e8887fabf7603a6cbf3ac09e0193f660ec4dace42e3a8b654f85bc5c7cf621cc2e0aa8a329cbca02fd94964e2793ca9daf06906fb30cfb3f85342daccdbbec790d24e488af8517ba16f8c3 0 0
-3 109 \\xdd75545f68ef9faddd51568747d1e48a1f5eecf5ae627d1a827aad83183db95e \\x0000000000000000000000000000000000000000000000000000000000000000 \\x00000001000000000a7ce3315255efd9b5a22073724eeb1987127d126309a75a019f5cc9bab78839191dd8e6f8d84aa0dc22fe8bfcee93030bd160ad7a60573e84685a91ab42cd6de370c65419cd675274dff48bdeb3d82995591fbf652c8c2ac88d7b6869c364f81336714e901ec79a98463affe37144af4424f20e9e0717b884ef47af0bad9e75 0 1000000
-6 244 \\xa890fa0b8b4c403cf27db984a87366a6e00ae7dee056d9210645deb4db1b5ffe \\x0000000000000000000000000000000000000000000000000000000000000000 \\x000000010000000082739274d5fb740147593c439611a64a03c439bfb03dcb0be8bd1434f8beaa2b692b1e52338001bf1f4c98ad2e7ee750c239bbbd7632f5c9ceb60c420ca28212c23909a64f44fab43a1dbe96071ad3ff65b5dc86c0672c95f5a924b8ea06037c21d8f3d456d118411ff2bc3de5fac88419b5a2ff395742cdb357d05422b46aba 0 0
-7 244 \\x859e46285e61995eb4e4a4bbffba81d1326cdab1530aab30e0c58dc247528c6c \\x0000000000000000000000000000000000000000000000000000000000000000 \\x00000001000000001b032029c5837b05ea7bb1fc04266f93ff491a09240358d147ad8a597701b46c5fb6af1fb690966f3229daa03f42bf7a653a3678ccce9c16472e3c2868ea11401e2f1a4d1f613d8fa0e6e17d425648b4e7b8741290754b5f46e9b494b2c23c9144cfb4b3ce20e853ab7ae71fc723f21686cdf8e7bb1dbf37a1fc4a0100c23cc4 0 0
-13 2 \\x036509e108ca700c89abf5e7bc751f1789aa13d65eec048f4ad8e9600f2d2a42 \\x0000000000000000000000000000000000000000000000000000000000000000 \\x000000010000000009152b1f47df7fa4e6833776225cbfdc37aca57d25e28fd406a66dbc214deadcd89aaa1aaf667a2b6e460db08da5084eaccd9ddee1f93253b8f94f831ac7e3125ca8b1d6526768b88bba3f1eccc186f9e1c6c11dff4b6284321d390e242f9d3a0cf89ea21eb76a0878ff2657a810c265f034cdfb804ae7337d23e461e36261e2 0 0
-8 244 \\xde5d95fbbe7c727df79db4a7123869827bc6fe82e56b3b71c67ee96b5c2c8946 \\x0000000000000000000000000000000000000000000000000000000000000000 \\x00000001000000002c199f7cb5ac87f309f0c4954ca82064e43e9a3fe78f771f2f55a6ba5a49a05cf2d67ca85ef56d65a4a75ca1835abe2df632e86d96dac7847a849160ad5197f5a4bb377a3fae4ea947fb8ffa3b4a7a41f4a9f8cde4f53ef8fbf492f6222eb3e8705ed54af718e618594d277aa27c4da30896e94812a7ca4b676ae8a0c2c91125 0 0
-9 244 \\xcf259169d898619e0d19710f1d3eb1e10c5f369323d8c549d036fbec40ebf8db \\x0000000000000000000000000000000000000000000000000000000000000000 \\x0000000100000000a9059ba3a2cb53775b016313511f8456159ab99e3d9d29f334541fe72700286d267b210701ef03c5b7c4390468f0201317f163ebac8f47c965801948d36e6bfc7eadce561290dfad8aaed879a676171db9c6cd1d1c8f06d704aa778610c381db0f3b6c12d435d8739e26b6fce39ae1bf9b8b55881257bace6775a520995d697e 0 0
-14 2 \\x1712a4ba2c33dd8f975f1232eb31f1df66bf971a1b79f809841cd0031ae99017 \\x0000000000000000000000000000000000000000000000000000000000000000 \\x00000001000000004c561d445476dc760ef7ef1718b6acc403ebab4b8e81ce5b7b8a3f91043a767b5ba8cdfb6b4da92cdcbd188726ecef284433286b4dc97bcab69d4420ab178491e5c92446d691ef68695e41ab98712153d8c3c7341b844e984bf7e354fe8fd95d94c71167f414c5414cf6ffbe41801fee482d0462912a47bba344637e89e3ac9c 0 0
-10 244 \\xddee2c25c1c7186cae13abcd3c8fc8c3f445bb758a315de3ff9efa0e3c8516cd \\x0000000000000000000000000000000000000000000000000000000000000000 \\x0000000100000000abd12319b1b212d8c8c02dc7891ec0f19e5cb7ba5e5fbd314f6349b19c76f294bb5645283a5be46bcb4f9c2c083ff7b0c9d2f20af064f5de55e70c1ac7d87cca7c488d0a02cac01d8549c022520d89ee33499815f8659402746cd511c5ef9661cc17cb9dfbe88c00713c3394e9c283e5c049ed29f293c4920e37239076457be8 0 0
-\.
-
-
---
--- Data for Name: merchant_accounts; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_accounts (account_serial, merchant_serial, h_wire, salt, payto_uri, active) FROM stdin;
-1 1 \\x4fab48b22917badfc1e350e125e5d856b58803dae378443126f2dc71aa916ad0d9b39ad576e9930741fffe22b29813c426b12953a4a9da9ffab8bdb4c29ea8e0 \\xb04cd571d47d7e582f93924046291041 payto://x-taler-bank/localhost/43 t
-\.
-
-
---
--- Data for Name: merchant_contract_terms; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_contract_terms (order_serial, merchant_serial, order_id, contract_terms, h_contract_terms, creation_time, pay_deadline, refund_deadline, paid, wired, fulfillment_url, session_id, claim_token) FROM stdin;
-1 1 2022.122-01Q4WKM66RKJE \\x7b22616d6f756e74223a22544553544b55444f533a31222c2273756d6d617279223a22666f6f222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f7468616e6b2b796f75222c22726566756e645f646561646c696e65223a7b22745f73223a313635313531373331387d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f73223a313635313531373331387d2c2270726f6475637473223a5b5d2c22685f77697265223a2239594e4d48434839325958445a4746334133474a42534552415454524730595457445734384339365942453733414d48444238444b435754544e56454b34523738375a5a57384e4a4b30395738394e4835353954394145544b5a58424846444d52414641485230222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032322e3132322d30315134574b4d3636524b4a45222c2274696d657374616d70223a7b22745f73223a313635313531363431382c22745f6d73223a313635313531363431383030307d2c227061795f646561646c696e65223a7b22745f73223a313635313532303031382c22745f6d73223a313635313532303031383030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a22394d3239564e44575636445a504745354458484d385a30413431434443364a545445324a38354331433956313635544750415347227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a224d4234535a32514d5837574132314141515451344153534a52445a59584a59515a4a5956585444333752575a314e485053423930222c226e6f6e6365223a225648544a4147585351574d364e4b48314a43473457394a4248433744343936344e5830334d4a435834564643485a354851474147227d \\x312702caa88ce5e161ab50bf5f84ec046f34e35885ff7357b8ed30a70a634c854257b4a682af97a007566506c16e7b1263d33468d65f45e6cfee1f35ae6d6813 1651516418000000 1651520018000000 1651517318000000 t f taler://fulfillment-success/thank+you \\x3f75a41cccb519f3c405344e42ac54a0
-2 1 2022.122-0388CJD7CZ1T8 \\x7b22616d6f756e74223a22544553544b55444f533a302e3032222c2273756d6d617279223a22626172222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f7468616e6b2b796f75222c22726566756e645f646561646c696e65223a7b22745f73223a313635313531373335327d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f73223a313635313531373335327d2c2270726f6475637473223a5b5d2c22685f77697265223a2239594e4d48434839325958445a4746334133474a42534552415454524730595457445734384339365942453733414d48444238444b435754544e56454b34523738375a5a57384e4a4b30395738394e4835353954394145544b5a58424846444d52414641485230222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032322e3132322d30333838434a4437435a315438222c2274696d657374616d70223a7b22745f73223a313635313531363435322c22745f6d73223a313635313531363435323030307d2c227061795f646561646c696e65223a7b22745f73223a313635313532303035322c22745f6d73223a313635313532303035323030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a22394d3239564e44575636445a504745354458484d385a30413431434443364a545445324a38354331433956313635544750415347227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a224d4234535a32514d5837574132314141515451344153534a52445a59584a59515a4a5956585444333752575a314e485053423930222c226e6f6e6365223a223943304d37394e395251334743324742525051523944325434413842455041314348375945355756475233433041513657583047227d \\x5c5700ec96e5fc731ad79d3ef634c8c04b899bcae143b8a66a3c4c7d51bc2a1d272f0c9773071e46dc5ca64dc9db23b0ce47f1c27d9f1894aae9c223fa8bca6a 1651516452000000 1651520052000000 1651517352000000 t f taler://fulfillment-success/thank+you \\x79f8293977a1df17ed7b38353ae34011
-\.
-
-
---
--- Data for Name: merchant_deposit_to_transfer; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_deposit_to_transfer (deposit_serial, coin_contribution_value_val, coin_contribution_value_frac, credit_serial, execution_time, signkey_serial, exchange_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_deposits; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_deposits (deposit_serial, order_serial, deposit_timestamp, coin_pub, exchange_url, amount_with_fee_val, amount_with_fee_frac, deposit_fee_val, deposit_fee_frac, refund_fee_val, refund_fee_frac, wire_fee_val, wire_fee_frac, signkey_serial, exchange_sig, account_serial) FROM stdin;
-1 1 1651516421000000 \\xe48798cfc252c42977fd5d2c5e2636ee283969bfa3e92b48777fea185d0f6f59 http://localhost:8081/ 1 0 0 2000000 0 1000000 0 1000000 3 \\xbbbb92716a3d74d45f05685433cfe62279df0657f2d54362341120f5d1a4b687c51ef26e346f04f83096689fe1d5edecdbc29ba03800bd73e25d37bb0cdbff0b 1
-2 2 1652121256000000 \\x036509e108ca700c89abf5e7bc751f1789aa13d65eec048f4ad8e9600f2d2a42 http://localhost:8081/ 0 1000000 0 1000000 0 1000000 0 1000000 3 \\x9539b75958fd108f0895cf8b90d481efccfcdfbaf9b06492121081de8ba5279bc28ba7efd16b056c708c2408d4371fa300df9993a14fbf5be97306f5e5ea5302 1
-3 2 1652121256000000 \\x1712a4ba2c33dd8f975f1232eb31f1df66bf971a1b79f809841cd0031ae99017 http://localhost:8081/ 0 1000000 0 1000000 0 1000000 0 1000000 3 \\x81765513b26470e6de0fab1b29d8f354f7879c9d95582ef3182af5ecf33b7da3f08512223f60be5ec50a61788714ae6bbd77572d57c95dd04d317cf74603b20e 1
-\.
-
-
---
--- Data for Name: merchant_exchange_signing_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_exchange_signing_keys (signkey_serial, master_pub, exchange_pub, start_date, expire_date, end_date, master_sig) FROM stdin;
-1 \\x4d049dd5bcd99bfb41c56f63447c0a2058d61a5ad3852415816276131750b2b3 \\x23b4dc4c9aee3e39da1377d4f71c695a69260b97f6c85e1d4c3f0d9f2187550c 1673288290000000 1680545890000000 1682965090000000 \\xccb45322f4e80ba85ccde353fec15d5901ffe50dc429e3da3a95055dfd815e18d1a951a1e7bc09a9e0393684dee4935e45e7112b56d0b2d58fbda6688d55100c
-2 \\x4d049dd5bcd99bfb41c56f63447c0a2058d61a5ad3852415816276131750b2b3 \\x43b2caf21f1f69b8f3d39ddc818c831240c5b13543f3622ab5e25ccf5b0aa67f 1680545590000000 1687803190000000 1690222390000000 \\xbfc068b73399671267f80e7a2db9367fdbc0ad85408b2256bbbb552e8f1d2e699983118981771876612c6fd9b4958831dd5a7fc44141f0612451a8c3a0664805
-3 \\x4d049dd5bcd99bfb41c56f63447c0a2058d61a5ad3852415816276131750b2b3 \\x8e352f9e7b1dbda4e3dd96c940287f6fa15410430ff4fe0a3f1f4978c467f837 1651516390000000 1658773990000000 1661193190000000 \\xbe18532731b429ee445c8b367e4d56ce354f1f06384fe30567806ab41b300889a5dccb672b47953482d4506e9fe954188db1f3591429ef8e6b51aeaf658ab30d
-4 \\x4d049dd5bcd99bfb41c56f63447c0a2058d61a5ad3852415816276131750b2b3 \\x6e334214c767617221826ff543e90c523e117283184336d9b4def326c85a6799 1658773690000000 1666031290000000 1668450490000000 \\xeba1ea62e47559c9135214af639db088ec74f5efab74848a76401d8ae3138f0f5c1a41495c8159a8f4b60e3e0c77346c083af0a73769e1bed8468b1fc8d58307
-5 \\x4d049dd5bcd99bfb41c56f63447c0a2058d61a5ad3852415816276131750b2b3 \\x536a7531cbb6a84f720ed2f8924090d29c76c76a70cc42598f88bbea8ba124d3 1666030990000000 1673288590000000 1675707790000000 \\x94de65944f1aa5105e8fa5a333b3497c8ce3e74178277cbd143362ffbc74176cd8bacc173667376f52312784b815face6e7277b85e639cfaeb94d2a94446dc01
-\.
-
-
---
--- Data for Name: merchant_exchange_wire_fees; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_exchange_wire_fees (wirefee_serial, master_pub, h_wire_method, start_date, end_date, wire_fee_val, wire_fee_frac, closing_fee_val, closing_fee_frac, wad_fee_val, wad_fee_frac, master_sig) FROM stdin;
-1 \\x4d049dd5bcd99bfb41c56f63447c0a2058d61a5ad3852415816276131750b2b3 \\xf9099467bd884e86871559a62a7f23b6e876bf084a30371891b5129ce4440d3cbe27afe387d39b2ce8d9625abd388517c81bfc8da9f2e0f8c9471bff65a802b2 1640995200000000 1672531200000000 0 1000000 0 1000000 0 1000000 \\xfbe39dd94c8698ca3a9d45c7f4656143ee091720b005d716e6e46e51673b6f566618e7e3aebc09c949fe6206575f221b3e262e0edf17300e839257f1fda7ad0a
-\.
-
-
---
--- Data for Name: merchant_instances; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_instances (merchant_serial, merchant_pub, auth_hash, auth_salt, merchant_id, merchant_name, address, jurisdiction, default_max_deposit_fee_val, default_max_deposit_fee_frac, default_max_wire_fee_val, default_max_wire_fee_frac, default_wire_fee_amortization, default_wire_transfer_delay, default_pay_delay) FROM stdin;
-1 \\xa2c99f8af4e9f8a1054abeae456732c37feecbd7fcbdbee9a33e39f0d636cad2 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\x0000000000000000000000000000000000000000000000000000000000000000 default default \\x7b7d \\x7b7d 1 0 1 0 1 3600000000 3600000000
-\.
-
-
---
--- Data for Name: merchant_inventory; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_inventory (product_serial, merchant_serial, product_id, description, description_i18n, unit, image, taxes, price_val, price_frac, total_stock, total_sold, total_lost, address, next_restock, minimum_age) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_inventory_locks; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_inventory_locks (product_serial, lock_uuid, total_locked, expiration) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_keys (merchant_priv, merchant_serial) FROM stdin;
-\\xe8c1c721a457408c01bdaae848465d56f33a03f8acbb8437fba92cbdf5993ec0 1
-\.
-
-
---
--- Data for Name: merchant_kyc; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_kyc (kyc_serial_id, kyc_timestamp, kyc_ok, exchange_sig, exchange_pub, exchange_kyc_serial, account_serial, exchange_url) FROM stdin;
-1 1651516421000000 f \N \N 2 1 http://localhost:8081/
-\.
-
-
---
--- Data for Name: merchant_order_locks; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_order_locks (product_serial, total_locked, order_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_orders; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_orders (order_serial, merchant_serial, order_id, claim_token, h_post_data, pay_deadline, creation_time, contract_terms) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_refund_proofs; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_refund_proofs (refund_serial, exchange_sig, signkey_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_refunds; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_refunds (refund_serial, order_serial, rtransaction_id, refund_timestamp, coin_pub, reason, refund_amount_val, refund_amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_pickup_signatures; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_pickup_signatures (pickup_serial, coin_offset, blind_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_pickups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_pickups (pickup_serial, tip_serial, pickup_id, amount_val, amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_reserve_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_reserve_keys (reserve_serial, reserve_priv, exchange_url, payto_uri) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_reserves (reserve_serial, reserve_pub, merchant_serial, creation_time, expiration, merchant_initial_balance_val, merchant_initial_balance_frac, exchange_initial_balance_val, exchange_initial_balance_frac, tips_committed_val, tips_committed_frac, tips_picked_up_val, tips_picked_up_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tips; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tips (tip_serial, reserve_serial, tip_id, justification, next_url, expiration, amount_val, amount_frac, picked_up_val, picked_up_frac, was_picked_up) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfer_signatures; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfer_signatures (credit_serial, signkey_serial, wire_fee_val, wire_fee_frac, credit_amount_val, credit_amount_frac, execution_time, exchange_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfer_to_coin; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfer_to_coin (deposit_serial, credit_serial, offset_in_exchange_list, exchange_deposit_value_val, exchange_deposit_value_frac, exchange_deposit_fee_val, exchange_deposit_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfers; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfers (credit_serial, exchange_url, wtid, credit_amount_val, credit_amount_frac, account_serial, verified, confirmed) FROM stdin;
-\.
-
-
---
--- Data for Name: partner_accounts; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.partner_accounts (payto_uri, partner_serial_id, partner_master_sig, last_seen) FROM stdin;
-\.
-
-
---
--- Data for Name: partners; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.partners (partner_serial_id, partner_master_pub, start_date, end_date, wad_frequency, wad_fee_val, wad_fee_frac, master_sig, partner_base_url) FROM stdin;
-\.
-
-
---
--- Data for Name: prewire_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.prewire_default (prewire_uuid, wire_method, finished, failed, buf) FROM stdin;
-\.
-
-
---
--- Data for Name: purse_deposits_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.purse_deposits_default (purse_deposit_serial_id, partner_serial_id, purse_pub, coin_pub, amount_with_fee_val, amount_with_fee_frac, coin_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: purse_merges_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.purse_merges_default (purse_merge_request_serial_id, partner_serial_id, reserve_pub, purse_pub, merge_sig, merge_timestamp) FROM stdin;
-\.
-
-
---
--- Data for Name: purse_requests_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.purse_requests_default (purse_requests_serial_id, purse_pub, merge_pub, purse_expiration, h_contract_terms, age_limit, amount_with_fee_val, amount_with_fee_frac, balance_val, balance_frac, purse_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: recoup_by_reserve_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup_by_reserve_default (reserve_out_serial_id, coin_pub) FROM stdin;
-2 \\x37d3a4338f21aceaa932c76a56290b36329080e26e1ace64b91e9832fca0522a
-\.
-
-
---
--- Data for Name: recoup_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup_default (recoup_uuid, coin_pub, coin_sig, coin_blind, amount_val, amount_frac, recoup_timestamp, reserve_out_serial_id) FROM stdin;
-1 \\x37d3a4338f21aceaa932c76a56290b36329080e26e1ace64b91e9832fca0522a \\x4632d98faa1b616be808a5f51a7c8fc7c196d59c42a13bd158ceb1b4b936cdaa0bdb21be5408704b6955b3d107a6d13242a4698dcbe70db83ac0c456188cf400 \\xc48487c627af5a5f041c503a2ebf0d895e5787020f3a1be63b90c150505c4775 2 0 1651516416000000 2
-\.
-
-
---
--- Data for Name: recoup_refresh_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup_refresh_default (recoup_refresh_uuid, coin_pub, known_coin_id, coin_sig, coin_blind, amount_val, amount_frac, recoup_timestamp, rrc_serial) FROM stdin;
-1 \\x2c2140d9df871ef4c412156e9465d8415015dba86d8bd09d1afaefb352eaf94e 4 \\x6f7b063533ea5331862df3a34be3dba5e8c69d601c4068ffb7dfeea559bc6375eaf524f1ecd95da63c6ed455c113146c4e41880f8e84aca6c6ac3cded4a6e602 \\xe0a13e5c4c77910a587c4716a117fc59f0750c8fe8749e433db9259c1f855327 0 10000000 1652121242000000 4
-2 \\x46a94bd60bd44fbcfd1ff77d5dceaa6e1d8fc7fa98569e757b2ce0bce8d5147c 5 \\x0400d70018249fd2d739185259db8ae3a7595c9d929dfc139287dbd757d2d6ccf05910df0701d7729c3e7e7d621c0c1d9e662c41b38ae7dd68cab129a570a003 \\xc0b1651f471f2a6ccbfcb7316967d833c019d70b4bc1d467f4b8d35b3ca681fc 0 10000000 1652121242000000 9
-3 \\xa890fa0b8b4c403cf27db984a87366a6e00ae7dee056d9210645deb4db1b5ffe 6 \\x165af153f3f9c550d8fbbee4374cf189f095eda1d0a7debb166d87282a5e8672046178cd060c74a47eab60111e581dbc22b683ce2c1cf882cfa95390aaf6ff0d \\x257779444159ff391e2c081fb96e1717a0c74a73824925770b1276a8a4b635c2 0 10000000 1652121242000000 8
-4 \\x859e46285e61995eb4e4a4bbffba81d1326cdab1530aab30e0c58dc247528c6c 7 \\xed971d09d4f7f02b81b7682ff8483318ddaf36fd469e6db46ce7a5cc94ec5d76da9af7b1c5017eaccedd9125bce41d6d20639e7a12c0819c6e838730f18b9502 \\xd228d819b987989c1ee967c18377d94136931ba924445d8ee07de72ab56da3b0 0 10000000 1652121242000000 3
-5 \\xde5d95fbbe7c727df79db4a7123869827bc6fe82e56b3b71c67ee96b5c2c8946 8 \\x11c8956065d1d21205cd268ac513908261d0b813d4abc1252b750a29847140e73f947cc6c75b29b56304bdcce49edbe79ebe2563d90e2842291e0597faf72003 \\x609b91734422ac005ad43cb7b7aa876c2e1c05f19cd0ae1045941334ef6d062c 0 10000000 1652121242000000 7
-6 \\xcf259169d898619e0d19710f1d3eb1e10c5f369323d8c549d036fbec40ebf8db 9 \\x77bf3fe54cc03af4756252a83ab1962a037f1d6b57e1f0e65a24e81b63b252308374e9d40a1cef386a1b3247af845507c74296b49e15f520a7c86f70375c0601 \\x5c3fc7dbc4371be2b11523ad45d076b9d66520b910b89b6f77b73c89a73e9f51 0 10000000 1652121242000000 2
-7 \\xddee2c25c1c7186cae13abcd3c8fc8c3f445bb758a315de3ff9efa0e3c8516cd 10 \\x8dd80e2fcbf034f2f1e37c748a45490af35484e7658f79266d6934bab94ace41110f0947d3295e285381c541712f3cd809104e2fd433e02e88d8067c29ad0102 \\xb1a2031b6d18a15a5292662058edd19736f2e936ba24f312f7ecba3ea0143040 0 10000000 1652121242000000 6
-8 \\xee727cc81498e5bdef42a2877354ace3d26d2e69d9db3a21d054144c1a58e93d 11 \\xba98941bafdf2ffcf82c5f90cd2a2b23671b85d0ebfddd0ce40a793125973f978636316a5544a8a235ac1854ca14a98879a501504bddf73849486ca678c22f03 \\x9d3c52bc1da63b9ba505ecb87adc15a9ef4a76a109ade33e008c724826a33ecd 0 10000000 1652121242000000 5
-\.
-
-
---
--- Data for Name: refresh_commitments_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_commitments_default (melt_serial_id, rc, old_coin_pub, old_coin_sig, amount_with_fee_val, amount_with_fee_frac, noreveal_index) FROM stdin;
-1 \\x608cee4350df48ce9e86fdb755349ebea460c1a8a81f37c36d0727f7a0ef2e7fb4cefa2d5d2728cb9abcd9685732512b9804c3fc48d983c51455dad962ea39f1 \\xdd75545f68ef9faddd51568747d1e48a1f5eecf5ae627d1a827aad83183db95e \\xe7279b799ef5a086f27f9094eef366860637cc93d28ffd0ab2bbacf69044b503ffcb7ea64546c7eca5aa4ff4d67cc05cd7a30a96517cacec9e75f7d867d67b0b 5 0 2
-2 \\x7a923d7d2a67bd9179f77de0495bb982d3885336e2520fb7838a8d612b947586d42604241c48c9ac337cbf67b8e1dbae0333306e2a0ef425d7a56695a6c4b2bc \\xdd75545f68ef9faddd51568747d1e48a1f5eecf5ae627d1a827aad83183db95e \\x75e5db0c89e064baf67f2d9fed93ce8f159459e4a71a10484c3fcf96012ae266e511882cca89e70a51caaeff602685ccb60bc46bd9b24d1e94c3105b11b14e05 0 79000000 1
-\.
-
-
---
--- Data for Name: refresh_revealed_coins_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_revealed_coins_default (rrc_serial, melt_serial_id, freshcoin_index, link_sig, denominations_serial, coin_ev, h_coin_ev, ev_sig, ewv) FROM stdin;
-1 1 0 \\x85607ce3fe7b3fe18a252a19f238d5a95e48de2f08f23a3f7fe70ae08f0707001feb5625067a3168959715bd0c3219b5a2f5cf4789a069f4759d8e1c4f8e440f 382 \\x00000001000001004492fc6c81045507a45a503d2ed5bb4bb8c8ae97e9c7eb1b949821df70dfc88ed82ef634de50e7f648962be3e5b1ec84826ca66a2470e542bd10172d065073a1a9d220e7efaaacf1e1ddc5523b54268ecd19ff1d7e00509125033bca7ca9b827e87229931311c18674c5f08af4d4a3eeecea5641c33358c47b5c8eb7ef88d9fd \\x8b782f9e222d92ef89bc9c5d843042ee90b87d977260ffcc0ee097e617d1c1bd11313a93d31b3eced14cba65951ad55628f9d4b0282ba0825185a1167a64f231 \\x0000000100000001410c32c2b958be3a1b9e20cc1b243d51f7c72a03b6d12950941d7426388166b71973300e19fd6f79bfd8de1af234b565d3fa9a8be51667da316a60452688d64b2dfead80c73ef9549ae0056cfabe6c321c0e2ea0c08bdb70fdb48941db4b9e35f182941eacf0d3023657716aa62e29f358a479052c989bc07ff7bb7b675dd537 \\x0000000100010000
-2 1 1 \\xa29978124ddb5132a2353b0a9540a8bc2782dc925b1ca43463691c28ddb8ed8c53e77bf8624d1aebb460c1211666d360bc9075767914536f62d7875318d7f80a 244 \\x00000001000001003249a888ac4494ccd118a7ac457bae90b9dd46fc6f11e2b9e5e6680a053f41c73007f50e2e3a69b307e992b1d4d949e810ecb82d4c83e9f07a0e1ebcc2bdaad11c05f987869c1e02257b23ade19e5934146d71805cd06712702a917e31c56575f6b33519c01665195bf26c556297e0238fc1e780900c4b47d5d59303e98ae447 \\xb44f60bd4c4bbd0732b74ff13c11da6fa86543b6d33cda7dfebca8b9ddd1b66626e2d5abfe78cb77e40c33c9987c46b955db65f34dc6877b294723af3bc6ab50 \\x00000001000000010eea2f2f635c84b0ebbe37c91172c3ed4c3c3a148addb2c12a6fd7aa78f1bce8744cfc3e5d838741b02117458acd0633c79abd25cf9b2a38e947875c42f5a3c0ddcde5eb33055a37c9d29d602ef8eefa71c1759eabca9971fab3261a5a1a619b8f03c18269c12d390e123cc76cfbded5aba77beb6dbb0600f9ad5b5eb8e5b986 \\x0000000100010000
-3 1 2 \\x083c6d1082d3bedc56552530ef96728fc348fea2c7ffddf006015296e416fb233bc2a74bdcfb93175b0a8150d3008d3e5c5dcdd6bbd6944a879c7e5f071be30f 244 \\x00000001000001002533ad993dd6c1f2af8e6400cb5f895da01938f3e133e948d58b1f800a994ef15cef00655f57ca5b4786256afa6a7514ea7604c9f40db215bc8caa87d6dc90ee666db321b0984e69ad357af2d5cdc50634ce0932d7ed15e0ca013d177cb291db861fb79e1f64f431612b8ecad672e4af5f2d939c5c32d05409bcc086c1bc61be \\x81e6840ee3e23cca949cf2c270bb7984a472283f38d627d1efb11e8c3e95387584bfc7b8b1da42099f82a031a93c7caea1b5eeffffac523430e55d3a65108e02 \\x000000010000000188be2af8716c4cc2fe39a50c615e0ae11bb5c1fba08c37dc73e7058ded6da7537a8f4af6f4a1bf038ef0e4a350689eabfb9cfc83b32955bdfa0fb5100899534e41572e2e692df5abd2355fcb116da9c651d74227a737b27f47fe384940ce7120947b6f918f249958d753e1cb79147311dc7d27400d942b7f3982167f25de6e06 \\x0000000100010000
-4 1 3 \\x40570aafe14f350e6ac9e69bb88c09a8f0bd12f769d1134ae2b94fdbdeca7feba37757749873a0c989bf5f952377fda42dff37e12e706bbacfd501cbb835440c 244 \\x00000001000001002219bf55887ce6bf8c4637931bfac946fab26b8f17f7f40b71d1fb5bc849d709a8a53b6515b43af26aba9e19039b5602d2d4535092a897a3d106982684ca5d0dc800b94c96f016ee6a843a9ecb872c327e03ec3efd65008924e4072ad2b2e649b3f5e7e0f0b370a783a63bc79d41e2fde312dabd098370d690151a6b413a00db \\x1cbdd508984ce4426e3d7b8be222bbe8e0ff69f5a79ee47721221b7271d5834603bd9260a6300256bbce3ca520e0ecf58c155ab8de5b5f106ef9f516ebfc0a72 \\x00000001000000016dea63c7eebf4af6461cf4d5fad043f433007dc6f8114434c9d79715bba6b73f2f62f4c374b0f33016a56363102cbf9ac81c8d6e41ce7d4741e5f92a040c2b4f9aedaf9c611e82197fbae3220c44c34eeb2c48949e890e9bfe395bec1b39f102c698de8103e88ec63c03443fe5a19df1ff9801a7b904f457b81b3c6067ecbcd4 \\x0000000100010000
-5 1 4 \\x46166f44e3d31e9394b7daeacb0373260841c737fe63ed8cf4569e1b3e6a88cdc8f3eed54e1bb3606f9321a09197d07fb637289043e9efacba4f61b2288b8203 244 \\x00000001000001007e026cbf9dc57e7d53d7b7b92bbdec8a1b9cdb791e7414519f0227f1db94b7fd9354ba701fa3b625db4833f2c9ffab2cd6a43e90bbdb16ec9eb2ef624e0774b9d9c7c6401556e0602d4dfc216419e35096f8dbd530480b67953a26fdd2baf053bc44f668b131a70df2d582e46f38db75b5ced42af39b9c09f2267781543f4577 \\x01b23d79c403f34d4b2d659c3090d2ebd7b7592f6f65958ae2a073277aab64fec3b2f83946f89c656697583c07c7a63a0d478b24a79a484d6b396f59b4f310d3 \\x0000000100000001ca336c77d470fda362b210203aa3f0678c71a030ef6c30665e6a48b86fa59271b841f2b3a1d3f4e7c18f2396dce49c08a1b18132253af3265b2c74be5fee9e650d243d05d54f610e9f3cbf7cdd67fd3715bf4164c3ffe0e54b9d486891de5c0b05759f7b932f2e4eb323944a69832086b8a9e4ded3fe1bec69f7bcb91b635a23 \\x0000000100010000
-6 1 5 \\xbdac2c742db0fad5d9a5b0d359e650c10039489cfa54931f27cf51a9c348041036960b4b196e68b647f238f2efa4b6d48f7fa30ee305c9e7bacc9f0f5b03eb0c 244 \\x00000001000001000bded5df8b4815adb1681ed89c138041428b750e3c80cd4e539bc9c897004603a62515273a82fb086d11f0e1e01d4b3b9438cd4b510915bc636097945a267163787bb9cf947baebcdba2fcae5c7e2d091606128a4708620fa3e196c379ffc3706dae392a502215bfac1c48dcbb47bab25fa21fe60a66efbf2c7953f0bf3dc41d \\xa6dd4f9bb07f5f716152644784892f5108c03ce8d50a70b53803fe5917b4dbe8bc49898eb4ec61db14f4c442ad942924e9d7b2aa9825493f1e6a404f0e311e6f \\x0000000100000001a8a5e587127b43183710b92629ee1ad6967283aede62c55dcde90e046c7ec6ec0b1c6a2b6f4a0eec51668202c021754deedaafc385b52ee1b9d8b4dedbc7f5c1384be87e49cf04db30033fa45558426960eb588099d65774f5c77ba4aced5c54cd3bfddde022fcb63d949d403ddf4add7333c703006f6f3b72a7b8a8d4297c9c \\x0000000100010000
-7 1 6 \\xe8be481e6b9491e446b3bd62e5d0179a0f4d0f9294b4d090255e105a9297be62e63cea0badd312b2e4f0962c545fe2eec884c7d44b9c3d353d3f20d1db1d5f0b 244 \\x0000000100000100b0fc83ecd648d4e9be16e3a91a82da461c7c13486064a8f5a80e52e06c39b801f3b62e535dc1ced070b432b92220ce08ab255b9a133ebfc1eee6895e1005f90465f3df1317be962d5b29991469891c22292ec56ae496c16aa1f1c20b1180ae6d107c2bb0ab71e67fddad0fcbb792cfaceb2f88834ca8c0caa9fd852b4c64b5c2 \\x9e31a5ade1eb0e65090a04d8dd4a3c962672bbed76bb21a839e0df358ba570bcdeca38a9a94774eb483ea8ca65da1e4e7037c0289bf08dd8cae0ccc23e6a7160 \\x0000000100000001c2d63224fc9665fbbaac190851b86badc811c6a6e11af89d4f341b8eb9151c2e8e9df570d27653db2b96548228206e2a762f69b9ed7d6ab3876fcbd21af6c1cd060d802661400f09ef2ac8116a960f17f87492c5eeec85da81518e515474af66ba1afdabda09f2c917cbaee8ac91bcb2b2ac0c103fcd84480f4f769ee8789a50 \\x0000000100010000
-8 1 7 \\xb2091821a909fe0217ef1fd04fc9785839c158abedc5f50cc9e76053f0fc0e4aad6e790095c2e82d0576bae51b67fb80c3f39065b1e6a8fecef3f6938ef2c701 244 \\x0000000100000100208ee435410093b6facd5cb379b2d8903b78e69ee3fce72f1e1a8095b6fa241673136f3903b776fe9a01932d695f18c2478e45c18df5d7f578cf5753c5c378e9b21f69de859d06ba96effa62fa2e2aef2a50ae8aac0062a118bacb2bfe4d00ff123c6c2cba396fc71eebd3746a3f350c9a23a42d1824279b64999d9a9f9ae575 \\x23b4103d4c7f454f72fca37ae339a30ef5e0d611f3124a79d84de72eb01621819fa45fe796344148840a574ff00b9ba4de5def3f1eacda84f283df0c0a226f36 \\x0000000100000001112f8408d3eabf0401ced3759bfadca2f8e5bffe6825098038337165b5db88db40a95ee4b6415c821a0b2a7173045b973540fad194df58acf9ed14a6a63514f3b03c81f4c1035b1a08416c30ce1be093589f33e1810bc5602f8b6c2ab389113434a22a0cea58064fedb8912296f1321b2d5c8587b6070168b17ad5bf77ddd12a \\x0000000100010000
-9 1 8 \\x1e374124cede56edbf728bb836a09e6bbf979a7bd9c65da0157fc8a948a36209f28fd81c557d0de43d11155ad9dd1daa891137e6fafe2a1bfabc3a9ae929fa08 244 \\x000000010000010001722fd47b14f2b353ba1a44c2761aceae5e87da625f8e5afeb6485f94eef4d6a05db6402dec25150c5793f928ea1c80f614f464481986e82d0dda1462cd9a4a8ecb1677d7b82dfa8a07728c40f098f5feac7233676014c023ff09627c6d9f913640500c7fcdcc917327d08b76c770c0f969b29f644ae033f7648ad21b5c76b9 \\x7160ba5bd2f693d3005425721ca09a09039a0c4b7ad732e7d7dd84b030dd40f2c85be17b07863ad5b0b0f93e593b7ef1c58d4648493f4076be2a188bd5d18b0b \\x0000000100000001ad70f3b06be8a3f4c0df4e223a870ae6d90ab2d40733c764f254ff0ecd9b348c88944de2be037cd7a09c6bb20d5b2510e82ba995cc92b6e9ec870c6ed74f926e10f24ff69ef4ab5b3412bc07944834a71a857d736ab3f84390c8647bcf6abbaa6d781ccc6aa047db7771969d79fda51d6a6cd0df3c9c8f9fadbc42ef7229540a \\x0000000100010000
-10 1 9 \\x97d9de8bae626d2f7ca1148f5112497a9c1f68af2052986ade35bef64c207f75cc9dfc77f325191704e697563f82cc1b2cce66a8522c8fcea33a80d0aa2ad806 2 \\x000000010000010026c70b50711872c1e6e2b15f693564886384fe6df32bb55dcdfe16b97c0670a48ad05dcfd09d643633f07400d75180371061a9b1cf11f789dfdfb2c0a2ec4d60aa666a0835cddc34af5e1b6be30fee19c6fb6c3319b97c2780778eefed6e3f3180f71e2979cef9eb1e4957750303e745484c7465b90e77ca84c34c46c73ea324 \\xd080ff97ba144affbb017d960f6dab203aa01f6e7aa6b6483f6f95aa03bc0523e90fe2e1569bcad0c8521f4d46b77f08674f0ad971d980e945920b95e580d481 \\x000000010000000181cfbb54ac2958e36efbcc2e1ac1a0cee1a9c8462b09ab53e2c56a48da1eb106a758ca0f6584387232e4510c146011a7353c7f9dfe0a22ec6ec5cd310b5d7ebba225f57b50802b51181f7722f3c8b201c9b697d40d1303343ebdbdd8be8014af752b8f1af71c6830ef0b59b2f721891fe966474fd59fd35deb86925e0785908e \\x0000000100010000
-11 1 10 \\x4a1b5027e358da25458acd29b0b37c79daf5b68b2102c80f9a5de2a6323ee8966d019dd3edaebd482ba26cac7cfb4e864d6b260c6e64641f6cd71b248f30b602 2 \\x0000000100000100c20a4b491ac237a2a282097b8e0a4935caa54c04018dd3f321d717d327c3810009633d23cc921087f1c040127a6b0c3cdab869a924d42a6836dd7a0dbf0c4dc3c12d71367e2dc11dc12f5a08c81abbed44d2afaa6d68da5b4bf67e19227404a6df55d5d25cc53353faf122b81f1bee45bbb81b85e27801b1c9a1b90750532a2c \\x6fa170958d325ac4f3eae947e8e54f7f6d7fc24ee94f409f75e4d2573a87ab86c051ae5764739b2f97311fb3b2c295e3642f430e72cd92b5e9655c3b855f6b33 \\x000000010000000163099ce169b3b133a4ab3a5852f6a832a0e8ebee961ebc6c41af71685d0460070a8681bd7ebfd583c73bc9e30f18eb90742d9b64f692d589d96606d3e8d4f73140fbdcce4e568d047cf59934d71b65eb338df08d75f93db19055debe25ce59d1e120d2ecde86f9b3016d3a0a832d4fc10cd6e0e6beaa99c38fcbe660e89574c5 \\x0000000100010000
-12 1 11 \\x1bf5c0a2ae8de86cd40524af5e73956ca52c3b38ab8c86934633d777d31bea165968e09634fb50a3dfb2fe48b991380e4fb30ee65c909e01d841d5160254b60a 2 \\x0000000100000100733481c9c49a1ae9ec40063194bd3256de07beea5028200c8f6b82c01f6112b31aab5defbb626c676ea0702469ffb199908ac7737c3e89e254616f127fe62ae46b92c94fae937a92ca1ef2d3153a7e7c3a8e15341ffd4adbfa8a9f5b957b8e24465c36a310c1dccd5d780e61a130c9578e9a59897d870195a189b769d9080306 \\x58ec1a447b877666b0b99f7603234d8dacb565c308c96397ced1d9de0e1b4b5f6507848d1ff071988080cad9a33e9bf836eadc64dd5afc5c8134b0fc4309a242 \\x000000010000000193eeb6243d3315c823f87954bed0cb4d4471a0b8dc87a6137806cb7603d2d220a1bd1a21cc8eb87d8a5bf4f19f67673164ced876bf50d69975a052b81e8d2a4d36b847709b0f6ce9c42e250f8005c0d8d7a80a58679c87e150cbb0c11c645441ab08685a53be787838a0034a512a51ee189ba1c8c12ef6047129210907a53f9b \\x0000000100010000
-13 2 0 \\x54be7eb5f06bc313a132d396174139cbf29a5cf5d9eb14627fae4e6f7ebb9c48fd36d1b1ec3006e0ac350e04e80cdc370578220f136c3282f2fdf40d6346ed09 2 \\x000000010000010027b5d612d016a35f54d4b8db502eb2bf7426dcc2499e5cb3945db4476dbd652a81942153e0f02100c42c6c07fcd64ce9a5d81377bd880d356e6f89fd33254b79726c1ab8ea26e21d70d8e2c5428805a62f9b3396b6a6a147f42ce0100f89a705b7f5f2b9686339ab3879f50fa16faa6b870d0682e32992623af6ce18ffbea8f8 \\xdb506b45d6c311e032f6941ea720ebaa447584354e2da5585890a76bb10d64e7cf93aaa179001bc23bb9dd759ae2a8be0466f7696ef0f7a711a8199139e2146f \\x0000000100000001abd3034c2ea23bce8cb6ecdefe69cd3a44b7255175d1d05d17a0126193705c3a576f0bc3bfe39fb0a58d161f16a7db8d1e568d64dbfd10c4c972af3ad18eb1aeaaa6c5732a87d64b168b0bfefcecf5eea37e996eb67374c6fef26af3644cfdf255fe62c58b82d07186ec610d64f6b035b3fa24687ae22cd12fcb5d443354c7da \\x0000000100010000
-14 2 1 \\x9ccadf9230dcea9248d5c82bc054e86dbac8b3bcbf6bcb153e9eb697ac5d46ee51cad4ab660720f1b96bd4cbd319ffa7e473be9eafd4dc1e9ad3eff5cafe4001 2 \\x0000000100000100288a3e955f1f86d3df6abb09cd7dc728a68122450845896f593a84d931e0c6d278893a5536e2b1202e4539419ee05f4ccd53c06ed654f23ddca62baa1cd4302b0709eb34e2dce62a878065169df9a2818a39601d325dae81df82d17ff04d082026a37c8114c161aefaca1da14e15856ac76494141a045252b05ba86e30c53b92 \\x6eddabe9f3e6cd21394eb8e2ebcaa7dd8448e743558757b33288cabd970961dd9267136a4dc23fa38ef2a667dde22275eef73d63ed09d81c453a20af7713873f \\x00000001000000013a0d30e3162a4a8d7779ed8bf42e6216fa5612c0977ed3b31e28ee24923b0cb4993d77066f2ee21734b9738e2baa6862b2555235d560ac931d04dca69bf02a0ac93fd03fb17fc1bc530dc979a12f27dae0f2ea74f330ec270c38a76976ee8cc232838083eaf4811cc068344a20efbc29e298216c4488191b22017473cfafc661 \\x0000000100010000
-15 2 2 \\x10253d875545e2f1817481c30986dbaaff4d76b802873490d2a8746cec40ea39829366940b876499d94225a695449582b62fc45a902ed557aa5cb7c9a7d98901 2 \\x00000001000001005a94220bbb231902e58f70e5b64c8e0984e5fb86e7c7f3ad2b1f8c6060de8c1349590324956168e9576eeaa0829a73738146cc28447785841d4ef39baaf8af5e8987ce4803577c5354d38ac4761a835ceccbc6522eb60539fb8b6d34847d333b666dcce2765f73370c9f1ac0c84222072dfc48dba063af9cc9ca89f2c1311452 \\x41cb98b136ec4a4e4598992709ea2f7b5c5d9db14975fd13d46f118a86a7a38b802f7ab00c36decafc1b24034a8f5e74637b954f24fd4fce5a4a21fd401e500a \\x0000000100000001a8dccd21536dddad3ff06a97e2b521cabcf2c19f0432208e09694b4b5ee5ccc378463513306a0d598ab5571fc910c2c85ce539cd1e2d01d82ec167234eb265077acffa1c92cd6e03fb6f9922a87f652574b93732ddb66023b9d5d857ada0cda960748bf241bb0c0be7279370f7c765e22b20e819ef9586146703390e93856a20 \\x0000000100010000
-16 2 3 \\xda66e069e7f682b06a28014618f600bf2ae6639a73f83811d96843be20b77042f0f2d5043dfaf84e082b76e500f264910e2be6d41cd27a89d8a0b5e4693ee40c 2 \\x0000000100000100a69c52761103bfef94d63fcd8a27dbeded18115c2f013e7c7eec0f53acc43bbdd48103a5681bafed409ad97bb204cb4a6435d6abd1e8e85bb6ac3451bb31da6f05a3e1afa42a21a8e1a77be70bcaba573de1295dea56943536012d039ce28101c17910716bdfb45de49ab027b82862a127ac7ea21c27d0568511c8ca20bcfdb8 \\x27dc692200e30319dd1bcd55a632b92689a4c6a3dc80db7c7482338409a76e11b7bd61bf2639219c79b225c0e898251ad73d025a915c148ba8f104ef66191ba7 \\x00000001000000010a0891598c719c4a8b58172d572d78ab948847d4d327730af3af2927ac8d4f60d9f46f37289e511ee089f7e85602ce7e8d5ae1453eb955541da6cece4edad39bb10880475edfe1d730fa29c07dbdfd9297480a28b14efc199f7600f58194eddf460a950828beaefbe455650e5d3d33a55f20e2d43f4427c884393b78b45e2825 \\x0000000100010000
-17 2 4 \\x266a8d5103eb72194d5705ca2a9b365519a263daf79b9be559aef815c75cab656dfebead5ef2474f344aa1911ed33f5cc57ad182ad5250c19cb8e85966742608 2 \\x00000001000001001f2664d29f08d641983d8ab558b26a12586ee4b9b06987c2aca503e0cd791117bf76db46ee46a1fdf6c61f534958d4f3fb5d2f1ea719e48a4a93d9fb0abffb6c28fac14951f292d5b665872249fcfebb83d283eb8bd7b1006d316158a5cdf591f701bf32f183927b9719c9776ba754ac580093402f30cf4f0c89d91f0f2ed142 \\x31e3a51655563e3e22709b814f6e59f80b0ed9af273cd36aa3b1c08aad341202988d71dd5ff17aac0efc7d661e99599643f3ae14cc3e911a3c40a5961d0376fc \\x00000001000000013525e28ca2a011359abc65295ad0bf093360d80ea49e850552e01f9dbb67a744f04f3f659f762610b9e7b14e14b942ffb3cc793a7ab28f900bc0c77058f3da67aa58b681bc1bc86db0212689f18dadb24faa7ab252ccc196d82c5c562c244d56cc593cf08ad891fb94122c02b9c563e358ec49348dd07850209b82393359838e \\x0000000100010000
-18 2 5 \\x67b9af246502d0f994eed88afc37f535ac13a3f0f36c4d7d60f4d62e27649f4cefe4b4977f99073e3125755117bbe8c9e88b8c68e23a83d2c92472fbda66b00f 2 \\x000000010000010093fee280c1cf6e2ddcd086a6fc118bc83d73114c553db9e870cadd6186606b8c0748d636e4c4c4e605d09c9f7439ea9e4d366e155d23a1c0e458336c1fe24dc78a56a856cf08508f7e58a8abeba2f1c2b922fae03c81339cba1d49f035985ee06cc67403381be30dccd92ad862097949785103a5a8294fe75f69ba25aa237801 \\xc6fe062dc2eb23dd903e405a59b961036a00d2642e28e274d6871b8003c9a312ead249656437a5c2b687a50443126e4e2a5dfeba801db89221d062d6d8b677d3 \\x00000001000000019c96f17eed7fcd00ba853ea9898d270f01332f05946454e35ca8447e1d8651845c1026f9793013c8ef2340b50f1dc3b2be359a988867125d98f6e6bfafe02f3811319d840d95b7de57df5ffdc71e54fb643e27157aca2fa4b54a2b1fa93226688aecadceeee78294587500d1394f213db9d1d5f0862641c2e92c54af5c9f80ac \\x0000000100010000
-19 2 6 \\xc5df172bdb886d1633d3e46f4616c594c55f59ac9145b8013b7624cad635420df24062c163e1058c641b98054fc65ce5a726efa59e5bc849b67c33f579abfc0f 2 \\x0000000100000100941fccb20f0be031070585e63bbdef5f0b80095144dae00cfd66dc93af35cf750b91d33f7aa79a853559fbc9e40146f6df7522e25af27cef09379ee9b95c5999a4e9db068db50998b66c26f6b5961fd972acb32428ba81eced079ae634664e4a87c7161d2d2b85cb1509ac3227175d5d195b514eb6e1efe56635bf205bce3589 \\xefda4061288a419aedcf60efdd5c3a411ee6b604aec23a528b1f9594093b2279df1aeeb88601cb85b7d947fa4aa2e7e8d33f52e084f7325ade3dba8f254e1858 \\x0000000100000001c76428049fd61cafaf5fce5bb33536d58f1e48a5d25e6ed072f68b796a8c55e450c180167a5f1629fd36e1990bb3074f8d3bcf127357a953d2d78b332e95a6926ecbdce11e1fb4458779c7539acb29a22bb007927adcc444fde0de56c6476ebe61b0ce7e49aeb3c4530deac53ffe859732e3af84d05036452bad4ece2d4e64c4 \\x0000000100010000
-20 2 7 \\x74d104dceb3a3d5ba148555c65ead19a56034a97b073eab03a4e62de6bdd1f871a312a72c6644bfc3d4bd3b4a01182574a88cd9cce6bfb11f0137d85a059d70a 2 \\x000000010000010028db7ad1f5c3d195e36d9944e551e31885396cec9042d24722149f20f5846f5059e8902d05d5558e07be7765a73a1150fe8c83810e25a0c622704ff1534ebd6fba98714899ea0e69bd29c4669e993bc5dccb6105508a61cf0cc44f6a98d1441c070006d289adce45e79ad8baf439fe570aec8b43360cec650516859d55b7540a \\xfb41362bc5be8a8ed957a88763059a88465bd94e1a78185d90a9ab2dc3ebf6a8ad2789147d72d05efe9916e6ba5f73bb75dac776c19571b9ccb1a0be67d2c917 \\x00000001000000019cf222cf48609994ed71e4f05130463bfb2bc065a1d9bf9ae9fa6bb37f0830c64bd25b4c490346ff00293e25546eeab75a2657b36b28a7dfbd7175ff4db99cc521ee97e477b23a67653f10336e65ed5637c6ff42244475680833ae89167e58e7e3a792749944b52b32f8563c78fffa21ec68b612b3851384e4ac9ec030b192dd \\x0000000100010000
-21 2 8 \\xce9bdffacfc507dfebfc276befe671fb8dbf9c0d63803b63b8a82b33f9f68fe628b90f0f355ddeb82170d80ed19afbf5febb44a0d165b94822fd1cf1b97d5f01 2 \\x000000010000010001138cc5a587927a52302950386dc7640fcae929ad579c2561f0bbe6f55aa5463ec248c285bc13ddea079d4462d5fcfe07137bfd87fd9db07cf7e4a17245cff24cf7cbecda6e24a281bd141f270256ec1246946645de37f6629d87897fd35bfa93763e192a22954d35af762d36d51668e1c4db43d3c1930720d0f286791e0021 \\x6369786dbb40012fea118897287bd217ff3bb5a09cd14599bf38a7560f780c106470a6250042132fa9468c62ed3ee7953c37dce6e74dcdc4fab8cb2afc9c69ba \\x000000010000000111a8f72f1d135baa35e1b7dc8df338f4341a770619f0a72198011818fbfccf31f4d591780f0136d867b52ba49499ab23260596b2a8f7aefeac1a3e1db44c963b72579764562b5e1475a82313e70036a0df2d4ff09c5ce788bdfcfd2b48a1960583e9373cf104570f7b8271b26506ec516714b780768980d7554f0444ef4e5492 \\x0000000100010000
-22 2 9 \\x224f903529ddde5b8b77aa8ae9e0950c5a52cb2ee424adb1fe70d749f5a92ff0b7b581c2e7a31e0c376c54da4d4b0ac208ac5d9b68aaf7c7dc862124f583130f 2 \\x000000010000010031eb251a659b20e782e1465b8b7a5ff8cbcbe219ad8b87cfa16a8d74a854dcdebef89698f159cbd7413a4c67a885fb14365c2973d4c165e6572f291ff11a5ac00575463abc42d770c1d3be01ea672b69653d1c5c7738c85433e91c4a9cf6f06ab1164375e67f22ff5690ba2fb9c6f79027b432cd63f03a48ce981a005b97fb \\x6e9a12e3d21460c4fb9957ecd29c194be654d8767cafe2329fae46295f927644e205073ab980e41785821d0c9614a6af50aef858ee67ea049e7be84fc1cdd0b1 \\x0000000100000001386bf78695de4118aab930e080838f8835672ef9703a49e94ed3f82bc6cd4ed5bd535fc1b98513970d0b571458f00bcc1b5dc28d9de0d0b8e9d70c0d80539ce6b71f9a913e7bb9b16a070af1c0e90d0ccde283281ff3ab895579b6ac1980a70baa6b6e57c14ab1dfbde85caa8ee41488d97f5922f03315b953b7fa4dc39f99d1 \\x0000000100010000
-23 2 10 \\x07f1482faf4368ae3c17227a3968f13b4bafb69796ff7ba37426a464de313ae5e821ecb4aea7e7de0aaf76fe068b2bff859de07a595d3450323bae350dbf3309 2 \\x0000000100000100738e007f16168da04a9c74846d7654fb720cb9ebde8423f5eb3ff8e266eb8976a3ff35d8f8f081e8b6357712f1f75f9700f0b8ebdf8138de28ae8a8a839e4b6c275220af8ed7340a49b5f32609e4f2e0acf4612683d477378c5fe1a9df9e09df82f0ef5964cc26ed4db5b6d7ac6f986c67bd77d71035cfc88292091acf05feb9 \\xc6d076552dd050e48560ede99e3e9ee6978cd60a3c65006dd91c196a9f2ce50248c12956d92ffe3753fd414ff242c8185709d3ba99cd57e936e679f97ae74d66 \\x0000000100000001c9e97564daeeb49f896c2ee45d1cedd94704e4ad828521ed7c65fc502880bfc2a6fbe0dfb6eb437d23a626f4897d5077cec5c51d7493d7970d1e61abec5ebaeda53f06c8cedbe955fc89aee8964658bbf934f6b3b61573135cae6770284ed6cdb3ad1bc7d36e040c3cd563c1cc9cd27d64a84040e695489feba0db52640ff326 \\x0000000100010000
-24 2 11 \\xa29a692dd253b46a5af8fa5eda28d85b199451d54c6eb110ece42f82d000f4f2097c3de14b6084cf0061709850cf2bb51fd5c211eab36cf59f7c2d4d6c32fd07 2 \\x0000000100000100088714d83743d40a4424e155b3bb758b02b09af3fa58fb435bc36c150099cc1e0d2ec233f375846048d44f0e5772991a6b55a0322c75ae612b2c3defd9ec11ba7a9841d79fe4734b55fd4bac94718721ddcafe797a2dbceec5f2cb051161e322319452d9796d3e09aca40a8ac55c04d4f5ec2be58fe0959af2939d489eaa9e4d \\x9637e15e982ac95f52c7f41bb79ce8b137f74470227083758520cb071f9ac7651bdd17be94b340b5377350c207e1defe31c137157fe180feaa8b701e4d5ace38 \\x0000000100000001ae6ada9322f0656d7e20dce6f982ba2de58329fd0f3617fa286913d1feba5ecd7f9fdc6aa31ade9dbe0bab498aa4e5ce03eb8952ad315c3b644f6883189f00a7a204adc0da1457d6febd246b13a60a5c3000249cca09681662c9a73e433c8842abd73c1a8cafed5b72dcf8d06c43dcc7a1dd7810f9915cbd7e70d68a2239921f \\x0000000100010000
-25 2 12 \\xa6455746ad9d15ff8a07a3561d594511c6231c55b31e86a95e276e728f5100b1c9d6200bdb5f7e61d993f4cb2dcba81806d287fc90149b088c620e3a8eaa6e00 2 \\x00000001000001005e8489148e20f55842d61d8991b9c045e675d7c649d0b319ad550a1bba8b6537aaf6c7483a1093fd5ac1283c0d0074e6a2bd4fd67656cd7af3e36bbf39b7fffc8c0a49b64451aaa14e6f11a2ff1db7d22705b02a20eadf50e61ee4245010a082468efbf3cc5f328dceb590a408fd4ab97560595a81d4d47f1da573243fe7721e \\xf63b613facea60683375c7557b2ab9f8ff2fb255dc0f13dcd63b45e4c07f3f5072165e96bfe1bb6fb15c276a233de71108a33b08f29b6ab57c8c4c71b5eedd89 \\x00000001000000013047747bf5a2376517bf016af3787c3a78b76064e1fc1b6ec26d18f6f6ed41a0e6890d85570d0687c30b9571cd5ab2e6f49ed290092bb20d49568176944aadfe78f12cc5af2172a15728f2b5f9bb7eba55cb3010f76dd4af8b1c2b1abc90c72813d4617d8568a2ad58c2186201746094cc1cedb3786895bded0ea4f737eaf025 \\x0000000100010000
-26 2 13 \\xa6bb30e69cae9563f12f4fa69d270a3fca582ae7c7d1bfac4a22cf6bab8bfb8b97c62c3edc35d2b7e35b05f6ef5b293b33c0cb6b2755da1e05c8a5242cf0610b 2 \\x000000010000010038fea413b961c6a3a8b6660989353d2e98bd84cee6b369782b0f1924ff06696c38491128aa7f5b82d2a3ce3eb4f360bc6f1a2812b5db79c6a1aab12daae41e45ca3c94128784382bf3fedb5225f1515428602f6f05bfa77d842adbf758e7890d1871d47e7e6f6c5c0fdee99799d0291b995d77216b234f61975acf58a8fe3f7b \\xa2b4188283c1f7f068e7f4e81c1af0da978607bb2ad34a23a0a51e8688f75992f8cf8ae2dc81a444539e99840c4582ce2a3db35f97f27cddc18c4c859885e623 \\x000000010000000171a83165307e0da4f6232f79cbb06fbc058316238abb39df82132aec1ff7cfd9fca433d2e62b9bcef7dd40cbd376fbe337dfb5002fd75b69fbfb8c58497597cd479eed4e64fbc5fcc4d4fccb5d85ee4a2f77824545f3bfe63af61d582d2a3093c0107711eab25f261581acf93a709a17ab0afe486ff9430ec8ecfa3e614e9df4 \\x0000000100010000
-27 2 14 \\x6ec6d915c1dad01ae2ce8fdf8060472a04b1351aae945fdb6d7d370bf29de1cdacd5b4883cf8f0acc8a03c04b347dee7ddc8a3111a1f71e84017084910bd1700 2 \\x0000000100000100b70f4fdc5022c5d68c144f5f041dbadc56b5adebe87c8c4347d0010761522a1d303e72d15738a78391d03891558d8849ea46da3950fa00e50c96d7c088020f76d495dfbbf21ba7be58f749194ed26445029b4982a96b87105d273c74f5783da983eee3f0f1cf0a8d667dd9da78a7c1f9d019d138d7b71a1e64e2139884fb90b3 \\xfd6d4e5926c019cb8dce2103bda5209e99d650c2c8d2c6e625c34f4555e491eedefb5589885c3a376b532f7c1f903c1313733a5e6445d7863c66569a90562398 \\x00000001000000015ba013f86af7333a89821e4cac5edbca09699f51f86ff74eb2926c9404024ea05c4b8dd3dcaadd5582e1941bcf63a01864d085f18b0783956ed4d66aff9b85eafe254027170131899e7f3ec51f2811c88a8308737482f21dee0bdeefc4b628f1796b67616c644e06376a6252bd98f01dbe97f8754376139e45310ca3821fa1ad \\x0000000100010000
-28 2 15 \\xa0d3bbe0cc6f5803c5398bd39a6167431afee49bfa79a1f0884b2298b7636d7a9fd28e5eba9a949266bbc28c81683d88c85413da70b8e86c33d18d68e80af80d 2 \\x000000010000010044d73c9facf37608cf0a0fd189a6ba094068a578b13a9a83f91add5950ab673374ca70eba1796b53308c1f9ae711f1468772c8e59b8deb326fe72d81b6947e06e5043c5537234fdd5baf6157d687142dcdb8bf8e304bfee305f55a1c2abb64d36f27e59de8d267a51159c16c036a22de2fdecdd1a0fbb27940db91f591e43497 \\x3545b551941a5bb36451ecb0769c279361b249f8151cf3c787c75cc81648c449793c5b11f4eab98b4f14f764940c4e6c86c772ab25a2de5b85ceee9ea4752f84 \\x00000001000000013e076ff66fe130d55485cf30d6ce614e71314dc5795b75dd1f54c9ec61124e82ad24e4fc45b2b435640812729cf7095dfc7fdf961c435f29ff7fb018ec3effbadb9be7819a8683be4d9c243593ff95d587f1085e2a1edb9d649cdca205e516dc31106b4def1483bffa88148d6c4b4eb2cf1d1394ac6483921a8eda055963d922 \\x0000000100010000
-29 2 16 \\xcb321b6f078019cb8ccc331e2f15ebe6a89a46a7ad1dc9c0251166d82ff312b1edc0f9dc264b5edd33ea30cd525fc8db4bc05ab6bd44d748d48003fcd6cb0c09 2 \\x00000001000001009776f84d020eb09477cccfb22635dff33f4bc2a0d38d97204de5806fe9bd819ea216aa05a2ee328d6bd4f313f9e0bd795d51b87dc3268079b18b4b12cf3c28e771695975b33ea16c588a805a2027a1fda9ac1f4d278df62014586d94a5cf8a067b77c4737070fb14fa96871bdc9d699211ec9dedf9124e3d552331d7a3f3b292 \\x53f54f0f7857be8b9b4542baca6643617471f311a3c806b9a9c212ac58a60dcf6aef113b6295036735a387bb4ab18f877c2fe5988e874be581b5b571a7080819 \\x00000001000000014d1d897b0823be8cdecd070d1f24850c7e6c0bb289a2183111080e05c216a675595e72bd75a5749be0e5c894cf3275960d09a32d29edc77644ee462ad7e8c5a54954d2d70b4ab657169e0c5368c3bcec762c7ac2ad2c6beebc3947e08ec8a465e8fb56a416ab185718318722fa3f42feb2dabd07d98c0cd55c83f0fa463a72a5 \\x0000000100010000
-30 2 17 \\x06d4968670330ad3fa3247dd29e913d6412aded5e9637de132158022ee32177198b57a9f4a285aecbd25b700fc63858087f231373035d915d9f876b2bc6e580f 2 \\x000000010000010034adaa8c16283c12d6d6d4714f645e160ff08f2f268d0b1e39397c3ed568e3362334133eee55478bdfbe32caed72386008d803aebcd9ff0fd0d49b22e5f57798d8b2dcea10a8f40fb4bb1bb2433321b42198f9fa1412b8c03d8bf13bcdafc1c199c49bb94f5ed2dae0489fce08c117dfa60140728465acebf9250bb86b713698 \\xd4c9ead69ab929443ae39ec7657ffdba26ecebc08823d278c1b9c1bb0d6379ae837b641e8dd4e9daf178844633fdf487296f34a4976e87d157dcfb08b28c883c \\x000000010000000139f726927a65f805f9fd2f0b3f625121c6fcf2f24ee120a61f8fb6f4873a7f12ea82a8aa2be8c802c9dbeac7488736749b5f46abcbe7c4948e9cf5b10e4d21e32810a50fd42b03eff89bda92b73cee008bf1ea2f2b5fde2209f997dfeabfa29ed2d2c388ced63d33cb04df222bc62a7e8619a60b27fc740bf8f6f9f7f23b184e \\x0000000100010000
-31 2 18 \\x8cebda1c932e29f70ded1d7b23ec519c717a4d2599f7648c905eea9940c6ca1ee028213484b820d871cddd32a0b59cddbd77d0bfd4e2d17f1f17a44b9b1ab804 2 \\x00000001000001003f79a97d5d4b24c805c4c238685b5f741f3d4c352285c7e3bbac4f8bc6019e1b290dc51714b4592ec02d019b1167560e220f7cfb42033c396f57c496f8cd07e8ec7f608bc19aae315579a3fd504a9f547c3a80c5b48d84c9a7876d6afb2430a53ed5c7bd215f5a23ff3a44157ddba032cf5ebfef184ef625f3b84b933d3b21b4 \\xa5f667d1b44279603c1ca7b15ded0354302592fe92e1722b020e30d272adc1e887db73729060e99b7f6a6403b067b52453e9504432973d8ef265b47804fc6a28 \\x00000001000000010ddb941e0f67699c617dc61dd04ee930da8f857c9fc050d27970f4c8840e0f3097ddb92b10b80f03e34f20b6e38d8995ab1f0f66cad58df4835a5fb6c53eb04c53426e0e31ee83ef8ea0eaf7c7b6fdc2a6af0e675a4616bcf3fdc3756f0e408b5b315d199d79bd4a5529bee6efc536d5c726eca051fe13c3062c7de4533f3464 \\x0000000100010000
-32 2 19 \\xbdb6923230b0dfbd00668dd1d709f2e7962f4583e1536fd1d92cbb45e68944be37c4568830aac44b2eca68a5ae678cdf05b4833feb430268194dccc8f0aa500c 2 \\x000000010000010037263aa4d889f558bb6acc1476e10c06c18a2fbd12a86c1551b6db6abc99112d4a31227600925b0fe85d338a8205ff46a3901f3546bafc4e1a38c15b7b467fd203330ae6ee626eba53b84dcd2e82b8da2446810ef4f6af29be143f50aeb019b56eae9b15f3364a9fac0264eea7e4c4819ee61519732ec9e7690e12f1334ca870 \\x3a5e4db1065ae0ac1462e3cb0a66eade3514481d898fdbccb66ad42d168b822e39428ede07ac23bbd40d12e43701761d6473ae73fe436a8ba7dba9758dae37cf \\x0000000100000001432392f4684ac4357ef77f07bf8fd9dfe7c64f2c39b4736aaa15e8e8aa0ac3482196575c5929f23e00c0b47d7545c18999feaebfb11536e2e449aac9e7187ad1d768a45d838c3d9aca6cc762afd1331ddfbe43fef7a2e2f32c1b47eba626f823ac9af7d36c981bc5fe57842e45dab66c5f0806934069c29eea945fb65fa0b58a \\x0000000100010000
-33 2 20 \\xb054970ad557c15d4b1e7f625a734a09552947f5414c29ba4b44d5834756856269a1281b5113a621569b05a8a76c10ae97d93f467d630f84e1b3124a1c22200a 2 \\x000000010000010027708be73b48ed6ccf87a2d19bdacb0fc666bcdaf6b39bba68929a54d18bdec39ca59addf66ea6e191bd4f3df6f1e6a3a0e35fa906bf388a3f8d28f21f0d500d500a11cf99eb54d3cf6b8be014caabafa5b45fc927b5ab611773e03a71f0cb20c83d6caf9c8803852434bd6f0d9d5b0cfb6fd06ba57b76822dcf61c00dfc8a1f \\x8b0c2163ed93a69af2b103b50db8f9d1c4e364d8191b202eb27ff8a43fba3f01cc079e3ea91fab81673720c3a48693005e1ebd50931cbb474238320abde43d60 \\x000000010000000150e095ad650b133403cd71c568950a6c06e0a5de9e618e42b793994564a65b3ede90d50e91131e4e9130d9d4f64e0a4d348384b743296ecd4aa48b39b1a533fafd277fe48baa2326b2c1f0cfbe533576faa505a3931f55e58cec10c91da70eafd4afeb97e8b43604d2142e07e8f54aa666ed247d8de49ad7d0361ead9b3e8bf1 \\x0000000100010000
-34 2 21 \\xe6a31d3208af2334685d81f2ba55628bd2b3591787c2a51e6bd3783d0761647515df9de6db92d54a6299c70731edb7b2ebc3647010bc582f2c22573f4b2b8f00 2 \\x000000010000010092ef7f5d9bb695bdb971ce85c1693db4be4e4611954e798481ad8d038f5599a287dce4545493773dca8246057b45278c93464e4e2d283d97f1aee8d83b58f1b37c46b438366a1c2c8405e48c8b66079ef4ce09a30f04272dd53158d60fa34d2bb0e6074dc83e28a75daae075d88f385e7a49ebaeaa1816883c707a17bc142cc9 \\x05cd360c7dda959d4dbf945083e83ac090100e62c247e8f48f2a20e368990c0837164ebecc9451c29022c55e0f6e1f5ade7f815ac5548caac5f0e1bf67cd7db5 \\x0000000100000001baef4149c37a47482863b62c5c5563f7451e56adbee6b160e30900339388e7b0739c2d5843e6622a4ec2fbd50808953971c14359d74c4b8488dd582c2f5b63ef13aeb6b75ae4153eaf10bf43949c4e11cb63004a7350caef3192684debbb63f10b045a0ba6a93d02876129069735c9eb18408bc5d2aa75d5df54ba69a0c21b4a \\x0000000100010000
-35 2 22 \\x70063a72ed30709d12325af91a17ac0a8b98fc044d44367471304cfc540f75a4f734b22fc0d855c6811e897d2a3ea49accecf0f1149f81289e2a62ca56d55c08 2 \\x0000000100000100b93f8f647ae6ddecdb7e1dcd9f752564ed4314a909e8341e73968c62531b4e05ab8d4acb7f4573ccdcc8a365fc705fc8936bbea216597f924408807c0e199c99992f1437eed834fc6b4555084595ed9f56df59c31b0b0414e29bae34b3b11ea893a7b1bd331a67b7d1e99227aa8d653d4ff31a680d12f7aca04b5f62ce625135 \\x75b32eeb15455445117465cca51662e778e5023ed9bc1578f1b2c43cc87c210ef8ebe62006ba987c7f8aebca4ae131d48acac4418094f343b5b355837208c53d \\x00000001000000010e0db2b90cd6b1cbaf6b3ad7228c7ce406f4e412ce0dc17ec189b716e0c423b32b417127d4a29e468d083ab94d5ac0e6ebe5d7ef25b45798872707117a7b652f01941ebff462f295e4bab7461bfcbef28997bc5ff5ea465d3ee791e0f0c5cf2106a70401c0cac52ffe366bf6e0df6bfed74bef4186fb1726a8852bdd3513dc86 \\x0000000100010000
-36 2 23 \\xa1fb5cc6f14e485a94fe218d56867761c6c9b06114cbaf86dde5f911f3ae3966e7438b32263d980713c5eaa6dcd03038d81f46392ffb3e502bbd8a32d4c8860e 2 \\x000000010000010068f544c7a6d2e3b51f5875cfc3710bf8dbc7a087e7e6e97960b1cfbd7b4119fa8ec346585e68996b207bd9b4972af0e67c1ee18e55d8c9f11f0e876378c30eceab53db5c2a59921e6b14b94d2662ecacd27f2697ee3f3931679d55bc996faf4f09a8263489e364dca12dfd81875f033982b645fade5821c151422e8c41eaf895 \\x3278ff5b3c3faedc2e005935341d361f9146949dfd4f095f0f2a0efc23a0e447e2ec7585596da58a722757a192c8739951a7dd55f00982c50c247fb9ddbde4be \\x0000000100000001ac0f807a4772df85ea7879329cda59004b3adfdfc2f683b18588db60382431e7c5ef1a370071ad358827ac3f47fce6ebee2c5c82fdfabb1775335e5fdb8650666606f54ab2af9c8a4d32071068ed4677916c4b8d32d29cec8e3c226c4d1a68928aee83ab49bf58df0d8daf31386b939587a226f683cdbf732a7bd6aaab79e70c \\x0000000100010000
-37 2 24 \\x52535ef43efcd23aa983a44474c78172daa7147d994713da3e80dbcaa60349a028f74def9aa6aab716af2d685a5a50e289fb368f2eb5256ecb57f4d16ab6e102 2 \\x0000000100000100173568a2e3848f6bb0a67d96b55a1d4aecfa3c6a2b18965b33b94524f5e132456efa9dd4171f7d5b886da7b8f8c00376dc34c883dd4ae662c904d0ed1e0ab6d9962e3aa4b4663725b9fd4c9cf6f6d6cf202e6cc89a0a5f1db32f4e42507f8d99dbce438b325a78a7486c99e911eab3aa96c8dad159cc1d0bf744de6713fd2291 \\xfec7bbcf7bda580083103d47ef1d70047f167c26bb3cffab278ced8077e627c222587c6ac0e228223daabebb5c4f5a60fcb8fef2988373465bfe87c6c23c811d \\x000000010000000193a70bedd811abc08b7f7bae6a94256507a6984101059330b6a1f0110fae1f7f0ad1863d8d05f784b951d174647a0c4208dd7abd6bea806c96495a344d214b96bc3b0df5d766007b6e44602d383b964f2f10b391d1ef9faf932cb38bc5fd6d10952afcb3308c739a7afc6b68dcec3135255dc9cd017893b9f4cf45053c834594 \\x0000000100010000
-38 2 25 \\x2b176340f1d0e26a648ceb04810d06d095a6ae27612558c7de1ad215a283fc66b7a11c456d04c73cfd3f5aa5e84aaf3af5a19a02f4e6fe90916240a0d9d36a0b 2 \\x0000000100000100777de581ccf39bc86a0477e3f3e71ef1716948796823cabe948704e92baeb801eb65dbce633e8fdb65841f351790a638cf434ec0887046add9def31bbe388cb39ddb8b5d3682bf14dcbabcd266c1bf343a71a4b480ba5666508693a2c2b22c0c9a0feb1fc012baf4e6b969c72376b470194dd8184dcfd8a5c3c5e1f5e6e42a69 \\x25c85a685ba930ef953604d77f323d89edca611646c964a561575f051003de7cf6b935315a6b99035e2799834490942015de74e309af45b0031e9388b30ca504 \\x0000000100000001936f7c0a8caf8daa62b2d9c4a6faa336d921a6650c4d69976a7e0cac065ca70a851bd733e96e924134ddd7c8c8a3ff361587c561ffec376dd3d2be2ea8430fbb47da81b13ccb3761afd9418cbf0eea1435ce347434bfc72e0fd2a681beb7ba1af8e98f066ac5c26946d296eeee61a54bab0714197c88772f567dff92a308d5de \\x0000000100010000
-39 2 26 \\x8d41e6e0b273fe9e472050b6572e78785e1004415609ab66e8a3e8c90bdf14fdad90d8091f3f55ec595a5804afc67c2e84e096c135972c1049c3e11460210208 2 \\x00000001000001000df9d560016e7aa766317b4d4b3549abc6f0399b22493320114c0b4c217599c961e7927f991fa3375bed473f538e829312e5ee73d6dcb2b8a1bfd65ff8bff37f940798533e2a5a94a5358009e62cf40d2278f72c1226da0b8ac1cbb94b12e6cbb199a02869ebe1e49c689bbdc043422fc6a65bee2065a34d1bdd55e695a25287 \\xb472198ab8523acc9f5c5e14121669f0f63ae0bff5fb89751d033f87f8cfc6bee88237b352971466046c6999c627414d6d557fe6f1a94a72e188fc3f1224cb42 \\x0000000100000001517948c14e9f383fd6ac46d8432ada1534d17d5d15eb6385c1de22d4a2c26f38c0518393905ee2253b742aef36f57b2223ac33aeefdabaa9c0847c4df49d9b9aec308e524db20d5bf2fc28d77e9819ad33ecdb99f1a51aff87fa1b3a1b114b5b0bea2d7aca76026dc0121a18b2f1401eb078ba88829213c47569cb3e0e204c5e \\x0000000100010000
-40 2 27 \\x64d5fa7ef14e521e29e0a6679f0a5af2aa875615499badc52c36d59b0f36a267221148eb0707c3fd9cba66ef9b8d920675eaa503f9b74dafca867ce4b4d7360e 2 \\x00000001000001005680fde54efeb3c170318a9de400c16c8181f718a9bea5211ea2e38c8c180608b8907f32d3724fbee47925730b40ae187c49d021871206091d8aad2cd93df46ff537eca1de29d0680d3c8de14210ad898240fe87ea85e69a67456bf12b690494733c71e6efc707b40cff0f5048f839bcf43ed905e1413d285eac265b38fe5f06 \\xaac22e8edb9cb40549a6294b12f2962475b867909b5f3038310b57ff9331b1a9d2f99ebb8cb3c5d2dc80a84b41e3ed6e65c47b94f41171918e7718a7d58664c9 \\x000000010000000122432ff98edfa3670a1233afb97d09ebd353822858d1ec73da2aba1de48da77c8a7690a618f28da0fb005d35dbecdeb72c422c8d71b9bc317a118454fa043d608bbd49429ebd500d220ec7fd62685e91795ba5465a2938aaa330f105a492f555e3b8d249f6c02b7b361ac73ea13d2f7f23aef5ba119b0d945ad70063b5bbba01 \\x0000000100010000
-41 2 28 \\x539acb651f0c710672aff65658c90b3ba78d8c5f3a54b7d864212c706488ccb4046ac776efe0f74fbb3f00eda18c798dd13b08c872c6cd395fcd2fc0557d8906 2 \\x0000000100000100b09a420e4ec9528042b1725bdc0adbc33ae641f9b91135b9f80b75c33f6c8647a3cd05aa699c04b1f82b2c1242db8917a903460260e90f1ec40b2d30e8aa72ef2f0a68c274995f8260412aeb8a3d65dcfe70b9e35ac34df74afb9ad488035d5376be7d1571f95c1d1042c1850d7658883407a5011de09720100a207801b3f7c7 \\x76202522d6fc57d2e6fb2f271fcd801a130d01c67a27a966229e283e8eae6b7e2a879833541d17262b92092a56d885e6dd27156593592cdd6b6889bcf66de12e \\x000000010000000141c5152dae91ee572fc81ea5359602822a6399ce982f11df1fc757ee336e8cb6ca89c685fe4afa02c608c66795e7e699d6d9ff7763b7b5bd791a8dd6761f635ccfc033797d40a8a9bf3573e6f1c2bf6015300da6f974798a67993b2e9dd98c49212ac55c7d3c90522ecedf4c1d80af76e9b78012b7cff6224a6465b4c2581f03 \\x0000000100010000
-42 2 29 \\x26a30297f82a6bea79fa6ddd6249b7fc62c20e2e6279322409b0db90c7b7efd87f742d864d02f3fa3287e0d28f306d9a2c779ca0eaf1d2ea8c78b8f269754105 2 \\x000000010000010042e8d3e47cc91d8b7e5f76ea6bd8b7024644ea6f2be6df41afee85dcba13533392527584d4d421068a9f0bca3bdb8c234bd23c50a7934e10471ff14d0cf5a90be0b3f5ce0c96fe3d7cff9417238248645389752a7c06b86ad750bb748c2facec869a8cb611dc683ef6d436675acef70662f93272fed30aa975e9ea9148172312 \\x62e6b5ec9755818032c7ae3f243bf0606be8619e2ab5b9b321fa0c6579760888d108980342ebb1f8ffc40507fc8013654b28f68e1e65d7017803a1c6b54ff8c1 \\x00000001000000016ec31eca8b423a8a78da275b0b4fcbf585f14470a227f344b8dfee4a0085068042be0af467b52b845ddcb73025216ce8efb4bf101ba40f916101c815c073cb8c68284540daff99abd4a88a6f7746b60f0a1785aa59ee03aab6cd096ce4d23f9bacc695e29262959ed7eb0fde0ac00312819158102eb40f8d7d19de4b499a4465 \\x0000000100010000
-43 2 30 \\x7bf86e4ecf418027fab4b2abe34c890e2526c66854395cec60f71c029bb1a3eda7979195afd9e44d9f05322beb1282e30c4a442cc8729c9822db9832f0b4a80e 2 \\x0000000100000100586c153e02dd2eb46c39159a9d57b7bc8c15f70851ea276b82501b76c2dabf1f1ca34dcd488df27771a9e03851a435a5dc2c050333b7c4c470b1ece60fcd8a0eac6ccac597d42eb791fcfad04399dd84647b573ed91ba91192500914db51c26dab50c87b37ab02f0b59a44f9225460bd5c7b6df3939d09a76d333db71f49d5d7 \\xb4dbbd7eefea1e942d890082d6ee3e2516474b1931ffc2e16abc174fb4ad722cd1064f6534bf549cbaee534b9677070c390d7c3ade6a45007f95f15312ea4343 \\x0000000100000001a7002d52cd61f10ecb268544184b75cf4efb0e3260d3266a84b3771595e65f102523502a87844c422e6d7d3c4ccf7132a0e7900ced638b2590179c485ee49179e47ea1ecdf4fdeb1d65db5fd08f98e2a6ae401ec4af257db7fb3d33fe1a8580bdce6a4ff7d35163793ddfe4de321d919db577799ef788fb5dc87f315a341b13b \\x0000000100010000
-44 2 31 \\xe2453dbe16fe295e03096893b59ce2c38f3a59c1d789463dc7259469076af2b87fb06a54ee88fff8de7c5326831388fbb357b50967799ebd7175fb9a11f6290c 2 \\x000000010000010007c2ed09b481213f0a8673390e4a00cbcb04d9cc39f4fa6a75b381cf570029087cb31252bbc65539bc26cbf5964224cc3c4d8396e35c186dae05f7bff52cfe81ee4a7802bebd8b0361064d06fb5a1952eb707bae74f7e4e5fd0b5ac4b6cf8ff85364ea03a4176e4c1f8ee976440f7f0b8ee937bcebe741ab8d0e7aa8016c9d05 \\xce2805062f19f3fe455b923a485669c62741eca9e456ff177dd78717ee8dd71ff0acf2ed46b59739cd523b96581f0d8fa240001c012ffea08c3091c76e0cf519 \\x00000001000000014b9d67fc74822d3a91f1338764da749dd8f5628c2ada54cfdf31f42a6b4994e9ec869a518d6cb89f6daf0a72a6089ea264a22928ab2059bf0c2a6cfa3f260b3f00ca44702ab857466955409e81bc1c9d3b17c77d748cc7f4f91d9920178b2f8da6e629bee0e7e8ad97b2ca002f8548eb3858538d193273325fd31b9621fbbc4e \\x0000000100010000
-45 2 32 \\xd5b36a0f21a4550de7f566ab12240dbb3a82678275178034ab4cd6ee3d76a763bc9b8c06d934378c179697cbfb3e3d719daeeb4c74a425cbbd02d2d3f611fd05 2 \\x0000000100000100ad4810afdf180a411e0800ee362b891726e97b2508e82238e6764063f1c36f1b2545283cf9131c308d3e710a2fbd70ae5a50a44917ce8bd24205d9ca8c5e799c8f0ad52d692199a3c66a169c069b2f15f10dd1cff9ad965cb5ac5a0e997d6f12e10d3066f829184011f2a2f6457fed78f1965deb5845712c8a2a52597b8e621d \\x8f9def217c8c67242d95de68df1752965038ed6dea4a99c0a41e2373e18d9f252e7b22797c9e39ebf6370cd8e99704505f15c6d4c3f5243c3fd3c2ccf9ba6edd \\x0000000100000001674a93fecf1047d569937e6dd1763dcef1889f04d0587c5d4d950da4438d375f7af703970b1ce1c807bce0ed7bb4c14ee5d6106295840d974d4f97686be792ed2c6968dcd2aab23cac24afe8baa1c705be03517e8b97e7f75e3e615760bb07af02d429fb19683831397eeb4b0e1cc904e487a861356ceb3ceecc47c1e81efcdf \\x0000000100010000
-46 2 33 \\x6c67bca476c28497600ac73704e58e2207e4a9c0368e6b23f37f554857ace73ebbf4ec6345568cd65a725ff769c12a8c471e50008843fbe022f2f62f6fa14602 2 \\x00000001000001008ee99f3e89a6c88eed14fe0b792623de77f9f3efe42edf3bf8fc56b1e74fbb26816a34b45d5a0d8ce1042cb463c79dc1e55264d07205fd698f0b245db60b2422bd5e0e2a142c8b222e5fdd9412bacc9679a4f4bf198ef4e13dae08cb898ec5c35a7068c92412197644af842c435947cc39c6c026e9b2d0f7408a905e1072ebdd \\xba031aa9905331935402c93e1ebb63ce3ba85dff38881e180a067edb7a5d1d9cc49464299a38a6ee2932e69db6fbbd711c5744cf327ed2b7e4e1fb42c8be148b \\x0000000100000001c9e7c9319d9078528c499cf077f61b5db460b067e889ecb42fef64cc0b24089b7e7bf153a1978ea1e563c39e181bc6d4936f2af5105fa4e9bc0a5ce37480bb328e2f52d63d941dd8003713c11fefd63d9c0155b390e9591b46adff61c122535ef7b5096d1c5ab86a0ccaf87f658d05c978205daf5b5081d195501085392e0e33 \\x0000000100010000
-47 2 34 \\xb4a3201bec1bf618d7d7f6995d1e09efa3aac6495cb420be955081ec5026c8cd39315acfffd6a986bb44650ca0b2cd46cd7ea56827ec41ac3a7b3d9617494e0f 2 \\x0000000100000100140a13ef94fb631b1cb852137b96e779753b95c7f84148be3733c9ee7a66bd369e3bc3644d5e0ac3f5db9873b5b62516d11ac95ae6acbc0593ff7c663b3347495ebdbc337d9f9dd8391956ca99af8a9c94b7f5522082ba3b70e3e2a2453e3e2f12f30953e2e461f9c08f324cab4fa75163338ba0ff3615c4c872c77c4f6d9b77 \\x932f2a8e856207c54983338cb8ffbf77d673a5c40931494cb1267663f0de14259b3eefe574120ac39cbbe237e3b5629dea9e73759925b5cb590a8563b7a1ba1b \\x000000010000000130f99969a0913e532a44e12bb0e027d2610cde8ff79072cf633e6a723dcf57459ec789d33d8dd9db72de5cf53ee2900362c6352bc10e4b3fe77813b1425b40d622c2e17a1242a2bf68910c7e9135ff2fbc2d6a7736aaa52bcb26b7290692fc46ecc762f21ef167c585d1e479d71081ec7b9e9c0c2c0355c40ce2a102ab4dd7dc \\x0000000100010000
-48 2 35 \\xb9597608befdd0093287b108b2a3847290a2c3d1d1218447fa194a663843cb129cea15c26b6ef51c480b877642d25889099fd11ecaf7fcd93a4d076f9364260e 2 \\x00000001000001008a62e922f33af98d8c91606ba73b51da86b4240949857d3880364da16a9f82ba35db55a910a15583c949f96932e288e8d8211248af2417318049d2017e2a4921cf443b34bcfe650c40168ed6e8eb2fee58317268b4cb0f3f7d9f5b2b613b7ce49a4628897479e97133302195a012da56e422594aa456aa93620d8a0181be57ac \\x52fd437a782479c51cddf5e7c99b77e3feb37409c35effb3897325b352fe3d5be7e09c7ab57392964492f0650fa186c20e64d7996b9a5e7de1095feb9bc11bad \\x0000000100000001533e38ca0620b5191f9b1032a2c5dbefd86b0030e43697c3fe03199110bb3083fbfee205243040fddde6f6d4b2c9bc4751d6b007b625a28bbeba2ed58b03c807694196793571b66946d6be6e1793053928299f15ed713cc9fd7ff3ecb2e6d818a2a651d1cb552b87828844c8289b1edfed72e0d1a73eb40a0879480bb7f6474b \\x0000000100010000
-49 2 36 \\xdd26fe818bed4213078a18c96a1a971277eb224d671e7cad4ac675501842df77699f278de314b61c752708fd8d89d5111d012fe2741c066201578663479c4209 2 \\x00000001000001005292ec1a20185340bf96bcb66050c0cf7294507ca305153188f4597e6e2eb185849dab94bfdfd2722ac6881a9a6f981781c60704590ef5fd8dbbf07f90eea238060d207980cd7533fae17399853f90f7ba7542be2c37954e64f36f30720afc644d3067b12120e7d9c8775adce2d04a25549d06932bf766cc8e7d4e6fd296fcff \\xe1d41396aa213d9ce1ce2787ef3ba1e8bbd3372ee92b618a2de82f61257f28e1b1fb84a73843b10fdd4b16dd2aa5bde3f3850e19834186bb9bf5d53c32e06052 \\x0000000100000001b269ecb91aa82e181fda9a18c4cc72527512f175a73de6b8036b84b27585c8dc66b96ee2ca43108c51b9463bcef0d21d61a98c08ec59fc6f77c422a6aceecce455c40f41a13cc0e38cbf83d4d423d6a021fb858812cd22428b5cb348185f571e836e092f68449ab4db30ae5d4607624d8393616ebe8a86372b328f787c595bb2 \\x0000000100010000
-50 2 37 \\x9d812a8dfe3d43e0cb52982ca26989b768964491684b1375498d0274005d56816bc1b865cc689ee48d802043b99b49469dca5557240efd9408944c26d47fc004 2 \\x0000000100000100afab7cfc391d0686a17b2cdc00b7ff30c5524d1b59cc62bf90f5405d55d98aeb103b920de0e9f5ac01e8520b91401676bac62bd508da6e3be1565c1bea3ae9b81923c70cd33511cd305f449604a1a384786cd083dc5d54ec0918c49f0976aa47eee3f8bcef1ce6c9c9174924059ad349cbdfd506c07dd2a659d6cec764ff8dc5 \\xf3c4f0e5ca491216c7ef5195dbb0fec717a9e279e24ad694e844dea8473c57bf88fb3ac5774c06cee2d9e4d7ded20dcd81120b8b73862d58fae37c348e189028 \\x000000010000000130709133545ab15d15bd290b68ecf22377bf664320027c03ddcea4308a2198f2e407d5bc3c95ef898301a26060871d068e526e52d8312c80fcb974c1c423ebd077ef9938b19bf7b88625edeb1626d4e5d8d82aa4a06c0644071844403907231d19e65bd9170f2770bcfb8bef81990a3d79f0d6628f18d0b7cc49ad403616e765 \\x0000000100010000
-\.
-
-
---
--- Data for Name: refresh_transfer_keys_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_transfer_keys_default (rtc_serial, melt_serial_id, transfer_pub, transfer_privs) FROM stdin;
-1 1 \\xf83d5f7daa08c0ad69dced2ff0958f29fb29a6e5934b94a74912447ffbab5334 \\x3530549f5a9ce900120c86d16be7ec7297c9075efdbe35298db6ff0f6d0d1df7f542d08d77467d22637016d157603e4063c34d058bce859642f9786b9b53dfa8
-2 2 \\xffc39bbca783f56cf958f5f69465a13feaf47393f0567870eb262ac7a2dd946e \\x355a23fca497dd8596e76f4123f64378458a7d694782fdd1157acece8505454ee1e44c3a3916765a1a428d21cace0ad0d40bdd542b3a824508ea1fb24f47dfa6
-\.
-
-
---
--- Data for Name: refunds_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refunds_default (refund_serial_id, coin_pub, deposit_serial_id, merchant_sig, rtransaction_id, amount_with_fee_val, amount_with_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: reserves_close_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_close_default (close_uuid, reserve_pub, execution_date, wtid, wire_target_h_payto, amount_val, amount_frac, closing_fee_val, closing_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: reserves_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_default (reserve_uuid, reserve_pub, current_balance_val, current_balance_frac, purses_active, purses_allowed, kyc_required, kyc_passed, expiration_date, gc_date) FROM stdin;
-1 \\x636976470c45351d8b43257b0cb289bd64bd1c708e3da3cc576e43d522aed112 0 0 0 0 f f 1653935616000000 1872268418000000
-\.
-
-
---
--- Data for Name: reserves_in_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_in_default (reserve_in_serial_id, reserve_pub, wire_reference, credit_val, credit_frac, wire_source_h_payto, exchange_account_section, execution_date) FROM stdin;
-1 \\x636976470c45351d8b43257b0cb289bd64bd1c708e3da3cc576e43d522aed112 2 8 0 \\x6506e969615b4c10cea61d3c3798f501407a5eaea24e4176326639c1ea1a89b3 exchange-account-1 1651516403000000
-\.
-
-
---
--- Data for Name: reserves_out_by_reserve_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_out_by_reserve_default (reserve_uuid, h_blind_ev) FROM stdin;
-1 \\x0849dca29aaf92495684302c537aa87ace39aafa5b9561bedaad4cc8a3a845eff712294a6a6d7560f6e3c8c0446ed2a72f2735356e4e6e02798d0b67a5a5be72
-1 \\x08a818c2b20e3682a7ff42cfec548d6b7d3a9fd8b7ff4710f2af804eec02a92f2db0818e76ab8961d7f2ddb8b218a53647d8eef869e92ff2e6316f15311dce7a
-1 \\xce052faf02e230cdf0acfa47ce25761f738167cae89ce290d065bc72b6279b30baa4d5bb705a3de7dff83b01d789ea52176da00fa945a6aa52826ed3b1e7ad3d
-1 \\x7bb98968d6b175cacb1eb0a3f3dedca1d9da9f1e1d526569cf04821bbb15485d83a7e9e373d66064dd1998910ebd6a0aa0e231b1d7a66776c35bcb2ea6aac7f0
-1 \\x0caf281ea8a72019498b449c760bce76a37f6a0b6fe23d7290edcdb193a8187820fc938f30f48068db80373ecf62ac8513fcfc5a709f7730c4c78bb0be468929
-1 \\x7240f894c1516804fcdb498219c4b6e0e40953ce24399512f1d3fd3ed60d9bf7381ae1741e5008f5cf7c4e1f19b6104ba733723de18cdc7d3e7beaaaa45370a2
-1 \\x689ed1b36129962c260967ca7f2c9e6ce685c6fb0c6082efecfe98d9f40739b3a8e028777d09461b09efe0e535aa0bc9f16db46b67e370c6898be5c97fefc7f6
-1 \\x160611eb63b0ff7979b281c7b3c8df7c689a28cd062f8ed000b9a660a381cc67a78082e6f4b9c6f4031fa64a9559d8f5595266aa3f03c297a0f69b151e6c875c
-1 \\xba7d2f55f29ef9275f36b4c189da7337700fd295e16c5d3cb430191e603301aeca08cec65538b6c0adfe7b0be4c59cc6bad3055fc65168f6b9aebaa70d04a618
-1 \\x01be5dc0503cee145cbfcf963a2ebed49ccd0edaec06c6f9cafa0ecc0ab80474b39c485564322a7cbb18b1dc76ac7e41ecb4c8aa2485d8ef8ddf46e286b5b0d7
-1 \\xc3bf5fc826c0340f45530ea8511296cd1153d33d204b62142f85357500155abe273244c53203854bb8fd366e9879a3f71c2c0718d378f3892809993d8d1f3453
-1 \\xc5eea6a0431bc1613c41c028582dd9d686fdd609740e7de8a6e322b09e7d985e78f5645e8dd21978e66a7a5a173e56bf0dd277bb007331db8067daaa900956b5
-1 \\x1265baa10f22e8163d990a085b28917c86599a90f591f3201f92ea9546b89345b704309cf9efe83f91185d471ac49380184fdcbcff8a1010cea08276f6339729
-1 \\x09dd376ca56bcf291aa080136f163af93506a8291ec9c44c59654773d26217cfeab8b0b031ea4c0d4962842c4b0a99b21a500af33bceebc790d1b277c2fe1f41
-1 \\xbe98a873b03f8548345558578e7a2a2362bd64c0d4982e3ae768a62b9ffdbe50062722ac3972234b77bf4502ecf3369f8a2d0b6ed616cc358ee8c253a85c364d
-1 \\x35328180e0e883fc1a8abd888e15fc7bdf30cc787221a00b8fc33cd165e8357ef5dae73971f13ac68a7d21708db85f6d711ac413e1c658edd84595a3fff702e4
-1 \\x4726bc8884901cf1870ff34f30e078bfbd1585930abc8fb8b38bd7300968ebde611228fb38b3caa0f81f49ae072e92a1eb8209452f0f1b687f85bb6bec2ace41
-1 \\x32fcaa5604cccacee75ae503e95f934ddfc82e1985096771163cba9bf8414a7ca8fea80eeeaba561d4b47cc53579858fddd9d60e81b6ca54246f62ba8204c481
-1 \\xf4c47fbc700f6ef693325a6c6c54b088f46a2770821a8484299a5dd6cedbc25219c66af01dbecdef631451bff9622d4019181acd0dd7a56614dc3f6fd8471ac6
-1 \\x9abcb5ebc9f1022f1aeae70a3f1558637a6602b517ef3cddbef5bcff9394d722ed4edae092cc899a000fc0425e111da623e568411e543ac80dd31f8180f2b66b
-1 \\xb1d1a159afa697e852cc99c63914410e04c7a428749e4a46a995ae0eafdcd75738f4bcb7bd8d96fcd627b91e408480a06cc580492b7ab56f8d9fd18b67646e6c
-1 \\x9053a065acc591e13889f10cf3733e93513851343148c09d2f5443edbcf17b28ee7a9c42fbfdd448860554fa041286a2495558936994452433a81c978108b245
-1 \\xa57efb259bd7a40b7c4ff6b127bcb4963e62ddbe458220e6e9c1444a9723c67b87c96e630bb3a394efbbcb3d8408ee4e788f37dad06f44aa1b626ac54bed7cc2
-1 \\xadb725f4d1bd64f8d3e8708289e61f02c940100f16682bf821fc69485089f3c8b32da31d462af44df45566c443fa0e68e00c56d8d06fbfe025f3cc64ebb63717
-1 \\x36a340d7187b1c8642694588ed9a64825ab2b86bc4cc9dcd35659fc63075bdd610ce07971895dbc8e1b7239e4cb96d928ff890ec8dd98f1eeae2d61be5b50422
-1 \\xe8d925503c78d85c4ece4cdf5a14bbe11374591a37d2c2ef775d92f5f29d42369e7716516db1e1ab80467d00c8c310570a3a0c0a5a9c6cada8ba37f35947fb24
-1 \\xf238c2125d57802530dddb6478ac55a10ff084e51a17e57cf7ddf5acb7bf30ed09f7848d5e9ce86ea1855acb667470b7461ef5ed77be35adb8041ebb56258b3f
-1 \\x52157e06a1af77afdee74dac64a7f0414eb654b4ee6026576fab176799ec9e3f87eb84ec411ffbccc43b45f92881afcb0ec15065669f49e06250d9e0078e44d0
-\.
-
-
---
--- Data for Name: reserves_out_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_out_default (reserve_out_serial_id, h_blind_ev, denominations_serial, denom_sig, reserve_uuid, reserve_sig, execution_date, amount_with_fee_val, amount_with_fee_frac) FROM stdin;
-1 \\x0849dca29aaf92495684302c537aa87ace39aafa5b9561bedaad4cc8a3a845eff712294a6a6d7560f6e3c8c0446ed2a72f2735356e4e6e02798d0b67a5a5be72 109 \\x00000001000000010c70c7ee0ded04ab20aa8a72131c0373b000dd593679143fdcf761d36a0e3f4230fe4ced07d6bcc355de3368a39cdedba8c84ae5f9eba90033d71bb55ce3f11920cec5f9130e70effd28f825262ffa56201cb50680a7df6ecc5a02beaae903fd91b55718436fdfa3c67c1a2903e03f4efa12a0862a07d29d798490987e42cafc 1 \\x0f336908f804bad59fbc03474029558b25461506abe8a52578fa0b3ab63f6c6e8b3ce17bad31f1f3290ef8036cb14fcf03e76150d0ce7db4f52ec54c53819b06 1651516406000000 5 1000000
-2 \\x08a818c2b20e3682a7ff42cfec548d6b7d3a9fd8b7ff4710f2af804eec02a92f2db0818e76ab8961d7f2ddb8b218a53647d8eef869e92ff2e6316f15311dce7a 152 \\x00000001000000010556ad92c5503019df098d904c30c7b760aa54e303bf34ad2bbf3d8e40d795c29ad3c581371ce9d336f7455cc41a0739e34a82b14ebdfe737d494698a98480ca3cb946f979d1bb642601c2e38b23ebf70993dc4226450f112296fa232723d0a17ae7a09dcba594718dcc5f91e395e67ae0a8d2afe9e1b8985f5110a76bc828de 1 \\xa8672a68706a2c6a99af6e5fcd407a3a6a96e192c336a20b66c34050555c466562ebb41c86624a515520005a1bfbf1ac44697cde4eb607fee5e0e3aac8b7b609 1651516406000000 2 3000000
-3 \\xce052faf02e230cdf0acfa47ce25761f738167cae89ce290d065bc72b6279b30baa4d5bb705a3de7dff83b01d789ea52176da00fa945a6aa52826ed3b1e7ad3d 380 \\x000000010000000124dc58cf324eab53254223b24e0bed35318ff115f539cdfb19fc40c0d7a713f8d4c4d3ad9ea4008ae74a34ac0f3eaafe7d2a5fd462af0e8415792d3295e11f6bc4b7f2f4010bdec7cf8b6fb9169b5146932de009658af6ed258b23b318006d3c3a5ac769493295a7c480b7f86612c40fd928f7a96e7f094fd694b0118859d30a 1 \\xe7866377ee86646799b874d8d1c4da3f0023e06db82fd9a62d04ecf72f30b9a7e7c84b52d3c953412537ee6f7e2847162f28f7bb57dbced1f61dadc8fdc3360c 1651516406000000 0 11000000
-4 \\x7bb98968d6b175cacb1eb0a3f3dedca1d9da9f1e1d526569cf04821bbb15485d83a7e9e373d66064dd1998910ebd6a0aa0e231b1d7a66776c35bcb2ea6aac7f0 380 \\x000000010000000181d3180a7442d0228dbf287b621f23b4007e8fde1e36e2d3a59a2e457a3e980e13020791eb15a208f7fad54de1c159e90fb665ac1fa70e992538b1d7459a996cd5525378032ff948ddc02ef29b702265e1936fbe9fd3ad8f656bd415a0c8060639faee8ce6155f1308efba520bae91f2ba8c801f48518a3de33ab08ecab1c568 1 \\x8d0e66842d52ddb6416235276afb62db08c25a81be3f9d896e32c2d0269f07a2265a21291194341c051b08d69d1aca1ace9c5feddfdcad43b45803b0929e3c0f 1651516406000000 0 11000000
-5 \\x0caf281ea8a72019498b449c760bce76a37f6a0b6fe23d7290edcdb193a8187820fc938f30f48068db80373ecf62ac8513fcfc5a709f7730c4c78bb0be468929 380 \\x00000001000000018eea9887f8a8c613a93a63864927dbcd2e558db97ad8ceec96a476c9cae3a1edd0b3628f2cbbe20f02cb206e5a0b0a84380aa5e18c32c81cd0dc1fc4157a73b264fa249d15e1cf28891064f963fdba31acd8fbf3ba690d792765e5528f339a6f1c1a430e3eea802f15884f5dc453f2f2503c960a14e07bc72f1421d70294d6b8 1 \\x714e9999d1b482bdc234ca82af057d2f70023282f3ef4b70512e75472f2130a86db256eec3fc5d0245ac68261beda21ade33804114061a76b6159dbdae53f607 1651516406000000 0 11000000
-6 \\x7240f894c1516804fcdb498219c4b6e0e40953ce24399512f1d3fd3ed60d9bf7381ae1741e5008f5cf7c4e1f19b6104ba733723de18cdc7d3e7beaaaa45370a2 380 \\x00000001000000015ec384ad053acb8508f3904039b6512f5f457b35c1f728bcabc9ff6d3bd25134433deedcd782bca82ad21e2d790a5ccd45ef68ff3fcbaf2cc6102a59900129c248611455c65659af0d81fac7a77cb383677cbd4951bb203a1040ac064e0ab2debd6118d6deb040ce3c39ad0536df18b4340524c2d52c508fb7b53878fed90401 1 \\x2d46deeacd82470e62ddf11278c374721de6a7ec0dbef5ab1b03927a341da82c3b433cef87ca41232d92687aed296353f763af6c34176e3f391ab0bcbb7c5f07 1651516406000000 0 11000000
-7 \\x689ed1b36129962c260967ca7f2c9e6ce685c6fb0c6082efecfe98d9f40739b3a8e028777d09461b09efe0e535aa0bc9f16db46b67e370c6898be5c97fefc7f6 380 \\x0000000100000001a1194dd7d15d8fa76b46946868a99da7c8a492b948e57c98831dc926a383b94e57d4d42139b1de50367e58d8c90b8db8518a87d952c74cb19fd7463296446d8b3383a205c33e4277b7847fa06421868c30f7caf891ddc2d195f01e3d5750d68d6349384f151b59efe740bab00bbc7cd8ed24da1e8529bc1e975dda5779026ebc 1 \\x4ddc395724c11a6d880e4d5d8e77d83e4cd584492e6c924dc704dd0fe4f66dcd40c297c99096e62b783b770270453aa8d04f58e47583c57c63271bd6bd992801 1651516406000000 0 11000000
-8 \\x160611eb63b0ff7979b281c7b3c8df7c689a28cd062f8ed000b9a660a381cc67a78082e6f4b9c6f4031fa64a9559d8f5595266aa3f03c297a0f69b151e6c875c 380 \\x0000000100000001b680e45ea761c48f75f39c8dcec3edc146cde7a44435f1d44672db640b964bbd0fa49648c9a0c145737502533979b10754506677c582c318890822d3f73357d30b05c87d0d2110c1c3cca6e49238a5f90673bf120f79336affe0f596627cfae035855f7957a179a9a3374c8fd3e63ddc1593d046cca29c5173427335a7aadb5d 1 \\x8b38ed8a1549ddbc7316a54e07c944bd0306508bed5797f6292cedf62cadb14cc22218b2d9a11d5e34ad74dcc95aa172b82548baec2b2d109b0977dd58748f07 1651516406000000 0 11000000
-9 \\xba7d2f55f29ef9275f36b4c189da7337700fd295e16c5d3cb430191e603301aeca08cec65538b6c0adfe7b0be4c59cc6bad3055fc65168f6b9aebaa70d04a618 380 \\x00000001000000019b779fbffd2627b8cc58e7fb7454c4524a0e4a613cfda2c141b61c3d986338fea8c328a3c9cbfbccf819fcdf9a01ec60b2eb5ca4b08be2df45f7b3d92de229df44f9feeb5c9405e29e2a49b910744a7ffdef9e08355026fd9c2b8b9af4dd08377df45cf176a10c856e52f093f5aacd4f14fe2aaab1018e7e2867a28d0acb480d 1 \\xba20e87afb14bf9ef23c85934e3999bc09adbad498282e9b9b51ab6019bac3e3a5912d36fc0f361fb8218092c28e2c2949cfe59a2f3941e43bd504e35d88e10b 1651516406000000 0 11000000
-10 \\x01be5dc0503cee145cbfcf963a2ebed49ccd0edaec06c6f9cafa0ecc0ab80474b39c485564322a7cbb18b1dc76ac7e41ecb4c8aa2485d8ef8ddf46e286b5b0d7 380 \\x00000001000000012b44554f8b31e9f3500ee2e58817b7f6fde8b82c97043cc7639b10032a47f3186114070e3e7cdf9d2ec3d47d2c61f6edda4890f42d8acd2b13634bae58803efb886b82714e5795caa95471fc597c996732be52e3a34d5d291eaa6b1d5948f3f67a4819a62e1690bc13e3e5209baf38a113064cc4b0284dbe18d522528d6bc469 1 \\xfecebf24558f0e86f12be254638f73533e44d4dd195d9e58f4e0ddc1aa5c9e94d766399d88de237535e4772a62df534108a39f498f7d09c3928f15de724b6a0a 1651516406000000 0 11000000
-11 \\xc3bf5fc826c0340f45530ea8511296cd1153d33d204b62142f85357500155abe273244c53203854bb8fd366e9879a3f71c2c0718d378f3892809993d8d1f3453 75 \\x00000001000000014241761740c69ec8615974a08fcb513702f11b447e884d7722bb164955ba791dd0919d0fc3d95eb9eba4e14794c4613df37b38be14bfb7a78d6e701e0697e98873f6d3f1e0fbfe59d288f183766375329b6c38a2b010e50f6d9d1e590e08b6a11105f6f3079627f482e67a080705d986c14c1d97709c41a37e8bd2a15d102e2c 1 \\x89745d4f85222058eee46a912f99dc7cd13ab7d97568b48b54d856ceedf44dedd7ff8a9aa2f6df29fe1be5fc091c1c708a195114380202518c424c39edecfb05 1651516406000000 0 2000000
-12 \\xc5eea6a0431bc1613c41c028582dd9d686fdd609740e7de8a6e322b09e7d985e78f5645e8dd21978e66a7a5a173e56bf0dd277bb007331db8067daaa900956b5 75 \\x0000000100000001971f87ce3a0d80bdf926181ce8da9a3472449cd167960901a6ce3eeb1b3c701efcf6c14c92dc963c09c352f556c7505cd420509cd17f65105c8009cd4f51c8d0d777878a8dd2b8b12c16c061b7af6563feb2fdad2bf27a480443a73148ba1be1b923c7bcdf75d6a21b32bc542ebe2329a555706ec1648cf0985bd9600585fb23 1 \\x70075242785e00c1746e9ce1c38217e600e94dcd1cecd4ff20b15053b4b48fcd2b9238a74eb544df912531ce67b5481a1b0c1be193fea6f441255cce5e3e1c09 1651516406000000 0 2000000
-13 \\x1265baa10f22e8163d990a085b28917c86599a90f591f3201f92ea9546b89345b704309cf9efe83f91185d471ac49380184fdcbcff8a1010cea08276f6339729 75 \\x0000000100000001572a9207abbf4f1fd966a620ee5000b80f6789903163d6164a1d91f392a304e1dad256b29a936f85d4b7bbaf247edbe24413e8820a6fd336ae66e1fcf1d58275402889cc2558202192b4237942cca1c1f2497ab126bc7f2e139320ef130016fc96df0a17ba21ce3e147c70ad22f69e467f1fb6a836a99975d486c5256e82a00e 1 \\xceffcf81dae5c7129652a7dbc5238b442ce8fdd69b552055adb7b14aff312db42cc149009f1a476bf9e303e0f8d7e876c37e6889cea3576bf6591179276b8a0f 1651516406000000 0 2000000
-14 \\x09dd376ca56bcf291aa080136f163af93506a8291ec9c44c59654773d26217cfeab8b0b031ea4c0d4962842c4b0a99b21a500af33bceebc790d1b277c2fe1f41 75 \\x00000001000000013fa80cb7fb15c392bec29b35ccac99cef0ea5ae16cf50de4a5b4c020322dc20bdbcf19e7a0fef5d27fd744d629c6e3e487e56734db191b241af904dd0a0f19f864c46a9dd88abff21d9c00400797fb679fd5f3aab4254300544697d9fb3fefaf28451e93c4095c157e236ed56d161f9d84527bee242aa4558a2149320a261967 1 \\x2a4f63c96db89df94cf09801ff2ab292d5c997e85e31570847b2eb698fcfe2ac3d1bd5cfc20a35efc0095c2e5b7cdf6230166eb494d9d266a4fe539767c70306 1651516406000000 0 2000000
-15 \\xbe98a873b03f8548345558578e7a2a2362bd64c0d4982e3ae768a62b9ffdbe50062722ac3972234b77bf4502ecf3369f8a2d0b6ed616cc358ee8c253a85c364d 222 \\x0000000100000001af0ef971e9924f5e20eee3bf2a5fd4e81b533227c0a33ebd41dba53bbeec959add5077422287c70e9403ebffc836aa39310b30624cc7d2a6f6e2cb58d3ca668635c4c71309d191f656ce07533e4bc60b40a5ab1f677d76a1beb8a7b09eb681f00184aa11a6503e9df112140a7390c9c4f61e2dec3a1ccb9034f5880bc3eaa6bd 1 \\x56548d1e1fc0081941c789609c1638bf3b8e5963cf78411acc6768a4d8c95a599455731b14a9ba551c9b3df0f8b04b09f848ed1210ff4885415030c84b4cee03 1651516417000000 1 2000000
-16 \\x35328180e0e883fc1a8abd888e15fc7bdf30cc787221a00b8fc33cd165e8357ef5dae73971f13ac68a7d21708db85f6d711ac413e1c658edd84595a3fff702e4 380 \\x0000000100000001138b02b8f050a0f814d298f3aa0e19d1fa635af066d6b6edc759643c80c059f39bb8279bf7362562505314f829b022e313fd8df9dfc1e0513c022ab6399e8e07431e01c0e8ea6020b8cf6563ec6791c19e332e1cba1f9ab9cc9f10db2bf4775bfd46ed4e491e971bb63224d459d304a3e09f0179e140443369f8a5823a3492a8 1 \\x4d333f6d279d63edd855b99e891864cb6245edef0ff178f591005c0004b5a9fc2c5d0e8d8ce760d737821020163c0addcbb2ef346a5a7e3517f220ea3f03290b 1651516417000000 0 11000000
-18 \\x4726bc8884901cf1870ff34f30e078bfbd1585930abc8fb8b38bd7300968ebde611228fb38b3caa0f81f49ae072e92a1eb8209452f0f1b687f85bb6bec2ace41 380 \\x0000000100000001770557845d07afb557ce62672303499350088d7de8e244380616a231f7eab85073df6bc60f38bdd1fce009b293165fe3c8608b2e3148da83712fca23e692bce0385823b745c1609c683d6f24db100eb2d7608179650649c33d7f7df6a9f8a05d9fb00807db946546cd5a4681c6784ed67027aca1c8f0e559aab33a93cb715cc5 1 \\x93c5551bdb8a2253bad1805440d8c1934add272a83173eeab0a8b79bc42d1f655b37840ae7c29ccfeca5ecdfdd684db7cf075ebc13007cf320cba1d25cae3107 1651516417000000 0 11000000
-20 \\x32fcaa5604cccacee75ae503e95f934ddfc82e1985096771163cba9bf8414a7ca8fea80eeeaba561d4b47cc53579858fddd9d60e81b6ca54246f62ba8204c481 380 \\x00000001000000010e1505f60ba32ee7065b43ad5283dafbc2357e38c1409370b1418dd234d15209476324de01ae05a09c6637186d67fed9a23da46fd4b347b1c3ce8f397d0f97598a78aa92bfe0beefbb1ea6783d929df82c23c7a36748a6a3223859a55d5c5a20403c2bc548022757b48a8d1dea3cf022813bf23bb21c4deb24b6dfec87dc3c9d 1 \\x8aa6e524a3c0a908deee7e502e763932aadcd00ac4f7d4f434da17671e5a94c4545d45d59219e4d32476aefa6cc26b4483c2f131529e6fecaf8830bc4c330007 1651516417000000 0 11000000
-22 \\xf4c47fbc700f6ef693325a6c6c54b088f46a2770821a8484299a5dd6cedbc25219c66af01dbecdef631451bff9622d4019181acd0dd7a56614dc3f6fd8471ac6 380 \\x000000010000000139b15073f9e05eedebff4172b1593b95deec27e24cc7a111d661835d667ea724ee9791054a77218663805a8995d228ac2936902a684756e4308267a56ceb0abc3f294dc534a150a12d9e6b5fb7558ea25b4bb7420274e6bd4c5a52cb916481c3d6c64bcb34832f7f013f83df87c9cbdb908e96c5cc3dba357034908941921b1a 1 \\x079f2cdae9e0f9f581b45af3fbd3dce1bfb7f1d503a2bdf8c4809e820e1cf45c4f7bb3f8c70d406474c624232a33eadb71eab3852a2c0e725c0e2e8a5b40b506 1651516417000000 0 11000000
-24 \\x9abcb5ebc9f1022f1aeae70a3f1558637a6602b517ef3cddbef5bcff9394d722ed4edae092cc899a000fc0425e111da623e568411e543ac80dd31f8180f2b66b 380 \\x00000001000000011eddf4f82c1ae9c22d439a8916ff77c2536d8e072c55adabb5947ee7187c1b407332160486c717628f37e8e30c5fcbf76170fd1304303a03ef4bc30cc032164d1908bc40a1341765d67e6b9470602cb8b2977c355a45a67d68ce1740d72bafbe55f1763a9b3df22ea5b94d887e2e3e658bd117a21c490ed4c85c44e2c80e7ab4 1 \\xa7b80f4c22b2c144be74a0e68d9ae4d5594d49d32bd6a7168afb17665a97b3f602de9fd5248ce6cc41410095682cd905818e136e403863b2f9cbd9a25dac5e04 1651516417000000 0 11000000
-26 \\xb1d1a159afa697e852cc99c63914410e04c7a428749e4a46a995ae0eafdcd75738f4bcb7bd8d96fcd627b91e408480a06cc580492b7ab56f8d9fd18b67646e6c 380 \\x00000001000000014b5bd24f071c39d81b1453fabf10df0aadcb4034367688d0f1fbd8519525686e7087b22421bf1ad2bffa465be24cfbc286ec2ea3108bc4b61a5fd03143642a14486ee0e14b4f07206a52b0905c184c7d1e6726ddd00612bab883b1d1724fab27321773d63efea38d161326178fab7f85768108a679769adcd1e7399891096e70 1 \\xf62bb07666b0188ad59f0aadd4018cfd5752cb875faa9ec6ab709bd97f18b6aa839f671b70b3d1e26ba75d17449b4b33374b2c2ca2e7936bccd93042977ccf07 1651516417000000 0 11000000
-28 \\x9053a065acc591e13889f10cf3733e93513851343148c09d2f5443edbcf17b28ee7a9c42fbfdd448860554fa041286a2495558936994452433a81c978108b245 380 \\x0000000100000001605af657e8ce0e96104e40fc74e9a6074582735bd860474e53405f6462e6391ecf66100dad03c72c1a2e009870eccc937cc9851d7744bab4ac7895093d74b2f5f151ccb47be68d2eec2c3778b5bd3e1b38cf71458efb3db3608930f9e239fd7aea2e79aa024504cf6439a2ebca9b5712fa3ea8bcb8531ff5a3b85f7311358dcd 1 \\x167bc328263e14e90db87890807bab083969ed211f3c27abce7f99fe976589e19ddfc02d3d9f0f721e0ce509840f177dc2436961bfe61f3b2873d18998bb7e0a 1651516417000000 0 11000000
-30 \\xa57efb259bd7a40b7c4ff6b127bcb4963e62ddbe458220e6e9c1444a9723c67b87c96e630bb3a394efbbcb3d8408ee4e788f37dad06f44aa1b626ac54bed7cc2 380 \\x00000001000000013360f639c649ea4078e20771cd00725f0abc36997fa25383dbdc36f1844e6d4a2f21f37bb0128323d55a9fb6278dc7d599921cf99b30304af699a5119fa7a59a4e914cd8074304723af2ec59bd206de756fec303d36c80cd9aa9bab5a989811807103c45e8459645a32bb415328dae5d040954e467597b0a652c315507e8aa07 1 \\xd91951e60d0e0bbe2038ec2b366a8711c4cfec25bd9fe52989bcffac3453004f830db7610e29cf9db9ca817dc56f1665a362aff853f759a520143cf0a1e9160b 1651516417000000 0 11000000
-32 \\xadb725f4d1bd64f8d3e8708289e61f02c940100f16682bf821fc69485089f3c8b32da31d462af44df45566c443fa0e68e00c56d8d06fbfe025f3cc64ebb63717 75 \\x00000001000000016be1dd562630b0eea7328c8a50bf8fe6c08ed5af67378fbff973e60ee86069da0ed10cc8a9b73b432678809cb5ecb57a359047e9f5ae7bad7587698dc7e8f61573c608897690e0ff69738a40381b9d0f19be12620519218d418c451777fdbbaaa33b0160967692fcacbb9a541b32b066579aa117f02e8e1d2558c06f14b7e8e8 1 \\x53bef47d870ad3f69f126accbcd485ae0490f0a50c7890ff2d40655e581567ce5ef9f49e52c518d41ed35576f0dd417c8516ea6e15902240eaf95469d839a80b 1651516417000000 0 2000000
-34 \\x36a340d7187b1c8642694588ed9a64825ab2b86bc4cc9dcd35659fc63075bdd610ce07971895dbc8e1b7239e4cb96d928ff890ec8dd98f1eeae2d61be5b50422 75 \\x0000000100000001159cac5c078c2e20221eff0e68b34ef85c562a511f9ce038268f4541454b3be4728e4cadc9a50db291fe542ded1245b2a4d8a31495af90f37bb76b82507cdc8761ac708de2d1863317bb05ec857cdda7f0f14e27ff350493b6e781a2ad4619c3699904fe5d695077bff4aa89c5ec1929b354a9d04c7e48a91ee1c6aefa6ed592 1 \\x6a9d6ce1e770cb3d27fb7e86e39aa6ea75f59440a42639a3b2fe8582084980f0a401d3403c3bbdea791e85f787a594d9c0685d86217f5dc6ca857ff3e0c9a80b 1651516417000000 0 2000000
-36 \\xe8d925503c78d85c4ece4cdf5a14bbe11374591a37d2c2ef775d92f5f29d42369e7716516db1e1ab80467d00c8c310570a3a0c0a5a9c6cada8ba37f35947fb24 75 \\x000000010000000136723a2a4b2d6a44cf55d778dd423c81ae0af2c3024e9e3d77817cd337fbff7b66e31e824fcbf2017c1715f2c9bf3221cbbaec9a5e1235aad9766fbb2a75ec1975a5706430f3fa6ed88c68d2b5bfd029d6732472be040179cc52b8aaf1d7282891e99a979b4e63afa2895c1bfcd907c8d0b8eaedb623f7d1432a7a86d3de6a64 1 \\x40aeefc2f4c5a13692fec697bebb0c4ddb375c8e9c887541e8b5becc62bf64860556ae84df9037b02470f4843d81601b665f183c269b84ca1e8c9dc36ebabc0c 1651516417000000 0 2000000
-38 \\xf238c2125d57802530dddb6478ac55a10ff084e51a17e57cf7ddf5acb7bf30ed09f7848d5e9ce86ea1855acb667470b7461ef5ed77be35adb8041ebb56258b3f 75 \\x000000010000000198744be13f09e279918189fc365495908d3fe77238d7383b7fdd404f4dd50eb96cfb2435fb1b0462fca76be8f2781fd4e48f00c4bc299a8fb3f64db6d58c798f0d2ca750aa4f760dde7bdc80dd79c332cd9d8a1693840a532a6f78bd4604dedc3c91e26b18cee5268a84168560d3ef165cdd65e01cd1013bf762c26af8bcae 1 \\xd84a39fd6846f45cff8f575e5c2da3da0ca6567525d9f2ae65cb47f2b97541b7664343a86357ee7a1b8c3ebf14b1108e88725426ef401c107ce4ca56bb263c07 1651516418000000 0 2000000
-40 \\x52157e06a1af77afdee74dac64a7f0414eb654b4ee6026576fab176799ec9e3f87eb84ec411ffbccc43b45f92881afcb0ec15065669f49e06250d9e0078e44d0 75 \\x0000000100000001b7b0e8043fb2f3d12e78f74a55202e1f8787acc9819aa914634d5bbb0e4690d9ca6d8af2bde5eb524082917dafd83da4a559aaa8b8a65908e0681d4cccb734126ffb4291cd55a696ba82e93ef7dfb1a9bc4437df08ae73270db9870b35224786cfeb38cc821d7c3e867aa383b8fbcc47721c686e9d24b8d193c4b21f98e78a1b 1 \\xc8ae4ba8ea168006449eaeb849a0694e4ade6d8629d3cba92aa5ff563ed173e1161fd1a83b31c707b53e953cd53518c9984aaf8fac6ebe922b047b2d7951ec00 1651516418000000 0 2000000
-\.
-
-
---
--- Data for Name: revolving_work_shards; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.revolving_work_shards (shard_serial_id, last_attempt, start_row, end_row, active, job_name) FROM stdin;
-\.
-
-
---
--- Data for Name: signkey_revocations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.signkey_revocations (signkey_revocations_serial_id, esk_serial, master_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: wad_in_entries_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wad_in_entries_default (wad_in_entry_serial_id, wad_in_serial_id, reserve_pub, purse_pub, h_contract, purse_expiration, merge_timestamp, amount_with_fee_val, amount_with_fee_frac, wad_fee_val, wad_fee_frac, deposit_fees_val, deposit_fees_frac, reserve_sig, purse_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: wad_out_entries_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wad_out_entries_default (wad_out_entry_serial_id, wad_out_serial_id, reserve_pub, purse_pub, h_contract, purse_expiration, merge_timestamp, amount_with_fee_val, amount_with_fee_frac, wad_fee_val, wad_fee_frac, deposit_fees_val, deposit_fees_frac, reserve_sig, purse_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: wads_in_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wads_in_default (wad_in_serial_id, wad_id, origin_exchange_url, amount_val, amount_frac, arrival_time) FROM stdin;
-\.
-
-
---
--- Data for Name: wads_out_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wads_out_default (wad_out_serial_id, wad_id, partner_serial_id, amount_val, amount_frac, execution_time) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_accounts; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_accounts (payto_uri, master_sig, is_active, last_change) FROM stdin;
-payto://x-taler-bank/localhost/Exchange \\xd457d175b23a69f3027a15b2662f9e0dbf4931aeae3a97eb9030eb460654245b528969e9a98f1f598386cbe4fde62816da5b0797475beabe16960fec2d11d80b t 1651516396000000
-\.
-
-
---
--- Data for Name: wire_auditor_account_progress; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_auditor_account_progress (master_pub, account_name, last_wire_reserve_in_serial_id, last_wire_wire_out_serial_id, wire_in_off, wire_out_off) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_auditor_progress; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_auditor_progress (master_pub, last_timestamp, last_reserve_close_uuid) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_fee; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_fee (wire_fee_serial, wire_method, start_date, end_date, wire_fee_val, wire_fee_frac, closing_fee_val, closing_fee_frac, wad_fee_val, wad_fee_frac, master_sig) FROM stdin;
-1 x-taler-bank 1640995200000000 1672531200000000 0 1000000 0 1000000 0 1000000 \\xfbe39dd94c8698ca3a9d45c7f4656143ee091720b005d716e6e46e51673b6f566618e7e3aebc09c949fe6206575f221b3e262e0edf17300e839257f1fda7ad0a
-\.
-
-
---
--- Data for Name: wire_out_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_out_default (wireout_uuid, execution_date, wtid_raw, wire_target_h_payto, exchange_account_section, amount_val, amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_targets_default; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_targets_default (wire_target_serial_id, wire_target_h_payto, payto_uri, kyc_ok, external_id) FROM stdin;
-1 \\x6506e969615b4c10cea61d3c3798f501407a5eaea24e4176326639c1ea1a89b3 payto://x-taler-bank/localhost/testuser-zzeu1aog f \N
-2 \\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660c payto://x-taler-bank/localhost/43 f \N
-\.
-
-
---
--- Data for Name: work_shards; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.work_shards (shard_serial_id, last_attempt, start_row, end_row, completed, job_name) FROM stdin;
-1 0 0 1024 f wirewatch-exchange-account-1
-\.
-
-
---
--- Name: account_merges_account_merge_request_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.account_merges_account_merge_request_serial_id_seq', 1, false);
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.aggregation_tracking_aggregation_serial_id_seq', 1, false);
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.app_bankaccount_account_no_seq', 12, true);
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.app_banktransaction_id_seq', 2, true);
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditor_denom_sigs_auditor_denom_serial_seq', 1269, true);
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditor_reserves_auditor_reserves_rowid_seq', 1, false);
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditors_auditor_uuid_seq', 1, true);
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_group_id_seq', 1, false);
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_group_permissions_id_seq', 1, false);
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_permission_id_seq', 32, true);
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_groups_id_seq', 1, false);
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_id_seq', 12, true);
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_user_permissions_id_seq', 1, false);
-
-
---
--- Name: contracts_contract_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.contracts_contract_serial_id_seq', 1, false);
-
-
---
--- Name: cs_nonce_locks_cs_nonce_lock_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.cs_nonce_locks_cs_nonce_lock_serial_id_seq', 1, false);
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.denomination_revocations_denom_revocations_serial_id_seq', 2, true);
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.denominations_denominations_serial_seq', 424, true);
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.deposit_confirmations_serial_id_seq', 3, true);
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.deposits_deposit_serial_id_seq', 3, true);
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.django_content_type_id_seq', 8, true);
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.django_migrations_id_seq', 16, true);
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.exchange_sign_keys_esk_serial_seq', 5, true);
-
-
---
--- Name: extension_details_extension_details_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.extension_details_extension_details_serial_id_seq', 1, false);
-
-
---
--- Name: extensions_extension_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.extensions_extension_id_seq', 1, false);
-
-
---
--- Name: global_fee_global_fee_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.global_fee_global_fee_serial_seq', 1, true);
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.known_coins_known_coin_id_seq', 14, true);
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_accounts_account_serial_seq', 1, true);
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_deposits_deposit_serial_seq', 3, true);
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_exchange_signing_keys_signkey_serial_seq', 10, true);
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_exchange_wire_fees_wirefee_serial_seq', 2, true);
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_instances_merchant_serial_seq', 1, true);
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_inventory_product_serial_seq', 1, false);
-
-
---
--- Name: merchant_kyc_kyc_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_kyc_kyc_serial_id_seq', 1, true);
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_orders_order_serial_seq', 2, true);
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_refunds_refund_serial_seq', 1, false);
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tip_pickups_pickup_serial_seq', 1, false);
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tip_reserves_reserve_serial_seq', 1, false);
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tips_tip_serial_seq', 1, false);
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_transfers_credit_serial_seq', 1, false);
-
-
---
--- Name: partners_partner_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.partners_partner_serial_id_seq', 1, false);
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.prewire_prewire_uuid_seq', 1, false);
-
-
---
--- Name: purse_deposits_purse_deposit_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.purse_deposits_purse_deposit_serial_id_seq', 1, false);
-
-
---
--- Name: purse_merges_purse_merge_request_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.purse_merges_purse_merge_request_serial_id_seq', 1, false);
-
-
---
--- Name: purse_requests_purse_requests_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.purse_requests_purse_requests_serial_id_seq', 1, false);
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.recoup_recoup_uuid_seq', 1, true);
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.recoup_refresh_recoup_refresh_uuid_seq', 8, true);
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_commitments_melt_serial_id_seq', 2, true);
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_revealed_coins_rrc_serial_seq', 50, true);
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_transfer_keys_rtc_serial_seq', 2, true);
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refunds_refund_serial_id_seq', 1, false);
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_close_close_uuid_seq', 1, false);
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_in_reserve_in_serial_id_seq', 1, true);
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_out_reserve_out_serial_id_seq', 42, true);
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_reserve_uuid_seq', 1, true);
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.revolving_work_shards_shard_serial_id_seq', 1, false);
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.signkey_revocations_signkey_revocations_serial_id_seq', 1, false);
-
-
---
--- Name: wad_in_entries_wad_in_entry_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wad_in_entries_wad_in_entry_serial_id_seq', 1, false);
-
-
---
--- Name: wad_out_entries_wad_out_entry_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wad_out_entries_wad_out_entry_serial_id_seq', 1, false);
-
-
---
--- Name: wads_in_wad_in_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wads_in_wad_in_serial_id_seq', 1, false);
-
-
---
--- Name: wads_out_wad_out_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wads_out_wad_out_serial_id_seq', 1, false);
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wire_fee_wire_fee_serial_seq', 1, true);
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wire_out_wireout_uuid_seq', 1, false);
-
-
---
--- Name: wire_targets_wire_target_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wire_targets_wire_target_serial_id_seq', 4, true);
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.work_shards_shard_serial_id_seq', 1, true);
-
-
---
--- Name: patches patches_pkey; Type: CONSTRAINT; Schema: _v; Owner: -
---
-
-ALTER TABLE ONLY _v.patches
- ADD CONSTRAINT patches_pkey PRIMARY KEY (patch_name);
-
-
---
--- Name: account_merges_default account_merges_default_account_merge_request_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.account_merges_default
- ADD CONSTRAINT account_merges_default_account_merge_request_serial_id_key UNIQUE (account_merge_request_serial_id);
-
-
---
--- Name: account_merges account_merges_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.account_merges
- ADD CONSTRAINT account_merges_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: account_merges_default account_merges_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.account_merges_default
- ADD CONSTRAINT account_merges_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: aggregation_tracking_default aggregation_tracking_default_aggregation_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking_default
- ADD CONSTRAINT aggregation_tracking_default_aggregation_serial_id_key UNIQUE (aggregation_serial_id);
-
-
---
--- Name: aggregation_tracking aggregation_tracking_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_pkey PRIMARY KEY (deposit_serial_id);
-
-
---
--- Name: aggregation_tracking_default aggregation_tracking_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking_default
- ADD CONSTRAINT aggregation_tracking_default_pkey PRIMARY KEY (deposit_serial_id);
-
-
---
--- Name: app_bankaccount app_bankaccount_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_pkey PRIMARY KEY (account_no);
-
-
---
--- Name: app_bankaccount app_bankaccount_user_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_user_id_key UNIQUE (user_id);
-
-
---
--- Name: app_banktransaction app_banktransaction_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_pkey PRIMARY KEY (id);
-
-
---
--- Name: app_banktransaction app_banktransaction_request_uid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_request_uid_key UNIQUE (request_uid);
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawoperation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawoperation_pkey PRIMARY KEY (withdraw_id);
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_auditor_denom_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_auditor_denom_serial_key UNIQUE (auditor_denom_serial);
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_pkey PRIMARY KEY (denominations_serial, auditor_uuid);
-
-
---
--- Name: auditor_denomination_pending auditor_denomination_pending_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denomination_pending
- ADD CONSTRAINT auditor_denomination_pending_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: auditor_exchanges auditor_exchanges_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_exchanges
- ADD CONSTRAINT auditor_exchanges_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_historic_denomination_revenue auditor_historic_denomination_revenue_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_denomination_revenue
- ADD CONSTRAINT auditor_historic_denomination_revenue_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: auditor_progress_aggregation auditor_progress_aggregation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_aggregation
- ADD CONSTRAINT auditor_progress_aggregation_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_coin auditor_progress_coin_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_coin
- ADD CONSTRAINT auditor_progress_coin_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_deposit_confirmation auditor_progress_deposit_confirmation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_deposit_confirmation
- ADD CONSTRAINT auditor_progress_deposit_confirmation_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_reserve auditor_progress_reserve_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_reserve
- ADD CONSTRAINT auditor_progress_reserve_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_reserves auditor_reserves_auditor_reserves_rowid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves
- ADD CONSTRAINT auditor_reserves_auditor_reserves_rowid_key UNIQUE (auditor_reserves_rowid);
-
-
---
--- Name: auditors auditors_auditor_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors
- ADD CONSTRAINT auditors_auditor_uuid_key UNIQUE (auditor_uuid);
-
-
---
--- Name: auditors auditors_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors
- ADD CONSTRAINT auditors_pkey PRIMARY KEY (auditor_pub);
-
-
---
--- Name: auth_group auth_group_name_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group
- ADD CONSTRAINT auth_group_name_key UNIQUE (name);
-
-
---
--- Name: auth_group_permissions auth_group_permissions_group_id_permission_id_0cd325b0_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_group_id_permission_id_0cd325b0_uniq UNIQUE (group_id, permission_id);
-
-
---
--- Name: auth_group_permissions auth_group_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_group auth_group_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group
- ADD CONSTRAINT auth_group_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_permission auth_permission_content_type_id_codename_01ab375a_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_content_type_id_codename_01ab375a_uniq UNIQUE (content_type_id, codename);
-
-
---
--- Name: auth_permission auth_permission_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_groups auth_user_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_groups auth_user_groups_user_id_group_id_94350c0c_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_user_id_group_id_94350c0c_uniq UNIQUE (user_id, group_id);
-
-
---
--- Name: auth_user auth_user_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user
- ADD CONSTRAINT auth_user_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_user_id_permission_id_14a6b632_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_user_id_permission_id_14a6b632_uniq UNIQUE (user_id, permission_id);
-
-
---
--- Name: auth_user auth_user_username_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user
- ADD CONSTRAINT auth_user_username_key UNIQUE (username);
-
-
---
--- Name: close_requests close_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.close_requests
- ADD CONSTRAINT close_requests_pkey PRIMARY KEY (reserve_pub, close_timestamp);
-
-
---
--- Name: close_requests_default close_requests_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.close_requests_default
- ADD CONSTRAINT close_requests_default_pkey PRIMARY KEY (reserve_pub, close_timestamp);
-
-
---
--- Name: contracts_default contracts_default_contract_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.contracts_default
- ADD CONSTRAINT contracts_default_contract_serial_id_key UNIQUE (contract_serial_id);
-
-
---
--- Name: contracts contracts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.contracts
- ADD CONSTRAINT contracts_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: contracts_default contracts_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.contracts_default
- ADD CONSTRAINT contracts_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: cs_nonce_locks_default cs_nonce_locks_default_cs_nonce_lock_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.cs_nonce_locks_default
- ADD CONSTRAINT cs_nonce_locks_default_cs_nonce_lock_serial_id_key UNIQUE (cs_nonce_lock_serial_id);
-
-
---
--- Name: cs_nonce_locks cs_nonce_locks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.cs_nonce_locks
- ADD CONSTRAINT cs_nonce_locks_pkey PRIMARY KEY (nonce);
-
-
---
--- Name: cs_nonce_locks_default cs_nonce_locks_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.cs_nonce_locks_default
- ADD CONSTRAINT cs_nonce_locks_default_pkey PRIMARY KEY (nonce);
-
-
---
--- Name: denomination_revocations denomination_revocations_denom_revocations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denomination_revocations_denom_revocations_serial_id_key UNIQUE (denom_revocations_serial_id);
-
-
---
--- Name: denomination_revocations denomination_revocations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denomination_revocations_pkey PRIMARY KEY (denominations_serial);
-
-
---
--- Name: denominations denominations_denominations_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations
- ADD CONSTRAINT denominations_denominations_serial_key UNIQUE (denominations_serial);
-
-
---
--- Name: denominations denominations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations
- ADD CONSTRAINT denominations_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: deposit_confirmations deposit_confirmations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT deposit_confirmations_pkey PRIMARY KEY (h_contract_terms, h_wire, coin_pub, merchant_pub, exchange_sig, exchange_pub, master_sig);
-
-
---
--- Name: deposit_confirmations deposit_confirmations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT deposit_confirmations_serial_id_key UNIQUE (serial_id);
-
-
---
--- Name: deposits_default deposits_default_coin_pub_merchant_pub_h_contract_terms_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits_default
- ADD CONSTRAINT deposits_default_coin_pub_merchant_pub_h_contract_terms_key UNIQUE (coin_pub, merchant_pub, h_contract_terms);
-
-
---
--- Name: deposits_default deposits_default_deposit_serial_id_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits_default
- ADD CONSTRAINT deposits_default_deposit_serial_id_pkey PRIMARY KEY (deposit_serial_id);
-
-
---
--- Name: django_content_type django_content_type_app_label_model_76bd3d3b_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type
- ADD CONSTRAINT django_content_type_app_label_model_76bd3d3b_uniq UNIQUE (app_label, model);
-
-
---
--- Name: django_content_type django_content_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type
- ADD CONSTRAINT django_content_type_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_migrations django_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_migrations
- ADD CONSTRAINT django_migrations_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_session django_session_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_session
- ADD CONSTRAINT django_session_pkey PRIMARY KEY (session_key);
-
-
---
--- Name: exchange_sign_keys exchange_sign_keys_esk_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys
- ADD CONSTRAINT exchange_sign_keys_esk_serial_key UNIQUE (esk_serial);
-
-
---
--- Name: exchange_sign_keys exchange_sign_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys
- ADD CONSTRAINT exchange_sign_keys_pkey PRIMARY KEY (exchange_pub);
-
-
---
--- Name: extension_details extension_details_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.extension_details
- ADD CONSTRAINT extension_details_pkey PRIMARY KEY (extension_details_serial_id);
-
-
---
--- Name: extension_details_default extension_details_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.extension_details_default
- ADD CONSTRAINT extension_details_default_pkey PRIMARY KEY (extension_details_serial_id);
-
-
---
--- Name: extensions extensions_extension_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.extensions
- ADD CONSTRAINT extensions_extension_id_key UNIQUE (extension_id);
-
-
---
--- Name: extensions extensions_name_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.extensions
- ADD CONSTRAINT extensions_name_key UNIQUE (name);
-
-
---
--- Name: global_fee global_fee_global_fee_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.global_fee
- ADD CONSTRAINT global_fee_global_fee_serial_key UNIQUE (global_fee_serial);
-
-
---
--- Name: global_fee global_fee_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.global_fee
- ADD CONSTRAINT global_fee_pkey PRIMARY KEY (start_date);
-
-
---
--- Name: history_requests history_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.history_requests
- ADD CONSTRAINT history_requests_pkey PRIMARY KEY (reserve_pub, request_timestamp);
-
-
---
--- Name: history_requests_default history_requests_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.history_requests_default
- ADD CONSTRAINT history_requests_default_pkey PRIMARY KEY (reserve_pub, request_timestamp);
-
-
---
--- Name: known_coins_default known_coins_default_known_coin_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins_default
- ADD CONSTRAINT known_coins_default_known_coin_id_key UNIQUE (known_coin_id);
-
-
---
--- Name: known_coins known_coins_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_pkey PRIMARY KEY (coin_pub);
-
-
---
--- Name: known_coins_default known_coins_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins_default
- ADD CONSTRAINT known_coins_default_pkey PRIMARY KEY (coin_pub);
-
-
---
--- Name: merchant_accounts merchant_accounts_h_wire_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_h_wire_key UNIQUE (h_wire);
-
-
---
--- Name: merchant_accounts merchant_accounts_merchant_serial_payto_uri_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_merchant_serial_payto_uri_key UNIQUE (merchant_serial, payto_uri);
-
-
---
--- Name: merchant_accounts merchant_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_pkey PRIMARY KEY (account_serial);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_h_contract_terms_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_h_contract_terms_key UNIQUE (merchant_serial, h_contract_terms);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_order_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_order_id_key UNIQUE (merchant_serial, order_id);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_pkey PRIMARY KEY (order_serial);
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_deposit_serial_credit_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_deposit_serial_credit_serial_key UNIQUE (deposit_serial, credit_serial);
-
-
---
--- Name: merchant_deposits merchant_deposits_order_serial_coin_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_order_serial_coin_pub_key UNIQUE (order_serial, coin_pub);
-
-
---
--- Name: merchant_deposits merchant_deposits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_pkey PRIMARY KEY (deposit_serial);
-
-
---
--- Name: merchant_exchange_signing_keys merchant_exchange_signing_key_exchange_pub_start_date_maste_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys
- ADD CONSTRAINT merchant_exchange_signing_key_exchange_pub_start_date_maste_key UNIQUE (exchange_pub, start_date, master_pub);
-
-
---
--- Name: merchant_exchange_signing_keys merchant_exchange_signing_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys
- ADD CONSTRAINT merchant_exchange_signing_keys_pkey PRIMARY KEY (signkey_serial);
-
-
---
--- Name: merchant_exchange_wire_fees merchant_exchange_wire_fees_master_pub_h_wire_method_start__key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees
- ADD CONSTRAINT merchant_exchange_wire_fees_master_pub_h_wire_method_start__key UNIQUE (master_pub, h_wire_method, start_date);
-
-
---
--- Name: merchant_exchange_wire_fees merchant_exchange_wire_fees_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees
- ADD CONSTRAINT merchant_exchange_wire_fees_pkey PRIMARY KEY (wirefee_serial);
-
-
---
--- Name: merchant_instances merchant_instances_merchant_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_merchant_id_key UNIQUE (merchant_id);
-
-
---
--- Name: merchant_instances merchant_instances_merchant_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_merchant_pub_key UNIQUE (merchant_pub);
-
-
---
--- Name: merchant_instances merchant_instances_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_pkey PRIMARY KEY (merchant_serial);
-
-
---
--- Name: merchant_inventory merchant_inventory_merchant_serial_product_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_merchant_serial_product_id_key UNIQUE (merchant_serial, product_id);
-
-
---
--- Name: merchant_inventory merchant_inventory_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_pkey PRIMARY KEY (product_serial);
-
-
---
--- Name: merchant_keys merchant_keys_merchant_priv_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_merchant_priv_key UNIQUE (merchant_priv);
-
-
---
--- Name: merchant_keys merchant_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_pkey PRIMARY KEY (merchant_serial);
-
-
---
--- Name: merchant_kyc merchant_kyc_kyc_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_kyc
- ADD CONSTRAINT merchant_kyc_kyc_serial_id_key UNIQUE (kyc_serial_id);
-
-
---
--- Name: merchant_kyc merchant_kyc_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_kyc
- ADD CONSTRAINT merchant_kyc_pkey PRIMARY KEY (account_serial, exchange_url);
-
-
---
--- Name: merchant_orders merchant_orders_merchant_serial_order_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_merchant_serial_order_id_key UNIQUE (merchant_serial, order_id);
-
-
---
--- Name: merchant_orders merchant_orders_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_pkey PRIMARY KEY (order_serial);
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_pkey PRIMARY KEY (refund_serial);
-
-
---
--- Name: merchant_refunds merchant_refunds_order_serial_coin_pub_rtransaction_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_order_serial_coin_pub_rtransaction_id_key UNIQUE (order_serial, coin_pub, rtransaction_id);
-
-
---
--- Name: merchant_refunds merchant_refunds_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_pkey PRIMARY KEY (refund_serial);
-
-
---
--- Name: merchant_tip_pickup_signatures merchant_tip_pickup_signatures_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickup_signatures
- ADD CONSTRAINT merchant_tip_pickup_signatures_pkey PRIMARY KEY (pickup_serial, coin_offset);
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_pickup_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_pickup_id_key UNIQUE (pickup_id);
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_pkey PRIMARY KEY (pickup_serial);
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_priv_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_priv_key UNIQUE (reserve_priv);
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_serial_key UNIQUE (reserve_serial);
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_pkey PRIMARY KEY (reserve_serial);
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_reserve_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_reserve_pub_key UNIQUE (reserve_pub);
-
-
---
--- Name: merchant_tips merchant_tips_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_pkey PRIMARY KEY (tip_serial);
-
-
---
--- Name: merchant_tips merchant_tips_tip_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_tip_id_key UNIQUE (tip_id);
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_pkey PRIMARY KEY (credit_serial);
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_deposit_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_deposit_serial_key UNIQUE (deposit_serial);
-
-
---
--- Name: merchant_transfers merchant_transfers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_pkey PRIMARY KEY (credit_serial);
-
-
---
--- Name: merchant_transfers merchant_transfers_wtid_exchange_url_account_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_wtid_exchange_url_account_serial_key UNIQUE (wtid, exchange_url, account_serial);
-
-
---
--- Name: partner_accounts partner_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.partner_accounts
- ADD CONSTRAINT partner_accounts_pkey PRIMARY KEY (payto_uri);
-
-
---
--- Name: partners partners_partner_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.partners
- ADD CONSTRAINT partners_partner_serial_id_key UNIQUE (partner_serial_id);
-
-
---
--- Name: prewire prewire_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire
- ADD CONSTRAINT prewire_pkey PRIMARY KEY (prewire_uuid);
-
-
---
--- Name: prewire_default prewire_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire_default
- ADD CONSTRAINT prewire_default_pkey PRIMARY KEY (prewire_uuid);
-
-
---
--- Name: purse_deposits purse_deposits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_deposits
- ADD CONSTRAINT purse_deposits_pkey PRIMARY KEY (purse_pub, coin_pub);
-
-
---
--- Name: purse_deposits_default purse_deposits_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_deposits_default
- ADD CONSTRAINT purse_deposits_default_pkey PRIMARY KEY (purse_pub, coin_pub);
-
-
---
--- Name: purse_deposits_default purse_deposits_default_purse_deposit_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_deposits_default
- ADD CONSTRAINT purse_deposits_default_purse_deposit_serial_id_key UNIQUE (purse_deposit_serial_id);
-
-
---
--- Name: purse_merges purse_merges_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_merges
- ADD CONSTRAINT purse_merges_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: purse_merges_default purse_merges_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_merges_default
- ADD CONSTRAINT purse_merges_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: purse_merges_default purse_merges_default_purse_merge_request_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_merges_default
- ADD CONSTRAINT purse_merges_default_purse_merge_request_serial_id_key UNIQUE (purse_merge_request_serial_id);
-
-
---
--- Name: purse_requests purse_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_requests
- ADD CONSTRAINT purse_requests_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: purse_requests_default purse_requests_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_requests_default
- ADD CONSTRAINT purse_requests_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: purse_requests_default purse_requests_default_purse_requests_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.purse_requests_default
- ADD CONSTRAINT purse_requests_default_purse_requests_serial_id_key UNIQUE (purse_requests_serial_id);
-
-
---
--- Name: recoup_default recoup_default_recoup_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_default
- ADD CONSTRAINT recoup_default_recoup_uuid_key UNIQUE (recoup_uuid);
-
-
---
--- Name: recoup_refresh_default recoup_refresh_default_recoup_refresh_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh_default
- ADD CONSTRAINT recoup_refresh_default_recoup_refresh_uuid_key UNIQUE (recoup_refresh_uuid);
-
-
---
--- Name: refresh_commitments_default refresh_commitments_default_melt_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments_default
- ADD CONSTRAINT refresh_commitments_default_melt_serial_id_key UNIQUE (melt_serial_id);
-
-
---
--- Name: refresh_commitments refresh_commitments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_pkey PRIMARY KEY (rc);
-
-
---
--- Name: refresh_commitments_default refresh_commitments_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments_default
- ADD CONSTRAINT refresh_commitments_default_pkey PRIMARY KEY (rc);
-
-
---
--- Name: refresh_revealed_coins_default refresh_revealed_coins_default_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins_default
- ADD CONSTRAINT refresh_revealed_coins_default_coin_ev_key UNIQUE (coin_ev);
-
-
---
--- Name: refresh_revealed_coins_default refresh_revealed_coins_default_h_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins_default
- ADD CONSTRAINT refresh_revealed_coins_default_h_coin_ev_key UNIQUE (h_coin_ev);
-
-
---
--- Name: refresh_revealed_coins_default refresh_revealed_coins_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins_default
- ADD CONSTRAINT refresh_revealed_coins_default_pkey PRIMARY KEY (melt_serial_id, freshcoin_index);
-
-
---
--- Name: refresh_revealed_coins_default refresh_revealed_coins_default_rrc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins_default
- ADD CONSTRAINT refresh_revealed_coins_default_rrc_serial_key UNIQUE (rrc_serial);
-
-
---
--- Name: refresh_transfer_keys refresh_transfer_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys
- ADD CONSTRAINT refresh_transfer_keys_pkey PRIMARY KEY (melt_serial_id);
-
-
---
--- Name: refresh_transfer_keys_default refresh_transfer_keys_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys_default
- ADD CONSTRAINT refresh_transfer_keys_default_pkey PRIMARY KEY (melt_serial_id);
-
-
---
--- Name: refresh_transfer_keys_default refresh_transfer_keys_default_rtc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys_default
- ADD CONSTRAINT refresh_transfer_keys_default_rtc_serial_key UNIQUE (rtc_serial);
-
-
---
--- Name: refunds_default refunds_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds_default
- ADD CONSTRAINT refunds_default_pkey PRIMARY KEY (deposit_serial_id, rtransaction_id);
-
-
---
--- Name: refunds_default refunds_default_refund_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds_default
- ADD CONSTRAINT refunds_default_refund_serial_id_key UNIQUE (refund_serial_id);
-
-
---
--- Name: reserves_close_default reserves_close_default_close_uuid_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close_default
- ADD CONSTRAINT reserves_close_default_close_uuid_pkey PRIMARY KEY (close_uuid);
-
-
---
--- Name: reserves reserves_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves
- ADD CONSTRAINT reserves_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves_default reserves_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_default
- ADD CONSTRAINT reserves_default_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves_in reserves_in_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves_in_default reserves_in_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in_default
- ADD CONSTRAINT reserves_in_default_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves_in_default reserves_in_default_reserve_in_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in_default
- ADD CONSTRAINT reserves_in_default_reserve_in_serial_id_key UNIQUE (reserve_in_serial_id);
-
-
---
--- Name: reserves_out reserves_out_h_blind_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_h_blind_ev_key UNIQUE (h_blind_ev);
-
-
---
--- Name: reserves_out_default reserves_out_default_h_blind_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out_default
- ADD CONSTRAINT reserves_out_default_h_blind_ev_key UNIQUE (h_blind_ev);
-
-
---
--- Name: reserves_out_default reserves_out_default_reserve_out_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out_default
- ADD CONSTRAINT reserves_out_default_reserve_out_serial_id_key UNIQUE (reserve_out_serial_id);
-
-
---
--- Name: revolving_work_shards revolving_work_shards_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards
- ADD CONSTRAINT revolving_work_shards_pkey PRIMARY KEY (job_name, start_row);
-
-
---
--- Name: revolving_work_shards revolving_work_shards_shard_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards
- ADD CONSTRAINT revolving_work_shards_shard_serial_id_key UNIQUE (shard_serial_id);
-
-
---
--- Name: signkey_revocations signkey_revocations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_pkey PRIMARY KEY (esk_serial);
-
-
---
--- Name: signkey_revocations signkey_revocations_signkey_revocations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_signkey_revocations_serial_id_key UNIQUE (signkey_revocations_serial_id);
-
-
---
--- Name: wad_in_entries wad_in_entries_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_in_entries
- ADD CONSTRAINT wad_in_entries_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: wad_in_entries_default wad_in_entries_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_in_entries_default
- ADD CONSTRAINT wad_in_entries_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: wad_in_entries_default wad_in_entries_default_wad_in_entry_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_in_entries_default
- ADD CONSTRAINT wad_in_entries_default_wad_in_entry_serial_id_key UNIQUE (wad_in_entry_serial_id);
-
-
---
--- Name: wad_out_entries wad_out_entries_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_out_entries
- ADD CONSTRAINT wad_out_entries_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: wad_out_entries_default wad_out_entries_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_out_entries_default
- ADD CONSTRAINT wad_out_entries_default_pkey PRIMARY KEY (purse_pub);
-
-
---
--- Name: wad_out_entries_default wad_out_entries_default_wad_out_entry_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wad_out_entries_default
- ADD CONSTRAINT wad_out_entries_default_wad_out_entry_serial_id_key UNIQUE (wad_out_entry_serial_id);
-
-
---
--- Name: wads_in wads_in_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in
- ADD CONSTRAINT wads_in_pkey PRIMARY KEY (wad_id);
-
-
---
--- Name: wads_in_default wads_in_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in_default
- ADD CONSTRAINT wads_in_default_pkey PRIMARY KEY (wad_id);
-
-
---
--- Name: wads_in wads_in_wad_id_origin_exchange_url_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in
- ADD CONSTRAINT wads_in_wad_id_origin_exchange_url_key UNIQUE (wad_id, origin_exchange_url);
-
-
---
--- Name: wads_in_default wads_in_default_wad_id_origin_exchange_url_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in_default
- ADD CONSTRAINT wads_in_default_wad_id_origin_exchange_url_key UNIQUE (wad_id, origin_exchange_url);
-
-
---
--- Name: wads_in_default wads_in_default_wad_in_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in_default
- ADD CONSTRAINT wads_in_default_wad_in_serial_id_key UNIQUE (wad_in_serial_id);
-
-
---
--- Name: wads_in_default wads_in_default_wad_is_origin_exchange_url_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_in_default
- ADD CONSTRAINT wads_in_default_wad_is_origin_exchange_url_key UNIQUE (wad_id, origin_exchange_url);
-
-
---
--- Name: wads_out wads_out_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_out
- ADD CONSTRAINT wads_out_pkey PRIMARY KEY (wad_id);
-
-
---
--- Name: wads_out_default wads_out_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_out_default
- ADD CONSTRAINT wads_out_default_pkey PRIMARY KEY (wad_id);
-
-
---
--- Name: wads_out_default wads_out_default_wad_out_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wads_out_default
- ADD CONSTRAINT wads_out_default_wad_out_serial_id_key UNIQUE (wad_out_serial_id);
-
-
---
--- Name: wire_accounts wire_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_accounts
- ADD CONSTRAINT wire_accounts_pkey PRIMARY KEY (payto_uri);
-
-
---
--- Name: wire_auditor_account_progress wire_auditor_account_progress_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_account_progress
- ADD CONSTRAINT wire_auditor_account_progress_pkey PRIMARY KEY (master_pub, account_name);
-
-
---
--- Name: wire_auditor_progress wire_auditor_progress_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_progress
- ADD CONSTRAINT wire_auditor_progress_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: wire_fee wire_fee_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee
- ADD CONSTRAINT wire_fee_pkey PRIMARY KEY (wire_method, start_date);
-
-
---
--- Name: wire_fee wire_fee_wire_fee_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee
- ADD CONSTRAINT wire_fee_wire_fee_serial_key UNIQUE (wire_fee_serial);
-
-
---
--- Name: wire_out_default wire_out_default_wireout_uuid_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out_default
- ADD CONSTRAINT wire_out_default_wireout_uuid_pkey PRIMARY KEY (wireout_uuid);
-
-
---
--- Name: wire_out wire_out_wtid_raw_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out
- ADD CONSTRAINT wire_out_wtid_raw_key UNIQUE (wtid_raw);
-
-
---
--- Name: wire_out_default wire_out_default_wtid_raw_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out_default
- ADD CONSTRAINT wire_out_default_wtid_raw_key UNIQUE (wtid_raw);
-
-
---
--- Name: wire_targets wire_targets_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets
- ADD CONSTRAINT wire_targets_pkey PRIMARY KEY (wire_target_h_payto);
-
-
---
--- Name: wire_targets_default wire_targets_default_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets_default
- ADD CONSTRAINT wire_targets_default_pkey PRIMARY KEY (wire_target_h_payto);
-
-
---
--- Name: wire_targets_default wire_targets_default_wire_target_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets_default
- ADD CONSTRAINT wire_targets_default_wire_target_serial_id_key UNIQUE (wire_target_serial_id);
-
-
---
--- Name: work_shards work_shards_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards
- ADD CONSTRAINT work_shards_pkey PRIMARY KEY (job_name, start_row);
-
-
---
--- Name: work_shards work_shards_shard_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards
- ADD CONSTRAINT work_shards_shard_serial_id_key UNIQUE (shard_serial_id);
-
-
---
--- Name: account_merges_by_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX account_merges_by_reserve_pub ON ONLY public.account_merges USING btree (reserve_pub);
-
-
---
--- Name: account_merges_default_reserve_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX account_merges_default_reserve_pub_idx ON public.account_merges_default USING btree (reserve_pub);
-
-
---
--- Name: aggregation_tracking_by_wtid_raw_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX aggregation_tracking_by_wtid_raw_index ON ONLY public.aggregation_tracking USING btree (wtid_raw);
-
-
---
--- Name: INDEX aggregation_tracking_by_wtid_raw_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.aggregation_tracking_by_wtid_raw_index IS 'for lookup_transactions';
-
-
---
--- Name: aggregation_tracking_default_wtid_raw_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX aggregation_tracking_default_wtid_raw_idx ON public.aggregation_tracking_default USING btree (wtid_raw);
-
-
---
--- Name: app_banktransaction_credit_account_id_a8ba05ac; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_credit_account_id_a8ba05ac ON public.app_banktransaction USING btree (credit_account_id);
-
-
---
--- Name: app_banktransaction_date_f72bcad6; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_date_f72bcad6 ON public.app_banktransaction USING btree (date);
-
-
---
--- Name: app_banktransaction_debit_account_id_5b1f7528; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_debit_account_id_5b1f7528 ON public.app_banktransaction USING btree (debit_account_id);
-
-
---
--- Name: app_banktransaction_request_uid_b7d06af5_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_request_uid_b7d06af5_like ON public.app_banktransaction USING btree (request_uid varchar_pattern_ops);
-
-
---
--- Name: app_talerwithdrawoperation_selected_exchange_account__6c8b96cf; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_talerwithdrawoperation_selected_exchange_account__6c8b96cf ON public.app_talerwithdrawoperation USING btree (selected_exchange_account_id);
-
-
---
--- Name: app_talerwithdrawoperation_withdraw_account_id_992dc5b3; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_talerwithdrawoperation_withdraw_account_id_992dc5b3 ON public.app_talerwithdrawoperation USING btree (withdraw_account_id);
-
-
---
--- Name: auditor_historic_reserve_summary_by_master_pub_start_date; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auditor_historic_reserve_summary_by_master_pub_start_date ON public.auditor_historic_reserve_summary USING btree (master_pub, start_date);
-
-
---
--- Name: auditor_reserves_by_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auditor_reserves_by_reserve_pub ON public.auditor_reserves USING btree (reserve_pub);
-
-
---
--- Name: auth_group_name_a6ea08ec_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_name_a6ea08ec_like ON public.auth_group USING btree (name varchar_pattern_ops);
-
-
---
--- Name: auth_group_permissions_group_id_b120cbf9; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_permissions_group_id_b120cbf9 ON public.auth_group_permissions USING btree (group_id);
-
-
---
--- Name: auth_group_permissions_permission_id_84c5c92e; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_permissions_permission_id_84c5c92e ON public.auth_group_permissions USING btree (permission_id);
-
-
---
--- Name: auth_permission_content_type_id_2f476e4b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_permission_content_type_id_2f476e4b ON public.auth_permission USING btree (content_type_id);
-
-
---
--- Name: auth_user_groups_group_id_97559544; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_groups_group_id_97559544 ON public.auth_user_groups USING btree (group_id);
-
-
---
--- Name: auth_user_groups_user_id_6a12ed8b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_groups_user_id_6a12ed8b ON public.auth_user_groups USING btree (user_id);
-
-
---
--- Name: auth_user_user_permissions_permission_id_1fbb5f2c; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_user_permissions_permission_id_1fbb5f2c ON public.auth_user_user_permissions USING btree (permission_id);
-
-
---
--- Name: auth_user_user_permissions_user_id_a95ead1b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_user_permissions_user_id_a95ead1b ON public.auth_user_user_permissions USING btree (user_id);
-
-
---
--- Name: auth_user_username_6821ab7c_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_username_6821ab7c_like ON public.auth_user USING btree (username varchar_pattern_ops);
-
-
---
--- Name: denominations_by_expire_legal_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX denominations_by_expire_legal_index ON public.denominations USING btree (expire_legal);
-
-
---
--- Name: deposits_by_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_by_coin_pub_index ON ONLY public.deposits USING btree (coin_pub);
-
-
---
--- Name: deposits_by_ready_main_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_by_ready_main_index ON ONLY public.deposits_by_ready USING btree (wire_deadline, shard, coin_pub);
-
-
---
--- Name: deposits_by_ready_default_wire_deadline_shard_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_by_ready_default_wire_deadline_shard_coin_pub_idx ON public.deposits_by_ready_default USING btree (wire_deadline, shard, coin_pub);
-
-
---
--- Name: deposits_default_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_default_coin_pub_idx ON public.deposits_default USING btree (coin_pub);
-
-
---
--- Name: deposits_for_matching_main_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_for_matching_main_index ON ONLY public.deposits_for_matching USING btree (refund_deadline, merchant_pub, coin_pub);
-
-
---
--- Name: deposits_for_matching_default_refund_deadline_merchant_pub__idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_for_matching_default_refund_deadline_merchant_pub__idx ON public.deposits_for_matching_default USING btree (refund_deadline, merchant_pub, coin_pub);
-
-
---
--- Name: django_session_expire_date_a5c62663; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX django_session_expire_date_a5c62663 ON public.django_session USING btree (expire_date);
-
-
---
--- Name: django_session_session_key_c0390e0f_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX django_session_session_key_c0390e0f_like ON public.django_session USING btree (session_key varchar_pattern_ops);
-
-
---
--- Name: global_fee_by_end_date_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX global_fee_by_end_date_index ON public.global_fee USING btree (end_date);
-
-
---
--- Name: merchant_contract_terms_by_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_expiration ON public.merchant_contract_terms USING btree (paid, pay_deadline);
-
-
---
--- Name: INDEX merchant_contract_terms_by_expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.merchant_contract_terms_by_expiration IS 'for unlock_contracts';
-
-
---
--- Name: merchant_contract_terms_by_merchant_and_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_and_expiration ON public.merchant_contract_terms USING btree (merchant_serial, pay_deadline);
-
-
---
--- Name: INDEX merchant_contract_terms_by_merchant_and_expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.merchant_contract_terms_by_merchant_and_expiration IS 'for delete_contract_terms';
-
-
---
--- Name: merchant_contract_terms_by_merchant_and_payment; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_and_payment ON public.merchant_contract_terms USING btree (merchant_serial, paid);
-
-
---
--- Name: merchant_contract_terms_by_merchant_session_and_fulfillment; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_session_and_fulfillment ON public.merchant_contract_terms USING btree (merchant_serial, fulfillment_url, session_id);
-
-
---
--- Name: merchant_inventory_locks_by_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_inventory_locks_by_expiration ON public.merchant_inventory_locks USING btree (expiration);
-
-
---
--- Name: merchant_inventory_locks_by_uuid; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_inventory_locks_by_uuid ON public.merchant_inventory_locks USING btree (lock_uuid);
-
-
---
--- Name: merchant_orders_by_creation_time; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_by_creation_time ON public.merchant_orders USING btree (creation_time);
-
-
---
--- Name: merchant_orders_by_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_by_expiration ON public.merchant_orders USING btree (pay_deadline);
-
-
---
--- Name: merchant_orders_locks_by_order_and_product; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_locks_by_order_and_product ON public.merchant_order_locks USING btree (order_serial, product_serial);
-
-
---
--- Name: merchant_refunds_by_coin_and_order; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_refunds_by_coin_and_order ON public.merchant_refunds USING btree (coin_pub, order_serial);
-
-
---
--- Name: merchant_tip_reserves_by_exchange_balance; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_exchange_balance ON public.merchant_tip_reserves USING btree (exchange_initial_balance_val, exchange_initial_balance_frac);
-
-
---
--- Name: merchant_tip_reserves_by_merchant_serial_and_creation_time; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_merchant_serial_and_creation_time ON public.merchant_tip_reserves USING btree (merchant_serial, creation_time);
-
-
---
--- Name: merchant_tip_reserves_by_reserve_pub_and_merchant_serial; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_reserve_pub_and_merchant_serial ON public.merchant_tip_reserves USING btree (reserve_pub, merchant_serial, creation_time);
-
-
---
--- Name: merchant_tips_by_pickup_and_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tips_by_pickup_and_expiration ON public.merchant_tips USING btree (was_picked_up, expiration);
-
-
---
--- Name: merchant_transfers_by_credit; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_transfers_by_credit ON public.merchant_transfer_to_coin USING btree (credit_serial);
-
-
---
--- Name: partner_accounts_index_by_partner_and_time; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX partner_accounts_index_by_partner_and_time ON public.partner_accounts USING btree (partner_serial_id, last_seen);
-
-
---
--- Name: prewire_by_failed_finished_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prewire_by_failed_finished_index ON ONLY public.prewire USING btree (failed, finished);
-
-
---
--- Name: INDEX prewire_by_failed_finished_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prewire_by_failed_finished_index IS 'for wire_prepare_data_get';
-
-
---
--- Name: prewire_by_finished_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prewire_by_finished_index ON ONLY public.prewire USING btree (finished);
-
-
---
--- Name: INDEX prewire_by_finished_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prewire_by_finished_index IS 'for gc_prewire';
-
-
---
--- Name: prewire_default_failed_finished_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prewire_default_failed_finished_idx ON public.prewire_default USING btree (failed, finished);
-
-
---
--- Name: prewire_default_finished_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prewire_default_finished_idx ON public.prewire_default USING btree (finished);
-
-
---
--- Name: purse_deposits_by_coin_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_deposits_by_coin_pub ON ONLY public.purse_deposits USING btree (coin_pub);
-
-
---
--- Name: purse_deposits_default_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_deposits_default_coin_pub_idx ON public.purse_deposits_default USING btree (coin_pub);
-
-
---
--- Name: purse_merges_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_merges_reserve_pub ON ONLY public.purse_merges USING btree (reserve_pub);
-
-
---
--- Name: INDEX purse_merges_reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.purse_merges_reserve_pub IS 'needed in reserve history computation';
-
-
---
--- Name: purse_merges_default_reserve_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_merges_default_reserve_pub_idx ON public.purse_merges_default USING btree (reserve_pub);
-
-
---
--- Name: purse_requests_merge_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_requests_merge_pub ON ONLY public.purse_requests USING btree (merge_pub);
-
-
---
--- Name: purse_requests_default_merge_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX purse_requests_default_merge_pub_idx ON public.purse_requests_default USING btree (merge_pub);
-
-
---
--- Name: recoup_by_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_by_coin_pub_index ON ONLY public.recoup USING btree (coin_pub);
-
-
---
--- Name: recoup_by_reserve_main_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_by_reserve_main_index ON ONLY public.recoup_by_reserve USING btree (reserve_out_serial_id);
-
-
---
--- Name: recoup_by_reserve_default_reserve_out_serial_id_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_by_reserve_default_reserve_out_serial_id_idx ON public.recoup_by_reserve_default USING btree (reserve_out_serial_id);
-
-
---
--- Name: recoup_default_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_default_coin_pub_idx ON public.recoup_default USING btree (coin_pub);
-
-
---
--- Name: recoup_refresh_by_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_by_coin_pub_index ON ONLY public.recoup_refresh USING btree (coin_pub);
-
-
---
--- Name: recoup_refresh_by_rrc_serial_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_by_rrc_serial_index ON ONLY public.recoup_refresh USING btree (rrc_serial);
-
-
---
--- Name: recoup_refresh_default_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_default_coin_pub_idx ON public.recoup_refresh_default USING btree (coin_pub);
-
-
---
--- Name: recoup_refresh_default_rrc_serial_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_default_rrc_serial_idx ON public.recoup_refresh_default USING btree (rrc_serial);
-
-
---
--- Name: refresh_commitments_by_old_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_commitments_by_old_coin_pub_index ON ONLY public.refresh_commitments USING btree (old_coin_pub);
-
-
---
--- Name: refresh_commitments_default_old_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_commitments_default_old_coin_pub_idx ON public.refresh_commitments_default USING btree (old_coin_pub);
-
-
---
--- Name: refresh_revealed_coins_coins_by_melt_serial_id_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_revealed_coins_coins_by_melt_serial_id_index ON ONLY public.refresh_revealed_coins USING btree (melt_serial_id);
-
-
---
--- Name: refresh_revealed_coins_default_melt_serial_id_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_revealed_coins_default_melt_serial_id_idx ON public.refresh_revealed_coins_default USING btree (melt_serial_id);
-
-
---
--- Name: refunds_by_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refunds_by_coin_pub_index ON ONLY public.refunds USING btree (coin_pub);
-
-
---
--- Name: refunds_default_coin_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refunds_default_coin_pub_idx ON public.refunds_default USING btree (coin_pub);
-
-
---
--- Name: reserves_by_expiration_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_by_expiration_index ON ONLY public.reserves USING btree (expiration_date, current_balance_val, current_balance_frac);
-
-
---
--- Name: INDEX reserves_by_expiration_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_by_expiration_index IS 'used in get_expired_reserves';
-
-
---
--- Name: reserves_by_gc_date_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_by_gc_date_index ON ONLY public.reserves USING btree (gc_date);
-
-
---
--- Name: INDEX reserves_by_gc_date_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_by_gc_date_index IS 'for reserve garbage collection';
-
-
---
--- Name: reserves_by_reserve_uuid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_by_reserve_uuid_index ON ONLY public.reserves USING btree (reserve_uuid);
-
-
---
--- Name: reserves_close_by_close_uuid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_by_close_uuid_index ON ONLY public.reserves_close USING btree (close_uuid);
-
-
---
--- Name: reserves_close_by_reserve_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_by_reserve_pub_index ON ONLY public.reserves_close USING btree (reserve_pub);
-
-
---
--- Name: reserves_close_default_close_uuid_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_default_close_uuid_idx ON public.reserves_close_default USING btree (close_uuid);
-
-
---
--- Name: reserves_close_default_reserve_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_default_reserve_pub_idx ON public.reserves_close_default USING btree (reserve_pub);
-
-
---
--- Name: reserves_default_expiration_date_current_balance_val_curren_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_default_expiration_date_current_balance_val_curren_idx ON public.reserves_default USING btree (expiration_date, current_balance_val, current_balance_frac);
-
-
---
--- Name: reserves_default_gc_date_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_default_gc_date_idx ON public.reserves_default USING btree (gc_date);
-
-
---
--- Name: reserves_default_reserve_uuid_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_default_reserve_uuid_idx ON public.reserves_default USING btree (reserve_uuid);
-
-
---
--- Name: reserves_in_by_exch_accnt_reserve_in_serial_id_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_by_exch_accnt_reserve_in_serial_id_idx ON ONLY public.reserves_in USING btree (exchange_account_section, reserve_in_serial_id DESC);
-
-
---
--- Name: reserves_in_by_exch_accnt_section_execution_date_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_by_exch_accnt_section_execution_date_idx ON ONLY public.reserves_in USING btree (exchange_account_section, execution_date);
-
-
---
--- Name: reserves_in_by_reserve_in_serial_id_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_by_reserve_in_serial_id_index ON ONLY public.reserves_in USING btree (reserve_in_serial_id);
-
-
---
--- Name: reserves_in_default_exchange_account_section_execution_date_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_default_exchange_account_section_execution_date_idx ON public.reserves_in_default USING btree (exchange_account_section, execution_date);
-
-
---
--- Name: reserves_in_default_exchange_account_section_reserve_in_ser_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_default_exchange_account_section_reserve_in_ser_idx ON public.reserves_in_default USING btree (exchange_account_section, reserve_in_serial_id DESC);
-
-
---
--- Name: reserves_in_default_reserve_in_serial_id_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_default_reserve_in_serial_id_idx ON public.reserves_in_default USING btree (reserve_in_serial_id);
-
-
---
--- Name: reserves_out_by_reserve_main_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_by_reserve_main_index ON ONLY public.reserves_out_by_reserve USING btree (reserve_uuid);
-
-
---
--- Name: reserves_out_by_reserve_default_reserve_uuid_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_by_reserve_default_reserve_uuid_idx ON public.reserves_out_by_reserve_default USING btree (reserve_uuid);
-
-
---
--- Name: reserves_out_by_reserve_out_serial_id_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_by_reserve_out_serial_id_index ON ONLY public.reserves_out USING btree (reserve_out_serial_id);
-
-
---
--- Name: reserves_out_by_reserve_uuid_and_execution_date_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_by_reserve_uuid_and_execution_date_index ON ONLY public.reserves_out USING btree (reserve_uuid, execution_date);
-
-
---
--- Name: INDEX reserves_out_by_reserve_uuid_and_execution_date_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_out_by_reserve_uuid_and_execution_date_index IS 'for get_reserves_out and exchange_do_withdraw_limit_check';
-
-
---
--- Name: reserves_out_default_reserve_out_serial_id_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_default_reserve_out_serial_id_idx ON public.reserves_out_default USING btree (reserve_out_serial_id);
-
-
---
--- Name: reserves_out_default_reserve_uuid_execution_date_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_default_reserve_uuid_execution_date_idx ON public.reserves_out_default USING btree (reserve_uuid, execution_date);
-
-
---
--- Name: revolving_work_shards_by_job_name_active_last_attempt_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX revolving_work_shards_by_job_name_active_last_attempt_index ON public.revolving_work_shards USING btree (job_name, active, last_attempt);
-
-
---
--- Name: wad_in_entries_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wad_in_entries_reserve_pub ON ONLY public.wad_in_entries USING btree (reserve_pub);
-
-
---
--- Name: INDEX wad_in_entries_reserve_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.wad_in_entries_reserve_pub IS 'needed in reserve history computation';
-
-
---
--- Name: wad_in_entries_default_reserve_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wad_in_entries_default_reserve_pub_idx ON public.wad_in_entries_default USING btree (reserve_pub);
-
-
---
--- Name: wad_out_entries_by_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wad_out_entries_by_reserve_pub ON ONLY public.wad_out_entries USING btree (reserve_pub);
-
-
---
--- Name: wad_out_entries_default_reserve_pub_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wad_out_entries_default_reserve_pub_idx ON public.wad_out_entries_default USING btree (reserve_pub);
-
-
---
--- Name: wire_fee_by_end_date_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wire_fee_by_end_date_index ON public.wire_fee USING btree (end_date);
-
-
---
--- Name: wire_out_by_wire_target_h_payto_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wire_out_by_wire_target_h_payto_index ON ONLY public.wire_out USING btree (wire_target_h_payto);
-
-
---
--- Name: wire_out_default_wire_target_h_payto_idx; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wire_out_default_wire_target_h_payto_idx ON public.wire_out_default USING btree (wire_target_h_payto);
-
-
---
--- Name: work_shards_by_job_name_completed_last_attempt_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX work_shards_by_job_name_completed_last_attempt_index ON public.work_shards USING btree (job_name, completed, last_attempt);
-
-
---
--- Name: account_merges_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.account_merges_pkey ATTACH PARTITION public.account_merges_default_pkey;
-
-
---
--- Name: account_merges_default_reserve_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.account_merges_by_reserve_pub ATTACH PARTITION public.account_merges_default_reserve_pub_idx;
-
-
---
--- Name: aggregation_tracking_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.aggregation_tracking_pkey ATTACH PARTITION public.aggregation_tracking_default_pkey;
-
-
---
--- Name: aggregation_tracking_default_wtid_raw_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.aggregation_tracking_by_wtid_raw_index ATTACH PARTITION public.aggregation_tracking_default_wtid_raw_idx;
-
-
---
--- Name: close_requests_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.close_requests_pkey ATTACH PARTITION public.close_requests_default_pkey;
-
-
---
--- Name: contracts_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.contracts_pkey ATTACH PARTITION public.contracts_default_pkey;
-
-
---
--- Name: cs_nonce_locks_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.cs_nonce_locks_pkey ATTACH PARTITION public.cs_nonce_locks_default_pkey;
-
-
---
--- Name: deposits_by_ready_default_wire_deadline_shard_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.deposits_by_ready_main_index ATTACH PARTITION public.deposits_by_ready_default_wire_deadline_shard_coin_pub_idx;
-
-
---
--- Name: deposits_default_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.deposits_by_coin_pub_index ATTACH PARTITION public.deposits_default_coin_pub_idx;
-
-
---
--- Name: deposits_for_matching_default_refund_deadline_merchant_pub__idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.deposits_for_matching_main_index ATTACH PARTITION public.deposits_for_matching_default_refund_deadline_merchant_pub__idx;
-
-
---
--- Name: extension_details_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.extension_details_pkey ATTACH PARTITION public.extension_details_default_pkey;
-
-
---
--- Name: history_requests_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.history_requests_pkey ATTACH PARTITION public.history_requests_default_pkey;
-
-
---
--- Name: known_coins_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.known_coins_pkey ATTACH PARTITION public.known_coins_default_pkey;
-
-
---
--- Name: prewire_default_failed_finished_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.prewire_by_failed_finished_index ATTACH PARTITION public.prewire_default_failed_finished_idx;
-
-
---
--- Name: prewire_default_finished_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.prewire_by_finished_index ATTACH PARTITION public.prewire_default_finished_idx;
-
-
---
--- Name: prewire_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.prewire_pkey ATTACH PARTITION public.prewire_default_pkey;
-
-
---
--- Name: purse_deposits_default_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_deposits_by_coin_pub ATTACH PARTITION public.purse_deposits_default_coin_pub_idx;
-
-
---
--- Name: purse_deposits_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_deposits_pkey ATTACH PARTITION public.purse_deposits_default_pkey;
-
-
---
--- Name: purse_merges_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_merges_pkey ATTACH PARTITION public.purse_merges_default_pkey;
-
-
---
--- Name: purse_merges_default_reserve_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_merges_reserve_pub ATTACH PARTITION public.purse_merges_default_reserve_pub_idx;
-
-
---
--- Name: purse_requests_default_merge_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_requests_merge_pub ATTACH PARTITION public.purse_requests_default_merge_pub_idx;
-
-
---
--- Name: purse_requests_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.purse_requests_pkey ATTACH PARTITION public.purse_requests_default_pkey;
-
-
---
--- Name: recoup_by_reserve_default_reserve_out_serial_id_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.recoup_by_reserve_main_index ATTACH PARTITION public.recoup_by_reserve_default_reserve_out_serial_id_idx;
-
-
---
--- Name: recoup_default_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.recoup_by_coin_pub_index ATTACH PARTITION public.recoup_default_coin_pub_idx;
-
-
---
--- Name: recoup_refresh_default_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.recoup_refresh_by_coin_pub_index ATTACH PARTITION public.recoup_refresh_default_coin_pub_idx;
-
-
---
--- Name: recoup_refresh_default_rrc_serial_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.recoup_refresh_by_rrc_serial_index ATTACH PARTITION public.recoup_refresh_default_rrc_serial_idx;
-
-
---
--- Name: refresh_commitments_default_old_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.refresh_commitments_by_old_coin_pub_index ATTACH PARTITION public.refresh_commitments_default_old_coin_pub_idx;
-
-
---
--- Name: refresh_commitments_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.refresh_commitments_pkey ATTACH PARTITION public.refresh_commitments_default_pkey;
-
-
---
--- Name: refresh_revealed_coins_default_melt_serial_id_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.refresh_revealed_coins_coins_by_melt_serial_id_index ATTACH PARTITION public.refresh_revealed_coins_default_melt_serial_id_idx;
-
-
---
--- Name: refresh_transfer_keys_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.refresh_transfer_keys_pkey ATTACH PARTITION public.refresh_transfer_keys_default_pkey;
-
-
---
--- Name: refunds_default_coin_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.refunds_by_coin_pub_index ATTACH PARTITION public.refunds_default_coin_pub_idx;
-
-
---
--- Name: reserves_close_default_close_uuid_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_close_by_close_uuid_index ATTACH PARTITION public.reserves_close_default_close_uuid_idx;
-
-
---
--- Name: reserves_close_default_reserve_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_close_by_reserve_pub_index ATTACH PARTITION public.reserves_close_default_reserve_pub_idx;
-
-
---
--- Name: reserves_default_expiration_date_current_balance_val_curren_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_by_expiration_index ATTACH PARTITION public.reserves_default_expiration_date_current_balance_val_curren_idx;
-
-
---
--- Name: reserves_default_gc_date_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_by_gc_date_index ATTACH PARTITION public.reserves_default_gc_date_idx;
-
-
---
--- Name: reserves_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_pkey ATTACH PARTITION public.reserves_default_pkey;
-
-
---
--- Name: reserves_default_reserve_uuid_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_by_reserve_uuid_index ATTACH PARTITION public.reserves_default_reserve_uuid_idx;
-
-
---
--- Name: reserves_in_default_exchange_account_section_execution_date_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_in_by_exch_accnt_section_execution_date_idx ATTACH PARTITION public.reserves_in_default_exchange_account_section_execution_date_idx;
-
-
---
--- Name: reserves_in_default_exchange_account_section_reserve_in_ser_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_in_by_exch_accnt_reserve_in_serial_id_idx ATTACH PARTITION public.reserves_in_default_exchange_account_section_reserve_in_ser_idx;
-
-
---
--- Name: reserves_in_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_in_pkey ATTACH PARTITION public.reserves_in_default_pkey;
-
-
---
--- Name: reserves_in_default_reserve_in_serial_id_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_in_by_reserve_in_serial_id_index ATTACH PARTITION public.reserves_in_default_reserve_in_serial_id_idx;
-
-
---
--- Name: reserves_out_by_reserve_default_reserve_uuid_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_out_by_reserve_main_index ATTACH PARTITION public.reserves_out_by_reserve_default_reserve_uuid_idx;
-
-
---
--- Name: reserves_out_default_h_blind_ev_key; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_out_h_blind_ev_key ATTACH PARTITION public.reserves_out_default_h_blind_ev_key;
-
-
---
--- Name: reserves_out_default_reserve_out_serial_id_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_out_by_reserve_out_serial_id_index ATTACH PARTITION public.reserves_out_default_reserve_out_serial_id_idx;
-
-
---
--- Name: reserves_out_default_reserve_uuid_execution_date_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.reserves_out_by_reserve_uuid_and_execution_date_index ATTACH PARTITION public.reserves_out_default_reserve_uuid_execution_date_idx;
-
-
---
--- Name: wad_in_entries_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wad_in_entries_pkey ATTACH PARTITION public.wad_in_entries_default_pkey;
-
-
---
--- Name: wad_in_entries_default_reserve_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wad_in_entries_reserve_pub ATTACH PARTITION public.wad_in_entries_default_reserve_pub_idx;
-
-
---
--- Name: wad_out_entries_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wad_out_entries_pkey ATTACH PARTITION public.wad_out_entries_default_pkey;
-
-
---
--- Name: wad_out_entries_default_reserve_pub_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wad_out_entries_by_reserve_pub ATTACH PARTITION public.wad_out_entries_default_reserve_pub_idx;
-
-
---
--- Name: wads_in_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wads_in_pkey ATTACH PARTITION public.wads_in_default_pkey;
-
-
---
--- Name: wads_in_default_wad_id_origin_exchange_url_key; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wads_in_wad_id_origin_exchange_url_key ATTACH PARTITION public.wads_in_default_wad_id_origin_exchange_url_key;
-
-
---
--- Name: wads_out_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wads_out_pkey ATTACH PARTITION public.wads_out_default_pkey;
-
-
---
--- Name: wire_out_default_wire_target_h_payto_idx; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wire_out_by_wire_target_h_payto_index ATTACH PARTITION public.wire_out_default_wire_target_h_payto_idx;
-
-
---
--- Name: wire_out_default_wtid_raw_key; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wire_out_wtid_raw_key ATTACH PARTITION public.wire_out_default_wtid_raw_key;
-
-
---
--- Name: wire_targets_default_pkey; Type: INDEX ATTACH; Schema: public; Owner: -
---
-
-ALTER INDEX public.wire_targets_pkey ATTACH PARTITION public.wire_targets_default_pkey;
-
-
---
--- Name: deposits deposits_on_delete; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER deposits_on_delete AFTER DELETE ON public.deposits FOR EACH ROW EXECUTE FUNCTION public.deposits_delete_trigger();
-
-
---
--- Name: deposits deposits_on_insert; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER deposits_on_insert AFTER INSERT ON public.deposits FOR EACH ROW EXECUTE FUNCTION public.deposits_insert_trigger();
-
-
---
--- Name: deposits deposits_on_update; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER deposits_on_update AFTER UPDATE ON public.deposits FOR EACH ROW EXECUTE FUNCTION public.deposits_update_trigger();
-
-
---
--- Name: recoup recoup_on_delete; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER recoup_on_delete AFTER DELETE ON public.recoup FOR EACH ROW EXECUTE FUNCTION public.recoup_delete_trigger();
-
-
---
--- Name: recoup recoup_on_insert; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER recoup_on_insert AFTER INSERT ON public.recoup FOR EACH ROW EXECUTE FUNCTION public.recoup_insert_trigger();
-
-
---
--- Name: reserves_out reserves_out_on_delete; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER reserves_out_on_delete AFTER DELETE ON public.reserves_out FOR EACH ROW EXECUTE FUNCTION public.reserves_out_by_reserve_delete_trigger();
-
-
---
--- Name: reserves_out reserves_out_on_insert; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER reserves_out_on_insert AFTER INSERT ON public.reserves_out FOR EACH ROW EXECUTE FUNCTION public.reserves_out_by_reserve_insert_trigger();
-
-
---
--- Name: wire_out wire_out_on_delete; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER wire_out_on_delete AFTER DELETE ON public.wire_out FOR EACH ROW EXECUTE FUNCTION public.wire_out_delete_trigger();
-
-
---
--- Name: app_bankaccount app_bankaccount_user_id_2722a34f_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_user_id_2722a34f_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_banktransaction app_banktransaction_credit_account_id_a8ba05ac_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_credit_account_id_a8ba05ac_fk_app_banka FOREIGN KEY (credit_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_banktransaction app_banktransaction_debit_account_id_5b1f7528_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_debit_account_id_5b1f7528_fk_app_banka FOREIGN KEY (debit_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawope_selected_exchange_ac_6c8b96cf_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawope_selected_exchange_ac_6c8b96cf_fk_app_banka FOREIGN KEY (selected_exchange_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawope_withdraw_account_id_992dc5b3_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawope_withdraw_account_id_992dc5b3_fk_app_banka FOREIGN KEY (withdraw_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_auditor_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_auditor_uuid_fkey FOREIGN KEY (auditor_uuid) REFERENCES public.auditors(auditor_uuid) ON DELETE CASCADE;
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: auth_group_permissions auth_group_permissio_permission_id_84c5c92e_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissio_permission_id_84c5c92e_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_group_permissions auth_group_permissions_group_id_b120cbf9_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_group_id_b120cbf9_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_permission auth_permission_content_type_id_2f476e4b_fk_django_co; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_content_type_id_2f476e4b_fk_django_co FOREIGN KEY (content_type_id) REFERENCES public.django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_groups auth_user_groups_group_id_97559544_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_group_id_97559544_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_groups auth_user_groups_user_id_6a12ed8b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_user_id_6a12ed8b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: denomination_revocations denomination_revocations_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denomination_revocations_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: auditor_exchange_signkeys master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_exchange_signkeys
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_reserve master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_reserve
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_aggregation master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_aggregation
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_deposit_confirmation master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_deposit_confirmation
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_coin master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_coin
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: wire_auditor_account_progress master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_account_progress
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: wire_auditor_progress master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_progress
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_reserves master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_reserve_balance master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserve_balance
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_wire_fee_balance master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_wire_fee_balance
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_balance_summary master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_balance_summary
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_historic_denomination_revenue master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_denomination_revenue
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_historic_reserve_summary master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_reserve_summary
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: deposit_confirmations master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_predicted_result master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_predicted_result
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: merchant_accounts merchant_accounts_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial);
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_deposit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_deposit_serial_fkey FOREIGN KEY (deposit_serial) REFERENCES public.merchant_deposits(deposit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_account_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_account_serial_fkey FOREIGN KEY (account_serial) REFERENCES public.merchant_accounts(account_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_contract_terms(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_inventory_locks merchant_inventory_locks_product_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory_locks
- ADD CONSTRAINT merchant_inventory_locks_product_serial_fkey FOREIGN KEY (product_serial) REFERENCES public.merchant_inventory(product_serial);
-
-
---
--- Name: merchant_inventory merchant_inventory_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_keys merchant_keys_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_kyc merchant_kyc_account_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_kyc
- ADD CONSTRAINT merchant_kyc_account_serial_fkey FOREIGN KEY (account_serial) REFERENCES public.merchant_accounts(account_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_order_locks merchant_order_locks_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_order_locks
- ADD CONSTRAINT merchant_order_locks_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_orders(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_order_locks merchant_order_locks_product_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_order_locks
- ADD CONSTRAINT merchant_order_locks_product_serial_fkey FOREIGN KEY (product_serial) REFERENCES public.merchant_inventory(product_serial);
-
-
---
--- Name: merchant_orders merchant_orders_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_refund_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_refund_serial_fkey FOREIGN KEY (refund_serial) REFERENCES public.merchant_refunds(refund_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refunds merchant_refunds_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_contract_terms(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_pickup_signatures merchant_tip_pickup_signatures_pickup_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickup_signatures
- ADD CONSTRAINT merchant_tip_pickup_signatures_pickup_serial_fkey FOREIGN KEY (pickup_serial) REFERENCES public.merchant_tip_pickups(pickup_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_tip_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_tip_serial_fkey FOREIGN KEY (tip_serial) REFERENCES public.merchant_tips(tip_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_serial_fkey FOREIGN KEY (reserve_serial) REFERENCES public.merchant_tip_reserves(reserve_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tips merchant_tips_reserve_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_reserve_serial_fkey FOREIGN KEY (reserve_serial) REFERENCES public.merchant_tip_reserves(reserve_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_deposit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_deposit_serial_fkey FOREIGN KEY (deposit_serial) REFERENCES public.merchant_deposits(deposit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfers merchant_transfers_account_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_account_serial_fkey FOREIGN KEY (account_serial) REFERENCES public.merchant_accounts(account_serial) ON DELETE CASCADE;
-
-
---
--- Name: partner_accounts partner_accounts_partner_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.partner_accounts
- ADD CONSTRAINT partner_accounts_partner_serial_id_fkey FOREIGN KEY (partner_serial_id) REFERENCES public.partners(partner_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: signkey_revocations signkey_revocations_esk_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_esk_serial_fkey FOREIGN KEY (esk_serial) REFERENCES public.exchange_sign_keys(esk_serial) ON DELETE CASCADE;
-
-
---
--- PostgreSQL database dump complete
---
-
diff --git a/src/auditor/setup.sh b/src/auditor/setup.sh
new file mode 100755
index 000000000..bb17e92ae
--- /dev/null
+++ b/src/auditor/setup.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+# This file is in the public domain
+
+# Script to be inlined into the main test scripts. Defines function 'setup()'
+# which wraps around 'taler-unified-setup.sh' to launch GNU Taler services.
+# Call setup() with the arguments to pass to 'taler-unified-setup'. setup()
+# will then launch GNU Taler, wait for the process to be complete before
+# returning. The script will also install an exit handler to ensure the GNU
+# Taler processes are stopped when the shell exits.
+
+set -eu
+
+# Cleanup to run whenever we exit
+function exit_cleanup()
+{
+ if [ ! -z ${SETUP_PID+x} ]
+ then
+ echo "Killing taler-unified-setup ($SETUP_PID)" >&2
+ kill -TERM "$SETUP_PID" 2> /dev/null || true
+ wait "$SETUP_PID" 2> /dev/null || true
+ fi
+}
+
+# Install cleanup handler (except for kill -9)
+trap exit_cleanup EXIT
+
+function setup()
+{
+ echo "Starting test system ..." >&2
+ # Create a named pipe in a temp directory we own.
+ FIFO_DIR=$(mktemp -d fifo-XXXXXX)
+ FIFO_OUT=$(echo "$FIFO_DIR/out")
+ mkfifo "$FIFO_OUT"
+ # Open pipe as FD 3 (RW) and FD 4 (RO)
+ exec 3<> "$FIFO_OUT" 4< "$FIFO_OUT"
+ rm -rf "$FIFO_DIR"
+ # We require '-W' for our termination logic to work.
+ taler-unified-setup.sh -W "$@" \
+ > >(tee taler-unified-setup.log >&3) &
+ SETUP_PID=$!
+ # Close FD3
+ exec 3>&-
+ sed -u '/<<READY>>/ q' <&4
+ # Close FD4
+ exec 4>&-
+ echo "Test system ready" >&2
+}
+
+# Exit, with status code "skip" (no 'real' failure)
+function exit_fail() {
+ echo "$@" >&2
+ exit 1
+}
+
+# Exit, with status code "skip" (no 'real' failure)
+function exit_skip() {
+ echo "SKIPPING: $1"
+ exit 77
+}
+
+function get_payto_uri() {
+ export LIBEUFIN_SANDBOX_USERNAME="$1"
+ export LIBEUFIN_SANDBOX_PASSWORD="$2"
+ export LIBEUFIN_SANDBOX_URL="http://localhost:18082"
+ echo "get_payto_uri currently not implemented"
+ exit 1
+# libeufin-cli sandbox demobank info --bank-account "$1" | jq --raw-output '.paytoUri'
+}
+
+# Stop libeufin-bank (if running)
+function stop_libeufin()
+{
+ echo -n "Stopping libeufin... "
+ if [ -f "${MY_TMP_DIR:-/}/libeufin-bank.pid" ]
+ then
+ PID=$(cat "${MY_TMP_DIR}/libeufin-bank.pid" 2> /dev/null)
+ echo "Killing libeufin-bank $PID"
+ rm "${MY_TMP_DIR}/libeufin-bank.pid"
+ kill "$PID" 2> /dev/null || true
+ wait "$PID" || true
+ fi
+ echo "DONE"
+}
+
+
+function launch_libeufin () {
+ libeufin-bank serve \
+ -c "$CONF" \
+ -L "INFO" \
+ > "${MY_TMP_DIR}/libeufin-bank-stdout.log" \
+ 2> "${MY_TMP_DIR}/libeufin-bank-stderr.log" &
+ echo $! > "${MY_TMP_DIR}/libeufin-bank.pid"
+}
diff --git a/src/auditor/taler-auditor-dbinit.c b/src/auditor/taler-auditor-dbinit.c
index 54f8152a5..4cb46f470 100644
--- a/src/auditor/taler-auditor-dbinit.c
+++ b/src/auditor/taler-auditor-dbinit.c
@@ -90,7 +90,9 @@ run (void *cls,
"Failed to restart audits\n");
}
if (GNUNET_OK !=
- plugin->create_tables (plugin->cls))
+ plugin->create_tables (plugin->cls,
+ false,
+ 0))
{
fprintf (stderr,
"Failed to initialize database.\n");
diff --git a/src/auditor/taler-auditor-exchange.c b/src/auditor/taler-auditor-exchange.c
deleted file mode 100644
index 04181ce3f..000000000
--- a/src/auditor/taler-auditor-exchange.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2014-2021 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file taler-auditor-exchange.c
- * @brief Tool used by the auditor to add or remove the exchange's master key
- * to its database.
- * @author Christian Grothoff
- */
-#include <platform.h>
-#include "taler_exchangedb_lib.h"
-#include "taler_auditordb_lib.h"
-
-
-/**
- * URL of the exchange.
- */
-static char *exchange_url;
-
-/**
- * Master public key of the exchange.
- */
-static struct TALER_MasterPublicKeyP master_public_key;
-
-/**
- * Our configuration.
- */
-static struct GNUNET_CONFIGURATION_Handle *cfg;
-
-/**
- * Handle to access the auditor's database.
- */
-static struct TALER_AUDITORDB_Plugin *adb;
-
-/**
- * -r option given.
- */
-static int remove_flag;
-
-
-/**
- * The main function of the taler-auditor-exchange tool. This tool is used
- * to add (or remove) an exchange's master key and base URL to the auditor's
- * database.
- *
- * @param argc number of arguments from the command line
- * @param argv command line arguments
- * @return 0 ok, non-zero on error
- */
-int
-main (int argc,
- char *const *argv)
-{
- char *cfgfile = NULL;
- const struct GNUNET_GETOPT_CommandLineOption options[] = {
- GNUNET_GETOPT_option_cfgfile (&cfgfile),
- GNUNET_GETOPT_option_help (
- "Add or remove exchange to list of audited exchanges"),
- GNUNET_GETOPT_option_mandatory
- (GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &master_public_key)),
- GNUNET_GETOPT_option_string ('u',
- "exchange-url",
- "URL",
- "base URL of the exchange",
- &exchange_url),
- GNUNET_GETOPT_option_flag ('r',
- "remove",
- "remove the exchange's key (default is to add)",
- &remove_flag),
- GNUNET_GETOPT_option_version (VERSION "-" VCS_VERSION),
- GNUNET_GETOPT_OPTION_END
- };
-
- TALER_gcrypt_init (); /* must trigger initialization manually at this point! */
- GNUNET_assert (GNUNET_OK ==
- GNUNET_log_setup ("taler-auditor-exchange",
- "WARNING",
- NULL));
- {
- int ret;
-
- ret = GNUNET_GETOPT_run ("taler-auditor-exchange",
- options,
- argc, argv);
- if (GNUNET_NO == ret)
- return EXIT_SUCCESS;
- if (GNUNET_SYSERR == ret)
- return EXIT_INVALIDARGUMENT;
- }
- if (NULL == cfgfile)
- cfgfile = GNUNET_CONFIGURATION_default_filename ();
- if (NULL == cfgfile)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Can't find default configuration file.\n");
- return EXIT_NOTCONFIGURED;
- }
- cfg = GNUNET_CONFIGURATION_create ();
-
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Loading config file: %s\n",
- cfgfile);
-
- if (GNUNET_SYSERR ==
- GNUNET_CONFIGURATION_load (cfg,
- cfgfile))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Malformed configuration file `%s', exit ...\n",
- cfgfile);
- GNUNET_free (cfgfile);
- return EXIT_NOTCONFIGURED;
- }
- GNUNET_free (cfgfile);
-
- if (! remove_flag)
- {
- if (NULL == exchange_url)
- {
- fprintf (stderr,
- _ ("Missing either `%s' or `%s'.\n"),
- "-u URL",
- "--remove");
- return EXIT_INVALIDARGUMENT;
- }
- if ( (0 == strlen (exchange_url)) ||
- ( (0 != strncasecmp ("http://",
- exchange_url,
- strlen ("http://"))) &&
- (0 != strncasecmp ("https://",
- exchange_url,
- strlen ("https://"))) ) ||
- ('/' != exchange_url[strlen (exchange_url) - 1]) )
- {
- fprintf (stderr,
- "Exchange URL must begin with `http://` or `https://` and end with `/'\n");
- return EXIT_INVALIDARGUMENT;
- }
- }
-
-
- if (NULL ==
- (adb = TALER_AUDITORDB_plugin_load (cfg)))
- {
- fprintf (stderr,
- "Failed to initialize auditor database plugin.\n");
- return EXIT_NOTINSTALLED;
- }
-
- /* Create required tables */
- if (GNUNET_OK !=
- adb->create_tables (adb->cls))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to create tables in auditor's database\n");
- TALER_AUDITORDB_plugin_unload (adb);
- return EXIT_NOPERMISSION;
- }
-
- /* Update DB */
- {
- enum GNUNET_DB_QueryStatus qs;
-
- if (GNUNET_SYSERR ==
- adb->preflight (adb->cls))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to initialize database connection\n");
- TALER_AUDITORDB_plugin_unload (adb);
- return EXIT_FAILURE;
- }
-
- if (remove_flag)
- {
- qs = adb->delete_exchange (adb->cls,
- &master_public_key);
- }
- else
- {
- qs = adb->insert_exchange (adb->cls,
- &master_public_key,
- exchange_url);
- }
- if (0 > qs)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to update auditor database (status code: %d)\n",
- qs);
- TALER_AUDITORDB_plugin_unload (adb);
- return EXIT_FAILURE;
- }
- if (0 == qs)
- {
- GNUNET_log (
- GNUNET_ERROR_TYPE_WARNING,
- (remove_flag)
- ? "Could not remove exchange from database: entry already absent\n"
- : "Could not add exchange to database: entry already exists\n");
- TALER_AUDITORDB_plugin_unload (adb);
- return EXIT_FAILURE;
- }
- }
- TALER_AUDITORDB_plugin_unload (adb);
- return EXIT_SUCCESS;
-}
-
-
-/* end of taler-auditor-exchange.c */
diff --git a/src/auditor/taler-auditor-httpd.c b/src/auditor/taler-auditor-httpd.c
index a212eddca..59bd849bc 100644
--- a/src/auditor/taler-auditor-httpd.c
+++ b/src/auditor/taler-auditor-httpd.c
@@ -31,7 +31,7 @@
#include "taler_auditordb_lib.h"
#include "taler_exchangedb_lib.h"
#include "taler-auditor-httpd_deposit-confirmation.h"
-#include "taler-auditor-httpd_exchanges.h"
+#include "taler-auditor-httpd_deposit-confirmation-get.h"
#include "taler-auditor-httpd_mhd.h"
#include "taler-auditor-httpd.h"
@@ -48,7 +48,8 @@
* release version, and the format is NOT the same that semantic
* versioning uses either.
*/
-#define AUDITOR_PROTOCOL_VERSION "0:0:0"
+#define AUDITOR_PROTOCOL_VERSION "1:0:1"
+
/**
* Backlog for listen operation on unix domain sockets.
@@ -81,6 +82,12 @@ struct TALER_EXCHANGEDB_Plugin *TAH_eplugin;
static struct TALER_AuditorPublicKeyP auditor_pub;
/**
+ * Exchange master public key (according to the
+ * configuration). (global)
+ */
+struct TALER_MasterPublicKeyP TAH_master_public_key;
+
+/**
* Default timeout in seconds for HTTP requests.
*/
static unsigned int connection_timeout = 30;
@@ -132,7 +139,7 @@ handle_mhd_completion_callback (void *cls,
/**
- * Handle a "/version" request.
+ * Handle a "/config" request.
*
* @param rh context of the handler
* @param connection the MHD connection to handle
@@ -142,11 +149,11 @@ handle_mhd_completion_callback (void *cls,
* @return MHD result code
*/
static MHD_RESULT
-handle_version (struct TAH_RequestHandler *rh,
- struct MHD_Connection *connection,
- void **connection_cls,
- const char *upload_data,
- size_t *upload_data_size)
+handle_config (struct TAH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size)
{
static json_t *ver; /* we build the response only once, keep around for next query! */
@@ -157,12 +164,18 @@ handle_version (struct TAH_RequestHandler *rh,
if (NULL == ver)
{
ver = GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("name",
+ "taler-auditor"),
GNUNET_JSON_pack_string ("version",
AUDITOR_PROTOCOL_VERSION),
+ GNUNET_JSON_pack_string ("implementation",
+ "urn:net:taler:specs:taler-auditor:c-reference"),
GNUNET_JSON_pack_string ("currency",
TAH_currency),
GNUNET_JSON_pack_data_auto ("auditor_public_key",
- &auditor_pub));
+ &auditor_pub),
+ GNUNET_JSON_pack_data_auto ("exchange_master_public_key",
+ &TAH_master_public_key));
}
if (NULL == ver)
{
@@ -204,12 +217,15 @@ handle_mhd_request (void *cls,
{ "/deposit-confirmation", MHD_HTTP_METHOD_PUT, "application/json",
NULL, 0,
&TAH_DEPOSIT_CONFIRMATION_handler, MHD_HTTP_OK },
- { "/exchanges", MHD_HTTP_METHOD_GET, "application/json",
+ { "/deposit-confirmation", MHD_HTTP_METHOD_GET, "application/json",
NULL, 0,
- &TAH_EXCHANGES_handler, MHD_HTTP_OK },
- { "/version", MHD_HTTP_METHOD_GET, "application/json",
+ &TAH_DEPOSIT_CONFIRMATION_handler_get, MHD_HTTP_OK },
+// { "/deposit-confirmation", MHD_HTTP_METHOD_DELETE, "application/json",
+// NULL, 0,
+// &TAH_DEPOSIT_CONFIRMATION_delete, MHD_HTTP_OK },
+ { "/config", MHD_HTTP_METHOD_GET, "application/json",
NULL, 0,
- &handle_version, MHD_HTTP_OK },
+ &handle_config, MHD_HTTP_OK },
/* Landing page, for now tells humans to go away
* (NOTE: ideally, the reverse proxy will respond with a nicer page) */
{ "/", MHD_HTTP_METHOD_GET, "text/plain",
@@ -298,6 +314,40 @@ auditor_serve_process_config (void)
{
return GNUNET_SYSERR;
}
+
+ {
+ char *master_public_key_str;
+
+ if (GNUNET_OK !=
+ GNUNET_CONFIGURATION_get_value_string (cfg,
+ "exchange",
+ "MASTER_PUBLIC_KEY",
+ &master_public_key_str))
+ {
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+ "exchange",
+ "MASTER_PUBLIC_KEY");
+ return GNUNET_SYSERR;
+ }
+ if (GNUNET_OK !=
+ GNUNET_CRYPTO_eddsa_public_key_from_string (
+ master_public_key_str,
+ strlen (master_public_key_str),
+ &TAH_master_public_key.eddsa_pub))
+ {
+ GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
+ "exchange",
+ "MASTER_PUBLIC_KEY",
+ "invalid base32 encoding for a master public key");
+ GNUNET_free (master_public_key_str);
+ return GNUNET_SYSERR;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Launching auditor for exchange `%s'...\n",
+ master_public_key_str);
+ GNUNET_free (master_public_key_str);
+ }
+
{
char *pub;
diff --git a/src/auditor/taler-auditor-httpd.h b/src/auditor/taler-auditor-httpd.h
index 79e56ff55..853722f09 100644
--- a/src/auditor/taler-auditor-httpd.h
+++ b/src/auditor/taler-auditor-httpd.h
@@ -39,6 +39,12 @@ extern struct TALER_AUDITORDB_Plugin *TAH_plugin;
extern struct TALER_EXCHANGEDB_Plugin *TAH_eplugin;
/**
+ * Exchange master public key (according to the
+ * configuration). (global)
+ */
+extern struct TALER_MasterPublicKeyP TAH_master_public_key;
+
+/**
* Our currency.
*/
extern char *TAH_currency;
diff --git a/src/auditor/taler-auditor-httpd_deposit-confirmation-get.c b/src/auditor/taler-auditor-httpd_deposit-confirmation-get.c
new file mode 100644
index 000000000..265d625c4
--- /dev/null
+++ b/src/auditor/taler-auditor-httpd_deposit-confirmation-get.c
@@ -0,0 +1,166 @@
+/*
+ This file is part of TALER
+ Copyright (C) 2014-2024 Taler Systems SA
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU Affero General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+*/
+
+/**
+ * @file taler-auditor-httpd_deposit-confirmation-get.c
+ * @brief Handle /deposit-confirmation requests; return list of deposit confirmations from merchant
+ * that were not received from the exchange, by auditor.
+ * @author Nic Eigel
+ */
+
+#include "platform.h"
+#include <gnunet/gnunet_util_lib.h>
+#include <gnunet/gnunet_json_lib.h>
+#include <jansson.h>
+#include <microhttpd.h>
+#include <pthread.h>
+#include "taler_json_lib.h"
+#include "taler_mhd_lib.h"
+#include "taler-auditor-httpd.h"
+#include "taler-auditor-httpd_deposit-confirmation-get.h"
+
+GNUNET_NETWORK_STRUCT_BEGIN
+
+/**
+ * @brief Information about a signing key of the exchange. Signing keys are used
+ * to sign exchange messages other than coins, i.e. to confirm that a
+ * deposit was successful or that a refresh was accepted.
+ */
+struct ExchangeSigningKeyDataP
+{
+
+ /**
+ * When does this signing key begin to be valid?
+ */
+ struct GNUNET_TIME_TimestampNBO start;
+
+ /**
+ * When does this signing key expire? Note: This is currently when
+ * the Exchange will definitively stop using it. Signatures made with
+ * the key remain valid until @e end. When checking validity periods,
+ * clients should allow for some overlap between keys and tolerate
+ * the use of either key during the overlap time (due to the
+ * possibility of clock skew).
+ */
+ struct GNUNET_TIME_TimestampNBO expire;
+
+ /**
+ * When do signatures with this signing key become invalid? After
+ * this point, these signatures cannot be used in (legal) disputes
+ * anymore, as the Exchange is then allowed to destroy its side of the
+ * evidence. @e end is expected to be significantly larger than @e
+ * expire (by a year or more).
+ */
+ struct GNUNET_TIME_TimestampNBO end;
+
+ /**
+ * The public online signing key that the exchange will use
+ * between @e start and @e expire.
+ */
+ struct TALER_ExchangePublicKeyP signkey_pub;
+};
+
+GNUNET_NETWORK_STRUCT_END
+
+
+/**
+ * Add deposit confirmation to the list.
+ *
+ * @param[in,out] cls a `json_t *` array to extend
+ * @param serial_id location of the @a dc in the database
+ * @param dc struct of deposit confirmation
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop iterating
+ */
+static enum GNUNET_GenericReturnValue
+add_deposit_confirmation (void *cls,
+ uint64_t serial_id,
+ const struct TALER_AUDITORDB_DepositConfirmation *dc)
+{
+ json_t *list = cls;
+ json_t *obj;
+
+ obj = GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_data_auto ("dc",
+ dc));
+ GNUNET_break (0 ==
+ json_array_append_new (list,
+ obj));
+ return GNUNET_OK;
+}
+
+
+/**
+ *
+ * @param rh context of the handler
+ * @param connection the MHD connection to handle
+ * @param[in,out] connection_cls the connection's closure (can be updated)
+ * @param upload_data upload data
+ * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
+ * @return MHD result code
+ */
+MHD_RESULT
+TAH_DEPOSIT_CONFIRMATION_handler_get (struct TAH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size)
+{
+ json_t *ja;
+ enum GNUNET_DB_QueryStatus qs;
+
+ (void) rh;
+ (void) connection_cls;
+ (void) upload_data;
+ (void) upload_data_size;
+ if (GNUNET_SYSERR ==
+ TAH_plugin->preflight (TAH_plugin->cls))
+ {
+ GNUNET_break (0);
+ return TALER_MHD_reply_with_error (connection,
+ MHD_HTTP_INTERNAL_SERVER_ERROR,
+ TALER_EC_GENERIC_DB_SETUP_FAILED,
+ NULL);
+ }
+ ja = json_array ();
+ GNUNET_break (NULL != ja);
+ // TODO correct below
+ qs = TAH_plugin->get_deposit_confirmations (
+ TAH_plugin->cls,
+ 0, /* FIXME: get from query parameters! */
+ false, /* FIXME: get from query parameters! */
+ &add_deposit_confirmation,
+ ja);
+
+ if (0 > qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
+ json_decref (ja);
+ TALER_LOG_WARNING (
+ "Failed to handle GET /deposit-confirmation in database\n");
+ return TALER_MHD_reply_with_error (connection,
+ MHD_HTTP_INTERNAL_SERVER_ERROR,
+ TALER_EC_GENERIC_DB_FETCH_FAILED,
+ "deposit-confirmation");
+ }
+ return TALER_MHD_REPLY_JSON_PACK (
+ connection,
+ MHD_HTTP_OK,
+ GNUNET_JSON_pack_array_steal ("deposit-confirmation",
+ ja));
+}
+
+
+/* end of taler-auditor-httpd_deposit-confirmation-get.c */
diff --git a/src/auditor/taler-auditor-httpd_deposit-confirmation-get.h b/src/auditor/taler-auditor-httpd_deposit-confirmation-get.h
new file mode 100644
index 000000000..f1f522787
--- /dev/null
+++ b/src/auditor/taler-auditor-httpd_deposit-confirmation-get.h
@@ -0,0 +1,70 @@
+/*
+ This file is part of TALER
+ Copyright (C) 2024 Taler Systems SA
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU Affero General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file taler-auditor-httpd_deposit-confirmation-get.h
+ * @brief Handle GET /deposit-confirmation requests
+ * @author Nic Eigel
+ */
+#ifndef TALER_AUDITOR_HTTPD_DEPOSIT_CONFIRMATION_GET_H
+#define TALER_AUDITOR_HTTPD_DEPOSIT_CONFIRMATION_GET_H
+
+#include <gnunet/gnunet_util_lib.h>
+#include <microhttpd.h>
+#include "taler-auditor-httpd.h"
+
+/**
+ * Initialize subsystem.
+ */
+void
+TEAH_DEPOSIT_CONFIRMATION_GET_init (void);
+
+/**
+ * Shut down subsystem.
+ */
+void
+TEAH_DEPOSIT_CONFIRMATION_GET_done (void);
+
+/**
+ * Handle a "/deposit-confirmation" request.
+ *
+ * @param rh context of the handler
+ * @param connection the MHD connection to handle
+ * @param[in,out] connection_cls the connection's closure (can be updated)
+ * @param upload_data upload data
+ * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
+ * @return MHD result code
+ */
+MHD_RESULT
+TAH_DEPOSIT_CONFIRMATION_handler_get (struct TAH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size);
+
+/**
+ * Handle a DELETE "/deposit-confirmation/$dc" request.
+ *
+ * @param rc request details about the request to handle
+ * @param args argument with the dc primary key
+ * @return MHD result code
+ */
+/*MHD_RESULT
+TAH_DEPOSIT_CONFIRMATION_delete (
+ struct TEH_RequestContext *rc,
+ const char *const args[1]);*/
+
+
+#endif
diff --git a/src/auditor/taler-auditor-httpd_deposit-confirmation.c b/src/auditor/taler-auditor-httpd_deposit-confirmation.c
index f4d89b7ca..8b449bf47 100644
--- a/src/auditor/taler-auditor-httpd_deposit-confirmation.c
+++ b/src/auditor/taler-auditor-httpd_deposit-confirmation.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2014-2020 Taler Systems SA
+ Copyright (C) 2014-2023 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License as published by the Free Software
@@ -31,7 +31,6 @@
#include "taler-auditor-httpd.h"
#include "taler-auditor-httpd_deposit-confirmation.h"
-
GNUNET_NETWORK_STRUCT_BEGIN
/**
@@ -115,9 +114,14 @@ verify_and_execute_deposit_confirmation (
.end = GNUNET_TIME_timestamp_hton (es->ep_end),
.signkey_pub = es->exchange_pub
};
+ const struct TALER_CoinSpendSignatureP *coin_sigps[
+ GNUNET_NZL (dc->num_coins)];
+
+ for (unsigned int i = 0; i < dc->num_coins; i++)
+ coin_sigps[i] = &dc->coin_sigs[i];
if (GNUNET_TIME_absolute_is_future (es->ep_start.abs_time) ||
- GNUNET_TIME_absolute_is_past (es->ep_expire.abs_time) )
+ GNUNET_TIME_absolute_is_past (es->ep_expire.abs_time))
{
/* Signing key expired */
TALER_LOG_WARNING ("Expired exchange signing key\n");
@@ -129,7 +133,7 @@ verify_and_execute_deposit_confirmation (
/* check our cache */
GNUNET_CRYPTO_hash (&skv,
- sizeof (skv),
+ sizeof(skv),
&h);
GNUNET_assert (0 == pthread_mutex_lock (&lock));
cached = GNUNET_CONTAINER_multihashmap_get (cache,
@@ -153,7 +157,7 @@ verify_and_execute_deposit_confirmation (
es->ep_start,
es->ep_expire,
es->ep_end,
- &es->master_public_key,
+ &TAH_master_public_key,
&es->master_sig))
{
TALER_LOG_WARNING ("Invalid signature on exchange signing key\n");
@@ -227,12 +231,13 @@ verify_and_execute_deposit_confirmation (
TALER_exchange_online_deposit_confirmation_verify (
&dc->h_contract_terms,
&dc->h_wire,
- NULL /* h_extensions! */,
+ &dc->h_policy,
dc->exchange_timestamp,
dc->wire_deadline,
dc->refund_deadline,
- &dc->amount_without_fee,
- &dc->coin_pub,
+ &dc->total_without_fee,
+ dc->num_coins,
+ coin_sigps,
&dc->merchant,
&dc->exchange_pub,
&dc->exchange_sig))
@@ -265,40 +270,47 @@ verify_and_execute_deposit_confirmation (
MHD_RESULT
-TAH_DEPOSIT_CONFIRMATION_handler (struct TAH_RequestHandler *rh,
- struct MHD_Connection *connection,
- void **connection_cls,
- const char *upload_data,
- size_t *upload_data_size)
+TAH_DEPOSIT_CONFIRMATION_handler (
+ struct TAH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size)
{
- struct TALER_AUDITORDB_DepositConfirmation dc;
+ struct TALER_AUDITORDB_DepositConfirmation dc = {
+ .refund_deadline = GNUNET_TIME_UNIT_ZERO_TS
+ };
struct TALER_AUDITORDB_ExchangeSigningKey es;
+ const json_t *jcoin_sigs;
+ const json_t *jcoin_pubs;
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_fixed_auto ("h_contract_terms",
&dc.h_contract_terms),
- GNUNET_JSON_spec_fixed_auto ("h_extensions",
- &dc.h_extensions),
+ GNUNET_JSON_spec_fixed_auto ("h_policy",
+ &dc.h_policy),
GNUNET_JSON_spec_fixed_auto ("h_wire",
&dc.h_wire),
GNUNET_JSON_spec_timestamp ("exchange_timestamp",
&dc.exchange_timestamp),
- GNUNET_JSON_spec_timestamp ("refund_deadline",
- &dc.refund_deadline),
+ GNUNET_JSON_spec_mark_optional (
+ GNUNET_JSON_spec_timestamp ("refund_deadline",
+ &dc.refund_deadline),
+ NULL),
GNUNET_JSON_spec_timestamp ("wire_deadline",
&dc.wire_deadline),
- TALER_JSON_spec_amount ("amount_without_fee",
+ TALER_JSON_spec_amount ("total_without_fee",
TAH_currency,
- &dc.amount_without_fee),
- GNUNET_JSON_spec_fixed_auto ("coin_pub",
- &dc.coin_pub),
+ &dc.total_without_fee),
+ GNUNET_JSON_spec_array_const ("coin_pubs",
+ &jcoin_pubs),
+ GNUNET_JSON_spec_array_const ("coin_sigs",
+ &jcoin_sigs),
GNUNET_JSON_spec_fixed_auto ("merchant_pub",
&dc.merchant),
GNUNET_JSON_spec_fixed_auto ("exchange_sig",
&dc.exchange_sig),
GNUNET_JSON_spec_fixed_auto ("exchange_pub",
&dc.exchange_pub),
- GNUNET_JSON_spec_fixed_auto ("master_pub",
- &es.master_public_key),
GNUNET_JSON_spec_timestamp ("ep_start",
&es.ep_start),
GNUNET_JSON_spec_timestamp ("ep_expire",
@@ -309,13 +321,14 @@ TAH_DEPOSIT_CONFIRMATION_handler (struct TAH_RequestHandler *rh,
&es.master_sig),
GNUNET_JSON_spec_end ()
};
+ unsigned int num_coins;
+ json_t *json;
(void) rh;
(void) connection_cls;
(void) upload_data;
(void) upload_data_size;
{
- json_t *json;
enum GNUNET_GenericReturnValue res;
res = TALER_MHD_parse_post_json (connection,
@@ -325,28 +338,94 @@ TAH_DEPOSIT_CONFIRMATION_handler (struct TAH_RequestHandler *rh,
&json);
if (GNUNET_SYSERR == res)
return MHD_NO;
- if ( (GNUNET_NO == res) ||
- (NULL == json) )
+ if ((GNUNET_NO == res) ||
+ (NULL == json))
return MHD_YES;
res = TALER_MHD_parse_json_data (connection,
json,
spec);
- json_decref (json);
if (GNUNET_SYSERR == res)
- return MHD_NO; /* hard failure */
+ {
+ json_decref (json);
+ return MHD_NO; /* hard failure */
+ }
if (GNUNET_NO == res)
- return MHD_YES; /* failure */
+ {
+ json_decref (json);
+ return MHD_YES; /* failure */
+ }
}
-
- es.exchange_pub = dc.exchange_pub; /* used twice! */
- dc.master_public_key = es.master_public_key;
+ num_coins = json_array_size (jcoin_sigs);
+ if (num_coins != json_array_size (jcoin_pubs))
{
+ GNUNET_break_op (0);
+ json_decref (json);
+ return TALER_MHD_reply_with_ec (
+ connection,
+ TALER_EC_GENERIC_PARAMETER_MALFORMED,
+ "coin_pubs.length != coin_sigs.length");
+ }
+ if (0 == num_coins)
+ {
+ GNUNET_break_op (0);
+ json_decref (json);
+ return TALER_MHD_reply_with_ec (
+ connection,
+ TALER_EC_GENERIC_PARAMETER_MALFORMED,
+ "coin_pubs array is empty");
+ }
+ {
+ struct TALER_CoinSpendPublicKeyP coin_pubs[num_coins];
+ struct TALER_CoinSpendSignatureP coin_sigs[num_coins];
MHD_RESULT res;
+ for (unsigned int i = 0; i < num_coins; i++)
+ {
+ json_t *jpub = json_array_get (jcoin_pubs,
+ i);
+ json_t *jsig = json_array_get (jcoin_sigs,
+ i);
+ const char *ps = json_string_value (jpub);
+ const char *ss = json_string_value (jsig);
+
+ if ((NULL == ps) ||
+ (GNUNET_OK !=
+ GNUNET_STRINGS_string_to_data (ps,
+ strlen (ps),
+ &coin_pubs[i],
+ sizeof(coin_pubs[i]))))
+ {
+ GNUNET_break_op (0);
+ json_decref (json);
+ return TALER_MHD_reply_with_ec (
+ connection,
+ TALER_EC_GENERIC_PARAMETER_MALFORMED,
+ "coin_pub[] malformed");
+ }
+ if ((NULL == ss) ||
+ (GNUNET_OK !=
+ GNUNET_STRINGS_string_to_data (ss,
+ strlen (ss),
+ &coin_sigs[i],
+ sizeof(coin_sigs[i]))))
+ {
+ GNUNET_break_op (0);
+ json_decref (json);
+ return TALER_MHD_reply_with_ec (
+ connection,
+ TALER_EC_GENERIC_PARAMETER_MALFORMED,
+ "coin_sig[] malformed");
+ }
+ }
+ dc.num_coins = num_coins;
+ dc.coin_pubs = coin_pubs;
+ dc.coin_sigs = coin_sigs;
+ es.exchange_pub = dc.exchange_pub; /* used twice! */
res = verify_and_execute_deposit_confirmation (connection,
&dc,
&es);
GNUNET_JSON_parse_free (spec);
+ json_decref (json);
return res;
}
}
@@ -371,6 +450,3 @@ TEAH_DEPOSIT_CONFIRMATION_done (void)
GNUNET_assert (0 == pthread_mutex_destroy (&lock));
}
}
-
-
-/* end of taler-auditor-httpd_deposit-confirmation.c */
diff --git a/src/auditor/taler-auditor-httpd_deposit-confirmation.h b/src/auditor/taler-auditor-httpd_deposit-confirmation.h
index a7c331916..1226dda69 100644
--- a/src/auditor/taler-auditor-httpd_deposit-confirmation.h
+++ b/src/auditor/taler-auditor-httpd_deposit-confirmation.h
@@ -56,4 +56,5 @@ TAH_DEPOSIT_CONFIRMATION_handler (struct TAH_RequestHandler *rh,
const char *upload_data,
size_t *upload_data_size);
+
#endif
diff --git a/src/auditor/taler-auditor-httpd_exchanges.c b/src/auditor/taler-auditor-httpd_exchanges.c
deleted file mode 100644
index f9a9e9e60..000000000
--- a/src/auditor/taler-auditor-httpd_exchanges.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2014-2021 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file taler-auditor-httpd_exchanges.c
- * @brief Handle /exchanges requests; returns list of exchanges we audit
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include <gnunet/gnunet_util_lib.h>
-#include <gnunet/gnunet_json_lib.h>
-#include <jansson.h>
-#include <microhttpd.h>
-#include <pthread.h>
-#include "taler_json_lib.h"
-#include "taler_mhd_lib.h"
-#include "taler-auditor-httpd.h"
-#include "taler-auditor-httpd_exchanges.h"
-
-
-/**
- * Add exchange information to the list.
- *
- * @param[in,out] cls a `json_t *` array to extend
- * @param master_pub master public key of an exchange
- * @param exchange_url base URL of an exchange
- */
-static void
-add_exchange (void *cls,
- const struct TALER_MasterPublicKeyP *master_pub,
- const char *exchange_url)
-{
- json_t *list = cls;
- json_t *obj;
-
- obj = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_data_auto ("master_pub",
- master_pub),
- GNUNET_JSON_pack_string ("exchange_url",
- exchange_url));
- GNUNET_break (0 ==
- json_array_append_new (list,
- obj));
-
-}
-
-
-/**
- * Handle a "/exchanges" request.
- *
- * @param rh context of the handler
- * @param connection the MHD connection to handle
- * @param[in,out] connection_cls the connection's closure (can be updated)
- * @param upload_data upload data
- * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @return MHD result code
- */
-MHD_RESULT
-TAH_EXCHANGES_handler (struct TAH_RequestHandler *rh,
- struct MHD_Connection *connection,
- void **connection_cls,
- const char *upload_data,
- size_t *upload_data_size)
-{
- json_t *ja;
- enum GNUNET_DB_QueryStatus qs;
-
- (void) rh;
- (void) connection_cls;
- (void) upload_data;
- (void) upload_data_size;
- if (GNUNET_SYSERR ==
- TAH_plugin->preflight (TAH_plugin->cls))
- {
- GNUNET_break (0);
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_INTERNAL_SERVER_ERROR,
- TALER_EC_GENERIC_DB_SETUP_FAILED,
- NULL);
- }
- ja = json_array ();
- GNUNET_break (NULL != ja);
- qs = TAH_plugin->list_exchanges (TAH_plugin->cls,
- &add_exchange,
- ja);
- if (0 > qs)
- {
- GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
- json_decref (ja);
- TALER_LOG_WARNING ("Failed to handle /exchanges in database\n");
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_INTERNAL_SERVER_ERROR,
- TALER_EC_GENERIC_DB_FETCH_FAILED,
- "exchanges");
- }
- return TALER_MHD_REPLY_JSON_PACK (
- connection,
- MHD_HTTP_OK,
- GNUNET_JSON_pack_array_steal ("exchanges",
- ja));
-}
-
-
-/* end of taler-auditor-httpd_exchanges.c */
diff --git a/src/auditor/taler-auditor-httpd_exchanges.h b/src/auditor/taler-auditor-httpd_exchanges.h
deleted file mode 100644
index c7d8dd5fd..000000000
--- a/src/auditor/taler-auditor-httpd_exchanges.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2018 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file taler-auditor-httpd_exchanges.h
- * @brief Handle /exchanges requests
- * @author Christian Grothoff
- */
-#ifndef TALER_AUDITOR_HTTPD_EXCHANGES_H
-#define TALER_AUDITOR_HTTPD_EXCHANGES_H
-
-#include <gnunet/gnunet_util_lib.h>
-#include <microhttpd.h>
-#include "taler-auditor-httpd.h"
-
-
-/**
- * Handle a "/exchanges" request.
- *
- * @param rh context of the handler
- * @param connection the MHD connection to handle
- * @param[in,out] connection_cls the connection's closure (can be updated)
- * @param upload_data upload data
- * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @return MHD result code
- */
-MHD_RESULT
-TAH_EXCHANGES_handler (struct TAH_RequestHandler *rh,
- struct MHD_Connection *connection,
- void **connection_cls,
- const char *upload_data,
- size_t *upload_data_size);
-
-#endif
diff --git a/src/auditor/taler-auditor-sync.c b/src/auditor/taler-auditor-sync.c
index 7641325c9..e4022d325 100644
--- a/src/auditor/taler-auditor-sync.c
+++ b/src/auditor/taler-auditor-sync.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2020 Taler Systems SA
+ Copyright (C) 2020-2022 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
@@ -92,9 +92,13 @@ static struct Table tables[] = {
{ .rt = TALER_EXCHANGEDB_RT_DENOMINATIONS},
{ .rt = TALER_EXCHANGEDB_RT_DENOMINATION_REVOCATIONS},
{ .rt = TALER_EXCHANGEDB_RT_WIRE_TARGETS},
+ { .rt = TALER_EXCHANGEDB_RT_LEGITIMIZATION_PROCESSES},
+ { .rt = TALER_EXCHANGEDB_RT_LEGITIMIZATION_REQUIREMENTS},
{ .rt = TALER_EXCHANGEDB_RT_RESERVES},
{ .rt = TALER_EXCHANGEDB_RT_RESERVES_IN},
{ .rt = TALER_EXCHANGEDB_RT_RESERVES_CLOSE},
+ { .rt = TALER_EXCHANGEDB_RT_RESERVES_OPEN_REQUESTS},
+ { .rt = TALER_EXCHANGEDB_RT_RESERVES_OPEN_DEPOSITS},
{ .rt = TALER_EXCHANGEDB_RT_RESERVES_OUT},
{ .rt = TALER_EXCHANGEDB_RT_AUDITORS},
{ .rt = TALER_EXCHANGEDB_RT_AUDITOR_DENOM_SIGS},
@@ -104,7 +108,8 @@ static struct Table tables[] = {
{ .rt = TALER_EXCHANGEDB_RT_REFRESH_COMMITMENTS},
{ .rt = TALER_EXCHANGEDB_RT_REFRESH_REVEALED_COINS},
{ .rt = TALER_EXCHANGEDB_RT_REFRESH_TRANSFER_KEYS},
- { .rt = TALER_EXCHANGEDB_RT_DEPOSITS},
+ { .rt = TALER_EXCHANGEDB_RT_BATCH_DEPOSITS},
+ { .rt = TALER_EXCHANGEDB_RT_COIN_DEPOSITS},
{ .rt = TALER_EXCHANGEDB_RT_REFUNDS},
{ .rt = TALER_EXCHANGEDB_RT_WIRE_OUT},
{ .rt = TALER_EXCHANGEDB_RT_AGGREGATION_TRACKING},
@@ -113,7 +118,20 @@ static struct Table tables[] = {
{ .rt = TALER_EXCHANGEDB_RT_RECOUP},
{ .rt = TALER_EXCHANGEDB_RT_RECOUP_REFRESH },
{ .rt = TALER_EXCHANGEDB_RT_EXTENSIONS},
- { .rt = TALER_EXCHANGEDB_RT_EXTENSION_DETAILS },
+ { .rt = TALER_EXCHANGEDB_RT_POLICY_DETAILS },
+ { .rt = TALER_EXCHANGEDB_RT_POLICY_FULFILLMENTS },
+ { .rt = TALER_EXCHANGEDB_RT_PURSE_REQUESTS},
+ { .rt = TALER_EXCHANGEDB_RT_PURSE_DECISION},
+ { .rt = TALER_EXCHANGEDB_RT_PURSE_MERGES},
+ { .rt = TALER_EXCHANGEDB_RT_PURSE_DEPOSITS},
+ { .rt = TALER_EXCHANGEDB_RT_ACCOUNT_MERGES},
+ { .rt = TALER_EXCHANGEDB_RT_HISTORY_REQUESTS},
+ { .rt = TALER_EXCHANGEDB_RT_CLOSE_REQUESTS},
+ { .rt = TALER_EXCHANGEDB_RT_WADS_OUT},
+ { .rt = TALER_EXCHANGEDB_RT_WADS_OUT_ENTRIES},
+ { .rt = TALER_EXCHANGEDB_RT_WADS_IN},
+ { .rt = TALER_EXCHANGEDB_RT_WADS_IN_ENTRIES},
+ { .rt = TALER_EXCHANGEDB_RT_PROFIT_DRAINS},
{ .end = true }
};
@@ -143,7 +161,7 @@ struct InsertContext
* @return #GNUNET_OK to continue to iterate,
* #GNUNET_SYSERR to fail with an error
*/
-static int
+static enum GNUNET_GenericReturnValue
do_insert (void *cls,
const struct TALER_EXCHANGEDB_TableData *td)
{
@@ -376,7 +394,7 @@ do_sync (void *cls)
* @param value actual value of the option (a string)
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
set_filename (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
void *scls,
const char *option,
@@ -588,6 +606,9 @@ main (int argc,
level,
NULL));
GNUNET_free (level);
+ /* suppress compiler warnings... */
+ GNUNET_assert (NULL != src_cfgfile);
+ GNUNET_assert (NULL != dst_cfgfile);
if (0 == strcmp (src_cfgfile,
dst_cfgfile))
{
diff --git a/src/auditor/taler-auditor.in b/src/auditor/taler-auditor.in
index c8ea6b0c9..ab3d8d202 100644
--- a/src/auditor/taler-auditor.in
+++ b/src/auditor/taler-auditor.in
@@ -11,6 +11,7 @@ Arguments mandatory for long options are also mandatory for short options.
-h, --help print this help
-i, --internal perform checks only applicable for
exchange-internal audits
+ -I, --ignore-not-found ignore problems with the exchange bank account not existing
-L, --log=LOGLEVEL configure logging to use LOGLEVEL
-l, --logfile=FILENAME configure logging to write logs to FILENAME
-m, --exchange-key=KEY public key of the exchange (Crockford base32
@@ -28,7 +29,7 @@ EOF
function optcheck {
-TEMP=`getopt -o c:hiL:l:m:T:v --long config:,help,internal,log:,logfile:exchange-key:,timetravel:,version -n 'taler-auditor' -- "$@"`
+TEMP=`getopt -o c:hiIL:l:m:T:v --long config:,help,internal,ignore-not-found,log:,logfile:exchange-key:,timetravel:,version -n 'taler-auditor' -- "$@"`
if [ $? != 0 ] ;
then
@@ -43,6 +44,7 @@ DEBUG=false
MEMORY=
DEBUGFILE=
JAVA_MISC_OPT=
+INF=
while true; do
case "$1" in
-c | --config ) shift 2 ;;
@@ -51,6 +53,7 @@ while true; do
exit 0
;;
-i | --internal ) shift ;;
+ -I | --ignore-not-found ) INF="-I"; shift ;;
-L | --log ) shift 2;;
-l | --logfile ) shift ;;
-m | --exchange-key ) shift 2 ;;
@@ -74,16 +77,23 @@ done
}
# End of function 'optcheck'
-
optcheck "$@"
+# Remove "-I" from $@ if present, store result in $ARGS.
+ARGS=("$@")
+ARGS=(${ARGS[@]/$INF})
-DIR=`mktemp -d reportXXXXXX`
-for n in aggregation coins deposits reserves wire
+DATE=`date +%F_%H:%M:%S`
+DIR="report_$DATE"
+mkdir $DIR
+for n in aggregation coins deposits purses reserves
do
- taler-helper-auditor-$n "$@" > ${DIR}/$n.json
+ taler-helper-auditor-$n ${ARGS[*]} > ${DIR}/$n.json
done
+taler-helper-auditor-wire $INF ${ARGS[*]} > ${DIR}/wire.json
+
+echo "Generating auditor report in ${DIR}."
taler-helper-auditor-render.py \
${DIR}/aggregation.json \
${DIR}/coins.json \
diff --git a/src/auditor/taler-helper-auditor-aggregation.c b/src/auditor/taler-helper-auditor-aggregation.c
index 20edb5f3d..a0f2a190f 100644
--- a/src/auditor/taler-helper-auditor-aggregation.c
+++ b/src/auditor/taler-helper-auditor-aggregation.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2016-2021 Taler Systems SA
+ Copyright (C) 2016-2024 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero Public License as published by the Free Software
@@ -34,17 +34,26 @@
static int global_ret;
/**
- * Checkpointing our progress for aggregations.
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
*/
-static struct TALER_AUDITORDB_ProgressPointAggregation ppa;
+static int test_mode;
/**
* Checkpointing our progress for aggregations.
*/
-static struct TALER_AUDITORDB_ProgressPointAggregation ppa_start;
+static TALER_ARL_DEF_PP (aggregation_last_wire_out_serial_id);
/**
- * Array of reports about row inconsitencies.
+ * Total aggregation fees (wire fees) earned.
+ */
+static TALER_ARL_DEF_AB (aggregation_total_wire_fee_revenue);
+
+
+/**
+ * Array of reports about row inconsistencies.
*/
static json_t *report_row_inconsistencies;
@@ -102,11 +111,6 @@ static struct TALER_Amount total_arithmetic_delta_plus;
static struct TALER_Amount total_arithmetic_delta_minus;
/**
- * Total aggregation fees earned.
- */
-static struct TALER_Amount total_aggregation_fee_income;
-
-/**
* Array of reports about coin operations with bad signatures.
*/
static json_t *report_bad_sig_losses;
@@ -398,9 +402,9 @@ check_transaction_history_for_deposit (
struct TALER_Amount expenditures;
struct TALER_Amount refunds;
struct TALER_Amount spent;
+ struct TALER_Amount *deposited = NULL;
struct TALER_Amount merchant_loss;
const struct TALER_Amount *deposit_fee;
- int refund_deposit_fee;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Checking transaction history of coin %s\n",
@@ -421,25 +425,34 @@ check_transaction_history_for_deposit (
to reconstruct the order of the events, so instead of subtracting we
compute positive (deposit, melt) and negative (refund) values separately
here, and then subtract the negative from the positive at the end (after
- the loops). *///
- refund_deposit_fee = GNUNET_NO;
+ the loops). */
deposit_fee = NULL;
for (const struct TALER_EXCHANGEDB_TransactionList *tl = tl_head;
NULL != tl;
tl = tl->next)
{
- const struct TALER_Amount *amount_with_fee;
const struct TALER_Amount *fee_claimed;
switch (tl->type)
{
case TALER_EXCHANGEDB_TT_DEPOSIT:
/* check wire and h_wire are consistent */
- amount_with_fee = &tl->details.deposit->amount_with_fee; /* according to exchange*/
+ if (NULL != deposited)
+ {
+ TALER_ARL_report (report_row_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("table",
+ "deposits"),
+ GNUNET_JSON_pack_uint64 ("row",
+ tl->serial_id),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "multiple deposits of the same coin into the same contract detected")));
+ }
+ deposited = &tl->details.deposit->amount_with_fee; /* according to exchange*/
fee_claimed = &tl->details.deposit->deposit_fee; /* Fee according to exchange DB */
TALER_ARL_amount_add (&expenditures,
&expenditures,
- amount_with_fee);
+ deposited);
/* Check if this deposit is within the remit of the aggregation
we are investigating, if so, include it in the totals. */
if ( (0 == GNUNET_memcmp (merchant_pub,
@@ -450,7 +463,7 @@ check_transaction_history_for_deposit (
struct TALER_Amount amount_without_fee;
TALER_ARL_amount_subtract (&amount_without_fee,
- amount_with_fee,
+ deposited,
fee_claimed);
TALER_ARL_amount_add (merchant_gain,
merchant_gain,
@@ -474,88 +487,155 @@ check_transaction_history_for_deposit (
}
break;
case TALER_EXCHANGEDB_TT_MELT:
- amount_with_fee = &tl->details.melt->amount_with_fee;
- fee_claimed = &tl->details.melt->melt_fee;
- TALER_ARL_amount_add (&expenditures,
- &expenditures,
- amount_with_fee);
- /* Check that the fees given in the transaction list and in dki match */
- if (0 !=
- TALER_amount_cmp (&issue->fees.refresh,
- fee_claimed))
{
- /* Disagreement in fee structure between exchange and auditor */
- report_amount_arithmetic_inconsistency ("melt fee",
- 0,
- fee_claimed,
- &issue->fees.refresh,
- 1);
+ const struct TALER_Amount *amount_with_fee;
+
+ amount_with_fee = &tl->details.melt->amount_with_fee;
+ fee_claimed = &tl->details.melt->melt_fee;
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ amount_with_fee);
+ /* Check that the fees given in the transaction list and in dki match */
+ if (0 !=
+ TALER_amount_cmp (&issue->fees.refresh,
+ fee_claimed))
+ {
+ /* Disagreement in fee structure between exchange and auditor */
+ report_amount_arithmetic_inconsistency ("melt fee",
+ 0,
+ fee_claimed,
+ &issue->fees.refresh,
+ 1);
+ }
+ break;
}
- break;
case TALER_EXCHANGEDB_TT_REFUND:
- amount_with_fee = &tl->details.refund->refund_amount;
- fee_claimed = &tl->details.refund->refund_fee;
- TALER_ARL_amount_add (&refunds,
- &refunds,
- amount_with_fee);
- TALER_ARL_amount_add (&expenditures,
- &expenditures,
- fee_claimed);
- /* Check if this refund is within the remit of the aggregation
- we are investigating, if so, include it in the totals. */
- if ( (0 == GNUNET_memcmp (merchant_pub,
- &tl->details.refund->merchant_pub)) &&
- (0 == GNUNET_memcmp (h_contract_terms,
- &tl->details.refund->h_contract_terms)) )
{
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Detected applicable refund of %s\n",
- TALER_amount2s (amount_with_fee));
- TALER_ARL_amount_add (&merchant_loss,
- &merchant_loss,
+ const struct TALER_Amount *amount_with_fee;
+
+ amount_with_fee = &tl->details.refund->refund_amount;
+ fee_claimed = &tl->details.refund->refund_fee;
+ TALER_ARL_amount_add (&refunds,
+ &refunds,
amount_with_fee);
- /* If there is a refund, we give back the deposit fee */
- refund_deposit_fee = GNUNET_YES;
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ fee_claimed);
+ /* Check if this refund is within the remit of the aggregation
+ we are investigating, if so, include it in the totals. */
+ if ( (0 == GNUNET_memcmp (merchant_pub,
+ &tl->details.refund->merchant_pub)) &&
+ (0 == GNUNET_memcmp (h_contract_terms,
+ &tl->details.refund->h_contract_terms)) )
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Detected applicable refund of %s\n",
+ TALER_amount2s (amount_with_fee));
+ TALER_ARL_amount_add (&merchant_loss,
+ &merchant_loss,
+ amount_with_fee);
+ }
+ /* Check that the fees given in the transaction list and in dki match */
+ if (0 !=
+ TALER_amount_cmp (&issue->fees.refund,
+ fee_claimed))
+ {
+ /* Disagreement in fee structure between exchange and auditor! */
+ report_amount_arithmetic_inconsistency ("refund fee",
+ 0,
+ fee_claimed,
+ &issue->fees.refund,
+ 1);
+ }
+ break;
}
- /* Check that the fees given in the transaction list and in dki match */
- if (0 !=
- TALER_amount_cmp (&issue->fees.refund,
- fee_claimed))
+ case TALER_EXCHANGEDB_TT_OLD_COIN_RECOUP:
{
- /* Disagreement in fee structure between exchange and auditor! */
- report_amount_arithmetic_inconsistency ("refund fee",
- 0,
- fee_claimed,
- &issue->fees.refund,
- 1);
+ const struct TALER_Amount *amount_with_fee;
+
+ amount_with_fee = &tl->details.old_coin_recoup->value;
+ /* We count recoups of refreshed coins like refunds for the dirty old
+ coin, as they equivalently _increase_ the remaining value on the
+ _old_ coin */
+ TALER_ARL_amount_add (&refunds,
+ &refunds,
+ amount_with_fee);
+ break;
}
- break;
- case TALER_EXCHANGEDB_TT_OLD_COIN_RECOUP:
- amount_with_fee = &tl->details.old_coin_recoup->value;
- /* We count recoups of refreshed coins like refunds for the dirty old
- coin, as they equivalently _increase_ the remaining value on the
- _old_ coin */
- TALER_ARL_amount_add (&refunds,
- &refunds,
- amount_with_fee);
- break;
case TALER_EXCHANGEDB_TT_RECOUP:
- /* We count recoups of the coin as expenditures, as it
- equivalently decreases the remaining value of the recouped coin. */
- amount_with_fee = &tl->details.recoup->value;
- TALER_ARL_amount_add (&expenditures,
- &expenditures,
- amount_with_fee);
- break;
+ {
+ const struct TALER_Amount *amount_with_fee;
+
+ /* We count recoups of the coin as expenditures, as it
+ equivalently decreases the remaining value of the recouped coin. */
+ amount_with_fee = &tl->details.recoup->value;
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ amount_with_fee);
+ break;
+ }
case TALER_EXCHANGEDB_TT_RECOUP_REFRESH:
- /* We count recoups of the coin as expenditures, as it
- equivalently decreases the remaining value of the recouped coin. */
- amount_with_fee = &tl->details.recoup_refresh->value;
- TALER_ARL_amount_add (&expenditures,
- &expenditures,
- amount_with_fee);
- break;
- }
+ {
+ const struct TALER_Amount *amount_with_fee;
+
+ /* We count recoups of the coin as expenditures, as it
+ equivalently decreases the remaining value of the recouped coin. */
+ amount_with_fee = &tl->details.recoup_refresh->value;
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ amount_with_fee);
+ break;
+ }
+ case TALER_EXCHANGEDB_TT_PURSE_DEPOSIT:
+ {
+ const struct TALER_Amount *amount_with_fee;
+
+ amount_with_fee = &tl->details.purse_deposit->amount;
+ if (! tl->details.purse_deposit->refunded)
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ amount_with_fee);
+ break;
+ }
+
+ case TALER_EXCHANGEDB_TT_PURSE_REFUND:
+ {
+ const struct TALER_Amount *amount_with_fee;
+
+ amount_with_fee = &tl->details.purse_refund->refund_amount;
+ fee_claimed = &tl->details.purse_refund->refund_fee;
+ TALER_ARL_amount_add (&refunds,
+ &refunds,
+ amount_with_fee);
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ fee_claimed);
+ /* Check that the fees given in the transaction list and in dki match */
+ if (0 !=
+ TALER_amount_cmp (&issue->fees.refund,
+ fee_claimed))
+ {
+ /* Disagreement in fee structure between exchange and auditor! */
+ report_amount_arithmetic_inconsistency ("refund fee",
+ 0,
+ fee_claimed,
+ &issue->fees.refund,
+ 1);
+ }
+ break;
+ }
+
+ case TALER_EXCHANGEDB_TT_RESERVE_OPEN:
+ {
+ const struct TALER_Amount *amount_with_fee;
+
+ amount_with_fee = &tl->details.reserve_open->coin_contribution;
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ amount_with_fee);
+ break;
+ }
+ } /* switch (tl->type) */
} /* for 'tl' */
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -565,11 +645,15 @@ check_transaction_history_for_deposit (
"Aggregation loss due to refunds is %s\n",
TALER_amount2s (&merchant_loss));
*deposit_gain = *merchant_gain;
- if ( (GNUNET_YES == refund_deposit_fee) &&
- (NULL != deposit_fee) )
+ if ( (NULL != deposited) &&
+ (NULL != deposit_fee) &&
+ (0 == TALER_amount_cmp (&refunds,
+ deposited)) )
{
- /* We had a /deposit operation AND a /refund operation,
- and should thus not charge the merchant the /deposit fee */
+ /* We had a /deposit operation AND /refund operations adding up to the
+ total deposited value including deposit fee. Thus, we should not
+ subtract the /deposit fee from the merchant gain (as it was also
+ refunded). */
TALER_ARL_amount_add (merchant_gain,
merchant_gain,
deposit_fee);
@@ -687,6 +771,7 @@ wire_transfer_information_cb (
struct TALER_CoinPublicInfo coin;
enum GNUNET_DB_QueryStatus qs;
struct TALER_PaytoHashP hpt;
+ uint64_t etag_out;
TALER_payto_hash (account_pay_uri,
&hpt);
@@ -699,10 +784,23 @@ wire_transfer_information_cb (
"h-payto does not match payto URI");
}
/* Obtain coin's transaction history */
- qs = TALER_ARL_edb->get_coin_transactions (TALER_ARL_edb->cls,
- coin_pub,
- GNUNET_YES,
- &tl);
+ /* TODO: could use 'start' mechanism to only fetch transactions
+ we did not yet process, instead of going over them
+ again and again.*/
+
+ {
+ struct TALER_Amount balance;
+ struct TALER_DenominationHashP h_denom_pub;
+
+ qs = TALER_ARL_edb->get_coin_transactions (TALER_ARL_edb->cls,
+ coin_pub,
+ 0,
+ 0,
+ &etag_out,
+ &balance,
+ &h_denom_pub,
+ &tl);
+ }
if ( (qs < 0) ||
(NULL == tl) )
{
@@ -1001,8 +1099,9 @@ check_wire_out_cb (void *cls,
char *method;
/* should be monotonically increasing */
- GNUNET_assert (rowid >= ppa.last_wire_out_serial_id);
- ppa.last_wire_out_serial_id = rowid + 1;
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (aggregation_last_wire_out_serial_id));
+ TALER_ARL_USE_PP (aggregation_last_wire_out_serial_id) = rowid + 1;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Checking wire transfer %s over %s performed on %s\n",
@@ -1089,8 +1188,8 @@ check_wire_out_cb (void *cls,
&wcc.total_deposits,
&final_amount);
/* Sum up aggregation fees (we simply include the rounding gains) */
- TALER_ARL_amount_add (&total_aggregation_fee_income,
- &total_aggregation_fee_income,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (aggregation_total_wire_fee_revenue),
+ &TALER_ARL_USE_AB (aggregation_total_wire_fee_revenue),
&exchange_gain);
/* Check that calculated amount matches actual amount */
@@ -1162,9 +1261,10 @@ analyze_aggregations (void *cls)
(void) cls;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Analyzing aggregations\n");
- qsp = TALER_ARL_adb->get_auditor_progress_aggregation (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppa);
+ qsp = TALER_ARL_adb->get_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_PP (aggregation_last_wire_out_serial_id),
+ NULL);
if (0 > qsp)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsp);
@@ -1177,18 +1277,19 @@ analyze_aggregations (void *cls)
}
else
{
- ppa_start = ppa;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Resuming aggregation audit at %llu\n",
- (unsigned long long) ppa.last_wire_out_serial_id);
+ (unsigned long long) TALER_ARL_USE_PP (
+ aggregation_last_wire_out_serial_id));
}
memset (&ac,
0,
sizeof (ac));
- qsx = TALER_ARL_adb->get_wire_fee_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_aggregation_fee_income);
+ qsx = TALER_ARL_adb->get_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_AB (aggregation_total_wire_fee_revenue),
+ NULL);
if (0 > qsx)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsx);
@@ -1197,7 +1298,7 @@ analyze_aggregations (void *cls)
ac.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
qs = TALER_ARL_edb->select_wire_out_above_serial_id (
TALER_ARL_edb->cls,
- ppa.last_wire_out_serial_id,
+ TALER_ARL_USE_PP (aggregation_last_wire_out_serial_id),
&check_wire_out_cb,
&ac);
if (0 > qs)
@@ -1223,30 +1324,30 @@ analyze_aggregations (void *cls)
return ac.qs;
}
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qsx)
- ac.qs = TALER_ARL_adb->insert_wire_fee_summary (
+ ac.qs = TALER_ARL_adb->insert_balance (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_aggregation_fee_income);
+ TALER_ARL_SET_AB (aggregation_total_wire_fee_revenue),
+ NULL);
else
- ac.qs = TALER_ARL_adb->update_wire_fee_summary (
+ ac.qs = TALER_ARL_adb->update_balance (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_aggregation_fee_income);
+ TALER_ARL_SET_AB (aggregation_total_wire_fee_revenue),
+ NULL);
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != ac.qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == ac.qs);
return ac.qs;
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsp)
- qs = TALER_ARL_adb->update_auditor_progress_aggregation (
+ qs = TALER_ARL_adb->update_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppa);
+ TALER_ARL_SET_PP (aggregation_last_wire_out_serial_id),
+ NULL);
else
- qs = TALER_ARL_adb->insert_auditor_progress_aggregation (
+ qs = TALER_ARL_adb->insert_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppa);
+ TALER_ARL_SET_PP (aggregation_last_wire_out_serial_id),
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -1256,7 +1357,8 @@ analyze_aggregations (void *cls)
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Concluded aggregation audit step at %llu\n",
- (unsigned long long) ppa.last_wire_out_serial_id);
+ (unsigned long long) TALER_ARL_USE_PP (
+ aggregation_last_wire_out_serial_id));
return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
}
@@ -1291,7 +1393,8 @@ run (void *cls,
"Starting audit\n");
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_aggregation_fee_income));
+ &TALER_ARL_USE_AB (
+ aggregation_total_wire_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
&total_wire_out_delta_plus));
@@ -1385,14 +1488,14 @@ run (void *cls,
"total_arithmetic_delta_minus",
&total_arithmetic_delta_minus),
TALER_JSON_pack_amount (
- "total_aggregation_fee_income",
- &total_aggregation_fee_income),
+ "aggregation_total_wire_fee_revenue",
+ &TALER_ARL_USE_AB (aggregation_total_wire_fee_revenue)),
GNUNET_JSON_pack_uint64 (
"start_ppa_wire_out_serial_id",
- ppa_start.last_wire_out_serial_id),
+ 0 /* defunct */),
GNUNET_JSON_pack_uint64 (
"end_ppa_wire_out_serial_id",
- ppa.last_wire_out_serial_id),
+ TALER_ARL_USE_PP (aggregation_last_wire_out_serial_id)),
/* block #4 */
TALER_JSON_pack_time_abs_human (
"auditor_start_time",
@@ -1422,11 +1525,10 @@ main (int argc,
"internal",
"perform checks only applicable for exchange-internal audits",
&internal_checks),
- GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &TALER_ARL_master_pub),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
diff --git a/src/auditor/taler-helper-auditor-coins.c b/src/auditor/taler-helper-auditor-coins.c
index ad9048a17..f88f39eaf 100644
--- a/src/auditor/taler-helper-auditor-coins.c
+++ b/src/auditor/taler-helper-auditor-coins.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2016-2021 Taler Systems SA
+ Copyright (C) 2016-2024 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero Public License as published by the Free Software
@@ -17,9 +17,6 @@
* @file auditor/taler-helper-auditor-coins.c
* @brief audits coins in an exchange database.
* @author Christian Grothoff
- *
- * UNDECIDED:
- * - do we care about checking the 'done' flag in deposit_cb?
*/
#include "platform.h"
#include <gnunet/gnunet_util_lib.h>
@@ -48,14 +45,37 @@
static int global_ret;
/**
- * Checkpointing our progress for coins.
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
*/
-static struct TALER_AUDITORDB_ProgressPointCoin ppc;
+static int test_mode;
/**
* Checkpointing our progress for coins.
*/
-static struct TALER_AUDITORDB_ProgressPointCoin ppc_start;
+static TALER_ARL_DEF_PP (coins_withdraw_serial_id);
+static TALER_ARL_DEF_PP (coins_deposit_serial_id);
+static TALER_ARL_DEF_PP (coins_melt_serial_id);
+static TALER_ARL_DEF_PP (coins_refund_serial_id);
+static TALER_ARL_DEF_PP (coins_recoup_serial_id);
+static TALER_ARL_DEF_PP (coins_recoup_refresh_serial_id);
+static TALER_ARL_DEF_PP (coins_purse_deposits_serial_id);
+static TALER_ARL_DEF_PP (coins_purse_refunds_serial_id);
+
+
+/**
+ * Global coin balance sheet (for coins).
+ */
+static TALER_ARL_DEF_AB (coin_balance_risk);
+static TALER_ARL_DEF_AB (total_escrowed);
+static TALER_ARL_DEF_AB (coin_irregular_loss);
+static TALER_ARL_DEF_AB (coin_melt_fee_revenue);
+static TALER_ARL_DEF_AB (coin_deposit_fee_revenue);
+static TALER_ARL_DEF_AB (coin_refund_fee_revenue);
+static TALER_ARL_DEF_AB (total_recoup_loss);
+
/**
* Array of reports about denomination keys with an
@@ -70,7 +90,7 @@ static json_t *report_emergencies;
static json_t *report_emergencies_by_count;
/**
- * Array of reports about row inconsitencies.
+ * Array of reports about row inconsistencies.
*/
static json_t *report_row_inconsistencies;
@@ -115,40 +135,6 @@ static struct TALER_Amount reported_emergency_loss;
*/
static struct TALER_Amount reported_emergency_loss_by_count;
-/**
- * Expected balance in the escrow account.
- */
-static struct TALER_Amount total_escrow_balance;
-
-/**
- * Active risk exposure.
- */
-static struct TALER_Amount total_risk;
-
-/**
- * Actualized risk (= loss) from recoups.
- */
-static struct TALER_Amount total_recoup_loss;
-
-/**
- * Recoups we made on denominations that were not revoked (!?).
- */
-static struct TALER_Amount total_irregular_recoups;
-
-/**
- * Total deposit fees earned.
- */
-static struct TALER_Amount total_deposit_fee_income;
-
-/**
- * Total melt fees earned.
- */
-static struct TALER_Amount total_melt_fee_income;
-
-/**
- * Total refund fees earned.
- */
-static struct TALER_Amount total_refund_fee_income;
/**
* Array of reports about coin operations with bad signatures.
@@ -156,15 +142,10 @@ static struct TALER_Amount total_refund_fee_income;
static json_t *report_bad_sig_losses;
/**
- * Total amount lost by operations for which signatures were invalid.
- */
-static struct TALER_Amount total_bad_sig_loss;
-
-/**
* Array of refresh transactions where the /refresh/reveal has not yet
* happened (and may of course never happen).
*/
-static json_t *report_refreshs_hanging;
+static json_t *report_refreshes_hanging;
/**
* Total amount lost by operations for which signatures were invalid.
@@ -210,9 +191,9 @@ coin_history_index (const struct TALER_CoinSpendPublicKeyP *coin_pub)
{
uint32_t i;
- memcpy (&i,
- coin_pub,
- sizeof (i));
+ GNUNET_memcpy (&i,
+ coin_pub,
+ sizeof (i));
return i % MAX_COIN_HISTORIES;
}
@@ -248,8 +229,9 @@ get_cached_history (const struct TALER_CoinSpendPublicKeyP *coin_pub)
{
unsigned int i = coin_history_index (coin_pub);
- if (0 == GNUNET_memcmp (coin_pub,
- &coin_histories[i].coin_pub))
+ if (0 ==
+ GNUNET_memcmp (coin_pub,
+ &coin_histories[i].coin_pub))
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Found verification of %s in cache\n",
@@ -471,15 +453,27 @@ check_coin_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
struct TALER_Amount spent;
struct TALER_Amount refunded;
struct TALER_Amount deposit_fee;
- int have_refund;
+ bool have_refund;
+ uint64_t etag_out;
- qs = TALER_ARL_edb->get_coin_transactions (TALER_ARL_edb->cls,
- coin_pub,
- GNUNET_YES,
- &tl);
+ /* TODO: could use 'etag' mechanism to only fetch transactions
+ we did not yet process, instead of going over them
+ again and again. */
+ {
+ struct TALER_Amount balance;
+ struct TALER_DenominationHashP h_denom_pub;
+
+ qs = TALER_ARL_edb->get_coin_transactions (TALER_ARL_edb->cls,
+ coin_pub,
+ 0,
+ 0,
+ &etag_out,
+ &balance,
+ &h_denom_pub,
+ &tl);
+ }
if (0 >= qs)
return qs;
-
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (value->currency,
&refunded));
@@ -489,7 +483,7 @@ check_coin_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (value->currency,
&deposit_fee));
- have_refund = GNUNET_NO;
+ have_refund = false;
for (struct TALER_EXCHANGEDB_TransactionList *pos = tl;
NULL != pos;
pos = pos->next)
@@ -517,7 +511,7 @@ check_coin_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
TALER_ARL_amount_add (&spent,
&spent,
&pos->details.refund->refund_fee);
- have_refund = GNUNET_YES;
+ have_refund = true;
break;
case TALER_EXCHANGEDB_TT_OLD_COIN_RECOUP:
/* refunded += pos->value */
@@ -537,8 +531,28 @@ check_coin_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
&spent,
&pos->details.recoup_refresh->value);
break;
- }
- }
+ case TALER_EXCHANGEDB_TT_PURSE_DEPOSIT:
+ /* spent += pos->value */
+ TALER_ARL_amount_add (&spent,
+ &spent,
+ &pos->details.purse_deposit->amount);
+ break;
+ case TALER_EXCHANGEDB_TT_PURSE_REFUND:
+ TALER_ARL_amount_add (&refunded,
+ &refunded,
+ &tl->details.purse_refund->refund_amount);
+ TALER_ARL_amount_add (&spent,
+ &spent,
+ &pos->details.purse_refund->refund_fee);
+ have_refund = true;
+ break;
+ case TALER_EXCHANGEDB_TT_RESERVE_OPEN:
+ TALER_ARL_amount_add (&spent,
+ &spent,
+ &tl->details.reserve_open->coin_contribution);
+ break;
+ } /* switch (pos->type) */
+ } /* for (...) */
if (have_refund)
{
@@ -589,33 +603,9 @@ check_coin_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
struct DenominationSummary
{
/**
- * Total value of outstanding (not deposited) coins issued with this
- * denomination key.
+ * Information about the circulation.
*/
- struct TALER_Amount denom_balance;
-
- /**
- * Total losses made (once coins deposited exceed
- * coins withdrawn and thus the @e denom_balance is
- * effectively negative).
- */
- struct TALER_Amount denom_loss;
-
- /**
- * Total value of coins issued with this denomination key.
- */
- struct TALER_Amount denom_risk;
-
- /**
- * Total value of coins subjected to recoup with this denomination key.
- */
- struct TALER_Amount denom_recoup;
-
- /**
- * How many coins (not their amount!) of this denomination
- * did the exchange issue overall?
- */
- uint64_t num_issued;
+ struct TALER_AUDITORDB_DenominationCirculationData dcd;
/**
* Denomination key information for this denomination.
@@ -623,22 +613,22 @@ struct DenominationSummary
const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
/**
- * #GNUNET_YES if this record already existed in the DB.
+ * True if this record already existed in the DB.
* Used to decide between insert/update in
* #sync_denomination().
*/
- int in_db;
+ bool in_db;
/**
* Should we report an emergency for this denomination, causing it to be
* revoked (because more coins were deposited than issued)?
*/
- int report_emergency;
+ bool report_emergency;
/**
- * #GNUNET_YES if this denomination was revoked.
+ * True if this denomination was revoked.
*/
- int was_revoked;
+ bool was_revoked;
};
@@ -678,11 +668,7 @@ init_denomination (const struct TALER_DenominationHashP *denom_hash,
qs = TALER_ARL_adb->get_denomination_balance (TALER_ARL_adb->cls,
denom_hash,
- &ds->denom_balance,
- &ds->denom_loss,
- &ds->denom_risk,
- &ds->denom_recoup,
- &ds->num_issued);
+ &ds->dcd);
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -690,28 +676,28 @@ init_denomination (const struct TALER_DenominationHashP *denom_hash,
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
{
- ds->in_db = GNUNET_YES;
+ ds->in_db = true;
}
else
{
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &ds->denom_balance));
+ &ds->dcd.denom_balance));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &ds->denom_loss));
+ &ds->dcd.denom_loss));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &ds->denom_risk));
+ &ds->dcd.denom_risk));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &ds->denom_recoup));
+ &ds->dcd.recoup_loss));
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Starting balance for denomination `%s' is %s (%llu)\n",
GNUNET_h2s (&denom_hash->hash),
- TALER_amount2s (&ds->denom_balance),
- (unsigned long long) ds->num_issued);
+ TALER_amount2s (&ds->dcd.denom_balance),
+ (unsigned long long) ds->dcd.num_issued);
qs = TALER_ARL_edb->get_denomination_revocation (TALER_ARL_edb->cls,
denom_hash,
&msig,
@@ -736,10 +722,10 @@ init_denomination (const struct TALER_DenominationHashP *denom_hash,
}
else
{
- ds->was_revoked = GNUNET_YES;
+ ds->was_revoked = true;
}
}
- return (GNUNET_YES == ds->in_db)
+ return ds->in_db
? GNUNET_DB_STATUS_SUCCESS_ONE_RESULT
: GNUNET_DB_STATUS_SUCCESS_NO_RESULTS;
}
@@ -754,10 +740,10 @@ init_denomination (const struct TALER_DenominationHashP *denom_hash,
* @return NULL on error
*/
static struct DenominationSummary *
-get_denomination_summary (struct CoinContext *cc,
- const struct
- TALER_EXCHANGEDB_DenominationKeyInformation *issue,
- const struct TALER_DenominationHashP *dh)
+get_denomination_summary (
+ struct CoinContext *cc,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue,
+ const struct TALER_DenominationHashP *dh)
{
struct DenominationSummary *ds;
@@ -826,38 +812,35 @@ sync_denomination (void *cls,
else
qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
if ( (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs) &&
- ( (0 != ds->denom_risk.value) ||
- (0 != ds->denom_risk.fraction) ) )
+ (! TALER_amount_is_zero (&ds->dcd.denom_risk)) )
{
/* The denomination expired and carried a balance; we can now
book the remaining balance as profit, and reduce our risk
exposure by the accumulated risk of the denomination. */
- TALER_ARL_amount_subtract (&total_risk,
- &total_risk,
- &ds->denom_risk);
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
+ &ds->dcd.denom_risk);
/* If the above fails, our risk assessment is inconsistent!
This is really, really bad (auditor-internal invariant
would be violated). Hence we can "safely" assert. If
this assertion fails, well, good luck: there is a bug
- in the auditor _or_ the auditor's database is corrupt. *///
+ in the auditor _or_ the auditor's database is corrupt. */
}
if ( (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs) &&
- ( (0 != ds->denom_balance.value) ||
- (0 != ds->denom_balance.fraction) ) )
+ (! TALER_amount_is_zero (&ds->dcd.denom_balance)) )
{
/* book denom_balance coin expiration profits! */
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Denomination `%s' expired, booking %s in expiration profits\n",
GNUNET_h2s (denom_hash),
- TALER_amount2s (&ds->denom_balance));
+ TALER_amount2s (&ds->dcd.denom_balance));
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
(qs = TALER_ARL_adb->insert_historic_denom_revenue (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
&denom_h,
expire_deposit,
- &ds->denom_balance,
- &ds->denom_recoup)))
+ &ds->dcd.denom_balance,
+ &ds->dcd.recoup_loss)))
{
/* Failed to store profits? Bad database */
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -874,8 +857,8 @@ sync_denomination (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Final balance for denomination `%s' is %s (%llu)\n",
GNUNET_h2s (denom_hash),
- TALER_amount2s (&ds->denom_balance),
- (unsigned long long) ds->num_issued);
+ TALER_amount2s (&ds->dcd.denom_balance),
+ (unsigned long long) ds->dcd.num_issued);
cnt = TALER_ARL_edb->count_known_coins (TALER_ARL_edb->cls,
&denom_h);
if (0 > cnt)
@@ -887,39 +870,31 @@ sync_denomination (void *cls,
}
else
{
- if (ds->num_issued < (uint64_t) cnt)
+ if (ds->dcd.num_issued < (uint64_t) cnt)
{
/* more coins deposited than issued! very bad */
report_emergency_by_count (issue,
- ds->num_issued,
+ ds->dcd.num_issued,
cnt,
- &ds->denom_risk);
+ &ds->dcd.denom_risk);
}
- if (GNUNET_YES == ds->report_emergency)
+ if (ds->report_emergency)
{
/* Value of coins deposited exceed value of coins
issued! Also very bad! */
report_emergency_by_amount (issue,
- &ds->denom_risk,
- &ds->denom_loss);
+ &ds->dcd.denom_risk,
+ &ds->dcd.denom_loss);
}
if (ds->in_db)
qs = TALER_ARL_adb->update_denomination_balance (TALER_ARL_adb->cls,
&denom_h,
- &ds->denom_balance,
- &ds->denom_loss,
- &ds->denom_risk,
- &ds->denom_recoup,
- ds->num_issued);
+ &ds->dcd);
else
qs = TALER_ARL_adb->insert_denomination_balance (TALER_ARL_adb->cls,
&denom_h,
- &ds->denom_balance,
- &ds->denom_loss,
- &ds->denom_risk,
- &ds->denom_recoup,
- ds->num_issued);
+ &ds->dcd);
}
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
@@ -981,8 +956,9 @@ withdraw_cb (void *cls,
(void) execution_date;
(void) amount_with_fee;
- GNUNET_assert (rowid >= ppc.last_withdraw_serial_id); /* should be monotonically increasing */
- ppc.last_withdraw_serial_id = rowid + 1;
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (coins_withdraw_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_withdraw_serial_id) = rowid + 1;
qs = TALER_ARL_get_denomination_info (denom_pub,
&issue,
@@ -1016,22 +992,22 @@ withdraw_cb (void *cls,
"Issued coin in denomination `%s' of total value %s\n",
GNUNET_h2s (&dh.hash),
TALER_amount2s (&issue->value));
- ds->num_issued++;
- TALER_ARL_amount_add (&ds->denom_balance,
- &ds->denom_balance,
- &issue->value);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"New balance of denomination `%s' is %s\n",
GNUNET_h2s (&dh.hash),
- TALER_amount2s (&ds->denom_balance));
- TALER_ARL_amount_add (&total_escrow_balance,
- &total_escrow_balance,
+ TALER_amount2s (&ds->dcd.denom_balance));
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_escrowed),
+ &TALER_ARL_USE_AB (total_escrowed),
&issue->value);
- TALER_ARL_amount_add (&total_risk,
- &total_risk,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
&issue->value);
- TALER_ARL_amount_add (&ds->denom_risk,
- &ds->denom_risk,
+ ds->dcd.num_issued++;
+ TALER_ARL_amount_add (&ds->dcd.denom_balance,
+ &ds->dcd.denom_balance,
+ &issue->value);
+ TALER_ARL_amount_add (&ds->dcd.denom_risk,
+ &ds->dcd.denom_risk,
&issue->value);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
@@ -1134,13 +1110,13 @@ reveal_data_cb (void *cls,
* #GNUNET_DB_STATUS_SUCCESS_ONE_RESULT
*/
static enum GNUNET_DB_QueryStatus
-check_known_coin (const char *operation,
- const struct
- TALER_EXCHANGEDB_DenominationKeyInformation *issue,
- uint64_t rowid,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_Amount *loss_potential)
+check_known_coin (
+ const char *operation,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue,
+ uint64_t rowid,
+ const struct TALER_CoinSpendPublicKeyP *coin_pub,
+ const struct TALER_DenominationPublicKey *denom_pub,
+ const struct TALER_Amount *loss_potential)
{
struct TALER_CoinPublicInfo ci;
enum GNUNET_DB_QueryStatus qs;
@@ -1185,8 +1161,8 @@ check_known_coin (const char *operation,
loss_potential),
GNUNET_JSON_pack_data_auto ("coin_pub",
coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
loss_potential);
}
TALER_denom_sig_free (&ci.denom_sig);
@@ -1195,6 +1171,65 @@ check_known_coin (const char *operation,
/**
+ * Update the denom balance in @a dso reducing it by
+ * @a amount_with_fee. If this is not possible, report
+ * an emergency. Also updates the balance.
+ *
+ * @param dso denomination summary to update
+ * @param rowid responsible row (for logging)
+ * @param amount_with_fee amount to subtract
+ */
+static void
+reduce_denom_balance (struct DenominationSummary *dso,
+ uint64_t rowid,
+ const struct TALER_Amount *amount_with_fee)
+{
+ struct TALER_Amount tmp;
+
+ if (TALER_ARL_SR_INVALID_NEGATIVE ==
+ TALER_ARL_amount_subtract_neg (&tmp,
+ &dso->dcd.denom_balance,
+ amount_with_fee))
+ {
+ TALER_ARL_amount_add (&dso->dcd.denom_loss,
+ &dso->dcd.denom_loss,
+ amount_with_fee);
+ dso->report_emergency = true;
+ }
+ else
+ {
+ dso->dcd.denom_balance = tmp;
+ }
+ if (-1 == TALER_amount_cmp (&TALER_ARL_USE_AB (total_escrowed),
+ amount_with_fee))
+ {
+ /* This can theoretically happen if for example the exchange
+ never issued any coins (i.e. escrow balance is zero), but
+ accepted a forged coin (i.e. emergency situation after
+ private key compromise). In that case, we cannot even
+ subtract the profit we make from the fee from the escrow
+ balance. Tested as part of test-auditor.sh, case #18 */
+ report_amount_arithmetic_inconsistency (
+ "subtracting amount from escrow balance",
+ rowid,
+ &TALER_ARL_USE_AB (total_escrowed),
+ amount_with_fee,
+ 0);
+ }
+ else
+ {
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (total_escrowed),
+ &TALER_ARL_USE_AB (total_escrowed),
+ amount_with_fee);
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "New balance of denomination `%s' is %s\n",
+ GNUNET_h2s (&dso->issue->denom_hash.hash),
+ TALER_amount2s (&dso->dcd.denom_balance));
+}
+
+
+/**
* Function called with details about coins that were melted, with the
* goal of auditing the refresh's execution. Verifies the signature
* and updates our information about coins outstanding (the old coin's
@@ -1204,6 +1239,7 @@ check_known_coin (const char *operation,
* @param cls closure
* @param rowid unique serial ID for the refresh session in our DB
* @param denom_pub denomination public key of @a coin_pub
+ * @param h_age_commitment hash of the age commitment for the coin
* @param coin_pub public key of the coin
* @param coin_sig signature from the coin
* @param amount_with_fee amount that was deposited including fee
@@ -1211,7 +1247,7 @@ check_known_coin (const char *operation,
* @param rc what is the refresh commitment
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
refresh_session_cb (void *cls,
uint64_t rowid,
const struct TALER_DenominationPublicKey *denom_pub,
@@ -1226,12 +1262,12 @@ refresh_session_cb (void *cls,
const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
struct DenominationSummary *dso;
struct TALER_Amount amount_without_fee;
- struct TALER_Amount tmp;
enum GNUNET_DB_QueryStatus qs;
(void) noreveal_index;
- GNUNET_assert (rowid >= ppc.last_melt_serial_id); /* should be monotonically increasing */
- ppc.last_melt_serial_id = rowid + 1;
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (coins_melt_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_melt_serial_id) = rowid + 1;
qs = TALER_ARL_get_denomination_info (denom_pub,
&issue,
@@ -1279,6 +1315,7 @@ refresh_session_cb (void *cls,
coin_pub,
coin_sig))
{
+ GNUNET_break_op (0);
TALER_ARL_report (report_bad_sig_losses,
GNUNET_JSON_PACK (
GNUNET_JSON_pack_string ("operation",
@@ -1289,8 +1326,8 @@ refresh_session_cb (void *cls,
amount_with_fee),
GNUNET_JSON_pack_data_auto ("coin_pub",
coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
amount_with_fee);
}
}
@@ -1323,7 +1360,7 @@ refresh_session_cb (void *cls,
/* This can legitimately happen if reveal was not yet called or only
with invalid data, even if the exchange is correctly operating. We
still report it. */
- TALER_ARL_report (report_refreshs_hanging,
+ TALER_ARL_report (report_refreshes_hanging,
GNUNET_JSON_PACK (
GNUNET_JSON_pack_uint64 ("row",
rowid),
@@ -1390,11 +1427,12 @@ refresh_session_cb (void *cls,
&amount_without_fee));
}
- /* check old coin covers complete expenses (of withdraw operations) */
+ /* check old coin covers complete expenses (of refresh operation) */
if (1 == TALER_amount_cmp (&refresh_cost,
&amount_without_fee))
{
/* refresh_cost > amount_without_fee, which is bad (exchange lost) */
+ GNUNET_break_op (0);
report_amount_arithmetic_inconsistency ("melt (cost)",
rowid,
&amount_without_fee, /* 'exchange' */
@@ -1424,22 +1462,22 @@ refresh_session_cb (void *cls,
"Created fresh coin in denomination `%s' of value %s\n",
GNUNET_h2s (&ni->denom_hash.hash),
TALER_amount2s (&ni->value));
- dsi->num_issued++;
- TALER_ARL_amount_add (&dsi->denom_balance,
- &dsi->denom_balance,
+ dsi->dcd.num_issued++;
+ TALER_ARL_amount_add (&dsi->dcd.denom_balance,
+ &dsi->dcd.denom_balance,
&ni->value);
- TALER_ARL_amount_add (&dsi->denom_risk,
- &dsi->denom_risk,
+ TALER_ARL_amount_add (&dsi->dcd.denom_risk,
+ &dsi->dcd.denom_risk,
&ni->value);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"New balance of denomination `%s' is %s\n",
GNUNET_h2s (&ni->denom_hash.hash),
- TALER_amount2s (&dsi->denom_balance));
- TALER_ARL_amount_add (&total_escrow_balance,
- &total_escrow_balance,
+ TALER_amount2s (&dsi->dcd.denom_balance));
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_escrowed),
+ &TALER_ARL_USE_AB (total_escrowed),
&ni->value);
- TALER_ARL_amount_add (&total_risk,
- &total_risk,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
&ni->value);
}
}
@@ -1458,51 +1496,14 @@ refresh_session_cb (void *cls,
}
else
{
- if (TALER_ARL_SR_INVALID_NEGATIVE ==
- TALER_ARL_amount_subtract_neg (&tmp,
- &dso->denom_balance,
- amount_with_fee))
- {
- TALER_ARL_amount_add (&dso->denom_loss,
- &dso->denom_loss,
- amount_with_fee);
- dso->report_emergency = GNUNET_YES;
- }
- else
- {
- dso->denom_balance = tmp;
- }
- if (-1 == TALER_amount_cmp (&total_escrow_balance,
- amount_with_fee))
- {
- /* This can theoretically happen if for example the exchange
- never issued any coins (i.e. escrow balance is zero), but
- accepted a forged coin (i.e. emergency situation after
- private key compromise). In that case, we cannot even
- subtract the profit we make from the fee from the escrow
- balance. Tested as part of test-auditor.sh, case #18 *///
- report_amount_arithmetic_inconsistency (
- "subtracting refresh fee from escrow balance",
- rowid,
- &total_escrow_balance,
- amount_with_fee,
- 0);
- }
- else
- {
- TALER_ARL_amount_subtract (&total_escrow_balance,
- &total_escrow_balance,
- amount_with_fee);
- }
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "New balance of denomination `%s' after melt is %s\n",
- GNUNET_h2s (&issue->denom_hash.hash),
- TALER_amount2s (&dso->denom_balance));
+ reduce_denom_balance (dso,
+ rowid,
+ amount_with_fee);
}
/* update global melt fees */
- TALER_ARL_amount_add (&total_melt_fee_income,
- &total_melt_fee_income,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_melt_fee_revenue),
+ &TALER_ARL_USE_AB (coin_melt_fee_revenue),
&issue->fees.refresh);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
@@ -1537,8 +1538,9 @@ deposit_cb (void *cls,
(void) done;
(void) exchange_timestamp;
- GNUNET_assert (rowid >= ppc.last_deposit_serial_id); /* should be monotonically increasing */
- ppc.last_deposit_serial_id = rowid + 1;
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (coins_deposit_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_deposit_serial_id) = rowid + 1;
qs = TALER_ARL_get_denomination_info (denom_pub,
&issue,
@@ -1598,8 +1600,11 @@ deposit_cb (void *cls,
&issue->fees.deposit,
&h_wire,
&deposit->h_contract_terms,
+ deposit->no_wallet_data_hash
+ ? NULL
+ : &deposit->wallet_data_hash,
&deposit->coin.h_age_commitment,
- NULL /* FIXME: h_extensions! */,
+ &deposit->h_policy,
&h_denom_pub,
deposit->timestamp,
&deposit->merchant_pub,
@@ -1617,8 +1622,8 @@ deposit_cb (void *cls,
&deposit->amount_with_fee),
GNUNET_JSON_pack_data_auto ("coin_pub",
&deposit->coin.coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
&deposit->amount_with_fee);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
@@ -1643,55 +1648,14 @@ deposit_cb (void *cls,
}
else
{
- struct TALER_Amount tmp;
-
- if (TALER_ARL_SR_INVALID_NEGATIVE ==
- TALER_ARL_amount_subtract_neg (&tmp,
- &ds->denom_balance,
- &deposit->amount_with_fee))
- {
- TALER_ARL_amount_add (&ds->denom_loss,
- &ds->denom_loss,
- &deposit->amount_with_fee);
- ds->report_emergency = GNUNET_YES;
- }
- else
- {
- ds->denom_balance = tmp;
- }
-
- if (-1 == TALER_amount_cmp (&total_escrow_balance,
- &deposit->amount_with_fee))
- {
- /* This can theoretically happen if for example the exchange
- never issued any coins (i.e. escrow balance is zero), but
- accepted a forged coin (i.e. emergency situation after
- private key compromise). In that case, we cannot even
- subtract the profit we make from the fee from the escrow
- balance. Tested as part of test-auditor.sh, case #18 *///
- report_amount_arithmetic_inconsistency (
- "subtracting deposit fee from escrow balance",
- rowid,
- &total_escrow_balance,
- &deposit->amount_with_fee,
- 0);
- }
- else
- {
- TALER_ARL_amount_subtract (&total_escrow_balance,
- &total_escrow_balance,
- &deposit->amount_with_fee);
- }
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "New balance of denomination `%s' after deposit is %s\n",
- GNUNET_h2s (&issue->denom_hash.hash),
- TALER_amount2s (&ds->denom_balance));
+ reduce_denom_balance (ds,
+ rowid,
+ &deposit->amount_with_fee);
}
/* update global deposit fees */
- TALER_ARL_amount_add (&total_deposit_fee_income,
- &total_deposit_fee_income,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &TALER_ARL_USE_AB (coin_deposit_fee_revenue),
&issue->fees.deposit);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
@@ -1713,6 +1677,7 @@ deposit_cb (void *cls,
* @param merchant_sig signature of the merchant
* @param h_contract_terms hash of the proposal data known to merchant and customer
* @param rtransaction_id refund transaction ID chosen by the merchant
+ * @param full_refund true if the refunds total up to the entire deposited value
* @param amount_with_fee amount that was deposited including fee
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
@@ -1725,6 +1690,7 @@ refund_cb (void *cls,
const struct TALER_MerchantSignatureP *merchant_sig,
const struct TALER_PrivateContractHashP *h_contract_terms,
uint64_t rtransaction_id,
+ bool full_refund,
const struct TALER_Amount *amount_with_fee)
{
struct CoinContext *cc = cls;
@@ -1733,8 +1699,8 @@ refund_cb (void *cls,
struct TALER_Amount amount_without_fee;
enum GNUNET_DB_QueryStatus qs;
- GNUNET_assert (rowid >= ppc.last_refund_serial_id); /* should be monotonically increasing */
- ppc.last_refund_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (coins_refund_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_refund_serial_id) = rowid + 1;
qs = TALER_ARL_get_denomination_info (denom_pub,
&issue,
@@ -1773,8 +1739,8 @@ refund_cb (void *cls,
amount_with_fee),
GNUNET_JSON_pack_data_auto ("coin_pub",
coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
amount_with_fee);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
@@ -1814,27 +1780,160 @@ refund_cb (void *cls,
}
else
{
- TALER_ARL_amount_add (&ds->denom_balance,
- &ds->denom_balance,
+ TALER_ARL_amount_add (&ds->dcd.denom_balance,
+ &ds->dcd.denom_balance,
&amount_without_fee);
- TALER_ARL_amount_add (&ds->denom_risk,
- &ds->denom_risk,
+ TALER_ARL_amount_add (&ds->dcd.denom_risk,
+ &ds->dcd.denom_risk,
&amount_without_fee);
- TALER_ARL_amount_add (&total_escrow_balance,
- &total_escrow_balance,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_escrowed),
+ &TALER_ARL_USE_AB (total_escrowed),
&amount_without_fee);
- TALER_ARL_amount_add (&total_risk,
- &total_risk,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
&amount_without_fee);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"New balance of denomination `%s' after refund is %s\n",
GNUNET_h2s (&issue->denom_hash.hash),
- TALER_amount2s (&ds->denom_balance));
+ TALER_amount2s (&ds->dcd.denom_balance));
}
/* update total refund fee balance */
- TALER_ARL_amount_add (&total_refund_fee_income,
- &total_refund_fee_income,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_refund_fee_revenue),
+ &TALER_ARL_USE_AB (coin_refund_fee_revenue),
&issue->fees.refund);
+ if (full_refund)
+ {
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &issue->fees.deposit);
+ }
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about purse refunds that have been made, with
+ * the goal of auditing the purse refund's execution.
+ *
+ * @param cls closure
+ * @param rowid row of the purse-refund
+ * @param amount_with_fee amount of the deposit into the purse
+ * @param coin_pub coin that is to be refunded the @a given amount_with_fee
+ * @param denom_pub denomination of @a coin_pub
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+purse_refund_coin_cb (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_Amount *amount_with_fee,
+ const struct TALER_CoinSpendPublicKeyP *coin_pub,
+ const struct TALER_DenominationPublicKey *denom_pub)
+{
+ struct CoinContext *cc = cls;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
+ struct DenominationSummary *ds;
+ enum GNUNET_DB_QueryStatus qs;
+
+ qs = TALER_ARL_get_denomination_info (denom_pub,
+ &issue,
+ NULL);
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+ {
+ report_row_inconsistency ("purse-refunds",
+ rowid,
+ "denomination key not found");
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return GNUNET_SYSERR;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Aborted purse-deposit of coin %s in denomination `%s' value %s\n",
+ TALER_B2S (coin_pub),
+ GNUNET_h2s (&issue->denom_hash.hash),
+ TALER_amount2s (amount_with_fee));
+
+ /* update coin's denomination balance */
+ ds = get_denomination_summary (cc,
+ issue,
+ &issue->denom_hash);
+ if (NULL == ds)
+ {
+ report_row_inconsistency ("purse-refund",
+ rowid,
+ "denomination key for purse-refunded coin unknown to auditor");
+ }
+ else
+ {
+ TALER_ARL_amount_add (&ds->dcd.denom_balance,
+ &ds->dcd.denom_balance,
+ amount_with_fee);
+ TALER_ARL_amount_add (&ds->dcd.denom_risk,
+ &ds->dcd.denom_risk,
+ amount_with_fee);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_escrowed),
+ &TALER_ARL_USE_AB (total_escrowed),
+ amount_with_fee);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
+ amount_with_fee);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "New balance of denomination `%s' after purse-refund is %s\n",
+ GNUNET_h2s (&issue->denom_hash.hash),
+ TALER_amount2s (&ds->dcd.denom_balance));
+ }
+ /* update total deposit fee balance */
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &issue->fees.deposit);
+
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about a purse that was refunded. Adds the
+ * refunded amounts back to the outstanding balance of the respective
+ * denominations.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the refund in our DB
+ * @param purse_pub public key of the purse
+ * @param reserve_pub public key of the targeted reserve (ignored)
+ * @param val targeted amount to be in the reserve (ignored)
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+purse_refund_cb (void *cls,
+ uint64_t rowid,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_Amount *val)
+{
+ struct CoinContext *cc = cls;
+ enum GNUNET_DB_QueryStatus qs;
+
+ (void) val; /* irrelevant on refund */
+ (void) reserve_pub; /* irrelevant, may even be NULL */
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (coins_purse_refunds_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_purse_refunds_serial_id) = rowid + 1;
+ qs = TALER_ARL_edb->select_purse_deposits_by_purse (TALER_ARL_edb->cls,
+ purse_pub,
+ &purse_refund_coin_cb,
+ cc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return GNUNET_SYSERR;
+ }
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -1863,13 +1962,23 @@ check_recoup (struct CoinContext *cc,
const struct TALER_CoinPublicInfo *coin,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_CoinSpendSignatureP *coin_sig,
- const union TALER_DenominationBlindingKeyP *coin_blind)
+ const union GNUNET_CRYPTO_BlindingSecretP *coin_blind)
{
struct DenominationSummary *ds;
enum GNUNET_DB_QueryStatus qs;
const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
if (GNUNET_OK !=
+ TALER_wallet_recoup_verify (&coin->denom_pub_hash,
+ coin_blind,
+ &coin->coin_pub,
+ coin_sig))
+ {
+ report_row_inconsistency (operation,
+ rowid,
+ "recoup signature invalid");
+ }
+ if (GNUNET_OK !=
TALER_test_coin_valid (coin,
denom_pub))
{
@@ -1883,8 +1992,8 @@ check_recoup (struct CoinContext *cc,
amount),
GNUNET_JSON_pack_data_auto ("coin_pub",
&coin->denom_pub_hash)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
amount);
}
qs = TALER_ARL_get_denomination_info_by_hash (&coin->denom_pub_hash,
@@ -1929,7 +2038,7 @@ check_recoup (struct CoinContext *cc,
}
else
{
- if (GNUNET_NO == ds->was_revoked)
+ if (! ds->was_revoked)
{
/* Woopsie, we allowed recoup on non-revoked denomination!? */
TALER_ARL_report (report_bad_sig_losses,
@@ -1944,15 +2053,15 @@ check_recoup (struct CoinContext *cc,
amount),
GNUNET_JSON_pack_data_auto ("coin_pub",
&coin->coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
amount);
}
- TALER_ARL_amount_add (&ds->denom_recoup,
- &ds->denom_recoup,
+ TALER_ARL_amount_add (&ds->dcd.recoup_loss,
+ &ds->dcd.recoup_loss,
amount);
- TALER_ARL_amount_add (&total_recoup_loss,
- &total_recoup_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_recoup_loss),
+ &TALER_ARL_USE_AB (total_recoup_loss),
amount);
}
if (TALER_ARL_do_abort ())
@@ -1984,12 +2093,12 @@ recoup_cb (void *cls,
const struct TALER_CoinPublicInfo *coin,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_CoinSpendSignatureP *coin_sig,
- const union TALER_DenominationBlindingKeyP *coin_blind)
+ const union GNUNET_CRYPTO_BlindingSecretP *coin_blind)
{
struct CoinContext *cc = cls;
- GNUNET_assert (rowid >= ppc.last_recoup_serial_id); /* should be monotonically increasing */
- ppc.last_recoup_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (coins_recoup_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_recoup_serial_id) = rowid + 1;
(void) timestamp;
(void) reserve_pub;
if (GNUNET_OK !=
@@ -2008,8 +2117,8 @@ recoup_cb (void *cls,
amount),
GNUNET_JSON_pack_data_auto ("coin_pub",
&coin->coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
amount);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
@@ -2052,7 +2161,7 @@ recoup_refresh_cb (void *cls,
const struct TALER_CoinPublicInfo *coin,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_CoinSpendSignatureP *coin_sig,
- const union TALER_DenominationBlindingKeyP *coin_blind)
+ const union GNUNET_CRYPTO_BlindingSecretP *coin_blind)
{
struct CoinContext *cc = cls;
const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
@@ -2060,8 +2169,8 @@ recoup_refresh_cb (void *cls,
(void) timestamp;
(void) old_coin_pub;
- GNUNET_assert (rowid >= ppc.last_recoup_refresh_serial_id); /* should be monotonically increasing */
- ppc.last_recoup_refresh_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (coins_recoup_refresh_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_recoup_refresh_serial_id) = rowid + 1;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Recoup-refresh amount is %s\n",
TALER_amount2s (amount));
@@ -2096,13 +2205,13 @@ recoup_refresh_cb (void *cls,
}
else
{
- TALER_ARL_amount_add (&dso->denom_balance,
- &dso->denom_balance,
+ TALER_ARL_amount_add (&dso->dcd.denom_balance,
+ &dso->dcd.denom_balance,
amount);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"New balance of denomination `%s' after refresh-recoup is %s\n",
GNUNET_h2s (&issue->denom_hash.hash),
- TALER_amount2s (&dso->denom_balance));
+ TALER_amount2s (&dso->dcd.denom_balance));
}
}
@@ -2122,8 +2231,8 @@ recoup_refresh_cb (void *cls,
amount),
GNUNET_JSON_pack_data_auto ("coin_pub",
&coin->coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
amount);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
@@ -2148,7 +2257,7 @@ recoup_refresh_cb (void *cls,
*
* @param cls closure, NULL
* @param denom_pub public key, sometimes NULL (!)
- * @param validity issuing information with value, fees and other info about the denomination.
+ * @param issue issuing information with value, fees and other info about the denomination.
*/
static void
check_denomination (
@@ -2211,6 +2320,127 @@ check_denomination (
/**
+ * Function called with details about purse deposits that have been made, with
+ * the goal of auditing the deposit's execution.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param deposit deposit details
+ * @param reserve_pub which reserve is the purse merged into, NULL if unknown
+ * @param flags purse flags
+ * @param auditor_balance purse balance (according to the
+ * auditor during auditing)
+ * @param purse_total target amount the purse should reach
+ * @param denom_pub denomination public key of @a coin_pub
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+purse_deposit_cb (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_EXCHANGEDB_PurseDeposit *deposit,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ enum TALER_WalletAccountMergeFlags flags,
+ const struct TALER_Amount *auditor_balance,
+ const struct TALER_Amount *purse_total,
+ const struct TALER_DenominationPublicKey *denom_pub)
+{
+ struct CoinContext *cc = cls;
+ enum GNUNET_DB_QueryStatus qs;
+ struct TALER_DenominationHashP dh;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
+ struct DenominationSummary *ds;
+
+ (void) flags;
+ (void) auditor_balance;
+ (void) purse_total;
+ (void) reserve_pub;
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (coins_purse_deposits_serial_id));
+ TALER_ARL_USE_PP (coins_purse_deposits_serial_id) = rowid + 1;
+ qs = TALER_ARL_get_denomination_info (denom_pub,
+ &issue,
+ &dh);
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+ {
+ report_row_inconsistency ("purse-deposits",
+ rowid,
+ "denomination key not found");
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+ }
+ qs = check_known_coin ("purse-deposit",
+ issue,
+ rowid,
+ &deposit->coin_pub,
+ denom_pub,
+ &deposit->amount);
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ cc->qs = qs;
+ return GNUNET_SYSERR;
+ }
+
+ if (GNUNET_OK !=
+ TALER_wallet_purse_deposit_verify (
+ NULL != deposit->exchange_base_url
+ ? deposit->exchange_base_url
+ : TALER_ARL_exchange_url,
+ &deposit->purse_pub,
+ &deposit->amount,
+ &dh,
+ &deposit->h_age_commitment,
+ &deposit->coin_pub,
+ &deposit->coin_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "purse-deposit"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ &deposit->amount),
+ GNUNET_JSON_pack_data_auto ("coin_pub",
+ &deposit->coin_pub)));
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
+ &deposit->amount);
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+ }
+
+ /* update coin's denomination balance */
+ ds = get_denomination_summary (cc,
+ issue,
+ &issue->denom_hash);
+ if (NULL == ds)
+ {
+ report_row_inconsistency ("purse-deposit",
+ rowid,
+ "denomination key for purse-deposited coin unknown to auditor");
+ }
+ else
+ {
+ reduce_denom_balance (ds,
+ rowid,
+ &deposit->amount);
+ }
+
+ /* update global deposit fees */
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &issue->fees.deposit);
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+}
+
+
+/**
* Analyze the exchange's processing of coins.
*
* @param cls closure
@@ -2237,9 +2467,17 @@ analyze_coins (void *cls)
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Analyzing coins\n");
- qsp = TALER_ARL_adb->get_auditor_progress_coin (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppc);
+ qsp = TALER_ARL_adb->get_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_PP (coins_withdraw_serial_id),
+ TALER_ARL_GET_PP (coins_deposit_serial_id),
+ TALER_ARL_GET_PP (coins_melt_serial_id),
+ TALER_ARL_GET_PP (coins_refund_serial_id),
+ TALER_ARL_GET_PP (coins_recoup_serial_id),
+ TALER_ARL_GET_PP (coins_recoup_refresh_serial_id),
+ TALER_ARL_GET_PP (coins_purse_deposits_serial_id),
+ TALER_ARL_GET_PP (coins_purse_refunds_serial_id),
+ NULL);
if (0 > qsp)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsp);
@@ -2252,29 +2490,39 @@ analyze_coins (void *cls)
}
else
{
- ppc_start = ppc;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Resuming coin audit at %llu/%llu/%llu/%llu/%llu\n",
- (unsigned long long) ppc.last_deposit_serial_id,
- (unsigned long long) ppc.last_melt_serial_id,
- (unsigned long long) ppc.last_refund_serial_id,
- (unsigned long long) ppc.last_withdraw_serial_id,
- (unsigned long long) ppc.last_recoup_refresh_serial_id);
+ GNUNET_log (
+ GNUNET_ERROR_TYPE_INFO,
+ "Resuming coin audit at %llu/%llu/%llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_deposit_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_melt_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_refund_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_withdraw_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_recoup_refresh_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_purse_deposits_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_purse_refunds_serial_id));
}
/* setup 'cc' */
cc.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
cc.denom_summaries = GNUNET_CONTAINER_multihashmap_create (256,
GNUNET_NO);
- qsx = TALER_ARL_adb->get_balance_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_deposit_fee_income,
- &total_melt_fee_income,
- &total_refund_fee_income,
- &total_risk,
- &total_recoup_loss,
- &total_irregular_recoups);
+ qsx = TALER_ARL_adb->get_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_AB (coin_balance_risk),
+ TALER_ARL_GET_AB (total_escrowed),
+ TALER_ARL_GET_AB (coin_irregular_loss),
+ TALER_ARL_GET_AB (coin_melt_fee_revenue),
+ TALER_ARL_GET_AB (coin_deposit_fee_revenue),
+ TALER_ARL_GET_AB (coin_refund_fee_revenue),
+ TALER_ARL_GET_AB (total_recoup_loss),
+ NULL);
if (0 > qsx)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsx);
@@ -2285,7 +2533,7 @@ analyze_coins (void *cls)
if (0 >
(qs = TALER_ARL_edb->select_withdrawals_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_withdraw_serial_id,
+ TALER_ARL_USE_PP (coins_withdraw_serial_id),
&withdraw_cb,
&cc)) )
{
@@ -2299,7 +2547,7 @@ analyze_coins (void *cls)
if (0 >
(qs = TALER_ARL_edb->select_refunds_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_refund_serial_id,
+ TALER_ARL_USE_PP (coins_refund_serial_id),
&refund_cb,
&cc)))
{
@@ -2309,11 +2557,26 @@ analyze_coins (void *cls)
if (0 > cc.qs)
return cc.qs;
+ /* process purse_refunds */
+ if (0 >
+ (qs = TALER_ARL_edb->select_purse_decisions_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (coins_purse_refunds_serial_id),
+ true, /* only go for refunds! */
+ &purse_refund_cb,
+ &cc)))
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ if (0 > cc.qs)
+ return cc.qs;
+
/* process recoups */
if (0 >
(qs = TALER_ARL_edb->select_recoup_refresh_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_recoup_refresh_serial_id,
+ TALER_ARL_USE_PP (coins_recoup_refresh_serial_id),
&recoup_refresh_cb,
&cc)))
{
@@ -2325,7 +2588,7 @@ analyze_coins (void *cls)
if (0 >
(qs = TALER_ARL_edb->select_recoup_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_recoup_serial_id,
+ TALER_ARL_USE_PP (coins_recoup_serial_id),
&recoup_cb,
&cc)))
{
@@ -2335,11 +2598,11 @@ analyze_coins (void *cls)
if (0 > cc.qs)
return cc.qs;
- /* process refreshs */
+ /* process refreshes */
if (0 >
(qs = TALER_ARL_edb->select_refreshes_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_melt_serial_id,
+ TALER_ARL_USE_PP (coins_melt_serial_id),
&refresh_session_cb,
&cc)))
{
@@ -2351,9 +2614,9 @@ analyze_coins (void *cls)
/* process deposits */
if (0 >
- (qs = TALER_ARL_edb->select_deposits_above_serial_id (
+ (qs = TALER_ARL_edb->select_coin_deposits_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_deposit_serial_id,
+ TALER_ARL_USE_PP (coins_deposit_serial_id),
&deposit_cb,
&cc)))
{
@@ -2363,6 +2626,20 @@ analyze_coins (void *cls)
if (0 > cc.qs)
return cc.qs;
+ /* process purse_deposits */
+ if (0 >
+ (qs = TALER_ARL_edb->select_purse_deposits_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (coins_purse_deposits_serial_id),
+ &purse_deposit_cb,
+ &cc)))
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ if (0 > cc.qs)
+ return cc.qs;
+
/* sync 'cc' back to disk */
cc.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
GNUNET_CONTAINER_multihashmap_iterate (cc.denom_summaries,
@@ -2375,25 +2652,27 @@ analyze_coins (void *cls)
return cc.qs;
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsx)
- qs = TALER_ARL_adb->update_balance_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_deposit_fee_income,
- &total_melt_fee_income,
- &total_refund_fee_income,
- &total_risk,
- &total_recoup_loss,
- &total_irregular_recoups);
+ qs = TALER_ARL_adb->update_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (coin_balance_risk),
+ TALER_ARL_SET_AB (total_escrowed),
+ TALER_ARL_SET_AB (coin_irregular_loss),
+ TALER_ARL_SET_AB (coin_melt_fee_revenue),
+ TALER_ARL_SET_AB (coin_deposit_fee_revenue),
+ TALER_ARL_SET_AB (coin_refund_fee_revenue),
+ TALER_ARL_SET_AB (total_recoup_loss),
+ NULL);
else
- qs = TALER_ARL_adb->insert_balance_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_deposit_fee_income,
- &total_melt_fee_income,
- &total_refund_fee_income,
- &total_risk,
- &total_recoup_loss,
- &total_irregular_recoups);
+ qs = TALER_ARL_adb->insert_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (coin_balance_risk),
+ TALER_ARL_SET_AB (total_escrowed),
+ TALER_ARL_SET_AB (coin_irregular_loss),
+ TALER_ARL_SET_AB (coin_melt_fee_revenue),
+ TALER_ARL_SET_AB (coin_deposit_fee_revenue),
+ TALER_ARL_SET_AB (coin_refund_fee_revenue),
+ TALER_ARL_SET_AB (total_recoup_loss),
+ NULL);
if (0 >= qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -2401,13 +2680,29 @@ analyze_coins (void *cls)
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsp)
- qs = TALER_ARL_adb->update_auditor_progress_coin (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppc);
+ qs = TALER_ARL_adb->update_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (coins_withdraw_serial_id),
+ TALER_ARL_SET_PP (coins_deposit_serial_id),
+ TALER_ARL_SET_PP (coins_melt_serial_id),
+ TALER_ARL_SET_PP (coins_refund_serial_id),
+ TALER_ARL_SET_PP (coins_recoup_serial_id),
+ TALER_ARL_SET_PP (coins_recoup_refresh_serial_id),
+ TALER_ARL_SET_PP (coins_purse_deposits_serial_id),
+ TALER_ARL_SET_PP (coins_purse_refunds_serial_id),
+ NULL);
else
- qs = TALER_ARL_adb->insert_auditor_progress_coin (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppc);
+ qs = TALER_ARL_adb->insert_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (coins_withdraw_serial_id),
+ TALER_ARL_SET_PP (coins_deposit_serial_id),
+ TALER_ARL_SET_PP (coins_melt_serial_id),
+ TALER_ARL_SET_PP (coins_refund_serial_id),
+ TALER_ARL_SET_PP (coins_recoup_serial_id),
+ TALER_ARL_SET_PP (coins_recoup_refresh_serial_id),
+ TALER_ARL_SET_PP (coins_purse_deposits_serial_id),
+ TALER_ARL_SET_PP (coins_purse_refunds_serial_id),
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -2416,12 +2711,17 @@ analyze_coins (void *cls)
return qs;
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Concluded coin audit step at %llu/%llu/%llu/%llu/%llu\n",
- (unsigned long long) ppc.last_deposit_serial_id,
- (unsigned long long) ppc.last_melt_serial_id,
- (unsigned long long) ppc.last_refund_serial_id,
- (unsigned long long) ppc.last_withdraw_serial_id,
- (unsigned long long) ppc.last_recoup_refresh_serial_id);
+ "Concluded coin audit step at %llu/%llu/%llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (coins_deposit_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (coins_melt_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (coins_refund_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (coins_withdraw_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_recoup_refresh_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_purse_deposits_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_purse_refunds_serial_id));
return qs;
}
@@ -2467,25 +2767,29 @@ run (void *cls,
&reported_emergency_loss_by_count));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_escrow_balance));
+ &TALER_ARL_USE_AB (total_escrowed)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_risk));
+ &TALER_ARL_USE_AB (
+ coin_deposit_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_recoup_loss));
+ &TALER_ARL_USE_AB (
+ coin_melt_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_irregular_recoups));
+ &TALER_ARL_USE_AB (
+ coin_refund_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_deposit_fee_income));
+ &TALER_ARL_USE_AB (coin_balance_risk)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_melt_fee_income));
+ &TALER_ARL_USE_AB (total_recoup_loss)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_refund_fee_income));
+ &TALER_ARL_USE_AB (
+ coin_irregular_loss)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
&total_arithmetic_delta_plus));
@@ -2494,9 +2798,6 @@ run (void *cls,
&total_arithmetic_delta_minus));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_bad_sig_loss));
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (TALER_ARL_currency,
&total_refresh_hanging));
GNUNET_assert (NULL !=
(report_emergencies = json_array ()));
@@ -2512,7 +2813,7 @@ run (void *cls,
GNUNET_assert (NULL !=
(report_bad_sig_losses = json_array ()));
GNUNET_assert (NULL !=
- (report_refreshs_hanging = json_array ()));
+ (report_refreshes_hanging = json_array ()));
if (GNUNET_OK !=
TALER_ARL_setup_sessions_and_run (&analyze_coins,
NULL))
@@ -2525,27 +2826,26 @@ run (void *cls,
TALER_ARL_done (
GNUNET_JSON_PACK (
TALER_JSON_pack_amount ("total_escrow_balance",
- &total_escrow_balance),
- TALER_JSON_pack_amount ("total_active_risk",
- &total_risk),
+ &TALER_ARL_USE_AB (total_escrowed)),
TALER_JSON_pack_amount ("total_deposit_fee_income",
- &total_deposit_fee_income),
+ &TALER_ARL_USE_AB (coin_deposit_fee_revenue)),
TALER_JSON_pack_amount ("total_melt_fee_income",
- &total_melt_fee_income),
+ &TALER_ARL_USE_AB (coin_melt_fee_revenue)),
TALER_JSON_pack_amount ("total_refund_fee_income",
- &total_refund_fee_income),
+ &TALER_ARL_USE_AB (coin_refund_fee_revenue)),
+ TALER_JSON_pack_amount ("total_active_risk",
+ &TALER_ARL_USE_AB (coin_balance_risk)),
+ TALER_JSON_pack_amount ("total_recoup_loss",
+ &TALER_ARL_USE_AB (total_recoup_loss)),
+ /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */
+ TALER_JSON_pack_amount ("irregular_loss",
+ &TALER_ARL_USE_AB (coin_irregular_loss)),
/* Tested in test-auditor.sh #18 */
GNUNET_JSON_pack_array_steal ("emergencies",
report_emergencies),
/* Tested in test-auditor.sh #18 */
TALER_JSON_pack_amount ("emergencies_risk_by_amount",
&reported_emergency_risk_by_amount),
- /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */
- GNUNET_JSON_pack_array_steal ("bad_sig_losses",
- report_bad_sig_losses),
- /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */
- TALER_JSON_pack_amount ("total_bad_sig_loss",
- &total_bad_sig_loss),
/* Tested in test-auditor.sh #31 */
GNUNET_JSON_pack_array_steal ("row_inconsistencies",
report_row_inconsistencies),
@@ -2558,11 +2858,11 @@ run (void *cls,
&total_arithmetic_delta_minus),
TALER_JSON_pack_amount ("total_refresh_hanging",
&total_refresh_hanging),
+ GNUNET_JSON_pack_array_steal ("bad_sig_losses",
+ report_bad_sig_losses),
/* Tested in test-auditor.sh #12 */
GNUNET_JSON_pack_array_steal ("refresh_hanging",
- report_refreshs_hanging),
- TALER_JSON_pack_amount ("total_recoup_loss",
- &total_recoup_loss),
+ report_refreshes_hanging),
/* Tested in test-auditor.sh #18 */
GNUNET_JSON_pack_array_steal ("emergencies_by_count",
report_emergencies_by_count),
@@ -2576,38 +2876,48 @@ run (void *cls,
TALER_JSON_pack_amount ("emergencies_loss_by_count",
&reported_emergency_loss_by_count),
GNUNET_JSON_pack_uint64 ("start_ppc_withdraw_serial_id",
- ppc_start.last_withdraw_serial_id),
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("start_ppc_deposit_serial_id",
- ppc_start.last_deposit_serial_id),
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("start_ppc_melt_serial_id",
- ppc_start.last_melt_serial_id),
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("start_ppc_refund_serial_id",
- ppc_start.last_refund_serial_id),
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("start_ppc_recoup_serial_id",
- ppc_start.last_recoup_serial_id),
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("start_ppc_recoup_refresh_serial_id",
- ppc_start.
- last_recoup_refresh_serial_id),
+ 0 /* not implemented */),
+ GNUNET_JSON_pack_uint64 ("start_ppc_purse_deposits_serial_id",
+ 0 /* not implemented */),
+ GNUNET_JSON_pack_uint64 ("start_ppc_purse_refunds_serial_id",
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("end_ppc_withdraw_serial_id",
- ppc.last_withdraw_serial_id),
+ TALER_ARL_USE_PP (coins_withdraw_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppc_deposit_serial_id",
- ppc.last_deposit_serial_id),
+ TALER_ARL_USE_PP (coins_deposit_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppc_melt_serial_id",
- ppc.last_melt_serial_id),
+ TALER_ARL_USE_PP (coins_melt_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppc_refund_serial_id",
- ppc.last_refund_serial_id),
+ TALER_ARL_USE_PP (coins_refund_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppc_recoup_serial_id",
- ppc.last_recoup_serial_id),
+ TALER_ARL_USE_PP (coins_recoup_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppc_recoup_refresh_serial_id",
- ppc.last_recoup_refresh_serial_id),
- TALER_JSON_pack_time_abs_human ("auditor_start_time",
- start_time),
+ TALER_ARL_USE_PP (
+ coins_recoup_refresh_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppc_purse_deposits_serial_id",
+ TALER_ARL_USE_PP (
+ coins_purse_deposits_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppc_purse_refunds_serial_id",
+ TALER_ARL_USE_PP (
+ coins_purse_refunds_serial_id)),
+ TALER_JSON_pack_time_abs_human (
+ "auditor_start_time",
+ start_time),
TALER_JSON_pack_time_abs_human ("auditor_end_time",
GNUNET_TIME_absolute_get ()),
- TALER_JSON_pack_amount ("total_irregular_recoups",
- &total_irregular_recoups),
- GNUNET_JSON_pack_array_steal ("unsigned_denominations",
- report_denominations_without_sigs)));
+ GNUNET_JSON_pack_array_steal (
+ "unsigned_denominations",
+ report_denominations_without_sigs)));
}
@@ -2627,11 +2937,10 @@ main (int argc,
"internal",
"perform checks only applicable for exchange-internal audits",
&internal_checks),
- GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &TALER_ARL_master_pub),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
diff --git a/src/auditor/taler-helper-auditor-deposits.c b/src/auditor/taler-helper-auditor-deposits.c
index 2499df2eb..3dbce0183 100644
--- a/src/auditor/taler-helper-auditor-deposits.c
+++ b/src/auditor/taler-helper-auditor-deposits.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2016-2021 Taler Systems SA
+ Copyright (C) 2016-2023 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero Public License as published by the Free Software
@@ -17,6 +17,7 @@
* @file auditor/taler-helper-auditor-deposits.c
* @brief audits an exchange database for deposit confirmation consistency
* @author Christian Grothoff
+ * @author Nic Eigel
*
* We simply check that all of the deposit confirmations reported to us
* by merchants were also reported to us by the exchange.
@@ -29,7 +30,29 @@
#include "taler_bank_service.h"
#include "taler_signatures.h"
#include "report-lib.h"
+#include "taler_dbevents.h"
+#include <jansson.h>
+/*
+--
+-- SELECT serial_id,h_contract_terms,h_wire,merchant_pub ...
+-- FROM auditor.auditor_deposit_confirmations
+-- WHERE NOT ancient
+-- ORDER BY exchange_timestamp ASC;
+-- SELECT 1
+- FROM exchange.deposits dep
+ WHERE ($RESULT.contract_terms = dep.h_contract_terms) AND ($RESULT.h_wire = dep.h_wire) AND ...);
+-- IF FOUND
+-- DELETE FROM auditor.auditor_deposit_confirmations
+-- WHERE serial_id = $RESULT.serial_id;
+-- SELECT exchange_timestamp AS latest
+-- FROM exchange.deposits ORDER BY exchange_timestamp DESC;
+-- latest -= 1 hour; // time is not exactly monotonic...
+-- UPDATE auditor.deposit_confirmations
+-- SET ancient=TRUE
+-- WHERE exchange_timestamp < latest
+-- AND NOT ancient;
+*/
/**
* Return value from main().
@@ -37,6 +60,14 @@
static int global_ret;
/**
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
+ */
+static int test_mode;
+
+/**
* Array of reports about missing deposit confirmations.
*/
static json_t *report_deposit_confirmation_inconsistencies;
@@ -56,6 +87,18 @@ static struct TALER_Amount total_missed_deposit_confirmations;
*/
static int internal_checks;
+static struct GNUNET_DB_EventHandler *eh;
+
+/**
+ * Our database plugin.
+ */
+static struct TALER_AUDITORDB_Plugin *db_plugin;
+
+/**
+ * The auditors's configuration.
+ */
+static const struct GNUNET_CONFIGURATION_Handle *cfg;
+
/**
* Closure for #test_dc.
*/
@@ -92,7 +135,6 @@ struct DepositConfirmationContext
};
-
/**
* Given a deposit confirmation from #TALER_ARL_adb, check that it is also
* in #TALER_ARL_edb. Update the deposit confirmation context accordingly.
@@ -102,14 +144,16 @@ struct DepositConfirmationContext
* @param dc the deposit confirmation we know
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop iterating
*/
-static int
+static enum GNUNET_GenericReturnValue
test_dc (void *cls,
uint64_t serial_id,
const struct TALER_AUDITORDB_DepositConfirmation *dc)
{
struct DepositConfirmationContext *dcc = cls;
+ bool missing = false;
dcc->last_seen_coin_serial = serial_id;
+ for (unsigned int i = 0; i < dc->num_coins; i++)
{
enum GNUNET_DB_QueryStatus qs;
struct GNUNET_TIME_Timestamp exchange_timestamp;
@@ -118,20 +162,12 @@ test_dc (void *cls,
qs = TALER_ARL_edb->have_deposit2 (TALER_ARL_edb->cls,
&dc->h_contract_terms,
&dc->h_wire,
- &dc->coin_pub,
+ &dc->coin_pubs[i],
&dc->merchant,
dc->refund_deadline,
&deposit_fee,
&exchange_timestamp);
- if (qs > 0)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Found deposit %s in exchange database\n",
- GNUNET_h2s (&dc->h_contract_terms.hash));
- if (TALER_ARL_do_abort ())
- return GNUNET_SYSERR;
- return GNUNET_OK; /* found, all good */
- }
+ missing |= (0 == qs);
if (qs < 0)
{
GNUNET_break (0); /* DB error, complain */
@@ -139,6 +175,15 @@ test_dc (void *cls,
return GNUNET_SYSERR;
}
}
+ if (! missing)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Found deposit %s in exchange database\n",
+ GNUNET_h2s (&dc->h_contract_terms.hash));
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK; /* all coins found, all good */
+ }
/* deposit confirmation missing! report! */
TALER_ARL_report (
report_deposit_confirmation_inconsistencies,
@@ -146,7 +191,7 @@ test_dc (void *cls,
TALER_JSON_pack_time_abs_human ("timestamp",
dc->exchange_timestamp.abs_time),
TALER_JSON_pack_amount ("amount",
- &dc->amount_without_fee),
+ &dc->total_without_fee),
GNUNET_JSON_pack_uint64 ("rowid",
serial_id),
GNUNET_JSON_pack_data_auto ("account",
@@ -156,7 +201,7 @@ test_dc (void *cls,
dcc->missed_count++;
TALER_ARL_amount_add (&dcc->missed_amount,
&dcc->missed_amount,
- &dc->amount_without_fee);
+ &dc->total_without_fee);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -173,20 +218,18 @@ test_dc (void *cls,
static enum GNUNET_DB_QueryStatus
analyze_deposit_confirmations (void *cls)
{
- struct TALER_AUDITORDB_ProgressPointDepositConfirmation ppdc;
+ TALER_ARL_DEF_PP (deposit_confirmation_serial_id);
struct DepositConfirmationContext dcc;
enum GNUNET_DB_QueryStatus qs;
enum GNUNET_DB_QueryStatus qsx;
enum GNUNET_DB_QueryStatus qsp;
-
(void) cls;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Analyzing deposit confirmations\n");
- ppdc.last_deposit_confirmation_serial_id = 0;
- qsp = TALER_ARL_adb->get_auditor_progress_deposit_confirmation (
+
+ qsp = TALER_ARL_adb->get_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppdc);
+ TALER_ARL_GET_PP (deposit_confirmation_serial_id),
+ NULL);
+
if (0 > qsp)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsp);
@@ -201,7 +244,8 @@ analyze_deposit_confirmations (void *cls)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Resuming deposit confirmation audit at %llu\n",
- (unsigned long long) ppdc.last_deposit_confirmation_serial_id);
+ (unsigned long long) TALER_ARL_USE_PP (
+ deposit_confirmation_serial_id));
}
/* setup 'cc' */
@@ -211,10 +255,13 @@ analyze_deposit_confirmations (void *cls)
dcc.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
dcc.missed_count = 0LLU;
dcc.first_missed_coin_serial = UINT64_MAX;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "lastdepconfserialid %lu\n",
+ TALER_ARL_USE_PP (deposit_confirmation_serial_id));
qsx = TALER_ARL_adb->get_deposit_confirmations (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- ppdc.last_deposit_confirmation_serial_id,
+ TALER_ARL_USE_PP (deposit_confirmation_serial_id),
+ true, /* return suppressed */
&test_dc,
&dcc);
if (0 > qsx)
@@ -225,28 +272,30 @@ analyze_deposit_confirmations (void *cls)
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Analyzed %d deposit confirmations (above serial ID %llu)\n",
(int) qsx,
- (unsigned long long) ppdc.last_deposit_confirmation_serial_id);
+ (unsigned long long) TALER_ARL_USE_PP (
+ deposit_confirmation_serial_id));
if (0 > dcc.qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == dcc.qs);
return dcc.qs;
}
- if (UINT64_MAX == dcc.first_missed_coin_serial)
- ppdc.last_deposit_confirmation_serial_id = dcc.last_seen_coin_serial;
- else
- ppdc.last_deposit_confirmation_serial_id = dcc.first_missed_coin_serial - 1;
+ /* if (UINT64_MAX == dcc.first_missed_coin_serial)
+ ppdc.last_deposit_confirmation_serial_id = dcc.last_seen_coin_serial;
+ else
+ ppdc.last_deposit_confirmation_serial_id = dcc.first_missed_coin_serial - 1;
+ */
/* sync 'cc' back to disk */
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsp)
- qs = TALER_ARL_adb->update_auditor_progress_deposit_confirmation (
+ qs = TALER_ARL_adb->update_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppdc);
+ TALER_ARL_SET_PP (deposit_confirmation_serial_id),
+ NULL);
else
- qs = TALER_ARL_adb->insert_auditor_progress_deposit_confirmation (
+ qs = TALER_ARL_adb->insert_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppdc);
+ TALER_ARL_SET_PP (deposit_confirmation_serial_id),
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -254,17 +303,90 @@ analyze_deposit_confirmations (void *cls)
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs;
}
+
number_missed_deposit_confirmations = (json_int_t) dcc.missed_count;
total_missed_deposit_confirmations = dcc.missed_amount;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Concluded deposit confirmation audit step at %llu\n",
- (unsigned long long) ppdc.last_deposit_confirmation_serial_id);
+ (unsigned long long) TALER_ARL_USE_PP (
+ deposit_confirmation_serial_id));
return qs;
}
/**
+ * Function called on events received from Postgres.
+ *
+ * @param cls closure, NULL
+ * @param extra additional event data provided
+ * @param extra_size number of bytes in @a extra
+ */
+static void
+db_notify (void *cls,
+ const void *extra,
+ size_t extra_size)
+{
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Received notification for new deposit_confirmation\n");
+
+ (void) cls;
+ (void) extra;
+ (void) extra_size;
+
+ if (NULL ==
+ (db_plugin = TALER_AUDITORDB_plugin_load (cfg)))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to initialize DB subsystem\n");
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ GNUNET_assert (NULL !=
+ (report_deposit_confirmation_inconsistencies = json_array ()));
+
+ if (GNUNET_OK !=
+ TALER_ARL_setup_sessions_and_run (&analyze_deposit_confirmations,
+ NULL))
+ {
+ global_ret = EXIT_FAILURE;
+ return;
+ }
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Deposit audit complete\n");
+ TALER_ARL_done (
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_array_steal ("deposit_confirmation_inconsistencies",
+ report_deposit_confirmation_inconsistencies),
+ GNUNET_JSON_pack_uint64 ("missing_deposit_confirmation_count",
+ number_missed_deposit_confirmations),
+ TALER_JSON_pack_amount ("missing_deposit_confirmation_total",
+ &total_missed_deposit_confirmations),
+ TALER_JSON_pack_time_abs_human ("auditor_start_time",
+ start_time),
+ TALER_JSON_pack_time_abs_human ("auditor_end_time",
+ GNUNET_TIME_absolute_get ())));
+}
+
+
+/**
+ * Function called on shutdown.
+ */
+static void
+do_shutdown (void *cls)
+{
+ (void) cls;
+
+ db_plugin->event_listen_cancel (eh);
+ eh = NULL;
+ TALER_AUDITORDB_plugin_unload (db_plugin);
+ db_plugin = NULL;
+ TALER_ARL_done (NULL);
+}
+
+
+/**
* Main function that will be run.
*
* @param cls closure
@@ -281,6 +403,10 @@ run (void *cls,
(void) cls;
(void) args;
(void) cfgfile;
+ cfg = c;
+
+ GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+ NULL);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Launching deposit auditor\n");
if (GNUNET_OK !=
@@ -289,6 +415,34 @@ run (void *cls,
global_ret = EXIT_FAILURE;
return;
}
+
+ if (NULL ==
+ (db_plugin = TALER_AUDITORDB_plugin_load (cfg)))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to initialize DB subsystem\n");
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ if (GNUNET_OK !=
+ db_plugin->preflight (db_plugin->cls))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to connect to database\n");
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+
+ struct GNUNET_DB_EventHeaderP es = {
+ .size = htons (sizeof (es)),
+ .type = htons (TALER_DBEVENT_EXCHANGE_AUDITOR_NEW_DEPOSIT_CONFIRMATION)
+ };
+ eh = db_plugin->event_listen (db_plugin->cls,
+ &es,
+ GNUNET_TIME_UNIT_FOREVER_REL,
+ &db_notify,
+ NULL);
+
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Starting deposit audit\n");
GNUNET_assert (NULL !=
@@ -333,11 +487,10 @@ main (int argc,
"internal",
"perform checks only applicable for exchange-internal audits",
&internal_checks),
- GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &TALER_ARL_master_pub),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
diff --git a/src/auditor/taler-helper-auditor-purses.c b/src/auditor/taler-helper-auditor-purses.c
new file mode 100644
index 000000000..967ac13a7
--- /dev/null
+++ b/src/auditor/taler-helper-auditor-purses.c
@@ -0,0 +1,1451 @@
+/*
+ This file is part of TALER
+ Copyright (C) 2016-2024 Taler Systems SA
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU Affero Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU Affero Public License for more details.
+
+ You should have received a copy of the GNU Affero Public License along with
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file auditor/taler-helper-auditor-purses.c
+ * @brief audits the purses of an exchange database
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include <gnunet/gnunet_util_lib.h>
+#include "taler_auditordb_plugin.h"
+#include "taler_exchangedb_lib.h"
+#include "taler_json_lib.h"
+#include "taler_bank_service.h"
+#include "taler_signatures.h"
+#include "report-lib.h"
+
+
+/**
+ * Use a 1 day grace period to deal with clocks not being perfectly synchronized.
+ */
+#define EXPIRATION_GRACE_PERIOD GNUNET_TIME_UNIT_DAYS
+
+/**
+ * Return value from main().
+ */
+static int global_ret;
+
+/**
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
+ */
+static int test_mode;
+
+/**
+ * Checkpointing our progress for purses.
+ */
+static TALER_ARL_DEF_PP (purse_account_merge_serial_id);
+static TALER_ARL_DEF_PP (purse_decision_serial_id);
+static TALER_ARL_DEF_PP (purse_deposits_serial_id);
+static TALER_ARL_DEF_PP (purse_merges_serial_id);
+static TALER_ARL_DEF_PP (purse_request_serial_id);
+static TALER_ARL_DEF_PP (purse_open_counter);
+static TALER_ARL_DEF_AB (purse_global_balance);
+
+/**
+ * Array of reports about row inconsistencies.
+ */
+static json_t *report_row_inconsistencies;
+
+/**
+ * Array of reports about purse balance insufficient inconsistencies.
+ */
+static json_t *report_purse_balance_insufficient_inconsistencies;
+
+/**
+ * Total amount purses were merged with insufficient balance.
+ */
+static struct TALER_Amount total_balance_insufficient_loss;
+
+/**
+ * Total amount purse decisions are delayed past deadline.
+ */
+static struct TALER_Amount total_delayed_decisions;
+
+/**
+ * Array of reports about purses's not being closed inconsistencies.
+ */
+static json_t *report_purse_not_closed_inconsistencies;
+
+/**
+ * Total amount affected by purses not having been closed on time.
+ */
+static struct TALER_Amount total_balance_purse_not_closed;
+
+/**
+ * Report about amount calculation differences (causing profit
+ * or loss at the exchange).
+ */
+static json_t *report_amount_arithmetic_inconsistencies;
+
+/**
+ * Profits the exchange made by bad amount calculations.
+ */
+static struct TALER_Amount total_arithmetic_delta_plus;
+
+/**
+ * Losses the exchange made by bad amount calculations.
+ */
+static struct TALER_Amount total_arithmetic_delta_minus;
+
+/**
+ * Array of reports about coin operations with bad signatures.
+ */
+static json_t *report_bad_sig_losses;
+
+/**
+ * Total amount lost by operations for which signatures were invalid.
+ */
+static struct TALER_Amount total_bad_sig_loss;
+
+/**
+ * Should we run checks that only work for exchange-internal audits?
+ */
+static int internal_checks;
+
+/* ***************************** Report logic **************************** */
+
+
+/**
+ * Report a (serious) inconsistency in the exchange's database with
+ * respect to calculations involving amounts.
+ *
+ * @param operation what operation had the inconsistency
+ * @param rowid affected row, 0 if row is missing
+ * @param exchange amount calculated by exchange
+ * @param auditor amount calculated by auditor
+ * @param profitable 1 if @a exchange being larger than @a auditor is
+ * profitable for the exchange for this operation,
+ * -1 if @a exchange being smaller than @a auditor is
+ * profitable for the exchange, and 0 if it is unclear
+ */
+static void
+report_amount_arithmetic_inconsistency (
+ const char *operation,
+ uint64_t rowid,
+ const struct TALER_Amount *exchange,
+ const struct TALER_Amount *auditor,
+ int profitable)
+{
+ struct TALER_Amount delta;
+ struct TALER_Amount *target;
+
+ if (0 < TALER_amount_cmp (exchange,
+ auditor))
+ {
+ /* exchange > auditor */
+ TALER_ARL_amount_subtract (&delta,
+ exchange,
+ auditor);
+ }
+ else
+ {
+ /* auditor < exchange */
+ profitable = -profitable;
+ TALER_ARL_amount_subtract (&delta,
+ auditor,
+ exchange);
+ }
+ TALER_ARL_report (report_amount_arithmetic_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ operation),
+ GNUNET_JSON_pack_uint64 ("rowid",
+ rowid),
+ TALER_JSON_pack_amount ("exchange",
+ exchange),
+ TALER_JSON_pack_amount ("auditor",
+ auditor),
+ GNUNET_JSON_pack_int64 ("profitable",
+ profitable)));
+ if (0 != profitable)
+ {
+ target = (1 == profitable)
+ ? &total_arithmetic_delta_plus
+ : &total_arithmetic_delta_minus;
+ TALER_ARL_amount_add (target,
+ target,
+ &delta);
+ }
+}
+
+
+/**
+ * Report a (serious) inconsistency in the exchange's database.
+ *
+ * @param table affected table
+ * @param rowid affected row, 0 if row is missing
+ * @param diagnostic message explaining the problem
+ */
+static void
+report_row_inconsistency (const char *table,
+ uint64_t rowid,
+ const char *diagnostic)
+{
+ TALER_ARL_report (report_row_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("table",
+ table),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ GNUNET_JSON_pack_string ("diagnostic",
+ diagnostic)));
+}
+
+
+/**
+ * Obtain the purse fee for a purse created at @a time.
+ *
+ * @param atime when was the purse created
+ * @param[out] fee set to the purse fee
+ * @return #GNUNET_OK on success
+ */
+static enum GNUNET_GenericReturnValue
+get_purse_fee (struct GNUNET_TIME_Timestamp atime,
+ struct TALER_Amount *fee)
+{
+ struct TALER_MasterSignatureP master_sig;
+ struct GNUNET_TIME_Timestamp start_date;
+ struct GNUNET_TIME_Timestamp end_date;
+ struct TALER_GlobalFeeSet fees;
+ struct GNUNET_TIME_Relative ptimeout;
+ struct GNUNET_TIME_Relative hexp;
+ uint32_t pacl;
+
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
+ TALER_ARL_edb->get_global_fee (TALER_ARL_edb->cls,
+ atime,
+ &start_date,
+ &end_date,
+ &fees,
+ &ptimeout,
+ &hexp,
+ &pacl,
+ &master_sig))
+ {
+ char *diag;
+
+ GNUNET_asprintf (&diag,
+ "purse fee unavailable at %s\n",
+ GNUNET_TIME_timestamp2s (atime));
+ report_row_inconsistency ("purse-fee",
+ atime.abs_time.abs_value_us,
+ diag);
+ GNUNET_free (diag);
+ return GNUNET_SYSERR;
+ }
+ *fee = fees.purse;
+ return GNUNET_OK;
+}
+
+
+/* ***************************** Analyze purses ************************ */
+/* This logic checks the purses_requests, purse_deposits,
+ purse_refunds, purse_merges and account_merges */
+
+/**
+ * Summary data we keep per purse.
+ */
+struct PurseSummary
+{
+ /**
+ * Public key of the purse.
+ * Always set when the struct is first initialized.
+ */
+ struct TALER_PurseContractPublicKeyP purse_pub;
+
+ /**
+ * Balance of the purse from deposits (includes purse fee, excludes deposit
+ * fees), as calculated by auditor.
+ */
+ struct TALER_Amount balance;
+
+ /**
+ * Expected value of the purse, excludes purse fee.
+ */
+ struct TALER_Amount total_value;
+
+ /**
+ * Purse balance according to exchange DB.
+ */
+ struct TALER_Amount exchange_balance;
+
+ /**
+ * Contract terms of the purse.
+ */
+ struct TALER_PrivateContractHashP h_contract_terms;
+
+ /**
+ * Merge timestamp (as per exchange DB).
+ */
+ struct GNUNET_TIME_Timestamp merge_timestamp;
+
+ /**
+ * Purse creation date. This is when the merge
+ * fee is applied.
+ */
+ struct GNUNET_TIME_Timestamp creation_date;
+
+ /**
+ * Purse expiration date.
+ */
+ struct GNUNET_TIME_Timestamp expiration_date;
+
+ /**
+ * Did we have a previous purse info? Used to decide between UPDATE and
+ * INSERT later. Initialized in #load_auditor_purse_summary().
+ */
+ bool had_pi;
+
+ /**
+ * Was the purse deleted? FIXME: Not yet handled (do we need to? purse
+ * might just appear as expired eventually; but in the meantime, exchange
+ * may seem to have refunded the coins for no good reason...), also we do
+ * not yet check the deletion signature.
+ */
+ bool purse_deleted;
+
+ /**
+ * Was the purse refunded? FIXME: Not yet handled (do we need to?)
+ */
+ bool purse_refunded;
+
+};
+
+
+/**
+ * Load the auditor's remembered state about the purse into @a ps.
+ *
+ * @param[in,out] ps purse summary to (fully) initialize
+ * @return transaction status code
+ */
+static enum GNUNET_DB_QueryStatus
+load_auditor_purse_summary (struct PurseSummary *ps)
+{
+ enum GNUNET_DB_QueryStatus qs;
+ uint64_t rowid;
+
+ qs = TALER_ARL_adb->get_purse_info (TALER_ARL_adb->cls,
+ &ps->purse_pub,
+ &rowid,
+ &ps->balance,
+ &ps->expiration_date);
+ if (0 > qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+ {
+ ps->had_pi = false;
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &ps->balance));
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Creating fresh purse `%s'\n",
+ TALER_B2S (&ps->purse_pub));
+ return GNUNET_DB_STATUS_SUCCESS_NO_RESULTS;
+ }
+ ps->had_pi = true;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Auditor remembers purse `%s' has balance %s\n",
+ TALER_B2S (&ps->purse_pub),
+ TALER_amount2s (&ps->balance));
+ return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
+}
+
+
+/**
+ * Closure to the various callbacks we make while checking a purse.
+ */
+struct PurseContext
+{
+ /**
+ * Map from hash of purse's public key to a `struct PurseSummary`.
+ */
+ struct GNUNET_CONTAINER_MultiHashMap *purses;
+
+ /**
+ * Transaction status code, set to error codes if applicable.
+ */
+ enum GNUNET_DB_QueryStatus qs;
+
+};
+
+
+/**
+ * Create a new reserve for @a reserve_pub in @a rc.
+ *
+ * @param[in,out] pc context to update
+ * @param purse_pub key for which to create a purse
+ * @return NULL on error
+ */
+static struct PurseSummary *
+setup_purse (struct PurseContext *pc,
+ const struct TALER_PurseContractPublicKeyP *purse_pub)
+{
+ struct PurseSummary *ps;
+ struct GNUNET_HashCode key;
+ enum GNUNET_DB_QueryStatus qs;
+
+ GNUNET_CRYPTO_hash (purse_pub,
+ sizeof (*purse_pub),
+ &key);
+ ps = GNUNET_CONTAINER_multihashmap_get (pc->purses,
+ &key);
+ if (NULL != ps)
+ return ps;
+ ps = GNUNET_new (struct PurseSummary);
+ ps->purse_pub = *purse_pub;
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &ps->balance));
+ /* get purse meta-data from exchange DB */
+ qs = TALER_ARL_edb->select_purse (TALER_ARL_edb->cls,
+ purse_pub,
+ &ps->creation_date,
+ &ps->expiration_date,
+ &ps->total_value,
+ &ps->exchange_balance,
+ &ps->h_contract_terms,
+ &ps->merge_timestamp,
+ &ps->purse_deleted,
+ &ps->purse_refunded);
+ if (0 >= qs)
+ {
+ GNUNET_free (ps);
+ pc->qs = qs;
+ return NULL;
+ }
+ if (0 > (qs = load_auditor_purse_summary (ps)))
+ {
+ GNUNET_free (ps);
+ pc->qs = qs;
+ return NULL;
+ }
+ GNUNET_assert (GNUNET_OK ==
+ GNUNET_CONTAINER_multihashmap_put (pc->purses,
+ &key,
+ ps,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ return ps;
+}
+
+
+/**
+ * Function called on purse requests.
+ *
+ * @param cls closure
+ * @param rowid which row in the database was the request stored in
+ * @param purse_pub public key of the purse
+ * @param merge_pub public key representing the merge capability
+ * @param purse_creation when was the purse created
+ * @param purse_expiration when would an unmerged purse expire
+ * @param h_contract_terms contract associated with the purse
+ * @param age_limit the age limit for deposits into the purse
+ * @param target_amount amount to be put into the purse
+ * @param purse_sig signature of the purse over the initialization data
+ * @return #GNUNET_OK to continue to iterate
+ */
+static enum GNUNET_GenericReturnValue
+handle_purse_requested (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_PurseMergePublicKeyP *merge_pub,
+ struct GNUNET_TIME_Timestamp purse_creation,
+ struct GNUNET_TIME_Timestamp purse_expiration,
+ const struct TALER_PrivateContractHashP *h_contract_terms,
+ uint32_t age_limit,
+ const struct TALER_Amount *target_amount,
+ const struct TALER_PurseContractSignatureP *purse_sig)
+{
+ struct PurseContext *pc = cls;
+ struct PurseSummary *ps;
+ struct GNUNET_HashCode key;
+
+ TALER_ARL_USE_PP (purse_request_serial_id) = rowid;
+ if (GNUNET_OK !=
+ TALER_wallet_purse_create_verify (purse_expiration,
+ h_contract_terms,
+ merge_pub,
+ age_limit,
+ target_amount,
+ purse_pub,
+ purse_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "purse-reqeust"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ target_amount),
+ GNUNET_JSON_pack_data_auto ("key_pub",
+ purse_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ target_amount);
+ }
+ GNUNET_CRYPTO_hash (purse_pub,
+ sizeof (*purse_pub),
+ &key);
+ ps = GNUNET_new (struct PurseSummary);
+ ps->purse_pub = *purse_pub;
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &ps->balance));
+ ps->creation_date = purse_creation;
+ ps->expiration_date = purse_expiration;
+ ps->total_value = *target_amount;
+ ps->h_contract_terms = *h_contract_terms;
+ GNUNET_assert (GNUNET_OK ==
+ GNUNET_CONTAINER_multihashmap_put (pc->purses,
+ &key,
+ ps,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about purse deposits that have been made, with
+ * the goal of auditing the deposit's execution.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param deposit deposit details
+ * @param reserve_pub which reserve is the purse merged into, NULL if unknown
+ * @param flags purse flags
+ * @param auditor_balance purse balance (according to the
+ * auditor during auditing)
+ * @param purse_total target amount the purse should reach
+ * @param denom_pub denomination public key of @a coin_pub
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_purse_deposits (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_EXCHANGEDB_PurseDeposit *deposit,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ enum TALER_WalletAccountMergeFlags flags,
+ const struct TALER_Amount *auditor_balance,
+ const struct TALER_Amount *purse_total,
+ const struct TALER_DenominationPublicKey *denom_pub)
+{
+ struct PurseContext *pc = cls;
+ struct TALER_Amount amount_minus_fee;
+ struct PurseSummary *ps;
+ const char *base_url
+ = (NULL == deposit->exchange_base_url)
+ ? TALER_ARL_exchange_url
+ : deposit->exchange_base_url;
+ struct TALER_DenominationHashP h_denom_pub;
+
+ /* should be monotonically increasing */
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (purse_deposits_serial_id));
+ TALER_ARL_USE_PP (purse_deposits_serial_id) = rowid + 1;
+
+ {
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
+ enum GNUNET_DB_QueryStatus qs;
+
+ qs = TALER_ARL_get_denomination_info (denom_pub,
+ &issue,
+ &h_denom_pub);
+ if (0 > qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ if (GNUNET_DB_STATUS_HARD_ERROR == qs)
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Hard database error trying to get denomination %s from database!\n",
+ TALER_B2S (denom_pub));
+ pc->qs = qs;
+ return GNUNET_SYSERR;
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+ {
+ report_row_inconsistency ("purse-deposit",
+ rowid,
+ "denomination key not found");
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+ }
+ TALER_ARL_amount_subtract (&amount_minus_fee,
+ &deposit->amount,
+ &issue->fees.deposit);
+ }
+
+ if (GNUNET_OK !=
+ TALER_wallet_purse_deposit_verify (base_url,
+ &deposit->purse_pub,
+ &deposit->amount,
+ &h_denom_pub,
+ &deposit->h_age_commitment,
+ &deposit->coin_pub,
+ &deposit->coin_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "purse-deposit"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ &deposit->amount),
+ GNUNET_JSON_pack_data_auto ("key_pub",
+ &deposit->coin_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ &deposit->amount);
+ return GNUNET_OK;
+ }
+
+ ps = setup_purse (pc,
+ &deposit->purse_pub);
+ if (NULL == ps)
+ {
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == pc->qs)
+ {
+ report_row_inconsistency ("purse-deposit",
+ rowid,
+ "purse not found");
+ }
+ else
+ {
+ /* Database trouble!? */
+ GNUNET_break (0);
+ }
+ return GNUNET_SYSERR;
+ }
+ TALER_ARL_amount_add (&ps->balance,
+ &ps->balance,
+ &amount_minus_fee);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (purse_global_balance),
+ &TALER_ARL_USE_AB (purse_global_balance),
+ &amount_minus_fee);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about purse merges that have been made, with
+ * the goal of auditing the purse merge execution.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param partner_base_url where is the reserve, NULL for this exchange
+ * @param amount total amount expected in the purse
+ * @param balance current balance in the purse
+ * @param flags purse flags
+ * @param merge_pub merge capability key
+ * @param reserve_pub reserve the merge affects
+ * @param merge_sig signature affirming the merge
+ * @param purse_pub purse key
+ * @param merge_timestamp when did the merge happen
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_purse_merged (
+ void *cls,
+ uint64_t rowid,
+ const char *partner_base_url,
+ const struct TALER_Amount *amount,
+ const struct TALER_Amount *balance,
+ enum TALER_WalletAccountMergeFlags flags,
+ const struct TALER_PurseMergePublicKeyP *merge_pub,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_PurseMergeSignatureP *merge_sig,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ struct GNUNET_TIME_Timestamp merge_timestamp)
+{
+ struct PurseContext *pc = cls;
+ struct PurseSummary *ps;
+
+ /* should be monotonically increasing */
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (purse_merges_serial_id));
+ TALER_ARL_USE_PP (purse_merges_serial_id) = rowid + 1;
+
+ {
+ char *reserve_url;
+
+ reserve_url
+ = TALER_reserve_make_payto (NULL == partner_base_url
+ ? TALER_ARL_exchange_url
+ : partner_base_url,
+ reserve_pub);
+ if (GNUNET_OK !=
+ TALER_wallet_purse_merge_verify (reserve_url,
+ merge_timestamp,
+ purse_pub,
+ merge_pub,
+ merge_sig))
+ {
+ GNUNET_free (reserve_url);
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "merge-purse"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ amount),
+ GNUNET_JSON_pack_data_auto ("key_pub",
+ merge_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ amount);
+ return GNUNET_OK;
+ }
+ GNUNET_free (reserve_url);
+ }
+
+ ps = setup_purse (pc,
+ purse_pub);
+ if (NULL == ps)
+ {
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == pc->qs)
+ {
+ report_row_inconsistency ("purse-merge",
+ rowid,
+ "purse not found");
+ }
+ else
+ {
+ /* Database trouble!? */
+ GNUNET_break (0);
+ }
+ return GNUNET_SYSERR;
+ }
+ GNUNET_break (0 ==
+ GNUNET_TIME_timestamp_cmp (merge_timestamp,
+ ==,
+ ps->merge_timestamp));
+ TALER_ARL_amount_add (&ps->balance,
+ &ps->balance,
+ amount);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about account merge requests that have been
+ * made, with the goal of auditing the account merge execution.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param reserve_pub reserve affected by the merge
+ * @param purse_pub purse being merged
+ * @param h_contract_terms hash over contract of the purse
+ * @param purse_expiration when would the purse expire
+ * @param amount total amount in the purse
+ * @param min_age minimum age of all coins deposited into the purse
+ * @param flags how was the purse created
+ * @param purse_fee if a purse fee was paid, how high is it
+ * @param merge_timestamp when was the merge approved
+ * @param reserve_sig signature by reserve approving the merge
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_account_merged (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_PrivateContractHashP *h_contract_terms,
+ struct GNUNET_TIME_Timestamp purse_expiration,
+ const struct TALER_Amount *amount,
+ uint32_t min_age,
+ enum TALER_WalletAccountMergeFlags flags,
+ const struct TALER_Amount *purse_fee,
+ struct GNUNET_TIME_Timestamp merge_timestamp,
+ const struct TALER_ReserveSignatureP *reserve_sig)
+{
+ struct PurseContext *pc = cls;
+ struct PurseSummary *ps;
+
+ /* should be monotonically increasing */
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (purse_account_merge_serial_id));
+ TALER_ARL_USE_PP (purse_account_merge_serial_id) = rowid + 1;
+ if (GNUNET_OK !=
+ TALER_wallet_account_merge_verify (merge_timestamp,
+ purse_pub,
+ purse_expiration,
+ h_contract_terms,
+ amount,
+ purse_fee,
+ min_age,
+ flags,
+ reserve_pub,
+ reserve_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "account-merge"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ purse_fee),
+ GNUNET_JSON_pack_data_auto ("key_pub",
+ reserve_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ purse_fee);
+ return GNUNET_OK;
+ }
+ ps = setup_purse (pc,
+ purse_pub);
+ if (NULL == ps)
+ {
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == pc->qs)
+ {
+ report_row_inconsistency ("account-merge",
+ rowid,
+ "purse not found");
+ }
+ else
+ {
+ /* Database trouble!? */
+ GNUNET_break (0);
+ }
+ return GNUNET_SYSERR;
+ }
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (purse_global_balance),
+ &TALER_ARL_USE_AB (purse_global_balance),
+ purse_fee);
+ TALER_ARL_amount_add (&ps->balance,
+ &ps->balance,
+ purse_fee);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about purse decisions that have been made.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param purse_pub which purse was the decision made on
+ * @param refunded true if decision was to refund
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_purse_decision (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ bool refunded)
+{
+ struct PurseContext *pc = cls;
+ struct PurseSummary *ps;
+ struct GNUNET_HashCode key;
+ enum GNUNET_DB_QueryStatus qs;
+ struct TALER_Amount purse_fee;
+ struct TALER_Amount balance_without_purse_fee;
+
+ TALER_ARL_USE_PP (purse_decision_serial_id) = rowid;
+ ps = setup_purse (pc,
+ purse_pub);
+ if (NULL == ps)
+ {
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == pc->qs)
+ {
+ report_row_inconsistency ("purse-decision",
+ rowid,
+ "purse not found");
+ }
+ else
+ {
+ /* Database trouble!? */
+ GNUNET_break (0);
+ }
+ return GNUNET_SYSERR;
+ }
+ if (GNUNET_OK !=
+ get_purse_fee (ps->creation_date,
+ &purse_fee))
+ {
+ report_row_inconsistency ("purse-request",
+ rowid,
+ "purse fee unavailable");
+ }
+ if (0 >
+ TALER_amount_subtract (&balance_without_purse_fee,
+ &ps->balance,
+ &purse_fee))
+ {
+ report_row_inconsistency ("purse-request",
+ rowid,
+ "purse fee higher than balance");
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &balance_without_purse_fee));
+ }
+
+ if (refunded)
+ {
+ if (-1 != TALER_amount_cmp (&balance_without_purse_fee,
+ &ps->total_value))
+ {
+ report_amount_arithmetic_inconsistency ("purse-decision: refund",
+ rowid,
+ &balance_without_purse_fee,
+ &ps->total_value,
+ 0);
+ }
+ }
+ else
+ {
+ if (-1 == TALER_amount_cmp (&balance_without_purse_fee,
+ &ps->total_value))
+ {
+ report_amount_arithmetic_inconsistency ("purse-decision: merge",
+ rowid,
+ &ps->total_value,
+ &balance_without_purse_fee,
+ 0);
+ TALER_ARL_amount_add (&total_balance_insufficient_loss,
+ &total_balance_insufficient_loss,
+ &ps->total_value);
+ }
+ }
+
+ qs = TALER_ARL_adb->delete_purse_info (TALER_ARL_adb->cls,
+ purse_pub);
+ GNUNET_assert (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS != qs);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
+ pc->qs = qs;
+ return GNUNET_SYSERR;
+ }
+ GNUNET_CRYPTO_hash (purse_pub,
+ sizeof (*purse_pub),
+ &key);
+ GNUNET_assert (GNUNET_YES ==
+ GNUNET_CONTAINER_multihashmap_remove (pc->purses,
+ &key,
+ ps));
+ GNUNET_free (ps);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called on expired purses.
+ *
+ * @param cls closure
+ * @param purse_pub public key of the purse
+ * @param balance amount of money in the purse
+ * @param expiration_date when did the purse expire?
+ * @return #GNUNET_OK to continue to iterate
+ */
+static enum GNUNET_GenericReturnValue
+handle_purse_expired (
+ void *cls,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_Amount *balance,
+ struct GNUNET_TIME_Timestamp expiration_date)
+{
+ struct PurseContext *pc = cls;
+
+ (void) pc;
+ TALER_ARL_report (report_purse_not_closed_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_data_auto ("purse_pub",
+ purse_pub),
+ TALER_JSON_pack_amount ("balance",
+ balance),
+ TALER_JSON_pack_time_abs_human ("expired",
+ expiration_date.abs_time)));
+ TALER_ARL_amount_add (&total_delayed_decisions,
+ &total_delayed_decisions,
+ balance);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Check that the purse summary matches what the exchange database
+ * thinks about the purse, and update our own state of the purse.
+ *
+ * Remove all purses that we are happy with from the DB.
+ *
+ * @param cls our `struct PurseContext`
+ * @param key hash of the purse public key
+ * @param value a `struct PurseSummary`
+ * @return #GNUNET_OK to process more entries
+ */
+static enum GNUNET_GenericReturnValue
+verify_purse_balance (void *cls,
+ const struct GNUNET_HashCode *key,
+ void *value)
+{
+ struct PurseContext *pc = cls;
+ struct PurseSummary *ps = value;
+ enum GNUNET_GenericReturnValue ret;
+ enum GNUNET_DB_QueryStatus qs;
+
+ ret = GNUNET_OK;
+ if (internal_checks)
+ {
+ struct TALER_Amount pf;
+ struct TALER_Amount balance_without_purse_fee;
+
+ /* subtract purse fee from ps->balance to get actual balance we expect, as
+ we track the balance including purse fee, while the exchange subtracts
+ the purse fee early on. */
+ if (GNUNET_OK !=
+ get_purse_fee (ps->creation_date,
+ &pf))
+ {
+ GNUNET_break (0);
+ report_row_inconsistency ("purse",
+ 0,
+ "purse fee unavailable");
+ }
+ if (0 >
+ TALER_amount_subtract (&balance_without_purse_fee,
+ &ps->balance,
+ &pf))
+ {
+ report_row_inconsistency ("purse",
+ 0,
+ "purse fee higher than balance");
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &balance_without_purse_fee));
+ }
+
+ if (0 != TALER_amount_cmp (&ps->exchange_balance,
+ &balance_without_purse_fee))
+ {
+ report_amount_arithmetic_inconsistency ("purse-balance",
+ 0,
+ &ps->exchange_balance,
+ &balance_without_purse_fee,
+ 0);
+ }
+ }
+
+ if (ps->had_pi)
+ qs = TALER_ARL_adb->update_purse_info (TALER_ARL_adb->cls,
+ &ps->purse_pub,
+ &ps->balance);
+ else
+ qs = TALER_ARL_adb->insert_purse_info (TALER_ARL_adb->cls,
+ &ps->purse_pub,
+ &ps->balance,
+ ps->expiration_date);
+ GNUNET_assert (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS != qs);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
+ pc->qs = qs;
+ return GNUNET_SYSERR;
+ }
+
+ GNUNET_assert (GNUNET_YES ==
+ GNUNET_CONTAINER_multihashmap_remove (pc->purses,
+ key,
+ ps));
+ GNUNET_free (ps);
+ return ret;
+}
+
+
+/**
+ * Analyze purses for being well-formed.
+ *
+ * @param cls NULL
+ * @return transaction status code
+ */
+static enum GNUNET_DB_QueryStatus
+analyze_purses (void *cls)
+{
+ struct PurseContext pc;
+ enum GNUNET_DB_QueryStatus qsx;
+ enum GNUNET_DB_QueryStatus qs;
+ enum GNUNET_DB_QueryStatus qsp;
+
+ (void) cls;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Analyzing purses\n");
+ qsp = TALER_ARL_adb->get_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_PP (purse_account_merge_serial_id),
+ TALER_ARL_GET_PP (purse_decision_serial_id),
+ TALER_ARL_GET_PP (purse_deposits_serial_id),
+ TALER_ARL_GET_PP (purse_merges_serial_id),
+ TALER_ARL_GET_PP (purse_request_serial_id),
+ TALER_ARL_GET_PP (purse_open_counter),
+ NULL);
+ if (0 > qsp)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsp);
+ return qsp;
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qsp)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+ "First analysis using this auditor, starting audit from scratch\n");
+ }
+ else
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Resuming purse audit at %llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_request_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_decision_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_merges_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_deposits_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_account_merge_serial_id));
+ }
+ pc.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
+ qsx = TALER_ARL_adb->get_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_AB (purse_global_balance),
+ NULL);
+ if (qsx < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsx);
+ return qsx;
+ }
+ pc.purses = GNUNET_CONTAINER_multihashmap_create (512,
+ GNUNET_NO);
+
+ qs = TALER_ARL_edb->select_purse_requests_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (purse_request_serial_id),
+ &handle_purse_requested,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+
+ qs = TALER_ARL_edb->select_purse_merges_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (purse_merges_serial_id),
+ &handle_purse_merged,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ qs = TALER_ARL_edb->select_purse_deposits_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (purse_deposits_serial_id),
+ &handle_purse_deposits,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ /* Charge purse fee! */
+ qs = TALER_ARL_edb->select_account_merges_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (purse_account_merge_serial_id),
+ &handle_account_merged,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+
+ qs = TALER_ARL_edb->select_all_purse_decisions_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (purse_decision_serial_id),
+ &handle_purse_decision,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+
+ qs = TALER_ARL_adb->select_purse_expired (
+ TALER_ARL_adb->cls,
+ &handle_purse_expired,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+
+ GNUNET_CONTAINER_multihashmap_iterate (pc.purses,
+ &verify_purse_balance,
+ &pc);
+ GNUNET_break (0 ==
+ GNUNET_CONTAINER_multihashmap_size (pc.purses));
+ GNUNET_CONTAINER_multihashmap_destroy (pc.purses);
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != pc.qs)
+ return qs;
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qsx)
+ {
+ qs = TALER_ARL_adb->insert_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (purse_global_balance),
+ NULL);
+ }
+ else
+ {
+ qs = TALER_ARL_adb->update_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (purse_global_balance),
+ NULL);
+ }
+ if (0 >= qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsp)
+ qs = TALER_ARL_adb->update_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (purse_account_merge_serial_id),
+ TALER_ARL_SET_PP (purse_decision_serial_id),
+ TALER_ARL_SET_PP (purse_deposits_serial_id),
+ TALER_ARL_SET_PP (purse_merges_serial_id),
+ TALER_ARL_SET_PP (purse_request_serial_id),
+ TALER_ARL_SET_PP (purse_open_counter),
+ NULL);
+ else
+ qs = TALER_ARL_adb->insert_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (purse_account_merge_serial_id),
+ TALER_ARL_SET_PP (purse_decision_serial_id),
+ TALER_ARL_SET_PP (purse_deposits_serial_id),
+ TALER_ARL_SET_PP (purse_merges_serial_id),
+ TALER_ARL_SET_PP (purse_request_serial_id),
+ TALER_ARL_SET_PP (purse_open_counter),
+ NULL);
+ if (0 >= qs)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Failed to update auditor DB, not recording progress\n");
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Concluded purse audit step at %llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_request_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_decision_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_merges_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_deposits_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_account_merge_serial_id));
+ return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
+}
+
+
+/**
+ * Main function that will be run.
+ *
+ * @param cls closure
+ * @param args remaining command-line arguments
+ * @param cfgfile name of the configuration file used (for saving, can be NULL!)
+ * @param c configuration
+ */
+static void
+run (void *cls,
+ char *const *args,
+ const char *cfgfile,
+ const struct GNUNET_CONFIGURATION_Handle *c)
+{
+ (void) cls;
+ (void) args;
+ (void) cfgfile;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Launching auditor\n");
+ if (GNUNET_OK !=
+ TALER_ARL_init (c))
+ {
+ global_ret = EXIT_FAILURE;
+ return;
+ }
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (
+ purse_global_balance)));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_balance_insufficient_loss));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_delayed_decisions));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_arithmetic_delta_plus));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_arithmetic_delta_minus));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_balance_purse_not_closed));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_bad_sig_loss));
+
+ GNUNET_assert (NULL !=
+ (report_row_inconsistencies = json_array ()));
+ GNUNET_assert (NULL !=
+ (report_purse_balance_insufficient_inconsistencies
+ = json_array ()));
+ GNUNET_assert (NULL !=
+ (report_purse_not_closed_inconsistencies
+ = json_array ()));
+ GNUNET_assert (NULL !=
+ (report_amount_arithmetic_inconsistencies
+ = json_array ()));
+ GNUNET_assert (NULL !=
+ (report_bad_sig_losses = json_array ()));
+ if (GNUNET_OK !=
+ TALER_ARL_setup_sessions_and_run (&analyze_purses,
+ NULL))
+ {
+ global_ret = EXIT_FAILURE;
+ return;
+ }
+ TALER_ARL_done (
+ GNUNET_JSON_PACK (
+ /* Globals (REVIEW!) */
+ TALER_JSON_pack_amount ("total_balance_insufficient",
+ &total_balance_insufficient_loss),
+ TALER_JSON_pack_amount ("total_delayed_purse_decisions",
+ &total_delayed_decisions),
+ GNUNET_JSON_pack_array_steal (
+ "purse_balance_insufficient_inconsistencies",
+ report_purse_balance_insufficient_inconsistencies),
+ TALER_JSON_pack_amount ("total_balance_purse_not_closed",
+ &total_balance_purse_not_closed),
+ TALER_JSON_pack_amount ("total_bad_sig_loss",
+ &total_bad_sig_loss),
+ TALER_JSON_pack_amount ("total_arithmetic_delta_plus",
+ &total_arithmetic_delta_plus),
+ TALER_JSON_pack_amount ("total_arithmetic_delta_minus",
+ &total_arithmetic_delta_minus),
+
+ /* Global 'balances' */
+ TALER_JSON_pack_amount ("total_purse_balance",
+ &TALER_ARL_USE_AB (purse_global_balance)),
+ GNUNET_JSON_pack_uint64 ("total_purse_count",
+ TALER_ARL_USE_PP (purse_open_counter)),
+
+ GNUNET_JSON_pack_array_steal ("purse_not_closed_inconsistencies",
+ report_purse_not_closed_inconsistencies),
+ GNUNET_JSON_pack_array_steal ("bad_sig_losses",
+ report_bad_sig_losses),
+ GNUNET_JSON_pack_array_steal ("row_inconsistencies",
+ report_row_inconsistencies),
+ GNUNET_JSON_pack_array_steal ("amount_arithmetic_inconsistencies",
+ report_amount_arithmetic_inconsistencies),
+ /* Information about audited range ... */
+ TALER_JSON_pack_time_abs_human ("auditor_start_time",
+ start_time),
+ TALER_JSON_pack_time_abs_human ("auditor_end_time",
+ GNUNET_TIME_absolute_get ()),
+ GNUNET_JSON_pack_uint64 ("start_ppp_purse_merges_serial_id",
+ 0 /* not supported anymore */),
+ GNUNET_JSON_pack_uint64 ("start_ppp_purse_deposits_serial_id",
+ 0 /* not supported anymore */),
+ GNUNET_JSON_pack_uint64 ("start_ppp_account_merge_serial_id",
+ 0 /* not supported anymore */),
+ GNUNET_JSON_pack_uint64 ("end_ppp_purse_merges_serial_id",
+ TALER_ARL_USE_PP (
+ purse_merges_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppp_purse_deposits_serial_id",
+ TALER_ARL_USE_PP (
+ purse_deposits_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppp_account_merge_serial_id",
+ TALER_ARL_USE_PP (
+ purse_account_merge_serial_id))));
+}
+
+
+/**
+ * The main function to check the database's handling of purses.
+ *
+ * @param argc number of arguments from the command line
+ * @param argv command line arguments
+ * @return 0 ok, 1 on error
+ */
+int
+main (int argc,
+ char *const *argv)
+{
+ const struct GNUNET_GETOPT_CommandLineOption options[] = {
+ GNUNET_GETOPT_option_flag ('i',
+ "internal",
+ "perform checks only applicable for exchange-internal audits",
+ &internal_checks),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
+ GNUNET_GETOPT_option_timetravel ('T',
+ "timetravel"),
+ GNUNET_GETOPT_OPTION_END
+ };
+ enum GNUNET_GenericReturnValue ret;
+
+ /* force linker to link against libtalerutil; if we do
+ not do this, the linker may "optimize" libtalerutil
+ away and skip #TALER_OS_init(), which we do need */
+ (void) TALER_project_data_default ();
+ if (GNUNET_OK !=
+ GNUNET_STRINGS_get_utf8_args (argc, argv,
+ &argc, &argv))
+ return EXIT_INVALIDARGUMENT;
+ ret = GNUNET_PROGRAM_run (
+ argc,
+ argv,
+ "taler-helper-auditor-purses",
+ gettext_noop ("Audit Taler exchange purse handling"),
+ options,
+ &run,
+ NULL);
+ GNUNET_free_nz ((void *) argv);
+ if (GNUNET_SYSERR == ret)
+ return EXIT_INVALIDARGUMENT;
+ if (GNUNET_NO == ret)
+ return EXIT_SUCCESS;
+ return global_ret;
+}
+
+
+/* end of taler-helper-auditor-purses.c */
diff --git a/src/auditor/taler-helper-auditor-render.py b/src/auditor/taler-helper-auditor-render.py
index 4b086cb62..b9c92b29c 100644
--- a/src/auditor/taler-helper-auditor-render.py
+++ b/src/auditor/taler-helper-auditor-render.py
@@ -53,4 +53,14 @@ jinjaEnv = jinja2.Environment(loader=StdinLoader(),
autoescape=False)
tmpl = jinjaEnv.get_template('stdin');
-print(tmpl.render(aggregation = jsonData1, coins = jsonData2, deposits = jsonData3, reserves = jsonData4, wire = jsonData5))
+try:
+ print(tmpl.render(aggregation = jsonData1, coins = jsonData2, deposits = jsonData3, reserves = jsonData4, wire = jsonData5))
+except jinja2.TemplateSyntaxError as error:
+ print("Template syntax error: {error.message} on line {error.lineno}.".format(error=error))
+ exit(1)
+except jinja2.UndefinedError as error:
+ print("Template undefined error: {error.message}.".format(error=error))
+ exit(1)
+except TypeError as error:
+ print("Template type error: {0}.".format(error.args[0]))
+ exit(1)
diff --git a/src/auditor/taler-helper-auditor-reserves.c b/src/auditor/taler-helper-auditor-reserves.c
index 17d628399..aa35c6a75 100644
--- a/src/auditor/taler-helper-auditor-reserves.c
+++ b/src/auditor/taler-helper-auditor-reserves.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2016-2021 Taler Systems SA
+ Copyright (C) 2016-2022 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero Public License as published by the Free Software
@@ -39,6 +39,14 @@
static int global_ret;
/**
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
+ */
+static int test_mode;
+
+/**
* After how long should idle reserves be closed?
*/
static struct GNUNET_TIME_Relative idle_reserve_expiration_time;
@@ -46,15 +54,29 @@ static struct GNUNET_TIME_Relative idle_reserve_expiration_time;
/**
* Checkpointing our progress for reserves.
*/
-static struct TALER_AUDITORDB_ProgressPointReserve ppr;
+static TALER_ARL_DEF_PP (reserves_reserve_in_serial_id);
+static TALER_ARL_DEF_PP (reserves_reserve_out_serial_id);
+static TALER_ARL_DEF_PP (reserves_reserve_recoup_serial_id);
+static TALER_ARL_DEF_PP (reserves_reserve_open_serial_id);
+static TALER_ARL_DEF_PP (reserves_reserve_close_serial_id);
+static TALER_ARL_DEF_PP (reserves_purse_decisions_serial_id);
+static TALER_ARL_DEF_PP (reserves_account_merges_serial_id);
+static TALER_ARL_DEF_PP (reserves_history_requests_serial_id);
/**
- * Checkpointing our progress for reserves.
+ * Tracked global reserve balances.
*/
-static struct TALER_AUDITORDB_ProgressPointReserve ppr_start;
+static TALER_ARL_DEF_AB (reserves_reserve_total_balance);
+static TALER_ARL_DEF_AB (reserves_reserve_loss);
+static TALER_ARL_DEF_AB (reserves_withdraw_fee_revenue);
+static TALER_ARL_DEF_AB (reserves_close_fee_revenue);
+static TALER_ARL_DEF_AB (reserves_purse_fee_revenue);
+static TALER_ARL_DEF_AB (reserves_open_fee_revenue);
+static TALER_ARL_DEF_AB (reserves_history_fee_revenue);
+
/**
- * Array of reports about row inconsitencies.
+ * Array of reports about row inconsistencies.
*/
static json_t *report_row_inconsistencies;
@@ -65,14 +87,14 @@ static json_t *report_row_inconsistencies;
static json_t *denomination_key_validity_withdraw_inconsistencies;
/**
- * Array of reports about reserve balance insufficient inconsitencies.
+ * Array of reports about reserve balance insufficient inconsistencies.
*/
static json_t *report_reserve_balance_insufficient_inconsistencies;
/**
- * Total amount reserves were charged beyond their balance.
+ * Array of reports about purse balance insufficient inconsistencies.
*/
-static struct TALER_Amount total_balance_insufficient_loss;
+static json_t *report_purse_balance_insufficient_inconsistencies;
/**
* Array of reports about reserve balance summary wrong in database.
@@ -81,18 +103,20 @@ static json_t *report_reserve_balance_summary_wrong_inconsistencies;
/**
* Total delta between expected and stored reserve balance summaries,
- * for positive deltas.
+ * for positive deltas. Used only when internal checks are
+ * enabled.
*/
static struct TALER_Amount total_balance_summary_delta_plus;
/**
* Total delta between expected and stored reserve balance summaries,
- * for negative deltas.
+ * for negative deltas. Used only when internal checks are
+ * enabled.
*/
static struct TALER_Amount total_balance_summary_delta_minus;
/**
- * Array of reports about reserve's not being closed inconsitencies.
+ * Array of reports about reserve's not being closed inconsistencies.
*/
static json_t *report_reserve_not_closed_inconsistencies;
@@ -118,21 +142,6 @@ static struct TALER_Amount total_arithmetic_delta_plus;
static struct TALER_Amount total_arithmetic_delta_minus;
/**
- * Expected balance in the escrow account.
- */
-static struct TALER_Amount total_escrow_balance;
-
-/**
- * Recoups we made on denominations that were not revoked (!?).
- */
-static struct TALER_Amount total_irregular_recoups;
-
-/**
- * Total withdraw fees earned.
- */
-static struct TALER_Amount total_withdraw_fee_income;
-
-/**
* Array of reports about coin operations with bad signatures.
*/
static json_t *report_bad_sig_losses;
@@ -205,8 +214,8 @@ report_amount_arithmetic_inconsistency (
if (0 != profitable)
{
target = (1 == profitable)
- ? &total_arithmetic_delta_plus
- : &total_arithmetic_delta_minus;
+ ? &total_arithmetic_delta_plus
+ : &total_arithmetic_delta_minus;
TALER_ARL_amount_add (target,
target,
&delta);
@@ -264,21 +273,15 @@ struct ReserveSummary
struct TALER_Amount total_out;
/**
- * Sum of withdraw fees encountered during this transaction.
+ * Sum of balance and fees encountered during this transaction.
*/
- struct TALER_Amount total_fee;
+ struct TALER_AUDITORDB_ReserveFeeBalance curr_balance;
/**
- * Previous balance of the reserve as remembered by the auditor.
+ * Previous balances of the reserve as remembered by the auditor.
* (updated based on @e total_in and @e total_out at the end).
*/
- struct TALER_Amount balance_at_previous_audit;
-
- /**
- * Previous withdraw fee balance of the reserve, as remembered by the auditor.
- * (updated based on @e total_fee at the end).
- */
- struct TALER_Amount a_withdraw_fee_balance;
+ struct TALER_AUDITORDB_ReserveFeeBalance prev_balance;
/**
* Previous reserve expiration data, as remembered by the auditor.
@@ -297,7 +300,7 @@ struct ReserveSummary
* #load_auditor_reserve_summary() together with the a-* values
* (if available).
*/
- int had_ri;
+ bool had_ri;
};
@@ -318,10 +321,8 @@ load_auditor_reserve_summary (struct ReserveSummary *rs)
qs = TALER_ARL_adb->get_reserve_info (TALER_ARL_adb->cls,
&rs->reserve_pub,
- &TALER_ARL_master_pub,
&rowid,
- &rs->balance_at_previous_audit,
- &rs->a_withdraw_fee_balance,
+ &rs->prev_balance,
&rs->a_expiration_date,
&rs->sender_account);
if (0 > qs)
@@ -331,34 +332,38 @@ load_auditor_reserve_summary (struct ReserveSummary *rs)
}
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
{
- rs->had_ri = GNUNET_NO;
+ rs->had_ri = false;
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (rs->total_in.currency,
+ &rs->prev_balance.reserve_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (rs->total_in.currency,
+ &rs->prev_balance.reserve_loss));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (rs->total_in.currency,
+ &rs->prev_balance.withdraw_fee_balance));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (rs->total_in.currency,
- &rs->balance_at_previous_audit));
+ &rs->prev_balance.close_fee_balance));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (rs->total_in.currency,
- &rs->a_withdraw_fee_balance));
+ &rs->prev_balance.purse_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (rs->total_in.currency,
+ &rs->prev_balance.open_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (rs->total_in.currency,
+ &rs->prev_balance.history_fee_balance));
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Creating fresh reserve `%s' with starting balance %s\n",
- TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&rs->balance_at_previous_audit));
+ "Creating fresh reserve `%s'\n",
+ TALER_B2S (&rs->reserve_pub));
return GNUNET_DB_STATUS_SUCCESS_NO_RESULTS;
}
- rs->had_ri = GNUNET_YES;
- if ( (GNUNET_YES !=
- TALER_amount_cmp_currency (&rs->balance_at_previous_audit,
- &rs->a_withdraw_fee_balance)) ||
- (GNUNET_YES !=
- TALER_amount_cmp_currency (&rs->total_in,
- &rs->balance_at_previous_audit)) )
- {
- GNUNET_break (0);
- return GNUNET_DB_STATUS_HARD_ERROR;
- }
+ rs->had_ri = true;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Auditor remembers reserve `%s' has balance %s\n",
TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&rs->balance_at_previous_audit));
+ TALER_amount2s (&rs->prev_balance.reserve_balance));
return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
}
@@ -390,6 +395,72 @@ struct ReserveContext
/**
+ * Create a new reserve for @a reserve_pub in @a rc.
+ *
+ * @param[in,out] rc context to update
+ * @param reserve_pub key for which to create a reserve
+ * @return NULL on error
+ */
+static struct ReserveSummary *
+setup_reserve (struct ReserveContext *rc,
+ const struct TALER_ReservePublicKeyP *reserve_pub)
+{
+ struct ReserveSummary *rs;
+ struct GNUNET_HashCode key;
+ enum GNUNET_DB_QueryStatus qs;
+
+ GNUNET_CRYPTO_hash (reserve_pub,
+ sizeof (*reserve_pub),
+ &key);
+ rs = GNUNET_CONTAINER_multihashmap_get (rc->reserves,
+ &key);
+ if (NULL != rs)
+ return rs;
+ rs = GNUNET_new (struct ReserveSummary);
+ rs->reserve_pub = *reserve_pub;
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->total_in));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->total_out));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.reserve_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.reserve_loss));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.withdraw_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.close_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.purse_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.open_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.history_fee_balance));
+ if (0 > (qs = load_auditor_reserve_summary (rs)))
+ {
+ GNUNET_free (rs);
+ rc->qs = qs;
+ return NULL;
+ }
+ GNUNET_assert (GNUNET_OK ==
+ GNUNET_CONTAINER_multihashmap_put (rc->reserves,
+ &key,
+ rs,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ return rs;
+}
+
+
+/**
* Function called with details about incoming wire transfers.
*
* @param cls our `struct ReserveContext`
@@ -401,7 +472,7 @@ struct ReserveContext
* @param execution_date when did we receive the funds
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
handle_reserve_in (void *cls,
uint64_t rowid,
const struct TALER_ReservePublicKeyP *reserve_pub,
@@ -411,54 +482,22 @@ handle_reserve_in (void *cls,
struct GNUNET_TIME_Timestamp execution_date)
{
struct ReserveContext *rc = cls;
- struct GNUNET_HashCode key;
struct ReserveSummary *rs;
struct GNUNET_TIME_Timestamp expiry;
- enum GNUNET_DB_QueryStatus qs;
(void) wire_reference;
/* should be monotonically increasing */
- GNUNET_assert (rowid >= ppr.last_reserve_in_serial_id);
- ppr.last_reserve_in_serial_id = rowid + 1;
-
- GNUNET_CRYPTO_hash (reserve_pub,
- sizeof (*reserve_pub),
- &key);
- rs = GNUNET_CONTAINER_multihashmap_get (rc->reserves,
- &key);
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_reserve_in_serial_id));
+ TALER_ARL_USE_PP (reserves_reserve_in_serial_id) = rowid + 1;
+ rs = setup_reserve (rc,
+ reserve_pub);
if (NULL == rs)
{
- rs = GNUNET_new (struct ReserveSummary);
- rs->sender_account = GNUNET_strdup (sender_account_details);
- rs->reserve_pub = *reserve_pub;
- rs->total_in = *credit;
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (credit->currency,
- &rs->total_out));
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (credit->currency,
- &rs->total_fee));
- if (0 > (qs = load_auditor_reserve_summary (rs)))
- {
- GNUNET_break (0);
- GNUNET_free (rs);
- rc->qs = qs;
- return GNUNET_SYSERR;
- }
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CONTAINER_multihashmap_put (rc->reserves,
- &key,
- rs,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
- }
- else
- {
- TALER_ARL_amount_add (&rs->total_in,
- &rs->total_in,
- credit);
- if (NULL == rs->sender_account)
- rs->sender_account = GNUNET_strdup (sender_account_details);
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
}
+ if (NULL == rs->sender_account)
+ rs->sender_account = GNUNET_strdup (sender_account_details);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Additional incoming wire transfer for reserve `%s' of %s\n",
TALER_B2S (reserve_pub),
@@ -468,6 +507,9 @@ handle_reserve_in (void *cls,
idle_reserve_expiration_time));
rs->a_expiration_date = GNUNET_TIME_timestamp_max (rs->a_expiration_date,
expiry);
+ TALER_ARL_amount_add (&rs->total_in,
+ &rs->total_in,
+ credit);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -499,7 +541,6 @@ handle_reserve_out (void *cls,
const struct TALER_Amount *amount_with_fee)
{
struct ReserveContext *rc = cls;
- struct GNUNET_HashCode key;
struct ReserveSummary *rs;
const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
struct TALER_Amount auditor_amount_with_fee;
@@ -507,8 +548,8 @@ handle_reserve_out (void *cls,
struct TALER_DenominationHashP h_denom_pub;
/* should be monotonically increasing */
- GNUNET_assert (rowid >= ppr.last_reserve_out_serial_id);
- ppr.last_reserve_out_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_reserve_out_serial_id));
+ TALER_ARL_USE_PP (reserves_reserve_out_serial_id) = rowid + 1;
/* lookup denomination pub data (make sure denom_pub is valid, establish fees);
initializes wsrd.h_denomination_pub! */
@@ -584,7 +625,7 @@ handle_reserve_out (void *cls,
amount_with_fee);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
- return GNUNET_OK; /* exit function here, we cannot add this to the legitimate withdrawals */
+ return GNUNET_OK; /* exit function here, we cannot add this to the legitimate withdrawals */
}
TALER_ARL_amount_add (&auditor_amount_with_fee,
@@ -598,43 +639,12 @@ handle_reserve_out (void *cls,
rowid,
"amount with fee from exchange does not match denomination value plus fee");
}
-
-
- GNUNET_CRYPTO_hash (reserve_pub,
- sizeof (*reserve_pub),
- &key);
- rs = GNUNET_CONTAINER_multihashmap_get (rc->reserves,
- &key);
+ rs = setup_reserve (rc,
+ reserve_pub);
if (NULL == rs)
{
- rs = GNUNET_new (struct ReserveSummary);
- rs->reserve_pub = *reserve_pub;
- rs->total_out = auditor_amount_with_fee;
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (amount_with_fee->currency,
- &rs->total_in));
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (amount_with_fee->currency,
- &rs->total_fee));
- qs = load_auditor_reserve_summary (rs);
- if (0 > qs)
- {
- GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
- GNUNET_free (rs);
- rc->qs = qs;
- return GNUNET_SYSERR;
- }
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CONTAINER_multihashmap_put (rc->reserves,
- &key,
- rs,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
- }
- else
- {
- TALER_ARL_amount_add (&rs->total_out,
- &rs->total_out,
- &auditor_amount_with_fee);
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Reserve `%s' reduced by %s from withdraw\n",
@@ -643,9 +653,15 @@ handle_reserve_out (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Increasing withdraw profits by fee %s\n",
TALER_amount2s (&issue->fees.withdraw));
- TALER_ARL_amount_add (&rs->total_fee,
- &rs->total_fee,
+ TALER_ARL_amount_add (&rs->curr_balance.withdraw_fee_balance,
+ &rs->curr_balance.withdraw_fee_balance,
&issue->fees.withdraw);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_withdraw_fee_revenue),
+ &TALER_ARL_USE_AB (reserves_withdraw_fee_revenue),
+ &issue->fees.withdraw);
+ TALER_ARL_amount_add (&rs->total_out,
+ &rs->total_out,
+ &auditor_amount_with_fee);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -678,10 +694,9 @@ handle_recoup_by_reserve (
const struct TALER_CoinPublicInfo *coin,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_CoinSpendSignatureP *coin_sig,
- const union TALER_DenominationBlindingKeyP *coin_blind)
+ const union GNUNET_CRYPTO_BlindingSecretP *coin_blind)
{
struct ReserveContext *rc = cls;
- struct GNUNET_HashCode key;
struct ReserveSummary *rs;
struct GNUNET_TIME_Timestamp expiry;
struct TALER_MasterSignatureP msig;
@@ -691,8 +706,8 @@ handle_recoup_by_reserve (
(void) denom_pub;
/* should be monotonically increasing */
- GNUNET_assert (rowid >= ppr.last_reserve_recoup_serial_id);
- ppr.last_reserve_recoup_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_reserve_recoup_serial_id));
+ TALER_ARL_USE_PP (reserves_reserve_recoup_serial_id) = rowid + 1;
/* We know that denom_pub matches denom_pub_hash because this
is how the SQL statement joined the tables. */
if (GNUNET_OK !=
@@ -736,8 +751,8 @@ handle_recoup_by_reserve (
report_row_inconsistency ("recoup",
rowid,
"denomination key not in revocation set");
- TALER_ARL_amount_add (&total_irregular_recoups,
- &total_irregular_recoups,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_reserve_loss),
+ &TALER_ARL_USE_AB (reserves_reserve_loss),
amount);
}
else
@@ -754,20 +769,22 @@ handle_recoup_by_reserve (
{
rev = "revoked";
}
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CONTAINER_multihashmap_put (rc->revoked,
- &coin->denom_pub_hash.
- hash,
- (void *) rev,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ GNUNET_assert (
+ GNUNET_OK ==
+ GNUNET_CONTAINER_multihashmap_put (
+ rc->revoked,
+ &coin->denom_pub_hash.hash,
+ (void *) rev,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
}
}
else
{
- rev_rowid = 0; /* reported elsewhere */
+ rev_rowid = 0; /* reported elsewhere */
}
if ( (NULL != rev) &&
- (0 == strcmp (rev, "master signature invalid")) )
+ (0 == strcmp (rev,
+ "master signature invalid")) )
{
TALER_ARL_report (report_bad_sig_losses,
GNUNET_JSON_PACK (
@@ -784,42 +801,16 @@ handle_recoup_by_reserve (
amount);
}
- GNUNET_CRYPTO_hash (reserve_pub,
- sizeof (*reserve_pub),
- &key);
- rs = GNUNET_CONTAINER_multihashmap_get (rc->reserves,
- &key);
+ rs = setup_reserve (rc,
+ reserve_pub);
if (NULL == rs)
{
- rs = GNUNET_new (struct ReserveSummary);
- rs->reserve_pub = *reserve_pub;
- rs->total_in = *amount;
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (amount->currency,
- &rs->total_out));
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (amount->currency,
- &rs->total_fee));
- qs = load_auditor_reserve_summary (rs);
- if (0 > qs)
- {
- GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
- GNUNET_free (rs);
- rc->qs = qs;
- return GNUNET_SYSERR;
- }
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CONTAINER_multihashmap_put (rc->reserves,
- &key,
- rs,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
- }
- else
- {
- TALER_ARL_amount_add (&rs->total_in,
- &rs->total_in,
- amount);
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
}
+ TALER_ARL_amount_add (&rs->total_in,
+ &rs->total_in,
+ amount);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Additional /recoup value to for reserve `%s' of %s\n",
TALER_B2S (reserve_pub),
@@ -888,6 +879,88 @@ get_closing_fee (const char *receiver_account,
/**
+ * Function called about reserve opening operations.
+ *
+ * @param cls closure
+ * @param rowid row identifier used to uniquely identify the reserve closing operation
+ * @param reserve_payment how much to pay from the
+ * reserve's own balance for opening the reserve
+ * @param request_timestamp when was the request created
+ * @param reserve_expiration desired expiration time for the reserve
+ * @param purse_limit minimum number of purses the client
+ * wants to have concurrently open for this reserve
+ * @param reserve_pub public key of the reserve
+ * @param reserve_sig signature affirming the operation
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_reserve_open (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_Amount *reserve_payment,
+ struct GNUNET_TIME_Timestamp request_timestamp,
+ struct GNUNET_TIME_Timestamp reserve_expiration,
+ uint32_t purse_limit,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_ReserveSignatureP *reserve_sig)
+{
+ struct ReserveContext *rc = cls;
+ struct ReserveSummary *rs;
+
+ /* should be monotonically increasing */
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_reserve_open_serial_id));
+ TALER_ARL_USE_PP (reserves_reserve_open_serial_id) = rowid + 1;
+
+ rs = setup_reserve (rc,
+ reserve_pub);
+ if (NULL == rs)
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ if (GNUNET_OK !=
+ TALER_wallet_reserve_open_verify (reserve_payment,
+ request_timestamp,
+ reserve_expiration,
+ purse_limit,
+ reserve_pub,
+ reserve_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "reserve-open"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ reserve_payment),
+ GNUNET_JSON_pack_data_auto ("reserve_pub",
+ reserve_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ reserve_payment);
+ return GNUNET_OK;
+ }
+ TALER_ARL_amount_add (&rs->curr_balance.open_fee_balance,
+ &rs->curr_balance.open_fee_balance,
+ reserve_payment);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_open_fee_revenue),
+ &TALER_ARL_USE_AB (reserves_open_fee_revenue),
+ reserve_payment);
+ TALER_ARL_amount_add (&rs->total_out,
+ &rs->total_out,
+ reserve_payment);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Additional open operation for reserve `%s' of %s\n",
+ TALER_B2S (reserve_pub),
+ TALER_amount2s (reserve_payment));
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+}
+
+
+/**
* Function called about reserve closing operations
* the aggregator triggered.
*
@@ -899,9 +972,11 @@ get_closing_fee (const char *receiver_account,
* @param reserve_pub public key of the reserve
* @param receiver_account where did we send the funds
* @param transfer_details details about the wire transfer
+ * @param close_request_row which close request triggered the operation?
+ * 0 if it was a timeout
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
handle_reserve_closed (
void *cls,
uint64_t rowid,
@@ -910,56 +985,27 @@ handle_reserve_closed (
const struct TALER_Amount *closing_fee,
const struct TALER_ReservePublicKeyP *reserve_pub,
const char *receiver_account,
- const struct TALER_WireTransferIdentifierRawP *transfer_details)
+ const struct TALER_WireTransferIdentifierRawP *transfer_details,
+ uint64_t close_request_row)
{
struct ReserveContext *rc = cls;
- struct GNUNET_HashCode key;
struct ReserveSummary *rs;
- enum GNUNET_DB_QueryStatus qs;
(void) transfer_details;
/* should be monotonically increasing */
- GNUNET_assert (rowid >= ppr.last_reserve_close_serial_id);
- ppr.last_reserve_close_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_reserve_close_serial_id));
+ TALER_ARL_USE_PP (reserves_reserve_close_serial_id) = rowid + 1;
- GNUNET_CRYPTO_hash (reserve_pub,
- sizeof (*reserve_pub),
- &key);
- rs = GNUNET_CONTAINER_multihashmap_get (rc->reserves,
- &key);
+ rs = setup_reserve (rc,
+ reserve_pub);
if (NULL == rs)
{
- rs = GNUNET_new (struct ReserveSummary);
- rs->reserve_pub = *reserve_pub;
- rs->total_out = *amount_with_fee;
- rs->total_fee = *closing_fee;
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (amount_with_fee->currency,
- &rs->total_in));
- qs = load_auditor_reserve_summary (rs);
- if (0 > qs)
- {
- GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
- GNUNET_free (rs);
- rc->qs = qs;
- return GNUNET_SYSERR;
- }
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CONTAINER_multihashmap_put (rc->reserves,
- &key,
- rs,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
}
- else
{
struct TALER_Amount expected_fee;
- TALER_ARL_amount_add (&rs->total_out,
- &rs->total_out,
- amount_with_fee);
- TALER_ARL_amount_add (&rs->total_fee,
- &rs->total_fee,
- closing_fee);
/* verify closing_fee is correct! */
if (GNUNET_OK !=
get_closing_fee (receiver_account,
@@ -979,20 +1025,117 @@ handle_reserve_closed (
1);
}
}
- if (NULL == rs->sender_account)
+
+ TALER_ARL_amount_add (&rs->curr_balance.close_fee_balance,
+ &rs->curr_balance.close_fee_balance,
+ closing_fee);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_close_fee_revenue),
+ &TALER_ARL_USE_AB (reserves_close_fee_revenue),
+ closing_fee);
+ TALER_ARL_amount_add (&rs->total_out,
+ &rs->total_out,
+ amount_with_fee);
+ if (0 != close_request_row)
{
- GNUNET_break (GNUNET_NO == rs->had_ri);
- report_row_inconsistency ("reserves_close",
- rowid,
- "target account not verified, auditor does not know reserve");
+ struct TALER_ReserveSignatureP reserve_sig;
+ struct GNUNET_TIME_Timestamp request_timestamp;
+ struct TALER_Amount close_balance;
+ struct TALER_Amount close_fee;
+ char *payto_uri;
+ enum GNUNET_DB_QueryStatus qs;
+
+ qs = TALER_ARL_edb->select_reserve_close_request_info (
+ TALER_ARL_edb->cls,
+ reserve_pub,
+ close_request_row,
+ &reserve_sig,
+ &request_timestamp,
+ &close_balance,
+ &close_fee,
+ &payto_uri);
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
+ {
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "reserve close request unknown");
+ }
+ else
+ {
+ struct TALER_PaytoHashP h_payto;
+
+ TALER_payto_hash (payto_uri,
+ &h_payto);
+ if (GNUNET_OK !=
+ TALER_wallet_reserve_close_verify (
+ request_timestamp,
+ &h_payto,
+ reserve_pub,
+ &reserve_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "close-request"),
+ GNUNET_JSON_pack_uint64 ("row",
+ close_request_row),
+ TALER_JSON_pack_amount ("loss",
+ amount_with_fee),
+ GNUNET_JSON_pack_data_auto ("reserve_pub",
+ reserve_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ amount_with_fee);
+ }
+ }
+ if ( (NULL == payto_uri) &&
+ (NULL == rs->sender_account) )
+ {
+ GNUNET_break (! rs->had_ri);
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "target account not verified, auditor does not know reserve");
+ }
+ if (NULL == payto_uri)
+ {
+ if ( (NULL == rs->sender_account) ||
+ (0 != strcmp (rs->sender_account,
+ receiver_account)) )
+ {
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "target account does not match origin account");
+ }
+ }
+ else
+ {
+ if (0 != strcmp (payto_uri,
+ receiver_account))
+ {
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "target account does not match origin account");
+ }
+ }
+ GNUNET_free (payto_uri);
}
- else if (0 != strcmp (rs->sender_account,
- receiver_account))
+ else
{
- report_row_inconsistency ("reserves_close",
- rowid,
- "target account does not match origin account");
+ if (NULL == rs->sender_account)
+ {
+ GNUNET_break (! rs->had_ri);
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "target account not verified, auditor does not know reserve");
+ }
+ else if (0 != strcmp (rs->sender_account,
+ receiver_account))
+ {
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "target account does not match origin account");
+ }
}
+
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Additional closing operation for reserve `%s' of %s\n",
TALER_B2S (reserve_pub),
@@ -1004,6 +1147,137 @@ handle_reserve_closed (
/**
+ * Function called with details about account merge requests that have been
+ * made, with the goal of accounting for the merge fee paid by the reserve (if
+ * applicable).
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param reserve_pub reserve affected by the merge
+ * @param purse_pub purse being merged
+ * @param h_contract_terms hash over contract of the purse
+ * @param purse_expiration when would the purse expire
+ * @param amount total amount in the purse
+ * @param min_age minimum age of all coins deposited into the purse
+ * @param flags how was the purse created
+ * @param purse_fee if a purse fee was paid, how high is it
+ * @param merge_timestamp when was the merge approved
+ * @param reserve_sig signature by reserve approving the merge
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_account_merged (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_PrivateContractHashP *h_contract_terms,
+ struct GNUNET_TIME_Timestamp purse_expiration,
+ const struct TALER_Amount *amount,
+ uint32_t min_age,
+ enum TALER_WalletAccountMergeFlags flags,
+ const struct TALER_Amount *purse_fee,
+ struct GNUNET_TIME_Timestamp merge_timestamp,
+ const struct TALER_ReserveSignatureP *reserve_sig)
+{
+ struct ReserveContext *rc = cls;
+ struct ReserveSummary *rs;
+
+ /* should be monotonically increasing */
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_account_merges_serial_id));
+ TALER_ARL_USE_PP (reserves_account_merges_serial_id) = rowid + 1;
+ if (GNUNET_OK !=
+ TALER_wallet_account_merge_verify (merge_timestamp,
+ purse_pub,
+ purse_expiration,
+ h_contract_terms,
+ amount,
+ purse_fee,
+ min_age,
+ flags,
+ reserve_pub,
+ reserve_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "account-merge"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ purse_fee),
+ GNUNET_JSON_pack_data_auto ("key_pub",
+ reserve_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ purse_fee);
+ return GNUNET_OK;
+ }
+ if ( (flags & TALER_WAMF_MERGE_MODE_MASK) !=
+ TALER_WAMF_MODE_CREATE_WITH_PURSE_FEE)
+ return GNUNET_OK; /* no impact on reserve balance */
+ rs = setup_reserve (rc,
+ reserve_pub);
+ if (NULL == rs)
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_purse_fee_revenue),
+ &TALER_ARL_USE_AB (reserves_purse_fee_revenue),
+ purse_fee);
+ TALER_ARL_amount_add (&rs->curr_balance.purse_fee_balance,
+ &rs->curr_balance.purse_fee_balance,
+ purse_fee);
+ TALER_ARL_amount_add (&rs->total_out,
+ &rs->total_out,
+ purse_fee);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about a purse that was merged into an account.
+ * Only updates the reserve balance, the actual verifications are done in the
+ * purse helper.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the refund in our DB
+ * @param purse_pub public key of the purse
+ * @param reserve_pub which reserve is the purse credited to
+ * @param purse_value what is the target value of the purse
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+purse_decision_cb (void *cls,
+ uint64_t rowid,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_Amount *purse_value)
+{
+ struct ReserveContext *rc = cls;
+ struct ReserveSummary *rs;
+
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (
+ reserves_purse_decisions_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (reserves_purse_decisions_serial_id) = rowid + 1;
+ rs = setup_reserve (rc,
+ reserve_pub);
+ if (NULL == rs)
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ TALER_ARL_amount_add (&rs->total_in,
+ &rs->total_in,
+ purse_value);
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+}
+
+
+/**
* Check that the reserve summary matches what the exchange database
* thinks about the reserve, and update our own state of the reserve.
*
@@ -1014,36 +1288,39 @@ handle_reserve_closed (
* @param value a `struct ReserveSummary`
* @return #GNUNET_OK to process more entries
*/
-static int
+static enum GNUNET_GenericReturnValue
verify_reserve_balance (void *cls,
const struct GNUNET_HashCode *key,
void *value)
{
struct ReserveContext *rc = cls;
struct ReserveSummary *rs = value;
- struct TALER_Amount balance;
+ struct TALER_Amount mbalance;
struct TALER_Amount nbalance;
enum GNUNET_DB_QueryStatus qs;
- int ret;
+ enum GNUNET_GenericReturnValue ret;
ret = GNUNET_OK;
/* Check our reserve summary balance calculation shows that
the reserve balance is acceptable (i.e. non-negative) */
- TALER_ARL_amount_add (&balance,
+ TALER_ARL_amount_add (&mbalance,
&rs->total_in,
- &rs->balance_at_previous_audit);
+ &rs->prev_balance.reserve_balance);
if (TALER_ARL_SR_INVALID_NEGATIVE ==
TALER_ARL_amount_subtract_neg (&nbalance,
- &balance,
+ &mbalance,
&rs->total_out))
{
struct TALER_Amount loss;
TALER_ARL_amount_subtract (&loss,
&rs->total_out,
- &balance);
- TALER_ARL_amount_add (&total_balance_insufficient_loss,
- &total_balance_insufficient_loss,
+ &mbalance);
+ TALER_ARL_amount_add (&rs->curr_balance.reserve_loss,
+ &rs->prev_balance.reserve_loss,
+ &loss);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_reserve_loss),
+ &TALER_ARL_USE_AB (reserves_reserve_loss),
&loss);
TALER_ARL_report (report_reserve_balance_insufficient_inconsistencies,
GNUNET_JSON_PACK (
@@ -1053,8 +1330,13 @@ verify_reserve_balance (void *cls,
&loss)));
/* Continue with a reserve balance of zero */
GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (balance.currency,
- &nbalance));
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.reserve_balance));
+ }
+ else
+ {
+ /* Update remaining reserve balance! */
+ rs->curr_balance.reserve_balance = nbalance;
}
if (internal_checks)
@@ -1064,13 +1346,10 @@ verify_reserve_balance (void *cls,
internal audit, as otherwise the balance of the 'reserves' table
is not replicated at the auditor. */
struct TALER_EXCHANGEDB_Reserve reserve;
- struct TALER_EXCHANGEDB_KycStatus kyc;
reserve.pub = rs->reserve_pub;
qs = TALER_ARL_edb->reserves_get (TALER_ARL_edb->cls,
- &reserve,
- &kyc);
- // FIXME: figure out what to do with KYC status!
+ &reserve);
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
{
/* If the exchange doesn't have this reserve in the summary, it
@@ -1078,7 +1357,7 @@ verify_reserve_balance (void *cls,
making an illegitimate gain over the amount it dropped.
We don't add the amount to some total simply because it is
not an actualized gain and could be trivially corrected by
- restoring the summary. *///
+ restoring the summary. */
TALER_ARL_report (report_reserve_balance_insufficient_inconsistencies,
GNUNET_JSON_PACK (
GNUNET_JSON_pack_data_auto ("reserve_pub",
@@ -1095,17 +1374,17 @@ verify_reserve_balance (void *cls,
else
{
/* Check that exchange's balance matches our expected balance for the reserve */
- if (0 != TALER_amount_cmp (&nbalance,
+ if (0 != TALER_amount_cmp (&rs->curr_balance.reserve_balance,
&reserve.balance))
{
struct TALER_Amount delta;
- if (0 < TALER_amount_cmp (&nbalance,
+ if (0 < TALER_amount_cmp (&rs->curr_balance.reserve_balance,
&reserve.balance))
{
/* balance > reserve.balance */
TALER_ARL_amount_subtract (&delta,
- &nbalance,
+ &rs->curr_balance.reserve_balance,
&reserve.balance);
TALER_ARL_amount_add (&total_balance_summary_delta_plus,
&total_balance_summary_delta_plus,
@@ -1116,7 +1395,7 @@ verify_reserve_balance (void *cls,
/* balance < reserve.balance */
TALER_ARL_amount_subtract (&delta,
&reserve.balance,
- &nbalance);
+ &rs->curr_balance.reserve_balance);
TALER_ARL_amount_add (&total_balance_summary_delta_minus,
&total_balance_summary_delta_minus,
&delta);
@@ -1128,10 +1407,11 @@ verify_reserve_balance (void *cls,
TALER_JSON_pack_amount ("exchange",
&reserve.balance),
TALER_JSON_pack_amount ("auditor",
- &nbalance)));
+ &rs->curr_balance.
+ reserve_balance)));
}
}
- } /* end of 'if (internal_checks)' */
+ } /* end of 'if (internal_checks)' */
/* Check that reserve is being closed if it is past its expiration date
(and the closing fee would not exceed the remaining balance) */
@@ -1188,26 +1468,43 @@ verify_reserve_balance (void *cls,
}
}
- /* Add withdraw fees we encountered to totals */
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Reserve reserve `%s' made %s in withdraw fees\n",
- TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&rs->total_fee));
- TALER_ARL_amount_add (&rs->a_withdraw_fee_balance,
- &rs->a_withdraw_fee_balance,
- &rs->total_fee);
- TALER_ARL_amount_add (&total_escrow_balance,
- &total_escrow_balance,
+ /* We already computed the 'new' balance in 'curr_balance'
+ to include the previous balance, so this one is just
+ an assignment, not adding up! */
+ rs->prev_balance.reserve_balance = rs->curr_balance.reserve_balance;
+
+ /* Add up new totals to previous totals */
+ TALER_ARL_amount_add (&rs->prev_balance.reserve_loss,
+ &rs->prev_balance.reserve_loss,
+ &rs->curr_balance.reserve_loss);
+ TALER_ARL_amount_add (&rs->prev_balance.withdraw_fee_balance,
+ &rs->prev_balance.withdraw_fee_balance,
+ &rs->curr_balance.withdraw_fee_balance);
+ TALER_ARL_amount_add (&rs->prev_balance.close_fee_balance,
+ &rs->prev_balance.close_fee_balance,
+ &rs->curr_balance.close_fee_balance);
+ TALER_ARL_amount_add (&rs->prev_balance.purse_fee_balance,
+ &rs->prev_balance.purse_fee_balance,
+ &rs->curr_balance.purse_fee_balance);
+ TALER_ARL_amount_add (&rs->prev_balance.open_fee_balance,
+ &rs->prev_balance.open_fee_balance,
+ &rs->curr_balance.open_fee_balance);
+ TALER_ARL_amount_add (&rs->prev_balance.history_fee_balance,
+ &rs->prev_balance.history_fee_balance,
+ &rs->curr_balance.history_fee_balance);
+
+ /* Update global balance: add incoming first, then try
+ to subtract outgoing... */
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_reserve_total_balance),
+ &TALER_ARL_USE_AB (reserves_reserve_total_balance),
&rs->total_in);
- TALER_ARL_amount_add (&total_withdraw_fee_income,
- &total_withdraw_fee_income,
- &rs->total_fee);
{
struct TALER_Amount r;
if (TALER_ARL_SR_INVALID_NEGATIVE ==
TALER_ARL_amount_subtract_neg (&r,
- &total_escrow_balance,
+ &TALER_ARL_USE_AB (
+ reserves_reserve_total_balance),
&rs->total_out))
{
/* We could not reduce our total balance, i.e. exchange allowed IN TOTAL (!)
@@ -1215,34 +1512,33 @@ verify_reserve_balance (void *cls,
went negative!). Woopsie. Calculate how badly it went and log. */
report_amount_arithmetic_inconsistency ("global escrow balance",
0,
- &total_escrow_balance, /* what we had */
- &rs->total_out, /* what we needed */
+ &TALER_ARL_USE_AB (
+ reserves_reserve_total_balance), /* what we had */
+ &rs->total_out, /* what we needed */
0 /* specific profit/loss does not apply to the total summary */);
/* We unexpectedly went negative, so a sane value to continue from
would be zero. */
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_escrow_balance));
+ &TALER_ARL_USE_AB (
+ reserves_reserve_total_balance)));
}
else
{
- total_escrow_balance = r;
+ TALER_ARL_USE_AB (reserves_reserve_total_balance) = r;
}
}
- if ( (0ULL == balance.value) &&
- (0U == balance.fraction) )
+ if (TALER_amount_is_zero (&rs->prev_balance.reserve_balance))
{
/* balance is zero, drop reserve details (and then do not update/insert) */
if (rs->had_ri)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Final balance of reserve `%s' is %s, dropping it\n",
- TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&nbalance));
+ "Final balance of reserve `%s' is zero, dropping it\n",
+ TALER_B2S (&rs->reserve_pub));
qs = TALER_ARL_adb->del_reserve_info (TALER_ARL_adb->cls,
- &rs->reserve_pub,
- &TALER_ARL_master_pub);
+ &rs->reserve_pub);
if (0 >= qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -1253,9 +1549,8 @@ verify_reserve_balance (void *cls,
else
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Final balance of reserve `%s' is %s, no need to remember it\n",
- TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&nbalance));
+ "Final balance of reserve `%s' is zero, no need to remember it\n",
+ TALER_B2S (&rs->reserve_pub));
}
}
else
@@ -1264,20 +1559,16 @@ verify_reserve_balance (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Remembering final balance of reserve `%s' as %s\n",
TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&nbalance));
+ TALER_amount2s (&rs->prev_balance.reserve_balance));
if (rs->had_ri)
qs = TALER_ARL_adb->update_reserve_info (TALER_ARL_adb->cls,
&rs->reserve_pub,
- &TALER_ARL_master_pub,
- &nbalance,
- &rs->a_withdraw_fee_balance,
+ &rs->prev_balance,
rs->a_expiration_date);
else
qs = TALER_ARL_adb->insert_reserve_info (TALER_ARL_adb->cls,
&rs->reserve_pub,
- &TALER_ARL_master_pub,
- &nbalance,
- &rs->a_withdraw_fee_balance,
+ &rs->prev_balance,
rs->a_expiration_date,
rs->sender_account);
if (0 >= qs)
@@ -1287,7 +1578,7 @@ verify_reserve_balance (void *cls,
rc->qs = qs;
}
}
-
+ /* now we can discard the cached entry */
GNUNET_assert (GNUNET_YES ==
GNUNET_CONTAINER_multihashmap_remove (rc->reserves,
key,
@@ -1315,9 +1606,17 @@ analyze_reserves (void *cls)
(void) cls;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Analyzing reserves\n");
- qsp = TALER_ARL_adb->get_auditor_progress_reserve (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppr);
+ qsp = TALER_ARL_adb->get_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_PP (reserves_reserve_in_serial_id),
+ TALER_ARL_GET_PP (reserves_reserve_out_serial_id),
+ TALER_ARL_GET_PP (reserves_reserve_recoup_serial_id),
+ TALER_ARL_GET_PP (reserves_reserve_open_serial_id),
+ TALER_ARL_GET_PP (reserves_reserve_close_serial_id),
+ TALER_ARL_GET_PP (reserves_purse_decisions_serial_id),
+ TALER_ARL_GET_PP (reserves_account_merges_serial_id),
+ TALER_ARL_GET_PP (reserves_history_requests_serial_id),
+ NULL);
if (0 > qsp)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsp);
@@ -1330,19 +1629,36 @@ analyze_reserves (void *cls)
}
else
{
- ppr_start = ppr;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Resuming reserve audit at %llu/%llu/%llu/%llu\n",
- (unsigned long long) ppr.last_reserve_in_serial_id,
- (unsigned long long) ppr.last_reserve_out_serial_id,
- (unsigned long long) ppr.last_reserve_recoup_serial_id,
- (unsigned long long) ppr.last_reserve_close_serial_id);
+ "Resuming reserve audit at %llu/%llu/%llu/%llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_in_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_out_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_recoup_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_open_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_close_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_purse_decisions_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_account_merges_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_history_requests_serial_id));
}
rc.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
- qsx = TALER_ARL_adb->get_reserve_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_withdraw_fee_income);
+ qsx = TALER_ARL_adb->get_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_AB (reserves_reserve_total_balance),
+ TALER_ARL_GET_AB (reserves_reserve_loss),
+ TALER_ARL_GET_AB (reserves_withdraw_fee_revenue),
+ TALER_ARL_GET_AB (reserves_close_fee_revenue),
+ TALER_ARL_GET_AB (reserves_purse_fee_revenue),
+ TALER_ARL_GET_AB (reserves_open_fee_revenue),
+ TALER_ARL_GET_AB (reserves_history_fee_revenue),
+ NULL);
if (qsx < 0)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsx);
@@ -1352,10 +1668,9 @@ analyze_reserves (void *cls)
GNUNET_NO);
rc.revoked = GNUNET_CONTAINER_multihashmap_create (4,
GNUNET_NO);
-
qs = TALER_ARL_edb->select_reserves_in_above_serial_id (
TALER_ARL_edb->cls,
- ppr.last_reserve_in_serial_id,
+ TALER_ARL_USE_PP (reserves_reserve_in_serial_id),
&handle_reserve_in,
&rc);
if (qs < 0)
@@ -1365,7 +1680,7 @@ analyze_reserves (void *cls)
}
qs = TALER_ARL_edb->select_withdrawals_above_serial_id (
TALER_ARL_edb->cls,
- ppr.last_reserve_out_serial_id,
+ TALER_ARL_USE_PP (reserves_reserve_out_serial_id),
&handle_reserve_out,
&rc);
if (qs < 0)
@@ -1375,7 +1690,7 @@ analyze_reserves (void *cls)
}
qs = TALER_ARL_edb->select_recoup_above_serial_id (
TALER_ARL_edb->cls,
- ppr.last_reserve_recoup_serial_id,
+ TALER_ARL_USE_PP (reserves_reserve_recoup_serial_id),
&handle_recoup_by_reserve,
&rc);
if (qs < 0)
@@ -1383,9 +1698,19 @@ analyze_reserves (void *cls)
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs;
}
+ qs = TALER_ARL_edb->select_reserve_open_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (reserves_reserve_open_serial_id),
+ &handle_reserve_open,
+ &rc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
qs = TALER_ARL_edb->select_reserve_closed_above_serial_id (
TALER_ARL_edb->cls,
- ppr.last_reserve_close_serial_id,
+ TALER_ARL_USE_PP (reserves_reserve_close_serial_id),
&handle_reserve_closed,
&rc);
if (qs < 0)
@@ -1393,7 +1718,31 @@ analyze_reserves (void *cls)
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs;
}
-
+ /* process purse_decisions (to credit reserve) */
+ if (0 >
+ (qs = TALER_ARL_edb->select_purse_decisions_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (reserves_purse_decisions_serial_id),
+ false, /* only go for merged purses! */
+ &purse_decision_cb,
+ &rc)))
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ if (0 > rc.qs)
+ return rc.qs;
+ /* Charge purse fee! */
+ qs = TALER_ARL_edb->select_account_merges_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (reserves_account_merges_serial_id),
+ &handle_account_merged,
+ &rc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
GNUNET_CONTAINER_multihashmap_iterate (rc.reserves,
&verify_reserve_balance,
&rc);
@@ -1401,23 +1750,33 @@ analyze_reserves (void *cls)
GNUNET_CONTAINER_multihashmap_size (rc.reserves));
GNUNET_CONTAINER_multihashmap_destroy (rc.reserves);
GNUNET_CONTAINER_multihashmap_destroy (rc.revoked);
-
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != rc.qs)
return qs;
-
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qsx)
{
- qs = TALER_ARL_adb->insert_reserve_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_withdraw_fee_income);
+ qs = TALER_ARL_adb->insert_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (reserves_reserve_total_balance),
+ TALER_ARL_SET_AB (reserves_reserve_loss),
+ TALER_ARL_SET_AB (reserves_withdraw_fee_revenue),
+ TALER_ARL_SET_AB (reserves_close_fee_revenue),
+ TALER_ARL_SET_AB (reserves_purse_fee_revenue),
+ TALER_ARL_SET_AB (reserves_open_fee_revenue),
+ TALER_ARL_SET_AB (reserves_history_fee_revenue),
+ NULL);
}
else
{
- qs = TALER_ARL_adb->update_reserve_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_withdraw_fee_income);
+ qs = TALER_ARL_adb->update_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (reserves_reserve_total_balance),
+ TALER_ARL_SET_AB (reserves_reserve_loss),
+ TALER_ARL_SET_AB (reserves_withdraw_fee_revenue),
+ TALER_ARL_SET_AB (reserves_close_fee_revenue),
+ TALER_ARL_SET_AB (reserves_purse_fee_revenue),
+ TALER_ARL_SET_AB (reserves_open_fee_revenue),
+ TALER_ARL_SET_AB (reserves_history_fee_revenue),
+ NULL);
}
if (0 >= qs)
{
@@ -1425,13 +1784,29 @@ analyze_reserves (void *cls)
return qs;
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsp)
- qs = TALER_ARL_adb->update_auditor_progress_reserve (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppr);
+ qs = TALER_ARL_adb->update_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (reserves_reserve_in_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_out_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_recoup_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_open_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_close_serial_id),
+ TALER_ARL_SET_PP (reserves_purse_decisions_serial_id),
+ TALER_ARL_SET_PP (reserves_account_merges_serial_id),
+ TALER_ARL_SET_PP (reserves_history_requests_serial_id),
+ NULL);
else
- qs = TALER_ARL_adb->insert_auditor_progress_reserve (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppr);
+ qs = TALER_ARL_adb->insert_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (reserves_reserve_in_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_out_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_recoup_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_open_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_close_serial_id),
+ TALER_ARL_SET_PP (reserves_purse_decisions_serial_id),
+ TALER_ARL_SET_PP (reserves_account_merges_serial_id),
+ TALER_ARL_SET_PP (reserves_history_requests_serial_id),
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -1440,11 +1815,23 @@ analyze_reserves (void *cls)
return qs;
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Concluded reserve audit step at %llu/%llu/%llu/%llu\n",
- (unsigned long long) ppr.last_reserve_in_serial_id,
- (unsigned long long) ppr.last_reserve_out_serial_id,
- (unsigned long long) ppr.last_reserve_recoup_serial_id,
- (unsigned long long) ppr.last_reserve_close_serial_id);
+ "Concluded reserve audit step at %llu/%llu/%llu/%llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_in_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_out_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_recoup_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_open_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_close_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_purse_decisions_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_account_merges_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_history_requests_serial_id));
return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
}
@@ -1490,16 +1877,33 @@ run (void *cls,
"Starting audit\n");
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_escrow_balance));
+ &TALER_ARL_USE_AB (
+ reserves_reserve_total_balance)));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (
+ reserves_reserve_loss)));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (
+ reserves_withdraw_fee_revenue)));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (
+ reserves_close_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_irregular_recoups));
+ &TALER_ARL_USE_AB (
+ reserves_purse_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_withdraw_fee_income));
+ &TALER_ARL_USE_AB (
+ reserves_open_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_balance_insufficient_loss));
+ &TALER_ARL_USE_AB (
+ reserves_history_fee_revenue)));
+ // REVIEW:
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
&total_balance_summary_delta_plus));
@@ -1518,6 +1922,7 @@ run (void *cls,
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
&total_bad_sig_loss));
+
GNUNET_assert (NULL !=
(report_row_inconsistencies = json_array ()));
GNUNET_assert (NULL !=
@@ -1530,6 +1935,9 @@ run (void *cls,
(report_reserve_balance_insufficient_inconsistencies
= json_array ()));
GNUNET_assert (NULL !=
+ (report_purse_balance_insufficient_inconsistencies
+ = json_array ()));
+ GNUNET_assert (NULL !=
(report_reserve_not_closed_inconsistencies
= json_array ()));
GNUNET_assert (NULL !=
@@ -1546,12 +1954,6 @@ run (void *cls,
}
TALER_ARL_done (
GNUNET_JSON_PACK (
- GNUNET_JSON_pack_array_steal (
- "reserve_balance_insufficient_inconsistencies",
- report_reserve_balance_insufficient_inconsistencies),
- /* Tested in test-auditor.sh #3 */
- TALER_JSON_pack_amount ("total_loss_balance_insufficient",
- &total_balance_insufficient_loss),
/* Tested in test-auditor.sh #3 */
GNUNET_JSON_pack_array_steal (
"reserve_balance_summary_wrong_inconsistencies",
@@ -1560,23 +1962,49 @@ run (void *cls,
&total_balance_summary_delta_plus),
TALER_JSON_pack_amount ("total_balance_summary_delta_minus",
&total_balance_summary_delta_minus),
- /* blocks #2 */
+ /* Tested in test-auditor.sh #21 */
+ TALER_JSON_pack_amount ("total_balance_reserve_not_closed",
+ &total_balance_reserve_not_closed),
+ /* Tested in test-auditor.sh #7 */
+ TALER_JSON_pack_amount ("total_bad_sig_loss",
+ &total_bad_sig_loss),
+ TALER_JSON_pack_amount ("total_arithmetic_delta_plus",
+ &total_arithmetic_delta_plus),
+ TALER_JSON_pack_amount ("total_arithmetic_delta_minus",
+ &total_arithmetic_delta_minus),
+
+ /* Global 'balances' */
TALER_JSON_pack_amount ("total_escrow_balance",
- &total_escrow_balance),
+ &TALER_ARL_USE_AB (
+ reserves_reserve_total_balance)),
+ /* Tested in test-auditor.sh #3 */
+ TALER_JSON_pack_amount ("total_irregular_loss",
+ &TALER_ARL_USE_AB (reserves_reserve_loss)),
TALER_JSON_pack_amount ("total_withdraw_fee_income",
- &total_withdraw_fee_income),
+ &TALER_ARL_USE_AB (
+ reserves_withdraw_fee_revenue)),
+ TALER_JSON_pack_amount ("total_close_fee_income",
+ &TALER_ARL_USE_AB (reserves_close_fee_revenue)),
+ TALER_JSON_pack_amount ("total_purse_fee_income",
+ &TALER_ARL_USE_AB (reserves_purse_fee_revenue)),
+ TALER_JSON_pack_amount ("total_open_fee_income",
+ &TALER_ARL_USE_AB (reserves_open_fee_revenue)),
+ TALER_JSON_pack_amount ("total_history_fee_income",
+ &TALER_ARL_USE_AB (reserves_history_fee_revenue)),
+
+ /* Detailed report tables */
+ GNUNET_JSON_pack_array_steal (
+ "reserve_balance_insufficient_inconsistencies",
+ report_reserve_balance_insufficient_inconsistencies),
+ GNUNET_JSON_pack_array_steal (
+ "purse_balance_insufficient_inconsistencies",
+ report_purse_balance_insufficient_inconsistencies),
/* Tested in test-auditor.sh #21 */
GNUNET_JSON_pack_array_steal ("reserve_not_closed_inconsistencies",
report_reserve_not_closed_inconsistencies),
- /* Tested in test-auditor.sh #21 */
- TALER_JSON_pack_amount ("total_balance_reserve_not_closed",
- &total_balance_reserve_not_closed),
/* Tested in test-auditor.sh #7 */
GNUNET_JSON_pack_array_steal ("bad_sig_losses",
report_bad_sig_losses),
- /* Tested in test-auditor.sh #7 */
- TALER_JSON_pack_amount ("total_bad_sig_loss",
- &total_bad_sig_loss),
/* Tested in test-revocation.sh #4 */
GNUNET_JSON_pack_array_steal ("row_inconsistencies",
report_row_inconsistencies),
@@ -1586,32 +2014,52 @@ run (void *cls,
denomination_key_validity_withdraw_inconsistencies),
GNUNET_JSON_pack_array_steal ("amount_arithmetic_inconsistencies",
report_amount_arithmetic_inconsistencies),
- TALER_JSON_pack_amount ("total_arithmetic_delta_plus",
- &total_arithmetic_delta_plus),
- TALER_JSON_pack_amount ("total_arithmetic_delta_minus",
- &total_arithmetic_delta_minus),
+
+ /* Information about audited range ... */
TALER_JSON_pack_time_abs_human ("auditor_start_time",
start_time),
TALER_JSON_pack_time_abs_human ("auditor_end_time",
GNUNET_TIME_absolute_get ()),
- TALER_JSON_pack_amount ("total_irregular_recoups",
- &total_irregular_recoups),
GNUNET_JSON_pack_uint64 ("start_ppr_reserve_in_serial_id",
- ppr_start.last_reserve_in_serial_id),
+ 0 /* no longer supported */),
GNUNET_JSON_pack_uint64 ("start_ppr_reserve_out_serial_id",
- ppr_start.last_reserve_out_serial_id),
+ 0 /* no longer supported */),
GNUNET_JSON_pack_uint64 ("start_ppr_reserve_recoup_serial_id",
- ppr_start.last_reserve_recoup_serial_id),
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("start_ppr_reserve_open_serial_id",
+ 0 /* no longer supported */),
GNUNET_JSON_pack_uint64 ("start_ppr_reserve_close_serial_id",
- ppr_start.last_reserve_close_serial_id),
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("start_ppr_purse_decisions_serial_id",
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("start_ppr_account_merges_serial_id",
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("start_ppr_history_requests_serial_id",
+ 0 /* no longer supported */),
GNUNET_JSON_pack_uint64 ("end_ppr_reserve_in_serial_id",
- ppr.last_reserve_in_serial_id),
+ TALER_ARL_USE_PP (
+ reserves_reserve_in_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppr_reserve_out_serial_id",
- ppr.last_reserve_out_serial_id),
+ TALER_ARL_USE_PP (
+ reserves_reserve_out_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppr_reserve_recoup_serial_id",
- ppr.last_reserve_recoup_serial_id),
+ TALER_ARL_USE_PP (
+ reserves_reserve_recoup_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppr_reserve_open_serial_id",
+ TALER_ARL_USE_PP (
+ reserves_reserve_open_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppr_reserve_close_serial_id",
- ppr.last_reserve_close_serial_id)));
+ TALER_ARL_USE_PP (
+ reserves_reserve_close_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppr_purse_decisions_serial_id",
+ TALER_ARL_USE_PP (
+ reserves_purse_decisions_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppr_account_merges_serial_id",
+ TALER_ARL_USE_PP (
+ reserves_account_merges_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppr_history_requests_serial_id",
+ TALER_ARL_USE_PP (
+ reserves_history_requests_serial_id))));
}
@@ -1631,11 +2079,10 @@ main (int argc,
"internal",
"perform checks only applicable for exchange-internal audits",
&internal_checks),
- GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &TALER_ARL_master_pub),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
diff --git a/src/auditor/taler-helper-auditor-wire.c b/src/auditor/taler-helper-auditor-wire.c
index 274344ff6..d48ac1f18 100644
--- a/src/auditor/taler-helper-auditor-wire.c
+++ b/src/auditor/taler-helper-auditor-wire.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2017-2021 Taler Systems SA
+ Copyright (C) 2017-2023 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
@@ -53,6 +53,20 @@
/**
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
+ */
+static int test_mode;
+
+struct TALER_AUDITORDB_WireAccountProgressPoint
+{
+ uint64_t last_reserve_in_serial_id;
+ uint64_t last_wire_out_serial_id;
+};
+
+/**
* Information we keep for each supported account.
*/
struct WireAccount
@@ -93,14 +107,34 @@ struct WireAccount
struct TALER_AUDITORDB_WireAccountProgressPoint start_pp;
/**
- * Where we are in the inbound (CREDIT) transaction history.
+ * Where we are in the inbound transaction history.
+ */
+ uint64_t wire_off_in;
+
+ /**
+ * Where we are in the outbound transaction history.
*/
- uint64_t in_wire_off;
+ uint64_t wire_off_out;
/**
- * Where we are in the inbound (DEBIT) transaction history.
+ * Label under which we store our pp's reserve_in_serial_id.
*/
- uint64_t out_wire_off;
+ char *label_reserve_in_serial_id;
+
+ /**
+ * Label under which we store our pp's reserve_in_serial_id.
+ */
+ char *label_wire_out_serial_id;
+
+ /**
+ * Label under which we store our wire_off_in.
+ */
+ char *label_wire_off_in;
+
+ /**
+ * Label under which we store our wire_off_out.
+ */
+ char *label_wire_off_out;
/**
* Return value when we got this account's progress point.
@@ -183,20 +217,17 @@ static enum GNUNET_DB_QueryStatus qsx_gwap;
/**
* Last reserve_in / wire_out serial IDs seen.
*/
-static struct TALER_AUDITORDB_WireProgressPoint pp;
-
-/**
- * Last reserve_in / wire_out serial IDs seen.
- */
-static struct TALER_AUDITORDB_WireProgressPoint start_pp;
+static TALER_ARL_DEF_PP (wire_reserve_close_id);
+static TALER_ARL_DEF_PP (wire_batch_deposit_id);
+static TALER_ARL_DEF_PP (wire_aggregation_id);
/**
- * Array of reports about row inconsitencies in wire_out table.
+ * Array of reports about row inconsistencies in wire_out table.
*/
static json_t *report_wire_out_inconsistencies;
/**
- * Array of reports about row inconsitencies in reserves_in table.
+ * Array of reports about row inconsistencies in reserves_in table.
*/
static json_t *report_reserve_in_inconsistencies;
@@ -204,7 +235,7 @@ static json_t *report_reserve_in_inconsistencies;
* Array of reports about wrong bank account being recorded for
* incoming wire transfers.
*/
-static json_t *report_missattribution_in_inconsistencies;
+static json_t *report_misattribution_in_inconsistencies;
/**
* Array of reports about row inconsistencies.
@@ -228,6 +259,16 @@ static json_t *report_row_minor_inconsistencies;
static json_t *report_lags;
/**
+ * Array of reports about lagging transactions from deposits due to missing KYC.
+ */
+static json_t *report_kyc_lags;
+
+/**
+ * Array of reports about lagging transactions from deposits due to pending or frozen AML decisions.
+ */
+static json_t *report_aml_lags;
+
+/**
* Array of reports about lagging transactions from reserve closures.
*/
static json_t *report_closure_lags;
@@ -267,7 +308,7 @@ static struct TALER_Amount total_bad_amount_in_minus;
* for incoming funds and may thus wire funds to the wrong
* destination when closing the reserve.
*/
-static struct TALER_Amount total_missattribution_in;
+static struct TALER_Amount total_misattribution_in;
/**
* Total amount which the exchange did not transfer in time.
@@ -285,6 +326,36 @@ static struct TALER_Amount total_closure_amount_lag;
static struct TALER_Amount total_wire_format_amount;
/**
+ * Total amount credited to exchange accounts.
+ */
+static struct TALER_Amount total_wire_in;
+
+/**
+ * Total amount debited to exchange accounts.
+ */
+static struct TALER_Amount total_wire_out;
+
+/**
+ * Total amount of profits drained.
+ */
+static TALER_ARL_DEF_AB (total_drained);
+
+/**
+ * Final balance at the end of this iteration.
+ */
+static TALER_ARL_DEF_AB (final_balance);
+
+/**
+ * Starting balance at the beginning of this iteration.
+ */
+static struct TALER_Amount start_balance;
+
+/**
+ * True if #start_balance was initialized.
+ */
+static bool had_start_balance;
+
+/**
* Amount of zero in our currency.
*/
static struct TALER_Amount zero;
@@ -304,6 +375,12 @@ static struct GNUNET_CURL_RescheduleContext *rc;
*/
static int internal_checks;
+/**
+ * Should we ignore if the bank does not know our bank
+ * account?
+ */
+static int ignore_account_404;
+
/* ***************************** Shutdown **************************** */
/**
@@ -361,7 +438,7 @@ struct ReserveOutInfo
* @param value the `struct ReserveInInfo` to free
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
free_rii (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -386,7 +463,7 @@ free_rii (void *cls,
* @param value the `struct ReserveOutInfo` to free
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
free_roi (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -411,7 +488,7 @@ free_roi (void *cls,
* @param value the `struct ReserveClosure` to free
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
free_rc (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -463,11 +540,11 @@ do_shutdown (void *cls)
TALER_JSON_pack_amount ("total_wire_in_delta_minus",
&total_bad_amount_in_minus),
/* Tested in test-auditor.sh #9 */
- GNUNET_JSON_pack_array_steal ("missattribution_in_inconsistencies",
- report_missattribution_in_inconsistencies),
+ GNUNET_JSON_pack_array_steal ("misattribution_in_inconsistencies",
+ report_misattribution_in_inconsistencies),
/* Tested in test-auditor.sh #9 */
- TALER_JSON_pack_amount ("total_missattribution_in",
- &total_missattribution_in),
+ TALER_JSON_pack_amount ("total_misattribution_in",
+ &total_misattribution_in),
GNUNET_JSON_pack_array_steal ("row_inconsistencies",
report_row_inconsistencies),
/* Tested in test-auditor.sh #10/#17 */
@@ -479,12 +556,24 @@ do_shutdown (void *cls)
/* Tested in test-auditor.sh #19 */
GNUNET_JSON_pack_array_steal ("wire_format_inconsistencies",
report_wire_format_inconsistencies),
+ TALER_JSON_pack_amount ("total_wire_in",
+ &total_wire_in),
+ TALER_JSON_pack_amount ("total_wire_out",
+ &total_wire_out),
+ TALER_JSON_pack_amount ("total_drained",
+ &TALER_ARL_USE_AB (total_drained)),
+ TALER_JSON_pack_amount ("final_balance",
+ &TALER_ARL_USE_AB (final_balance)),
/* Tested in test-auditor.sh #1 */
TALER_JSON_pack_amount ("total_amount_lag",
&total_amount_lag),
/* Tested in test-auditor.sh #1 */
GNUNET_JSON_pack_array_steal ("lag_details",
report_lags),
+ GNUNET_JSON_pack_array_steal ("lag_aml_details",
+ report_aml_lags),
+ GNUNET_JSON_pack_array_steal ("lag_kyc_details",
+ report_kyc_lags),
/* Tested in test-auditor.sh #22 */
TALER_JSON_pack_amount ("total_closure_amount_lag",
&total_closure_amount_lag),
@@ -495,22 +584,28 @@ do_shutdown (void *cls)
start_time),
TALER_JSON_pack_time_abs_human ("wire_auditor_end_time",
GNUNET_TIME_absolute_get ()),
- GNUNET_JSON_pack_uint64 ("start_pp_reserve_close_uuid",
- start_pp.last_reserve_close_uuid),
- GNUNET_JSON_pack_uint64 ("end_pp_reserve_close_uuid",
- pp.last_reserve_close_uuid),
- TALER_JSON_pack_time_abs_human ("start_pp_last_timestamp",
- start_pp.last_timestamp.abs_time),
- TALER_JSON_pack_time_abs_human ("end_pp_last_timestamp",
- pp.last_timestamp.abs_time),
+ GNUNET_JSON_pack_uint64 ("start_pp_reserve_close_id",
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("end_pp_reserve_close_id",
+ TALER_ARL_USE_PP (wire_reserve_close_id)),
+ GNUNET_JSON_pack_uint64 ("start_pp_last_batch_deposit_id",
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("end_pp_last_batch_deposit_id",
+ TALER_ARL_USE_PP (wire_batch_deposit_id)),
+ GNUNET_JSON_pack_uint64 ("start_pp_last_aggregation_serial_id",
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("end_pp_last_aggregation_serial_id",
+ TALER_ARL_USE_PP (wire_aggregation_id)),
GNUNET_JSON_pack_array_steal ("account_progress",
report_account_progress)));
report_wire_out_inconsistencies = NULL;
report_reserve_in_inconsistencies = NULL;
report_row_inconsistencies = NULL;
report_row_minor_inconsistencies = NULL;
- report_missattribution_in_inconsistencies = NULL;
+ report_misattribution_in_inconsistencies = NULL;
report_lags = NULL;
+ report_kyc_lags = NULL;
+ report_aml_lags = NULL;
report_closure_lags = NULL;
report_account_progress = NULL;
report_wire_format_inconsistencies = NULL;
@@ -558,6 +653,10 @@ do_shutdown (void *cls)
GNUNET_CONTAINER_DLL_remove (wa_head,
wa_tail,
wa);
+ GNUNET_free (wa->label_reserve_in_serial_id);
+ GNUNET_free (wa->label_wire_out_serial_id);
+ GNUNET_free (wa->label_wire_off_in);
+ GNUNET_free (wa->label_wire_off_out);
GNUNET_free (wa);
}
if (NULL != ctx)
@@ -585,7 +684,7 @@ do_shutdown (void *cls)
* @param value the `struct ReserveClosure` to free
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
check_pending_rc (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -612,8 +711,8 @@ check_pending_rc (void *cls,
&rc->wtid),
GNUNET_JSON_pack_string ("account",
rc->receiver_account)));
- pp.last_reserve_close_uuid
- = GNUNET_MIN (pp.last_reserve_close_uuid,
+ TALER_ARL_USE_PP (wire_reserve_close_id)
+ = GNUNET_MIN (TALER_ARL_USE_PP (wire_reserve_close_id),
rc->rowid);
return GNUNET_OK;
}
@@ -635,12 +734,12 @@ hash_rc (const char *receiver_account,
size_t slen = strlen (receiver_account);
char buf[sizeof (struct TALER_WireTransferIdentifierRawP) + slen];
- memcpy (buf,
- wtid,
- sizeof (*wtid));
- memcpy (&buf[sizeof (*wtid)],
- receiver_account,
- slen);
+ GNUNET_memcpy (buf,
+ wtid,
+ sizeof (*wtid));
+ GNUNET_memcpy (&buf[sizeof (*wtid)],
+ receiver_account,
+ slen);
GNUNET_CRYPTO_hash (buf,
sizeof (buf),
key);
@@ -656,6 +755,42 @@ hash_rc (const char *receiver_account,
static enum GNUNET_DB_QueryStatus
commit (enum GNUNET_DB_QueryStatus qs)
{
+ if (qs >= 0)
+ {
+ if (had_start_balance)
+ {
+ struct TALER_Amount sum;
+
+ TALER_ARL_amount_add (&sum,
+ &total_wire_in,
+ &start_balance);
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (final_balance),
+ &sum,
+ &total_wire_out);
+ qs = TALER_ARL_adb->update_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (total_drained),
+ TALER_ARL_SET_AB (final_balance),
+ NULL);
+ }
+ else
+ {
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (final_balance),
+ &total_wire_in,
+ &total_wire_out);
+ qs = TALER_ARL_adb->insert_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (total_drained),
+ TALER_ARL_SET_AB (final_balance),
+ NULL);
+ }
+ }
+ else
+ {
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (final_balance)));
+ }
if (0 > qs)
{
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
@@ -684,26 +819,33 @@ commit (enum GNUNET_DB_QueryStatus qs)
GNUNET_JSON_pack_uint64 ("end_reserve_in",
wa->pp.last_reserve_in_serial_id),
GNUNET_JSON_pack_uint64 ("start_wire_out",
- wa->start_pp.
- last_wire_out_serial_id),
+ wa->start_pp.last_wire_out_serial_id),
GNUNET_JSON_pack_uint64 ("end_wire_out",
wa->pp.last_wire_out_serial_id))));
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == wa->qsx)
- qs = TALER_ARL_adb->update_wire_auditor_account_progress (
+ qs = TALER_ARL_adb->update_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- wa->ai->section_name,
- &wa->pp,
- wa->in_wire_off,
- wa->out_wire_off);
+ wa->label_reserve_in_serial_id,
+ wa->pp.last_reserve_in_serial_id,
+ wa->label_wire_out_serial_id,
+ wa->pp.last_wire_out_serial_id,
+ wa->label_wire_off_in,
+ wa->wire_off_in,
+ wa->label_wire_off_out,
+ wa->wire_off_out,
+ NULL);
else
- qs = TALER_ARL_adb->insert_wire_auditor_account_progress (
+ qs = TALER_ARL_adb->insert_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- wa->ai->section_name,
- &wa->pp,
- wa->in_wire_off,
- wa->out_wire_off);
+ wa->label_reserve_in_serial_id,
+ wa->pp.last_reserve_in_serial_id,
+ wa->label_wire_out_serial_id,
+ wa->pp.last_wire_out_serial_id,
+ wa->label_wire_off_in,
+ wa->wire_off_in,
+ wa->label_wire_off_out,
+ wa->wire_off_out,
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -716,13 +858,19 @@ commit (enum GNUNET_DB_QueryStatus qs)
&check_pending_rc,
NULL);
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsx_gwap)
- qs = TALER_ARL_adb->update_wire_auditor_progress (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &pp);
+ qs = TALER_ARL_adb->update_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (wire_reserve_close_id),
+ TALER_ARL_SET_PP (wire_batch_deposit_id),
+ TALER_ARL_SET_PP (wire_aggregation_id),
+ NULL);
else
- qs = TALER_ARL_adb->insert_wire_auditor_progress (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &pp);
+ qs = TALER_ARL_adb->insert_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (wire_reserve_close_id),
+ TALER_ARL_SET_PP (wire_batch_deposit_id),
+ TALER_ARL_SET_PP (wire_aggregation_id),
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -731,8 +879,9 @@ commit (enum GNUNET_DB_QueryStatus qs)
return qs;
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Concluded audit step at %s\n",
- GNUNET_TIME_timestamp2s (pp.last_timestamp));
+ "Concluded audit step at %llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (wire_aggregation_id),
+ (unsigned long long) TALER_ARL_USE_PP (wire_batch_deposit_id));
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
{
@@ -769,59 +918,341 @@ commit (enum GNUNET_DB_QueryStatus qs)
/* ***************************** Analyze required transfers ************************ */
/**
- * Function called on deposits that are past their due date
- * and have not yet seen a wire transfer.
+ * Closure for import_wire_missing_cb().
+ */
+struct ImportMissingWireContext
+{
+ /**
+ * Set to maximum row ID encountered.
+ */
+ uint64_t max_batch_deposit_uuid;
+
+ /**
+ * Set to database errors in callback.
+ */
+ enum GNUNET_DB_QueryStatus err;
+};
+
+
+/**
+ * Function called on deposits that need to be checked for their
+ * wire transfer.
*
- * @param cls closure
- * @param rowid deposit table row of the coin's deposit
- * @param coin_pub public key of the coin
- * @param amount value of the deposit, including fee
- * @param payto_uri where should the funds be wired
- * @param deadline what was the requested wire transfer deadline
- * @param done did the exchange claim that it made a transfer?
- * NOTE: only valid in internal audit mode!
+ * @param cls closure, points to a `struct ImportMissingWireContext`
+ * @param batch_deposit_serial_id serial of the entry in the batch deposits table
+ * @param total_amount value of the missing deposits, including fee
+ * @param wire_target_h_payto where should the funds be wired
+ * @param deadline what was the earliest requested wire transfer deadline
*/
static void
-wire_missing_cb (void *cls,
- uint64_t rowid,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_Amount *amount,
- const char *payto_uri,
- struct GNUNET_TIME_Timestamp deadline,
- bool done)
+import_wire_missing_cb (void *cls,
+ uint64_t batch_deposit_serial_id,
+ const struct TALER_Amount *total_amount,
+ const struct TALER_PaytoHashP *wire_target_h_payto,
+ struct GNUNET_TIME_Timestamp deadline)
{
- json_t *rep;
+ struct ImportMissingWireContext *wc = cls;
+ enum GNUNET_DB_QueryStatus qs;
+
+ if (wc->err < 0)
+ return; /* already failed */
+ GNUNET_assert (batch_deposit_serial_id > wc->max_batch_deposit_uuid);
+ wc->max_batch_deposit_uuid = batch_deposit_serial_id;
+ qs = TALER_ARL_adb->insert_pending_deposit (
+ TALER_ARL_adb->cls,
+ batch_deposit_serial_id,
+ wire_target_h_payto,
+ total_amount,
+ deadline);
+ if (qs < 0)
+ wc->err = qs;
+}
+
+
+/**
+ * Information about a delayed wire transfer and the possible
+ * reasons for the delay.
+ */
+struct ReasonDetail
+{
+ /**
+ * Total amount that should have been transferred.
+ */
+ struct TALER_Amount total_amount;
+
+ /**
+ * Earliest deadline for an expected transfer to the account.
+ */
+ struct GNUNET_TIME_Timestamp deadline;
+
+ /**
+ * Target account, NULL if even that is not known (due to
+ * exchange lacking required entry in wire_targets table).
+ */
+ char *payto_uri;
+
+ /**
+ * Reasons due to pending KYC requests.
+ */
+ char *kyc_pending;
+
+ /**
+ * AML decision state for the target account.
+ */
+ enum TALER_AmlDecisionState status;
+
+ /**
+ * Current AML threshold for the account, may be an invalid account if the
+ * default threshold applies.
+ */
+ struct TALER_Amount aml_limit;
+};
+
+/**
+ * Closure for report_wire_missing_cb().
+ */
+struct ReportMissingWireContext
+{
+ /**
+ * Map from wire_target_h_payto to `struct ReasonDetail`.
+ */
+ struct GNUNET_CONTAINER_MultiShortmap *map;
+
+ /**
+ * Set to database errors in callback.
+ */
+ enum GNUNET_DB_QueryStatus err;
+};
+
+
+/**
+ * Closure for #clear_finished_transfer_cb().
+ */
+struct AggregationContext
+{
+ /**
+ * Set to maximum row ID encountered.
+ */
+ uint64_t max_aggregation_serial;
+
+ /**
+ * Set to database errors in callback.
+ */
+ enum GNUNET_DB_QueryStatus err;
+};
+
+
+/**
+ * Free memory allocated in @a value.
+ *
+ * @param cls unused
+ * @param key unused
+ * @param value must be a `struct ReasonDetail`
+ * @return #GNUNET_YES if we should continue to
+ * iterate,
+ * #GNUNET_NO if not.
+ */
+static enum GNUNET_GenericReturnValue
+free_report_entry (void *cls,
+ const struct GNUNET_ShortHashCode *key,
+ void *value)
+{
+ struct ReasonDetail *rd = value;
+
+ GNUNET_free (rd->kyc_pending);
+ GNUNET_free (rd->payto_uri);
+ GNUNET_free (rd);
+ return GNUNET_YES;
+}
+
+
+/**
+ * We had an entry in our map of wire transfers that
+ * should have been performed. Generate report.
+ *
+ * @param cls unused
+ * @param key unused
+ * @param value must be a `struct ReasonDetail`
+ * @return #GNUNET_YES if we should continue to
+ * iterate,
+ * #GNUNET_NO if not.
+ */
+static enum GNUNET_GenericReturnValue
+generate_report (void *cls,
+ const struct GNUNET_ShortHashCode *key,
+ void *value)
+{
+ struct ReasonDetail *rd = value;
- (void) cls;
- TALER_ARL_amount_add (&total_amount_lag,
- &total_amount_lag,
- amount);
/* For now, we simplify and only check that the
amount was tiny */
- if (0 > TALER_amount_cmp (amount,
+ if (0 > TALER_amount_cmp (&rd->total_amount,
&tiny_amount))
- return; /* acceptable, amount was tiny */
- rep = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- rowid),
- TALER_JSON_pack_amount ("amount",
- amount),
- TALER_JSON_pack_time_abs_human ("deadline",
- deadline.abs_time),
- GNUNET_JSON_pack_data_auto ("coin_pub",
- coin_pub),
- GNUNET_JSON_pack_string ("account",
- payto_uri));
- if (internal_checks)
+ return free_report_entry (cls,
+ key,
+ value); /* acceptable, amount was tiny */
+ // TODO: maybe split total_amount_lag up by category below?
+ TALER_ARL_amount_add (&total_amount_lag,
+ &total_amount_lag,
+ &rd->total_amount);
+ if (NULL != rd->kyc_pending)
+ {
+ json_t *rep;
+
+ rep = GNUNET_JSON_PACK (
+ TALER_JSON_pack_amount ("total_amount",
+ &rd->total_amount),
+ TALER_JSON_pack_time_abs_human ("deadline",
+ rd->deadline.abs_time),
+ GNUNET_JSON_pack_string ("kyc_pending",
+ rd->kyc_pending),
+ GNUNET_JSON_pack_allow_null (
+ GNUNET_JSON_pack_string ("account",
+ rd->payto_uri)));
+ TALER_ARL_report (report_kyc_lags,
+ rep);
+ }
+ else if (TALER_AML_NORMAL != rd->status)
+ {
+ const char *sstatus = "<undefined>";
+ json_t *rep;
+
+ switch (rd->status)
+ {
+ case TALER_AML_NORMAL:
+ GNUNET_assert (0);
+ break;
+ case TALER_AML_PENDING:
+ sstatus = "pending";
+ break;
+ case TALER_AML_FROZEN:
+ sstatus = "frozen";
+ break;
+ }
+ rep = GNUNET_JSON_PACK (
+ TALER_JSON_pack_amount ("total_amount",
+ &rd->total_amount),
+ GNUNET_JSON_pack_allow_null (
+ TALER_JSON_pack_amount ("aml_limit",
+ TALER_amount_is_valid (&rd->aml_limit)
+ ? &rd->aml_limit
+ : NULL)),
+ TALER_JSON_pack_time_abs_human ("deadline",
+ rd->deadline.abs_time),
+ GNUNET_JSON_pack_string ("aml_status",
+ sstatus),
+ GNUNET_JSON_pack_allow_null (
+ GNUNET_JSON_pack_string ("account",
+ rd->payto_uri)));
+ TALER_ARL_report (report_aml_lags,
+ rep);
+ }
+ else
{
- /* the 'done' bit is only useful in 'internal' mode */
- GNUNET_assert (0 ==
- json_object_set (rep,
- "claimed_done",
- json_string ((done) ? "yes" : "no")));
+ json_t *rep;
+
+ rep = GNUNET_JSON_PACK (
+ TALER_JSON_pack_amount ("total_amount",
+ &rd->total_amount),
+ TALER_JSON_pack_time_abs_human ("deadline",
+ rd->deadline.abs_time),
+ GNUNET_JSON_pack_allow_null (
+ GNUNET_JSON_pack_string ("account",
+ rd->payto_uri)));
+ TALER_ARL_report (report_lags,
+ rep);
}
- TALER_ARL_report (report_lags,
- rep);
+
+ return free_report_entry (cls,
+ key,
+ value);
+}
+
+
+/**
+ * Function called on deposits that are past their due date
+ * and have not yet seen a wire transfer.
+ *
+ * @param cls closure, points to a `struct ReportMissingWireContext`
+ * @param batch_deposit_serial_id row in the database for which the wire transfer is missing
+ * @param total_amount value of the missing deposits, including fee
+ * @param wire_target_h_payto hash of payto-URI where the funds should have been wired
+ * @param deadline what was the earliest requested wire transfer deadline
+ */
+static void
+report_wire_missing_cb (void *cls,
+ uint64_t batch_deposit_serial_id,
+ const struct TALER_Amount *total_amount,
+ const struct TALER_PaytoHashP *wire_target_h_payto,
+ struct GNUNET_TIME_Timestamp deadline)
+{
+ struct ReportMissingWireContext *rc = cls;
+ struct ReasonDetail *rd;
+
+ rd = GNUNET_CONTAINER_multishortmap_get (rc->map,
+ &wire_target_h_payto->hash);
+ if (NULL == rd)
+ {
+ rd = GNUNET_new (struct ReasonDetail);
+ GNUNET_assert (GNUNET_YES ==
+ GNUNET_CONTAINER_multishortmap_put (
+ rc->map,
+ &wire_target_h_payto->hash,
+ rd,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ rc->err = TALER_ARL_edb->select_justification_for_missing_wire (
+ TALER_ARL_edb->cls,
+ wire_target_h_payto,
+ &rd->payto_uri,
+ &rd->kyc_pending,
+ &rd->status,
+ &rd->aml_limit);
+ rd->total_amount = *total_amount;
+ rd->deadline = deadline;
+ }
+ else
+ {
+ TALER_ARL_amount_add (&rd->total_amount,
+ &rd->total_amount,
+ total_amount);
+ rd->deadline = GNUNET_TIME_timestamp_min (rd->deadline,
+ deadline);
+ }
+}
+
+
+/**
+ * Function called on aggregations that were done for
+ * a (batch) deposit.
+ *
+ * @param cls closure
+ * @param tracking_serial_id where in the table are we
+ * @param batch_deposit_serial_id which batch deposit was aggregated
+ */
+static void
+clear_finished_transfer_cb (
+ void *cls,
+ uint64_t tracking_serial_id,
+ uint64_t batch_deposit_serial_id)
+{
+ struct AggregationContext *ac = cls;
+ enum GNUNET_DB_QueryStatus qs;
+
+ if (0 > ac->err)
+ return; /* already failed */
+ GNUNET_assert (ac->max_aggregation_serial < tracking_serial_id);
+ ac->max_aggregation_serial = tracking_serial_id;
+ qs = TALER_ARL_adb->delete_pending_deposit (
+ TALER_ARL_adb->cls,
+ batch_deposit_serial_id);
+ if (0 == qs)
+ {
+ /* Aggregated something twice or other error, report! */
+ GNUNET_break (0);
+ // FIXME: report more nicely!
+ }
+ if (0 > qs)
+ ac->err = qs;
}
@@ -832,30 +1263,78 @@ wire_missing_cb (void *cls,
static void
check_for_required_transfers (void)
{
- struct GNUNET_TIME_Timestamp next_timestamp;
+ struct ImportMissingWireContext wc = {
+ .max_batch_deposit_uuid = TALER_ARL_USE_PP (wire_batch_deposit_id),
+ .err = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT
+ };
+ struct GNUNET_TIME_Absolute deadline;
enum GNUNET_DB_QueryStatus qs;
+ struct ReportMissingWireContext rc = {
+ .err = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT
+ };
+ struct AggregationContext ac = {
+ .max_aggregation_serial = TALER_ARL_USE_PP (wire_aggregation_id),
+ .err = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT
+ };
+ qs = TALER_ARL_edb->select_batch_deposits_missing_wire (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (wire_batch_deposit_id),
+ &import_wire_missing_cb,
+ &wc);
+ if ( (0 > qs) || (0 > wc.err) )
+ {
+ GNUNET_break (0);
+ GNUNET_break ( (GNUNET_DB_STATUS_SOFT_ERROR == qs) ||
+ (GNUNET_DB_STATUS_SOFT_ERROR == wc.err) );
+ global_ret = EXIT_FAILURE;
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ TALER_ARL_USE_PP (wire_batch_deposit_id) = wc.max_batch_deposit_uuid;
+ qs = TALER_ARL_edb->select_aggregations_above_serial (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (wire_aggregation_id),
+ &clear_finished_transfer_cb,
+ &ac);
+ if ( (0 > qs) || (0 > ac.err) )
+ {
+ GNUNET_break (0);
+ GNUNET_break ( (GNUNET_DB_STATUS_SOFT_ERROR == qs) ||
+ (GNUNET_DB_STATUS_SOFT_ERROR == ac.err) );
+ global_ret = EXIT_FAILURE;
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ TALER_ARL_USE_PP (wire_aggregation_id) = ac.max_aggregation_serial;
/* Subtract #GRACE_PERIOD, so we can be a bit behind in processing
without immediately raising undue concern */
- next_timestamp = GNUNET_TIME_absolute_to_timestamp (
- GNUNET_TIME_absolute_subtract (GNUNET_TIME_absolute_get (),
- GRACE_PERIOD));
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Analyzing exchange's unfinished deposits (deadline: %s)\n",
- GNUNET_TIME_timestamp2s (next_timestamp));
- qs = TALER_ARL_edb->select_deposits_missing_wire (TALER_ARL_edb->cls,
- pp.last_timestamp,
- next_timestamp,
- &wire_missing_cb,
- &next_timestamp);
- if (0 > qs)
+ deadline = GNUNET_TIME_absolute_subtract (GNUNET_TIME_absolute_get (),
+ GRACE_PERIOD);
+ rc.map = GNUNET_CONTAINER_multishortmap_create (1024,
+ GNUNET_NO);
+ qs = TALER_ARL_adb->select_pending_deposits (
+ TALER_ARL_adb->cls,
+ deadline,
+ &report_wire_missing_cb,
+ &rc);
+ if ( (0 > qs) || (0 > rc.err) )
{
- GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ GNUNET_break (0);
+ GNUNET_break ( (GNUNET_DB_STATUS_SOFT_ERROR == qs) ||
+ (GNUNET_DB_STATUS_SOFT_ERROR == rc.err) );
+ GNUNET_CONTAINER_multishortmap_iterate (rc.map,
+ &free_report_entry,
+ NULL);
+ GNUNET_CONTAINER_multishortmap_destroy (rc.map);
global_ret = EXIT_FAILURE;
GNUNET_SCHEDULER_shutdown ();
return;
}
- pp.last_timestamp = next_timestamp;
+ GNUNET_CONTAINER_multishortmap_iterate (rc.map,
+ &generate_report,
+ NULL);
+ GNUNET_CONTAINER_multishortmap_destroy (rc.map);
/* conclude with success */
commit (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT);
GNUNET_SCHEDULER_shutdown ();
@@ -950,6 +1429,9 @@ wire_out_cb (void *cls,
GNUNET_TIME_timestamp2s (date),
TALER_amount2s (amount),
TALER_B2S (wtid));
+ TALER_ARL_amount_add (&total_wire_out,
+ &total_wire_out,
+ amount);
GNUNET_CRYPTO_hash (wtid,
sizeof (struct TALER_WireTransferIdentifierRawP),
&key);
@@ -959,7 +1441,7 @@ wire_out_cb (void *cls,
{
/* Wire transfer was not made (yet) at all (but would have been
justified), so the entire amount is missing / still to be done.
- This is moderately harmless, it might just be that the aggreator
+ This is moderately harmless, it might just be that the aggregator
has not yet fully caught up with the transfers it should do. */
TALER_ARL_report (
report_wire_out_inconsistencies,
@@ -1127,7 +1609,7 @@ struct CheckMatchContext
* @param key key of @a value in #reserve_closures
* @param value a `struct ReserveClosure`
*/
-static int
+static enum GNUNET_GenericReturnValue
check_rc_matches (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -1157,16 +1639,17 @@ check_rc_matches (void *cls,
/**
- * Check whether the given transfer was justified by a reserve closure. If
- * not, complain that we failed to match an entry from #out_map. This means a
- * wire transfer was made without proper justification.
+ * Check whether the given transfer was justified by a reserve closure or
+ * profit drain. If not, complain that we failed to match an entry from
+ * #out_map. This means a wire transfer was made without proper
+ * justification.
*
* @param cls a `struct WireAccount`
* @param key unused key
* @param value the `struct ReserveOutInfo` to report
- * @return #GNUNET_OK
+ * @return #GNUNET_OK on success
*/
-static int
+static enum GNUNET_GenericReturnValue
complain_out_not_found (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -1189,6 +1672,131 @@ complain_out_not_found (void *cls,
&ctx);
if (ctx.found)
return GNUNET_OK;
+ /* check for profit drain */
+ {
+ enum GNUNET_DB_QueryStatus qs;
+ uint64_t serial;
+ char *account_section;
+ char *payto_uri;
+ struct GNUNET_TIME_Timestamp request_timestamp;
+ struct TALER_Amount amount;
+ struct TALER_MasterSignatureP master_sig;
+
+ qs = TALER_ARL_edb->get_drain_profit (TALER_ARL_edb->cls,
+ &roi->details.wtid,
+ &serial,
+ &account_section,
+ &payto_uri,
+ &request_timestamp,
+ &amount,
+ &master_sig);
+ switch (qs)
+ {
+ case GNUNET_DB_STATUS_HARD_ERROR:
+ GNUNET_break (0);
+ global_ret = EXIT_FAILURE;
+ GNUNET_SCHEDULER_shutdown ();
+ return GNUNET_SYSERR;
+ case GNUNET_DB_STATUS_SOFT_ERROR:
+ /* should fail on commit later ... */
+ GNUNET_break (0);
+ return GNUNET_NO;
+ case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
+ /* not a profit drain */
+ break;
+ case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Profit drain of %s to %s found!\n",
+ TALER_amount2s (&amount),
+ payto_uri);
+ if (GNUNET_OK !=
+ TALER_exchange_offline_profit_drain_verify (
+ &roi->details.wtid,
+ request_timestamp,
+ &amount,
+ account_section,
+ payto_uri,
+ &TALER_ARL_master_pub,
+ &master_sig))
+ {
+ GNUNET_break (0);
+ TALER_ARL_report (report_row_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("table",
+ "profit_drains"),
+ GNUNET_JSON_pack_uint64 ("row",
+ serial),
+ GNUNET_JSON_pack_data_auto ("id",
+ &roi->details.wtid),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "invalid signature")));
+ TALER_ARL_amount_add (&total_bad_amount_out_plus,
+ &total_bad_amount_out_plus,
+ &amount);
+ }
+ else if (0 !=
+ strcasecmp (payto_uri,
+ roi->details.credit_account_uri))
+ {
+ TALER_ARL_report (
+ report_wire_out_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ serial),
+ TALER_JSON_pack_amount ("amount_wired",
+ &roi->details.amount),
+ TALER_JSON_pack_amount ("amount_wired",
+ &amount),
+ GNUNET_JSON_pack_data_auto ("wtid",
+ &roi->details.wtid),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ roi->details.execution_date.abs_time),
+ GNUNET_JSON_pack_string ("account",
+ wa->ai->section_name),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "wrong target account")));
+ TALER_ARL_amount_add (&total_bad_amount_out_plus,
+ &total_bad_amount_out_plus,
+ &amount);
+ }
+ else if (0 !=
+ TALER_amount_cmp (&amount,
+ &roi->details.amount))
+ {
+ TALER_ARL_report (
+ report_wire_out_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ serial),
+ TALER_JSON_pack_amount ("amount_justified",
+ &roi->details.amount),
+ TALER_JSON_pack_amount ("amount_wired",
+ &amount),
+ GNUNET_JSON_pack_data_auto ("wtid",
+ &roi->details.wtid),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ roi->details.execution_date.abs_time),
+ GNUNET_JSON_pack_string ("account",
+ wa->ai->section_name),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "profit drain amount incorrect")));
+ TALER_ARL_amount_add (&total_bad_amount_out_minus,
+ &total_bad_amount_out_minus,
+ &roi->details.amount);
+ TALER_ARL_amount_add (&total_bad_amount_out_plus,
+ &total_bad_amount_out_plus,
+ &amount);
+ }
+ GNUNET_free (account_section);
+ GNUNET_free (payto_uri);
+ /* profit drain was correct */
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_drained),
+ &TALER_ARL_USE_AB (total_drained),
+ &amount);
+ return GNUNET_OK;
+ }
+ }
+
TALER_ARL_report (
report_wire_out_inconsistencies,
GNUNET_JSON_PACK (
@@ -1235,6 +1843,7 @@ check_exchange_wire_out (struct WireAccount *wa)
{
enum GNUNET_DB_QueryStatus qs;
+ GNUNET_assert (NULL == wa->dhh);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Analyzing exchange's wire OUT table for account `%s'\n",
wa->ai->section_name);
@@ -1268,90 +1877,92 @@ check_exchange_wire_out (struct WireAccount *wa)
* transactions).
*
* @param cls `struct WireAccount` with current wire account to process
- * @param http_status_code http status of the request
- * @param ec error code in case something went wrong
- * @param row_off identification of the position at which we are querying
- * @param details details about the wire transfer
- * @param json original response in JSON format
- * @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
- */
-static int
+ * @param dhr HTTP response details
+ */
+static void
history_debit_cb (void *cls,
- unsigned int http_status_code,
- enum TALER_ErrorCode ec,
- uint64_t row_off,
- const struct TALER_BANK_DebitDetails *details,
- const json_t *json)
+ const struct TALER_BANK_DebitHistoryResponse *dhr)
{
struct WireAccount *wa = cls;
struct ReserveOutInfo *roi;
size_t slen;
- (void) json;
- if (NULL == details)
+ wa->dhh = NULL;
+ switch (dhr->http_status)
{
- wa->dhh = NULL;
- if (TALER_EC_NONE != ec)
+ case MHD_HTTP_OK:
+ for (unsigned int i = 0; i<dhr->details.ok.details_length; i++)
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Error fetching debit history of account %s: %u/%u!\n",
- wa->ai->section_name,
- http_status_code,
- (unsigned int) ec);
- commit (GNUNET_DB_STATUS_HARD_ERROR);
- global_ret = EXIT_FAILURE;
- GNUNET_SCHEDULER_shutdown ();
- return GNUNET_SYSERR;
+ const struct TALER_BANK_DebitDetails *dd
+ = &dhr->details.ok.details[i];
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Analyzing bank DEBIT at %s of %s with WTID %s\n",
+ GNUNET_TIME_timestamp2s (dd->execution_date),
+ TALER_amount2s (&dd->amount),
+ TALER_B2S (&dd->wtid));
+ /* Update offset */
+ wa->wire_off_out = dd->serial_id;
+ slen = strlen (dd->credit_account_uri) + 1;
+ roi = GNUNET_malloc (sizeof (struct ReserveOutInfo)
+ + slen);
+ GNUNET_CRYPTO_hash (&dd->wtid,
+ sizeof (dd->wtid),
+ &roi->subject_hash);
+ roi->details.amount = dd->amount;
+ roi->details.execution_date = dd->execution_date;
+ roi->details.wtid = dd->wtid;
+ roi->details.credit_account_uri = (const char *) &roi[1];
+ GNUNET_memcpy (&roi[1],
+ dd->credit_account_uri,
+ slen);
+ if (GNUNET_OK !=
+ GNUNET_CONTAINER_multihashmap_put (out_map,
+ &roi->subject_hash,
+ roi,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
+ {
+ char *diagnostic;
+
+ GNUNET_asprintf (&diagnostic,
+ "duplicate subject hash `%s'",
+ TALER_B2S (&roi->subject_hash));
+ TALER_ARL_amount_add (&total_wire_format_amount,
+ &total_wire_format_amount,
+ &dd->amount);
+ TALER_ARL_report (report_wire_format_inconsistencies,
+ GNUNET_JSON_PACK (
+ TALER_JSON_pack_amount ("amount",
+ &dd->amount),
+ GNUNET_JSON_pack_uint64 ("wire_offset",
+ dd->serial_id),
+ GNUNET_JSON_pack_string ("diagnostic",
+ diagnostic)));
+ GNUNET_free (diagnostic);
+ }
}
check_exchange_wire_out (wa);
- return GNUNET_OK;
- }
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Analyzing bank DEBIT at %s of %s with WTID %s\n",
- GNUNET_TIME_timestamp2s (details->execution_date),
- TALER_amount2s (&details->amount),
- TALER_B2S (&details->wtid));
- /* Update offset */
- wa->out_wire_off = row_off;
- slen = strlen (details->credit_account_uri) + 1;
- roi = GNUNET_malloc (sizeof (struct ReserveOutInfo)
- + slen);
- GNUNET_CRYPTO_hash (&details->wtid,
- sizeof (details->wtid),
- &roi->subject_hash);
- roi->details.amount = details->amount;
- roi->details.execution_date = details->execution_date;
- roi->details.wtid = details->wtid;
- roi->details.credit_account_uri = (const char *) &roi[1];
- memcpy (&roi[1],
- details->credit_account_uri,
- slen);
- if (GNUNET_OK !=
- GNUNET_CONTAINER_multihashmap_put (out_map,
- &roi->subject_hash,
- roi,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
- {
- char *diagnostic;
-
- GNUNET_asprintf (&diagnostic,
- "duplicate subject hash `%s'",
- TALER_B2S (&roi->subject_hash));
- TALER_ARL_amount_add (&total_wire_format_amount,
- &total_wire_format_amount,
- &details->amount);
- TALER_ARL_report (report_wire_format_inconsistencies,
- GNUNET_JSON_PACK (
- TALER_JSON_pack_amount ("amount",
- &details->amount),
- GNUNET_JSON_pack_uint64 ("wire_offset",
- row_off),
- GNUNET_JSON_pack_string ("diagnostic",
- diagnostic)));
- GNUNET_free (diagnostic);
- return GNUNET_OK;
+ return;
+ case MHD_HTTP_NO_CONTENT:
+ check_exchange_wire_out (wa);
+ return;
+ case MHD_HTTP_NOT_FOUND:
+ if (ignore_account_404)
+ {
+ check_exchange_wire_out (wa);
+ return;
+ }
+ break;
+ default:
+ break;
}
- return GNUNET_OK;
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Error fetching debit history of account %s: %u/%u!\n",
+ wa->ai->section_name,
+ dhr->http_status,
+ (unsigned int) dhr->ec);
+ commit (GNUNET_DB_STATUS_HARD_ERROR);
+ global_ret = EXIT_FAILURE;
+ GNUNET_SCHEDULER_shutdown ();
}
@@ -1382,10 +1993,12 @@ process_debits (void *cls)
"Checking bank DEBIT records of account `%s'\n",
wa->ai->section_name);
GNUNET_assert (NULL == wa->dhh);
+ // FIXME: handle the case where more than INT32_MAX transactions exist.
+ // (CG: used to be INT64_MAX, changed by MS to INT32_MAX, why? To be discussed with him!)
wa->dhh = TALER_BANK_debit_history (ctx,
wa->ai->auth,
- wa->out_wire_off,
- INT64_MAX,
+ wa->wire_off_out,
+ INT32_MAX,
GNUNET_TIME_UNIT_ZERO,
&history_debit_cb,
wa);
@@ -1408,8 +2021,9 @@ process_debits (void *cls)
static void
begin_debit_audit (void)
{
+ GNUNET_assert (NULL == out_map);
out_map = GNUNET_CONTAINER_multihashmap_create (1024,
- GNUNET_YES);
+ true);
process_debits (wa_head);
}
@@ -1424,8 +2038,11 @@ begin_debit_audit (void)
static void
conclude_credit_history (void)
{
- GNUNET_CONTAINER_multihashmap_destroy (in_map);
- in_map = NULL;
+ if (NULL != in_map)
+ {
+ GNUNET_CONTAINER_multihashmap_destroy (in_map);
+ in_map = NULL;
+ }
/* credit done, now check debits */
begin_debit_audit ();
}
@@ -1444,7 +2061,7 @@ conclude_credit_history (void)
* @param execution_date when did we receive the funds
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
reserve_in_cb (void *cls,
uint64_t rowid,
const struct TALER_ReservePublicKeyP *reserve_pub,
@@ -1463,6 +2080,9 @@ reserve_in_cb (void *cls,
GNUNET_TIME_timestamp2s (execution_date),
TALER_amount2s (credit),
TALER_B2S (reserve_pub));
+ TALER_ARL_amount_add (&total_wire_in,
+ &total_wire_in,
+ credit);
slen = strlen (sender_account_details) + 1;
rii = GNUNET_malloc (sizeof (struct ReserveInInfo) + slen);
rii->rowid = rowid;
@@ -1470,9 +2090,9 @@ reserve_in_cb (void *cls,
rii->details.execution_date = execution_date;
rii->details.reserve_pub = *reserve_pub;
rii->details.debit_account_uri = (const char *) &rii[1];
- memcpy (&rii[1],
- sender_account_details,
- slen);
+ GNUNET_memcpy (&rii[1],
+ sender_account_details,
+ slen);
GNUNET_CRYPTO_hash (&wire_reference,
sizeof (uint64_t),
&rii->row_off_hash);
@@ -1488,7 +2108,7 @@ reserve_in_cb (void *cls,
"reserves_in"),
GNUNET_JSON_pack_uint64 ("row",
rowid),
- GNUNET_JSON_pack_data_auto ("wire_offset_hash",
+ GNUNET_JSON_pack_data_auto ("id",
&rii->row_off_hash),
GNUNET_JSON_pack_string ("diagnostic",
"duplicate wire offset")));
@@ -1512,7 +2132,7 @@ reserve_in_cb (void *cls,
* @param value the `struct ReserveInInfo` to free
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
complain_in_not_found (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -1556,50 +2176,19 @@ process_credits (void *cls);
/**
- * This function is called for all transactions that
- * are credited to the exchange's account (incoming
- * transactions).
+ * We got all of the incoming transactions for @a wa,
+ * finish processing the account.
*
- * @param cls `struct WireAccount` we are processing
- * @param http_status HTTP status returned by the bank
- * @param ec error code in case something went wrong
- * @param row_off identification of the position at which we are querying
- * @param details details about the wire transfer
- * @param json raw response
- * @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
- */
-static int
-history_credit_cb (void *cls,
- unsigned int http_status,
- enum TALER_ErrorCode ec,
- uint64_t row_off,
- const struct TALER_BANK_CreditDetails *details,
- const json_t *json)
+ * @param[in,out] wa wire account to process
+ */
+static void
+conclude_account (struct WireAccount *wa)
{
- struct WireAccount *wa = cls;
- struct ReserveInInfo *rii;
- struct GNUNET_HashCode key;
-
- (void) json;
- if (NULL == details)
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Reconciling CREDIT processing of account `%s'\n",
+ wa->ai->section_name);
+ if (NULL != in_map)
{
- wa->chh = NULL;
- if (TALER_EC_NONE != ec)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Error fetching credit history of account %s: %u/%s!\n",
- wa->ai->section_name,
- http_status,
- TALER_ErrorCode_get_hint (ec));
- commit (GNUNET_DB_STATUS_HARD_ERROR);
- global_ret = EXIT_FAILURE;
- GNUNET_SCHEDULER_shutdown ();
- return GNUNET_SYSERR;
- }
- /* end of operation */
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Reconciling CREDIT processing of account `%s'\n",
- wa->ai->section_name);
GNUNET_CONTAINER_multihashmap_iterate (in_map,
&complain_in_not_found,
wa);
@@ -1607,16 +2196,32 @@ history_credit_cb (void *cls,
GNUNET_CONTAINER_multihashmap_iterate (in_map,
&free_rii,
NULL);
- process_credits (wa->next);
- return GNUNET_OK;
}
+ process_credits (wa->next);
+}
+
+
+/**
+ * Analyze credit transaction @a details into @a wa.
+ *
+ * @param[in,out] wa account that received the transfer
+ * @param details transfer details
+ * @return true on success, false to stop loop at this point
+ */
+static bool
+analyze_credit (struct WireAccount *wa,
+ const struct TALER_BANK_CreditDetails *details)
+{
+ struct ReserveInInfo *rii;
+ struct GNUNET_HashCode key;
+
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Analyzing bank CREDIT at %s of %s with Reserve-pub %s\n",
GNUNET_TIME_timestamp2s (details->execution_date),
TALER_amount2s (&details->amount),
TALER_B2S (&details->reserve_pub));
- GNUNET_CRYPTO_hash (&row_off,
- sizeof (row_off),
+ GNUNET_CRYPTO_hash (&details->serial_id,
+ sizeof (details->serial_id),
&key);
rii = GNUNET_CONTAINER_multihashmap_get (in_map,
&key);
@@ -1625,13 +2230,12 @@ history_credit_cb (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Failed to find wire transfer at `%s' in exchange database. Audit ends at this point in time.\n",
GNUNET_TIME_timestamp2s (details->execution_date));
- wa->chh = NULL;
process_credits (wa->next);
- return GNUNET_SYSERR; /* not an error, just end of processing */
+ return false; /* not an error, just end of processing */
}
/* Update offset */
- wa->in_wire_off = row_off;
+ wa->wire_off_in = details->serial_id;
/* compare records with expected data */
if (0 != GNUNET_memcmp (&details->reserve_pub,
&rii->details.reserve_pub))
@@ -1642,7 +2246,7 @@ history_credit_cb (void *cls,
GNUNET_JSON_pack_uint64 ("row",
rii->rowid),
GNUNET_JSON_pack_uint64 ("bank_row",
- row_off),
+ details->serial_id),
TALER_JSON_pack_amount ("amount_exchange_expected",
&rii->details.amount),
TALER_JSON_pack_amount ("amount_wired",
@@ -1662,7 +2266,7 @@ history_credit_cb (void *cls,
GNUNET_JSON_pack_uint64 ("row",
rii->rowid),
GNUNET_JSON_pack_uint64 ("bank_row",
- row_off),
+ details->serial_id),
TALER_JSON_pack_amount ("amount_exchange_expected",
&zero),
TALER_JSON_pack_amount ("amount_wired",
@@ -1688,7 +2292,7 @@ history_credit_cb (void *cls,
GNUNET_JSON_pack_uint64 ("row",
rii->rowid),
GNUNET_JSON_pack_uint64 ("bank_row",
- row_off),
+ details->serial_id),
TALER_JSON_pack_amount ("amount_exchange_expected",
&rii->details.amount),
TALER_JSON_pack_amount ("amount_wired",
@@ -1729,19 +2333,19 @@ history_credit_cb (void *cls,
if (0 != strcasecmp (details->debit_account_uri,
rii->details.debit_account_uri))
{
- TALER_ARL_report (report_missattribution_in_inconsistencies,
+ TALER_ARL_report (report_misattribution_in_inconsistencies,
GNUNET_JSON_PACK (
TALER_JSON_pack_amount ("amount",
&rii->details.amount),
GNUNET_JSON_pack_uint64 ("row",
rii->rowid),
GNUNET_JSON_pack_uint64 ("bank_row",
- row_off),
+ details->serial_id),
GNUNET_JSON_pack_data_auto (
"reserve_pub",
&rii->details.reserve_pub)));
- TALER_ARL_amount_add (&total_missattribution_in,
- &total_missattribution_in,
+ TALER_ARL_amount_add (&total_misattribution_in,
+ &total_misattribution_in,
&rii->details.amount);
}
if (GNUNET_TIME_timestamp_cmp (details->execution_date,
@@ -1755,7 +2359,7 @@ history_credit_cb (void *cls,
GNUNET_JSON_pack_uint64 ("row",
rii->rowid),
GNUNET_JSON_pack_uint64 ("bank_row",
- row_off),
+ details->serial_id),
GNUNET_JSON_pack_string ("diagnostic",
"execution date mismatch")));
}
@@ -1764,7 +2368,60 @@ cleanup:
free_rii (NULL,
&key,
rii));
- return GNUNET_OK;
+ return true;
+}
+
+
+/**
+ * This function is called for all transactions that
+ * are credited to the exchange's account (incoming
+ * transactions).
+ *
+ * @param cls `struct WireAccount` we are processing
+ * @param chr HTTP response returned by the bank
+ */
+static void
+history_credit_cb (void *cls,
+ const struct TALER_BANK_CreditHistoryResponse *chr)
+{
+ struct WireAccount *wa = cls;
+
+ wa->chh = NULL;
+ switch (chr->http_status)
+ {
+ case MHD_HTTP_OK:
+ for (unsigned int i = 0; i<chr->details.ok.details_length; i++)
+ {
+ const struct TALER_BANK_CreditDetails *cd
+ = &chr->details.ok.details[i];
+
+ if (! analyze_credit (wa,
+ cd))
+ return;
+ }
+ conclude_account (wa);
+ return;
+ case MHD_HTTP_NO_CONTENT:
+ conclude_account (wa);
+ return;
+ case MHD_HTTP_NOT_FOUND:
+ if (ignore_account_404)
+ {
+ conclude_account (wa);
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Error fetching credit history of account %s: %u/%s!\n",
+ wa->ai->section_name,
+ chr->http_status,
+ TALER_ErrorCode_get_hint (chr->ec));
+ commit (GNUNET_DB_STATUS_HARD_ERROR);
+ global_ret = EXIT_FAILURE;
+ GNUNET_SCHEDULER_shutdown ();
}
@@ -1813,10 +2470,12 @@ process_credits (void *cls)
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Starting bank CREDIT history of account `%s'\n",
wa->ai->section_name);
+ // NOTE: handle the case where more than INT32_MAX transactions exist.
+ // (CG: used to be INT64_MAX, changed by MS to INT32_MAX, why? To be discussed with him!)
wa->chh = TALER_BANK_credit_history (ctx,
wa->ai->auth,
- wa->in_wire_off,
- INT64_MAX,
+ wa->wire_off_in,
+ INT32_MAX,
GNUNET_TIME_UNIT_ZERO,
&history_credit_cb,
wa);
@@ -1838,6 +2497,7 @@ process_credits (void *cls)
static void
begin_credit_audit (void)
{
+ GNUNET_assert (NULL == in_map);
in_map = GNUNET_CONTAINER_multihashmap_create (1024,
GNUNET_YES);
/* now go over all bank accounts and check delta with in_map */
@@ -1846,8 +2506,7 @@ begin_credit_audit (void)
/**
- * Function called about reserve closing operations
- * the aggregator triggered.
+ * Function called about reserve closing operations the aggregator triggered.
*
* @param cls closure
* @param rowid row identifier used to uniquely identify the reserve closing operation
@@ -1857,9 +2516,11 @@ begin_credit_audit (void)
* @param reserve_pub public key of the reserve
* @param receiver_account where did we send the funds, in payto://-format
* @param wtid identifier used for the wire transfer
+ * @param close_request_row which close request triggered the operation?
+ * 0 if it was a timeout (not used)
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
reserve_closed_cb (void *cls,
uint64_t rowid,
struct GNUNET_TIME_Timestamp execution_date,
@@ -1867,12 +2528,14 @@ reserve_closed_cb (void *cls,
const struct TALER_Amount *closing_fee,
const struct TALER_ReservePublicKeyP *reserve_pub,
const char *receiver_account,
- const struct TALER_WireTransferIdentifierRawP *wtid)
+ const struct TALER_WireTransferIdentifierRawP *wtid,
+ uint64_t close_request_row)
{
struct ReserveClosure *rc;
struct GNUNET_HashCode key;
(void) cls;
+ (void) close_request_row;
rc = GNUNET_new (struct ReserveClosure);
if (TALER_ARL_SR_INVALID_NEGATIVE ==
TALER_ARL_amount_subtract_neg (&rc->amount,
@@ -1885,7 +2548,7 @@ reserve_closed_cb (void *cls,
"reserves_closures"),
GNUNET_JSON_pack_uint64 ("row",
rowid),
- GNUNET_JSON_pack_data_auto ("reserve_pub",
+ GNUNET_JSON_pack_data_auto ("id",
reserve_pub),
TALER_JSON_pack_amount ("amount_with_fee",
amount_with_fee),
@@ -1898,8 +2561,8 @@ reserve_closed_cb (void *cls,
return GNUNET_SYSERR;
return GNUNET_OK;
}
- pp.last_reserve_close_uuid
- = GNUNET_MAX (pp.last_reserve_close_uuid,
+ TALER_ARL_USE_PP (wire_reserve_close_id)
+ = GNUNET_MAX (TALER_ARL_USE_PP (wire_reserve_close_id),
rowid + 1);
rc->receiver_account = GNUNET_strdup (receiver_account);
rc->wtid = *wtid;
@@ -1926,6 +2589,8 @@ reserve_closed_cb (void *cls,
static enum GNUNET_DB_QueryStatus
begin_transaction (void)
{
+ enum GNUNET_DB_QueryStatus qs;
+
if (GNUNET_SYSERR ==
TALER_ARL_edb->preflight (TALER_ARL_edb->cls))
{
@@ -1954,17 +2619,66 @@ begin_transaction (void)
GNUNET_break (0);
return GNUNET_DB_STATUS_HARD_ERROR;
}
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (total_drained)));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_wire_in));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_wire_out));
+ qs = TALER_ARL_adb->get_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_AB (total_drained),
+ TALER_ARL_GET_AB (final_balance),
+ NULL);
+ switch (qs)
+ {
+ case GNUNET_DB_STATUS_HARD_ERROR:
+ GNUNET_break (0);
+ return qs;
+ case GNUNET_DB_STATUS_SOFT_ERROR:
+ GNUNET_break (0);
+ return qs;
+ case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
+ had_start_balance = false;
+ break;
+ case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
+ had_start_balance = true;
+ break;
+ }
for (struct WireAccount *wa = wa_head;
NULL != wa;
wa = wa->next)
{
- wa->qsx = TALER_ARL_adb->get_wire_auditor_account_progress (
+ GNUNET_asprintf (&wa->label_reserve_in_serial_id,
+ "wire-%s-%s",
+ wa->ai->section_name,
+ "reserve_in_serial_id");
+ GNUNET_asprintf (&wa->label_wire_out_serial_id,
+ "wire-%s-%s",
+ wa->ai->section_name,
+ "wire_out_serial_id");
+ GNUNET_asprintf (&wa->label_wire_off_in,
+ "wire-%s-%s",
+ wa->ai->section_name,
+ "wire_off_in");
+ GNUNET_asprintf (&wa->label_wire_off_out,
+ "wire-%s-%s",
+ wa->ai->section_name,
+ "wire_off_out");
+ wa->qsx = TALER_ARL_adb->get_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- wa->ai->section_name,
- &wa->pp,
- &wa->in_wire_off,
- &wa->out_wire_off);
+ wa->label_reserve_in_serial_id,
+ &wa->pp.last_reserve_in_serial_id,
+ wa->label_wire_out_serial_id,
+ &wa->pp.last_wire_out_serial_id,
+ wa->label_wire_off_in,
+ &wa->wire_off_in,
+ wa->label_wire_off_out,
+ &wa->wire_off_out,
+ NULL);
if (0 > wa->qsx)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == wa->qsx);
@@ -1972,9 +2686,12 @@ begin_transaction (void)
}
wa->start_pp = wa->pp;
}
- qsx_gwap = TALER_ARL_adb->get_wire_auditor_progress (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &pp);
+ qsx_gwap = TALER_ARL_adb->get_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_PP (wire_reserve_close_id),
+ TALER_ARL_GET_PP (wire_batch_deposit_id),
+ TALER_ARL_GET_PP (wire_aggregation_id),
+ NULL);
if (0 > qsx_gwap)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsx_gwap);
@@ -1987,11 +2704,11 @@ begin_transaction (void)
}
else
{
- start_pp = pp;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Resuming wire audit at %s / %llu\n",
- GNUNET_TIME_timestamp2s (pp.last_timestamp),
- (unsigned long long) pp.last_reserve_close_uuid);
+ "Resuming wire audit at %llu / %llu / %llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (wire_reserve_close_id),
+ (unsigned long long) TALER_ARL_USE_PP (wire_batch_deposit_id),
+ (unsigned long long) TALER_ARL_USE_PP (wire_aggregation_id));
}
{
@@ -1999,7 +2716,7 @@ begin_transaction (void)
qs = TALER_ARL_edb->select_reserve_closed_above_serial_id (
TALER_ARL_edb->cls,
- pp.last_reserve_close_uuid,
+ TALER_ARL_USE_PP (wire_reserve_close_id),
&reserve_closed_cb,
NULL);
if (0 > qs)
@@ -2101,11 +2818,15 @@ run (void *cls,
GNUNET_assert (NULL !=
(report_row_inconsistencies = json_array ()));
GNUNET_assert (NULL !=
- (report_missattribution_in_inconsistencies
+ (report_misattribution_in_inconsistencies
= json_array ()));
GNUNET_assert (NULL !=
(report_lags = json_array ()));
GNUNET_assert (NULL !=
+ (report_aml_lags = json_array ()));
+ GNUNET_assert (NULL !=
+ (report_kyc_lags = json_array ()));
+ GNUNET_assert (NULL !=
(report_closure_lags = json_array ()));
GNUNET_assert (NULL !=
(report_account_progress = json_array ()));
@@ -2123,7 +2844,7 @@ run (void *cls,
&total_bad_amount_in_minus));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_missattribution_in));
+ &total_misattribution_in));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
&total_amount_lag));
@@ -2177,11 +2898,14 @@ main (int argc,
"internal",
"perform checks only applicable for exchange-internal audits",
&internal_checks),
- GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &TALER_ARL_master_pub),
+ GNUNET_GETOPT_option_flag ('I',
+ "ignore-not-found",
+ "continue, even if the bank account of the exchange was not found",
+ &ignore_account_404),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
diff --git a/src/auditor/test-auditor.sh b/src/auditor/test-auditor.sh
index 0d5dbc884..2cfea0532 100755
--- a/src/auditor/test-auditor.sh
+++ b/src/auditor/test-auditor.sh
@@ -1,4 +1,24 @@
#!/bin/bash
+#
+# This file is part of TALER
+# Copyright (C) 2014-2023 Taler Systems SA
+#
+# TALER is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+#
+# TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/license>
+#
+#
+# shellcheck disable=SC2317
+# shellcheck disable=SC1091
+#
+#
# Setup database which was generated from a perfectly normal
# exchange-wallet interaction and run the auditor against it.
#
@@ -10,7 +30,7 @@ set -eu
# Set of numbers for all the testcases.
# When adding new tests, increase the last number:
-ALL_TESTS=`seq 0 32`
+ALL_TESTS=$(seq 0 33)
# $TESTS determines which tests we should run.
# This construction is used to make it easy to
@@ -28,60 +48,105 @@ TESTS=${1:-$ALL_TESTS}
# VALGRIND=valgrind
VALGRIND=""
-# Exit, with status code "skip" (no 'real' failure)
-function exit_skip() {
- echo $1
- exit 77
-}
+# Number of seconds to let libeuifn background
+# tasks apply a cycle of payment submission and
+# history request.
+LIBEUFIN_SETTLE_TIME=1
+
+. setup.sh
+
-# Exit, with error message (hard failure)
-function exit_fail() {
- echo $1
- exit 1
+# Cleanup exchange and libeufin between runs.
+function cleanup()
+{
+ if [ ! -z "${EPID:-}" ]
+ then
+ echo -n "Stopping exchange $EPID..."
+ kill -TERM "$EPID"
+ wait "$EPID" || true
+ echo "DONE"
+ unset EPID
+ fi
+ stop_libeufin
}
# Cleanup to run whenever we exit
-function cleanup()
+function exit_cleanup()
{
- for n in `jobs -p`
+ echo "Running exit-cleanup"
+ if [ ! -z "${POSTGRES_PATH:-}" ]
+ then
+ echo "Stopping Postgres at ${POSTGRES_PATH}"
+ "${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ stop \
+ &> /dev/null \
+ || true
+ fi
+ cleanup
+ for n in $(jobs -p)
do
- kill $n 2> /dev/null || true
+ kill "$n" 2> /dev/null || true
done
- wait
+ wait || true
+ echo "DONE"
}
# Install cleanup handler (except for kill -9)
-trap cleanup EXIT
+trap exit_cleanup EXIT
# Operations to run before the actual audit
function pre_audit () {
# Launch bank
- echo -n "Launching bank "
- taler-bank-manage-testing $CONF postgres:///$DB serve 2>bank.err >bank.log &
- for n in `seq 1 80`
+ echo -n "Launching libeufin-bank"
+ export CONF
+ export MY_TMP_DIR
+ launch_libeufin
+ for n in $(seq 1 80)
do
echo -n "."
sleep 0.1
OK=1
- wget http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null && break
+ wget http://localhost:8082/ \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null \
+ && break
OK=0
done
- if [ 1 != $OK ]
+ if [ 1 != "$OK" ]
then
- exit_skip "Failed to launch bank"
+ exit_skip "Failed to launch libeufin-bank"
fi
echo " DONE"
- if test ${1:-no} = "aggregator"
+ if [ "${1:-no}" = "aggregator" ]
then
echo -n "Running exchange aggregator ..."
- taler-exchange-aggregator -y -L INFO -t -c $CONF 2> aggregator.log || exit_fail "FAIL"
+ taler-exchange-aggregator \
+ -y \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/aggregator.log" \
+ || exit_fail "FAIL"
echo " DONE"
echo -n "Running exchange closer ..."
- taler-exchange-closer -L INFO -t -c $CONF 2> closer.log || exit_fail "FAIL"
+ taler-exchange-closer \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/closer.log" \
+ || exit_fail "FAIL"
echo " DONE"
echo -n "Running exchange transfer ..."
- taler-exchange-transfer -L INFO -t -c $CONF 2> transfer.log || exit_fail "FAIL"
+ taler-exchange-transfer \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/transfer.log" \
+ || exit_fail "FAIL"
echo " DONE"
fi
}
@@ -92,26 +157,92 @@ function audit_only () {
echo -n "Running audit(s) ..."
# Restart so that first run is always fresh, and second one is incremental
- taler-auditor-dbinit -r -c $CONF
- $VALGRIND taler-helper-auditor-aggregation -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-aggregation.json 2> test-audit-aggregation.log || exit_fail "aggregation audit failed"
+ taler-auditor-dbinit \
+ -r \
+ -c "$CONF"
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-aggregation.out" \
+ 2> "${MY_TMP_DIR}/test-audit-aggregation.err" \
+ || exit_fail "aggregation audit failed (see ${MY_TMP_DIR}/test-audit-aggregation.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-aggregation -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-aggregation-inc.json 2> test-audit-aggregation-inc.log || exit_fail "incremental aggregation audit failed"
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-aggregation-inc.out" \
+ 2> "${MY_TMP_DIR}/test-audit-aggregation-inc.err" \
+ || exit_fail "incremental aggregation audit failed (see ${MY_TMP_DIR}/test-audit-aggregation-inc.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-coins -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-coins.json 2> test-audit-coins.log || exit_fail "coin audit failed"
+ $VALGRIND taler-helper-auditor-coins \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-coins.out" \
+ 2> "${MY_TMP_DIR}/test-audit-coins.err" \
+ || exit_fail "coin audit failed (see ${MY_TMP_DIR}/test-audit-coins.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-coins -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-coins-inc.json 2> test-audit-coins-inc.log || exit_fail "incremental coin audit failed"
+ $VALGRIND taler-helper-auditor-coins \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-coins-inc.out" \
+ 2> "${MY_TMP_DIR}/test-audit-coins-inc.err" \
+ || exit_fail "incremental coin audit failed (see ${MY_TMP_DIR}/test-audit-coins-inc.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-deposits -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-deposits.json 2> test-audit-deposits.log || exit_fail "deposits audit failed"
+ $VALGRIND taler-helper-auditor-deposits \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-deposits.out" \
+ 2> "${MY_TMP_DIR}/test-audit-deposits.err" \
+ || exit_fail "deposits audit failed (see ${MY_TMP_DIR}/test-audit-deposits.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-deposits -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-deposits-inc.json 2> test-audit-deposits-inc.log || exit_fail "incremental deposits audit failed"
+ $VALGRIND taler-helper-auditor-deposits \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-deposits-inc.out" \
+ 2> "${MY_TMP_DIR}/test-audit-deposits-inc.err" \
+ || exit_fail "incremental deposits audit failed (see ${MY_TMP_DIR}/test-audit-deposits-inc.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-reserves -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-reserves.json 2> test-audit-reserves.log || exit_fail "reserves audit failed"
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-reserves.out" \
+ 2> "${MY_TMP_DIR}/test-audit-reserves.err" \
+ || exit_fail "reserves audit failed (see ${MY_TMP_DIR}/test-audit-reserves.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-reserves -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-reserves-inc.json 2> test-audit-reserves-inc.log || exit_fail "incremental reserves audit failed"
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-reserves-inc.out" \
+ 2> "${MY_TMP_DIR}/test-audit-reserves-inc.err" \
+ || exit_fail "incremental reserves audit failed (see ${MY_TMP_DIR}/test-audit-reserves-inc.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-wire -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-wire.json 2> test-wire-audit.log || exit_fail "wire audit failed"
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-wire.out" \
+ 2> "${MY_TMP_DIR}/test-audit-wire.err" \
+ || exit_fail "wire audit failed (see ${MY_TMP_DIR}/test-audit-wire.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-wire -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-wire-inc.json 2> test-wire-audit-inc.log || exit_fail "wire audit failed"
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-wire-inc.out" \
+ 2> "${MY_TMP_DIR}/test-audit-wire-inc.err" \
+ || exit_fail "wire audit inc failed (see ${MY_TMP_DIR}/test-audit-wire-inc.*)"
echo -n "."
echo " DONE"
@@ -120,16 +251,11 @@ function audit_only () {
# Cleanup to run after the auditor
function post_audit () {
- taler-exchange-dbinit -c $CONF -g || exit_fail "exchange DB GC failed"
-
+ taler-exchange-dbinit \
+ -c "$CONF" \
+ -g \
+ || exit_fail "exchange DB GC failed"
cleanup
- echo -n "TeXing ."
- taler-helper-auditor-render.py test-audit-aggregation.json test-audit-coins.json test-audit-deposits.json test-audit-reserves.json test-audit-wire.json < ../../contrib/auditor-report.tex.j2 > test-report.tex || exit_fail "Renderer failed"
-
- echo -n "."
- timeout 10 pdflatex test-report.tex >/dev/null || exit_fail "pdflatex failed"
- echo -n "."
- timeout 10 pdflatex test-report.tex >/dev/null
echo " DONE"
}
@@ -138,143 +264,207 @@ function post_audit () {
# generation. Pass "aggregator" as $1 to run
# $ taler-exchange-aggregator
# before auditor (to trigger pending wire transfers).
+# Pass "drain" as $2 to run a drain operation as well.
function run_audit () {
- pre_audit ${1:-no}
+ pre_audit "${1:-no}"
+ if [ "${2:-no}" = "drain" ]
+ then
+ echo -n "Starting exchange..."
+ taler-exchange-httpd \
+ -c "${CONF}" \
+ -L INFO \
+ 2> "${MY_TMP_DIR}/exchange-httpd-drain.err" &
+ EPID=$!
+
+ # Wait for all services to be available
+ for n in $(seq 1 50)
+ do
+ echo -n "."
+ sleep 0.1
+ OK=0
+ # exchange
+ wget "http://localhost:8081/seed" \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null \
+ || continue
+ OK=1
+ break
+ done
+ echo "... DONE."
+ export CONF
+
+ echo -n "Running taler-exchange-offline drain "
+
+ taler-exchange-offline \
+ -L DEBUG \
+ -c "${CONF}" \
+ drain TESTKUDOS:0.1 \
+ exchange-account-1 payto://iban/SANDBOXX/DE360679?receiver-name=Exchange+Drain \
+ upload \
+ 2> "${MY_TMP_DIR}/taler-exchange-offline-drain.log" \
+ || exit_fail "offline draining failed"
+ kill -TERM "$EPID"
+ wait "$EPID" || true
+ unset EPID
+ echo -n "Running taler-exchange-drain ..."
+ printf "\n" | taler-exchange-drain \
+ -L DEBUG \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/taler-exchange-drain.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+
+ echo -n "Running taler-exchange-transfer ..."
+ taler-exchange-transfer \
+ -L INFO \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/drain-transfer.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+ fi
audit_only
post_audit
-
}
# Do a full reload of the (original) database
-full_reload()
+function full_reload()
{
- echo -n "Doing full reload of the database... "
- dropdb $DB 2> /dev/null || true
- createdb -T template0 $DB || exit_skip "could not create database"
+ echo -n "Doing full reload of the database (loading ${BASEDB}.sql into $DB at $PGHOST)... "
+ dropdb "$DB" 2> /dev/null || true
+ createdb -T template0 "$DB" \
+ || exit_skip "could not create database $DB (at $PGHOST)"
# Import pre-generated database, -q(ietly) using single (-1) transaction
- psql -Aqt $DB -q -1 -f ${BASEDB}.sql > /dev/null || exit_skip "Failed to load database"
+ psql -Aqt "$DB" \
+ -q \
+ -1 \
+ -f "${BASEDB}.sql" \
+ > /dev/null \
+ || exit_skip "Failed to load database $DB from ${BASEDB}.sql"
echo "DONE"
+ # Technically, this call shouldn't be needed as libeufin should already be stopped here...
+ stop_libeufin
}
function test_0() {
-echo "===========0: normal run with aggregator==========="
-run_audit aggregator
-
-echo "Checking output"
-# if an emergency was detected, that is a bug and we should fail
-echo -n "Test for emergencies... "
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
-echo -n "Test for deposit confirmation emergencies... "
-jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
-echo -n "Test for emergencies by count... "
-jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
-
-echo -n "Test for wire inconsistencies... "
-jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
-jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
-jq -e .missattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected missattribution inconsistency detected in ordinary run"
-jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
-jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
-jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
-jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
-jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
-
-
-# TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
-# TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+ echo "===========0: normal run with aggregator==========="
+ run_audit aggregator
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
+ echo -n "Test for deposit confirmation emergencies... "
+ jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
-echo PASS
+ echo PASS
-LOSS=`jq -r .total_bad_sig_loss < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
-fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
-fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
-fi
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
+ fi
-echo -n "Test for wire amounts... "
-WIRED=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_missattribution_in < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total missattribution in wrong, got $WIRED"
-fi
-echo PASS
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
+ echo "PASS"
-echo -n "Checking for unexpected arithmetic differences "
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
-fi
+ echo -n "Checking for unexpected arithmetic differences "
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
+ fi
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
-echo PASS
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
+ echo "PASS"
-echo -n "Checking for unexpected wire out differences "
-jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
-echo PASS
+ echo -n "Checking for unexpected wire out differences "
+ jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
+ echo "PASS"
-# cannot easily undo aggregator, hence full reload
-full_reload
+ # cannot easily undo aggregator, hence full reload
+ full_reload
}
@@ -283,121 +473,147 @@ full_reload
# transfer lag!
function test_1() {
-echo "===========1: normal run==========="
-run_audit
-
-echo "Checking output"
-# if an emergency was detected, that is a bug and we should fail
-echo -n "Test for emergencies... "
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
-echo -n "Test for emergencies by count... "
-jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
-
-echo -n "Test for wire inconsistencies... "
-jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
-jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
-jq -e .missattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected missattribution inconsistency detected in ordinary run"
-jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
-jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
-jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
-
-# TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
-# TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
-
-echo PASS
-
-echo -n "Check for lag detection... "
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
- jq -e .lag_details[0] < test-audit-wire.json > /dev/null || exit_fail "Lag not detected in run without aggregator at age $DELTA"
+ echo "===========1: normal run==========="
+ run_audit
+
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency detected in ordinary run";
+ echo "PASS"
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency by count detected in ordinary run"
+ echo "PASS"
- LAG=`jq -r .total_amount_lag < test-audit-wire.json`
- if test $LAG = "TESTKUDOS:0"
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+
+ echo "PASS"
+
+ echo -n "Check for lag detection... "
+
+ # Check wire transfer lag reported (no aggregator!)
+ # NOTE: This test is EXPECTED to fail for ~1h after
+ # re-generating the test database as we do not
+ # report lag of less than 1h (see GRACE_PERIOD in
+ # taler-helper-auditor-wire.c)
+ jq -e .lag_details[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ || exit_fail "Lag not detected in run without aggregator"
+
+ LAG=$(jq -r .total_amount_lag < test-audit-wire.json)
+ if [ "$LAG" = "TESTKUDOS:0" ]
then
exit_fail "Expected total lag to be non-zero"
fi
echo "PASS"
-else
- echo "SKIP (database too new)"
-fi
-echo -n "Test for wire amounts... "
-WIRED=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_missattribution_in < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total missattribution in wrong, got $WIRED"
-fi
-# Database was unmodified, no need to undo
-echo "OK"
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
+ # Database was unmodified, no need to undo
+ echo "OK"
}
# Change amount of wire transfer reported by exchange
function test_2() {
-echo "===========2: reserves_in inconsistency==========="
-echo "UPDATE reserves_in SET credit_val=5 WHERE reserve_in_serial_id=1" | psql -At $DB
+ echo "===========2: reserves_in inconsistency ==========="
+ echo "UPDATE exchange.reserves_in SET credit_val=5 WHERE reserve_in_serial_id=1" \
+ | psql -At "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-ROW=`jq .reserve_in_amount_inconsistencies[0].row < test-audit-wire.json`
-if test $ROW != 1
-then
- exit_fail "Row $ROW is wrong"
-fi
-WIRED=`jq -r .reserve_in_amount_inconsistencies[0].amount_wired < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:10"
-then
- exit_fail "Amount wrong"
-fi
-EXPECTED=`jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json`
-if test $EXPECTED != "TESTKUDOS:5"
-then
- exit_fail "Expected amount wrong"
-fi
+ echo -n "Testing inconsistency detection... "
+ ROW=$(jq .reserve_in_amount_inconsistencies[0].row < test-audit-wire.json)
+ if [ "$ROW" != 1 ]
+ then
+ exit_fail "Row $ROW is wrong"
+ fi
+ WIRED=$(jq -r .reserve_in_amount_inconsistencies[0].amount_wired < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Amount wrong"
+ fi
+ EXPECTED=$(jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json)
+ if [ "$EXPECTED" != "TESTKUDOS:5" ]
+ then
+ exit_fail "Expected amount wrong"
+ fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
-fi
-DELTA=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $DELTA != "TESTKUDOS:5"
-then
- exit_fail "Expected total wire delta plus wrong, got $DELTA"
-fi
-echo PASS
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
+ fi
+ DELTA=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$DELTA" != "TESTKUDOS:5" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $DELTA"
+ fi
+ echo "PASS"
-# Undo database modification
-echo "UPDATE reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE exchange.reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" \
+ | psql -Aqt "$DB"
}
@@ -406,61 +622,62 @@ echo "UPDATE reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" | psql
# lower than what exchange claims to have received.
function test_3() {
-echo "===========3: reserves_in inconsistency==========="
-echo "UPDATE reserves_in SET credit_val=15 WHERE reserve_in_serial_id=1" | psql -Aqt $DB
+ echo "===========3: reserves_in inconsistency==========="
+ echo "UPDATE exchange.reserves_in SET credit_val=15 WHERE reserve_in_serial_id=1" \
+ | psql -Aqt "$DB"
-run_audit
+ run_audit
-EXPECTED=`jq -r .reserve_balance_summary_wrong_inconsistencies[0].auditor < test-audit-reserves.json`
-if test $EXPECTED != "TESTKUDOS:5.01"
-then
- exit_fail "Expected reserve balance summary amount wrong, got $EXPECTED (auditor)"
-fi
+ EXPECTED=$(jq -r .reserve_balance_summary_wrong_inconsistencies[0].auditor < test-audit-reserves.json)
+ if [ "$EXPECTED" != "TESTKUDOS:5.01" ]
+ then
+ exit_fail "Expected reserve balance summary amount wrong, got $EXPECTED (auditor)"
+ fi
-EXPECTED=`jq -r .reserve_balance_summary_wrong_inconsistencies[0].exchange < test-audit-reserves.json`
-if test $EXPECTED != "TESTKUDOS:0.01"
-then
- exit_fail "Expected reserve balance summary amount wrong, got $EXPECTED (exchange)"
-fi
+ EXPECTED=$(jq -r .reserve_balance_summary_wrong_inconsistencies[0].exchange < test-audit-reserves.json)
+ if [ "$EXPECTED" != "TESTKUDOS:0.01" ]
+ then
+ exit_fail "Expected reserve balance summary amount wrong, got $EXPECTED (exchange)"
+ fi
-WIRED=`jq -r .total_loss_balance_insufficient < test-audit-reserves.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Wrong total loss from insufficient balance, got $WIRED"
-fi
+ WIRED=$(jq -r .total_irregular_loss < test-audit-reserves.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total loss from insufficient balance, got $WIRED"
+ fi
-ROW=`jq -e .reserve_in_amount_inconsistencies[0].row < test-audit-wire.json`
-if test $ROW != 1
-then
- exit_fail "Row wrong, got $ROW"
-fi
+ ROW=$(jq -e .reserve_in_amount_inconsistencies[0].row < test-audit-wire.json)
+ if [ "$ROW" != 1 ]
+ then
+ exit_fail "Row wrong, got $ROW"
+ fi
-WIRED=`jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:15"
-then
- exit_fail "Wrong amount_exchange_expected, got $WIRED"
-fi
+ WIRED=$(jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:15" ]
+ then
+ exit_fail "Wrong amount_exchange_expected, got $WIRED"
+ fi
-WIRED=`jq -r .reserve_in_amount_inconsistencies[0].amount_wired < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:10"
-then
- exit_fail "Wrong amount_wired, got $WIRED"
-fi
+ WIRED=$(jq -r .reserve_in_amount_inconsistencies[0].amount_wired < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Wrong amount_wired, got $WIRED"
+ fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:5"
-then
- exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
-fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:5" ]
+ then
+ exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
+ fi
-WIRED=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Wrong total wire_in_delta_plus, got $WIRED"
-fi
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total wire_in_delta_plus, got $WIRED"
+ fi
-# Undo database modification
-echo "UPDATE reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE exchange.reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" | psql -Aqt "$DB"
}
@@ -469,46 +686,52 @@ echo "UPDATE reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" | psql
# lower than what exchange claims to have received.
function test_4() {
-echo "===========4: deposit wire target wrong================="
-# Original target bank account was 43, changing to 44
-SERIAL=`echo "SELECT deposit_serial_id FROM deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql $DB -Aqt`
-OLD_WIRE_ID=`echo "SELECT wire_target_h_payto FROM deposits WHERE deposit_serial_id=${SERIAL};" | psql $DB -Aqt`
-NEW_WIRE_ID=`echo "INSERT INTO wire_targets (payto_uri, wire_target_h_payto, kyc_ok) VALUES ('payto://x-taler-bank/localhost/testuser-xxlargtp', '\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b', false);" | psql $DB -Aqt`
-echo "UPDATE deposits SET wire_target_h_payto='\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b' WHERE deposit_serial_id=${SERIAL}" | psql -Aqt $DB
+ echo "===========4: deposit wire target wrong================="
+ # Original target bank account was 43, changing to 44
+ SERIAL=$(echo "SELECT deposit_serial_id FROM exchange.deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql "$DB" -Aqt)
+ OLD_WIRE_ID=$(echo "SELECT wire_target_h_payto FROM exchange.deposits WHERE deposit_serial_id=${SERIAL};" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "INSERT INTO exchange.wire_targets (payto_uri, wire_target_h_payto) VALUES ('payto://x-taler-bank/localhost/testuser-xxlargtp', '\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b');" \
+ | psql "$DB" \
+ -Aqt \
+ > /dev/null
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.deposits SET wire_target_h_payto='\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b' WHERE deposit_serial_id=${SERIAL}" \
+ | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
+ echo -n "Testing inconsistency detection... "
-jq -e .bad_sig_losses[0] < test-audit-coins.json > /dev/null || exit_fail "Bad signature not detected"
+ jq -e .bad_sig_losses[0] < test-audit-coins.json > /dev/null || exit_fail "Bad signature not detected"
-ROW=`jq -e .bad_sig_losses[0].row < test-audit-coins.json`
-if test $ROW != ${SERIAL}
-then
- exit_fail "Row wrong, got $ROW"
-fi
+ ROW=$(jq -e .bad_sig_losses[0].row < test-audit-coins.json)
+ if [ "$ROW" != "${SERIAL}" ]
+ then
+ exit_fail "Row wrong, got $ROW"
+ fi
-LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong deposit bad signature loss, got $LOSS"
-fi
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong deposit bad signature loss, got $LOSS"
+ fi
-OP=`jq -r .bad_sig_losses[0].operation < test-audit-coins.json`
-if test $OP != "deposit"
-then
- exit_fail "Wrong operation, got $OP"
-fi
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "deposit" ]
+ then
+ exit_fail "Wrong operation, got $OP"
+ fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong total bad sig loss, got $LOSS"
-fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong total bad sig loss, got $LOSS"
+ fi
-echo PASS
-# Undo:
-echo "UPDATE deposits SET wire_target_h_payto='$OLD_WIRE_ID' WHERE deposit_serial_id=${SERIAL}" | psql -Aqt $DB
+ echo PASS
+ # Undo:
+ echo "UPDATE exchange.deposits SET wire_target_h_payto='$OLD_WIRE_ID' WHERE deposit_serial_id=${SERIAL}" | psql -Aqt "$DB"
}
@@ -517,42 +740,44 @@ echo "UPDATE deposits SET wire_target_h_payto='$OLD_WIRE_ID' WHERE deposit_seria
# Test where h_contract_terms in the deposit table is wrong
# (=> bad signature)
function test_5() {
-echo "===========5: deposit contract hash wrong================="
-# Modify h_wire hash, so it is inconsistent with 'wire'
-SERIAL=`echo "SELECT deposit_serial_id FROM deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql $DB -Aqt`
-OLD_H=`echo "SELECT h_contract_terms FROM deposits WHERE deposit_serial_id=$SERIAL;" | psql $DB -Aqt`
-echo "UPDATE deposits SET h_contract_terms='\x12bb676444955c98789f219148aa31899d8c354a63330624d3d143222cf3bb8b8e16f69accd5a8773127059b804c1955696bf551dd7be62719870613332aa8d5' WHERE deposit_serial_id=$SERIAL" | psql -Aqt $DB
+ echo "===========5: deposit contract hash wrong================="
+ # Modify h_wire hash, so it is inconsistent with 'wire'
+ SERIAL=$(echo "SELECT deposit_serial_id FROM exchange.deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql "$DB" -Aqt)
+ OLD_H=$(echo "SELECT h_contract_terms FROM exchange.deposits WHERE deposit_serial_id=$SERIAL;" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.deposits SET h_contract_terms='\x12bb676444955c98789f219148aa31899d8c354a63330624d3d143222cf3bb8b8e16f69accd5a8773127059b804c1955696bf551dd7be62719870613332aa8d5' WHERE deposit_serial_id=$SERIAL" \
+ | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Checking bad signature detection... "
-ROW=`jq -e .bad_sig_losses[0].row < test-audit-coins.json`
-if test $ROW != $SERIAL
-then
- exit_fail "Row wrong, got $ROW"
-fi
+ echo -n "Checking bad signature detection... "
+ ROW=$(jq -e .bad_sig_losses[0].row < test-audit-coins.json)
+ if [ "$ROW" != "$SERIAL" ]
+ then
+ exit_fail "Row wrong, got $ROW"
+ fi
-LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong deposit bad signature loss, got $LOSS"
-fi
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong deposit bad signature loss, got $LOSS"
+ fi
-OP=`jq -r .bad_sig_losses[0].operation < test-audit-coins.json`
-if test $OP != "deposit"
-then
- exit_fail "Wrong operation, got $OP"
-fi
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "deposit" ]
+ then
+ exit_fail "Wrong operation, got $OP"
+ fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong total bad sig loss, got $LOSS"
-fi
-echo PASS
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong total bad sig loss, got $LOSS"
+ fi
+ echo PASS
-# Undo:
-echo "UPDATE deposits SET h_contract_terms='${OLD_H}' WHERE deposit_serial_id=$SERIAL" | psql -Aqt $DB
+ # Undo:
+ echo "UPDATE exchange.deposits SET h_contract_terms='${OLD_H}' WHERE deposit_serial_id=$SERIAL" | psql -Aqt "$DB"
}
@@ -560,40 +785,42 @@ echo "UPDATE deposits SET h_contract_terms='${OLD_H}' WHERE deposit_serial_id=$S
# Test where denom_sig in known_coins table is wrong
# (=> bad signature)
function test_6() {
-echo "===========6: known_coins signature wrong================="
-# Modify denom_sig, so it is wrong
-OLD_SIG=`echo 'SELECT denom_sig FROM known_coins LIMIT 1;' | psql $DB -Aqt`
-COIN_PUB=`echo "SELECT coin_pub FROM known_coins WHERE denom_sig='$OLD_SIG';" | psql $DB -Aqt`
-echo "UPDATE known_coins SET denom_sig='\x0000000100000000287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" | psql -Aqt $DB
+ echo "===========6: known_coins signature wrong================="
+ # Modify denom_sig, so it is wrong
+ OLD_SIG=$(echo 'SELECT denom_sig FROM exchange.known_coins LIMIT 1;' | psql "$DB" -Aqt)
+ COIN_PUB=$(echo "SELECT coin_pub FROM exchange.known_coins WHERE denom_sig='$OLD_SIG';" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.known_coins SET denom_sig='\x0000000100000000287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" \
+ | psql -Aqt "$DB"
-run_audit
+ run_audit
-ROW=`jq -e .bad_sig_losses[0].row < test-audit-coins.json`
-if test $ROW != "1"
-then
- exit_fail "Row wrong, got $ROW"
-fi
+ ROW=$(jq -e .bad_sig_losses[0].row < test-audit-coins.json)
+ if [ "$ROW" != "1" ]
+ then
+ exit_fail "Row wrong, got $ROW"
+ fi
-LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-coins.json`
-if test $LOSS == "TESTKUDOS:0"
-then
- exit_fail "Wrong deposit bad signature loss, got $LOSS"
-fi
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-coins.json)
+ if [ "$LOSS" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong deposit bad signature loss, got $LOSS"
+ fi
-OP=`jq -r .bad_sig_losses[0].operation < test-audit-coins.json`
-if test $OP != "melt"
-then
- exit_fail "Wrong operation, got $OP"
-fi
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "melt" ]
+ then
+ exit_fail "Wrong operation, got $OP"
+ fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS == "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss, got $LOSS"
-fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss, got $LOSS"
+ fi
-# Undo
-echo "UPDATE known_coins SET denom_sig='$OLD_SIG' WHERE coin_pub='$COIN_PUB'" | psql -Aqt $DB
+ # Undo
+ echo "UPDATE exchange.known_coins SET denom_sig='$OLD_SIG' WHERE coin_pub='$COIN_PUB'" | psql -Aqt "$DB"
}
@@ -601,51 +828,53 @@ echo "UPDATE known_coins SET denom_sig='$OLD_SIG' WHERE coin_pub='$COIN_PUB'" |
# Test where h_wire in the deposit table is wrong
function test_7() {
-echo "===========7: reserves_out signature wrong================="
-# Modify reserve_sig, so it is bogus
-HBE=`echo 'SELECT h_blind_ev FROM reserves_out LIMIT 1;' | psql $DB -Aqt`
-OLD_SIG=`echo "SELECT reserve_sig FROM reserves_out WHERE h_blind_ev='$HBE';" | psql $DB -Aqt`
-A_VAL=`echo "SELECT amount_with_fee_val FROM reserves_out WHERE h_blind_ev='$HBE';" | psql $DB -Aqt`
-A_FRAC=`echo "SELECT amount_with_fee_frac FROM reserves_out WHERE h_blind_ev='$HBE';" | psql $DB -Aqt`
-# Normalize, we only deal with cents in this test-case
-A_FRAC=`expr $A_FRAC / 1000000 || true`
-echo "UPDATE reserves_out SET reserve_sig='\x9ef381a84aff252646a157d88eded50f708b2c52b7120d5a232a5b628f9ced6d497e6652d986b581188fb014ca857fd5e765a8ccc4eb7e2ce9edcde39accaa4b' WHERE h_blind_ev='$HBE'" | psql -Aqt $DB
-
-run_audit
-
-OP=`jq -r .bad_sig_losses[0].operation < test-audit-reserves.json`
-if test $OP != "withdraw"
-then
- exit_fail "Wrong operation, got $OP"
-fi
+ echo "===========7: reserves_out signature wrong================="
+ # Modify reserve_sig, so it is bogus
+ HBE=$(echo 'SELECT h_blind_ev FROM exchange.reserves_out LIMIT 1;' | psql "$DB" -Aqt)
+ OLD_SIG=$(echo "SELECT reserve_sig FROM exchange.reserves_out WHERE h_blind_ev='$HBE';" | psql "$DB" -Aqt)
+ A_VAL=$(echo "SELECT amount_with_fee_val FROM exchange.reserves_out WHERE h_blind_ev='$HBE';" | psql "$DB" -Aqt)
+ A_FRAC=$(echo "SELECT amount_with_fee_frac FROM exchange.reserves_out WHERE h_blind_ev='$HBE';" | psql "$DB" -Aqt)
+ # Normalize, we only deal with cents in this test-case
+ A_FRAC=$(( A_FRAC / 1000000))
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.reserves_out SET reserve_sig='\x9ef381a84aff252646a157d88eded50f708b2c52b7120d5a232a5b628f9ced6d497e6652d986b581188fb014ca857fd5e765a8ccc4eb7e2ce9edcde39accaa4b' WHERE h_blind_ev='$HBE'" \
+ | psql -Aqt "$DB"
-LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-reserves.json`
-LOSS_TOTAL=`jq -r .total_bad_sig_loss < test-audit-reserves.json`
-if test $LOSS != $LOSS_TOTAL
-then
- exit_fail "Expected loss $LOSS and total loss $LOSS_TOTAL do not match"
-fi
-if test $A_FRAC != 0
-then
- if [ $A_FRAC -lt 10 ]
+ run_audit
+
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-reserves.json)
+ if [ "$OP" != "withdraw" ]
then
- A_PREV="0"
- else
- A_PREV=""
+ exit_fail "Wrong operation, got $OP"
fi
- if test $LOSS != "TESTKUDOS:$A_VAL.$A_PREV$A_FRAC"
+
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-reserves.json)
+ LOSS_TOTAL=$(jq -r .total_bad_sig_loss < test-audit-reserves.json)
+ if [ "$LOSS" != "$LOSS_TOTAL" ]
then
- exit_fail "Expected loss TESTKUDOS:$A_VAL.$A_PREV$A_FRAC but got $LOSS"
+ exit_fail "Expected loss $LOSS and total loss $LOSS_TOTAL do not match"
fi
-else
- if test $LOSS != "TESTKUDOS:$A_VAL"
+ if [ "$A_FRAC" != 0 ]
then
- exit_fail "Expected loss TESTKUDOS:$A_VAL but got $LOSS"
+ if [ "$A_FRAC" -lt 10 ]
+ then
+ A_PREV="0"
+ else
+ A_PREV=""
+ fi
+ if [ "$LOSS" != "TESTKUDOS:$A_VAL.$A_PREV$A_FRAC" ]
+ then
+ exit_fail "Expected loss TESTKUDOS:$A_VAL.$A_PREV$A_FRAC but got $LOSS"
+ fi
+ else
+ if [ "$LOSS" != "TESTKUDOS:$A_VAL" ]
+ then
+ exit_fail "Expected loss TESTKUDOS:$A_VAL but got $LOSS"
+ fi
fi
-fi
-# Undo:
-echo "UPDATE reserves_out SET reserve_sig='$OLD_SIG' WHERE h_blind_ev='$HBE'" | psql -Aqt $DB
+ # Undo:
+ echo "UPDATE exchange.reserves_out SET reserve_sig='$OLD_SIG' WHERE h_blind_ev='$HBE'" | psql -Aqt "$DB"
}
@@ -653,460 +882,459 @@ echo "UPDATE reserves_out SET reserve_sig='$OLD_SIG' WHERE h_blind_ev='$HBE'" |
# Test wire transfer subject disagreement!
function test_8() {
-echo "===========8: wire-transfer-subject disagreement==========="
-OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE amount='TESTKUDOS:10' ORDER BY id LIMIT 1;" | psql $DB -Aqt`
-OLD_WTID=`echo "SELECT subject FROM app_banktransaction WHERE id='$OLD_ID';" | psql $DB -Aqt`
-NEW_WTID="CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG"
-echo "UPDATE app_banktransaction SET subject='$NEW_WTID' WHERE id='$OLD_ID';" | psql -Aqt $DB
+ echo "===========8: wire-transfer-subject disagreement==========="
+ # Technically, this call shouldn't be needed, as libeufin should already be stopped here.
+ stop_libeufin
+ echo "FIXME: test needs update to new libeufin-bank schema"
+ exit 0
+ OLD_ID=$(echo "SELECT id FROM NexusBankTransactions WHERE amount='10' AND currency='TESTKUDOS' ORDER BY id LIMIT 1;" | psql "${DB}" -Aqt) \
+ || exit_fail "Failed to SELECT FROM NexusBankTransactions nexus DB!"
+ OLD_WTID=$(echo "SELECT \"reservePublicKey\" FROM TalerIncomingPayments WHERE payment='$OLD_ID';" \
+ | psql "${DB}" -Aqt)
+ NEW_WTID="CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG"
+ echo "UPDATE TalerIncomingPayments SET \"reservePublicKey\"='$NEW_WTID' WHERE payment='$OLD_ID';" \
+ | psql "${DB}" -q \
+ || exit_fail "Failed to update TalerIncomingPayments"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-DIAG=`jq -r .reserve_in_amount_inconsistencies[0].diagnostic < test-audit-wire.json`
-if test "x$DIAG" != "xwire subject does not match"
-then
- exit_fail "Diagnostic wrong: $DIAG (0)"
-fi
-WTID=`jq -r .reserve_in_amount_inconsistencies[0].reserve_pub < test-audit-wire.json`
-if test x$WTID != x"$OLD_WTID" -a x$WTID != x"$NEW_WTID"
-then
- exit_fail "WTID reported wrong: $WTID"
-fi
-EX_A=`jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json`
-if test x$WTID = x$OLD_WTID -a x$EX_A != x"TESTKUDOS:10"
-then
- exit_fail "Amount reported wrong: $EX_A"
-fi
-if test x$WTID = x$NEW_WTID -a x$EX_A != x"TESTKUDOS:0"
-then
- exit_fail "Amount reported wrong: $EX_A"
-fi
-DIAG=`jq -r .reserve_in_amount_inconsistencies[1].diagnostic < test-audit-wire.json`
-if test "x$DIAG" != "xwire subject does not match"
-then
- exit_fail "Diagnostic wrong: $DIAG (1)"
-fi
-WTID=`jq -r .reserve_in_amount_inconsistencies[1].reserve_pub < test-audit-wire.json`
-if test $WTID != "$OLD_WTID" -a $WTID != "$NEW_WTID"
-then
- exit_fail "WTID reported wrong: $WTID (wanted: $NEW_WTID or $OLD_WTID)"
-fi
-EX_A=`jq -r .reserve_in_amount_inconsistencies[1].amount_exchange_expected < test-audit-wire.json`
-if test $WTID = "$OLD_WTID" -a $EX_A != "TESTKUDOS:10"
-then
- exit_fail "Amount reported wrong: $EX_A"
-fi
-if test $WTID = "$NEW_WTID" -a $EX_A != "TESTKUDOS:0"
-then
- exit_fail "Amount reported wrong: $EX_A"
-fi
+ echo -n "Testing inconsistency detection... "
+ DIAG=$(jq -r .reserve_in_amount_inconsistencies[0].diagnostic < test-audit-wire.json)
+ if [ "x$DIAG" != "xwire subject does not match" ]
+ then
+ exit_fail "Diagnostic wrong: $DIAG (0)"
+ fi
+ WTID=$(jq -r .reserve_in_amount_inconsistencies[0].reserve_pub < test-audit-wire.json)
+ if [ "$WTID" != "$OLD_WTID" ] && [ "$WTID" != "$NEW_WTID" ]
+ then
+ exit_fail "WTID reported wrong: $WTID (wanted $OLD_WTID or $NEW_WTID)"
+ fi
+ EX_A=$(jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json)
+ if [ "$WTID" = "$OLD_WTID" ] && [ "$EX_A" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Amount reported wrong: $EX_A"
+ fi
+ if [ "$WTID" = "$NEW_WTID" ] && [ "$EX_A" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Amount reported wrong: $EX_A"
+ fi
+ DIAG=$(jq -r .reserve_in_amount_inconsistencies[1].diagnostic < test-audit-wire.json)
+ if [ "$DIAG" != "wire subject does not match" ]
+ then
+ exit_fail "Diagnostic wrong: $DIAG (1)"
+ fi
+ WTID=$(jq -r .reserve_in_amount_inconsistencies[1].reserve_pub < test-audit-wire.json)
+ if [ "$WTID" != "$OLD_WTID" ] && [ "$WTID" != "$NEW_WTID" ]
+ then
+ exit_fail "WTID reported wrong: $WTID (wanted: $NEW_WTID or $OLD_WTID)"
+ fi
+ EX_A=$(jq -r .reserve_in_amount_inconsistencies[1].amount_exchange_expected < test-audit-wire.json)
+ if [ "$WTID" = "$OLD_WTID" ] && [ "$EX_A" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Amount reported wrong: $EX_A"
+ fi
+ if [ "$WTID" = "$NEW_WTID" ] && [ "$EX_A" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Amount reported wrong: $EX_A"
+ fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:10"
-then
- exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
-fi
-DELTA=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $DELTA != "TESTKUDOS:10"
-then
- exit_fail "Expected total wire delta plus wrong, got $DELTA"
-fi
-echo PASS
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
+ fi
+ DELTA=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$DELTA" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $DELTA"
+ fi
+ echo "PASS"
-# Undo database modification
-echo "UPDATE app_banktransaction SET subject='$OLD_WTID' WHERE id='$OLD_ID';" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE TalerIncomingPayments SET \"reservePublicKey\"='$OLD_WTID' WHERE payment='$OLD_ID';" \
+ | psql "${DB}" -q
}
-
# Test wire origin disagreement!
function test_9() {
-echo "===========9: wire-origin disagreement==========="
-OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE amount='TESTKUDOS:10' ORDER BY id LIMIT 1;" | psql $DB -Aqt`
-OLD_ACC=`echo "SELECT debit_account_id FROM app_banktransaction WHERE id='$OLD_ID';" | psql $DB -Aqt`
-echo "UPDATE app_banktransaction SET debit_account_id=1 WHERE id='$OLD_ID';" | psql -Aqt $DB
+ echo "===========9: wire-origin disagreement==========="
+ # Technically, this call shouldn't be needed, as libeufin should already be stopped here.
+ stop_libeufin
+ echo "FIXME: test needs update to new libeufin-bank schema"
+ exit 0
+ OLD_ID=$(echo "SELECT id FROM NexusBankTransactions WHERE amount='10' AND currency='TESTKUDOS' ORDER BY id LIMIT 1;" | psql "${DB}" -Aqt)
+ OLD_ACC=$(echo 'SELECT "incomingPaytoUri" FROM TalerIncomingPayments WHERE payment='"'$OLD_ID';" | psql "${DB}" -Aqt)
+ echo "UPDATE TalerIncomingPayments SET \"incomingPaytoUri\"='payto://iban/SANDBOXX/DE144373?receiver-name=New+Exchange+Company' WHERE payment='$OLD_ID';" \
+ | psql "${DB}" -q
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-AMOUNT=`jq -r .missattribution_in_inconsistencies[0].amount < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:10"
-then
- exit_fail "Reported amount wrong: $AMOUNT"
-fi
-AMOUNT=`jq -r .total_missattribution_in < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:10"
-then
- exit_fail "Reported total amount wrong: $AMOUNT"
-fi
-echo PASS
+ echo -n "Testing inconsistency detection... "
+ AMOUNT=$(jq -r .misattribution_in_inconsistencies[0].amount < test-audit-wire.json)
+ if test "x$AMOUNT" != "xTESTKUDOS:10"
+ then
+ exit_fail "Reported amount wrong: $AMOUNT"
+ fi
+ AMOUNT=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if test "x$AMOUNT" != "xTESTKUDOS:10"
+ then
+ exit_fail "Reported total amount wrong: $AMOUNT"
+ fi
+ echo PASS
-# Undo database modification
-echo "UPDATE app_banktransaction SET debit_account_id=$OLD_ACC WHERE id='$OLD_ID';" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE TalerIncomingPayments SET \"incomingPaytoUri\"='$OLD_ACC' WHERE payment='$OLD_ID';" \
+ | psql "${DB}" -q
}
# Test wire_in timestamp disagreement!
function test_10() {
+ NOW_MS=$(date +%s)000
+ echo "===========10: wire-timestamp disagreement==========="
+ # Technically, this call shouldn't be needed, as libeufin should already be stopped here.
+ stop_libeufin
+ echo "FIXME: test needs update to new libeufin-bank schema"
+ exit 0
+ OLD_ID=$(echo "SELECT id FROM NexusBankTransactions WHERE amount='10' AND currency='TESTKUDOS' ORDER BY id LIMIT 1;" | psql "${DB}" -Aqt)
+ OLD_DATE=$(echo "SELECT \"timestampMs\" FROM TalerIncomingPayments WHERE payment='$OLD_ID';" | psql "${DB}" -Aqt)
+ echo "UPDATE TalerIncomingPayments SET \"timestampMs\"=$NOW_MS WHERE payment=$OLD_ID;" | psql "${DB}" -q
-echo "===========10: wire-timestamp disagreement==========="
-OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE amount='TESTKUDOS:10' ORDER BY id LIMIT 1;" | psql $DB -Aqt`
-OLD_DATE=`echo "SELECT date FROM app_banktransaction WHERE id='$OLD_ID';" | psql $DB -Aqt`
-echo "UPDATE app_banktransaction SET date=NOW() WHERE id=$OLD_ID;" | psql -Aqt $DB
-
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-DIAG=`jq -r .row_minor_inconsistencies[0].diagnostic < test-audit-wire.json`
-if test "x$DIAG" != "xexecution date mismatch"
-then
- exit_fail "Reported diagnostic wrong: $DIAG"
-fi
-TABLE=`jq -r .row_minor_inconsistencies[0].table < test-audit-wire.json`
-if test "x$TABLE" != "xreserves_in"
-then
- exit_fail "Reported table wrong: $TABLE"
-fi
-echo PASS
+ echo -n "Testing inconsistency detection... "
+ DIAG=$(jq -r .row_minor_inconsistencies[0].diagnostic < test-audit-wire.json)
+ if test "x$DIAG" != "xexecution date mismatch"
+ then
+ exit_fail "Reported diagnostic wrong: $DIAG"
+ fi
+ TABLE=$(jq -r .row_minor_inconsistencies[0].table < test-audit-wire.json)
+ if test "x$TABLE" != "xreserves_in"
+ then
+ exit_fail "Reported table wrong: $TABLE"
+ fi
+ echo "PASS"
-# Undo database modification
-echo "UPDATE app_banktransaction SET date='$OLD_DATE' WHERE id=$OLD_ID;" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE TalerIncomingPayments SET \"timestampMs\"='$OLD_DATE' WHERE payment=$OLD_ID;" | psql "${DB}" -q
}
# Test for extra outgoing wire transfer.
+# In case of changing the subject in the Nexus
+# ingested table: '.batches[0].batchTransactions[0].details.unstructuredRemittanceInformation'
function test_11() {
+ echo "===========11: spurious outgoing transfer ==========="
+ # Technically, this call shouldn't be needed, as libeufin should already be stopped here.
+ stop_libeufin
+ echo "FIXME: test needs update to new libeufin-bank schema"
+ exit 0
+ OLD_ID=$(echo "SELECT id FROM NexusBankTransactions WHERE amount='10' AND currency='TESTKUDOS' ORDER BY id LIMIT 1;" | psql "${DB}" -Aqt)
+ OLD_TX=$(echo "SELECT \"transactionJson\" FROM NexusBankTransactions WHERE id='$OLD_ID';" | psql "${DB}" -Aqt)
+ # Change wire transfer to be FROM the exchange (#2) to elsewhere!
+ # (Note: this change also causes a missing incoming wire transfer, but
+ # this test is only concerned about the outgoing wire transfer
+ # being detected as such, and we simply ignore the other
+ # errors being reported.)
+ OTHER_IBAN=$(echo -e "SELECT iban FROM BankAccounts WHERE label='fortytwo'" | psql "${DB}" -Aqt)
+ NEW_TX=$(echo "$OLD_TX" | jq .batches[0].batchTransactions[0].details.creditDebitIndicator='"DBIT"' | jq 'del(.batches[0].batchTransactions[0].details.debtor)' | jq 'del(.batches[0].batchTransactions[0].details.debtorAccount)' | jq 'del(.batches[0].batchTransactions[0].details.debtorAgent)' | jq '.batches[0].batchTransactions[0].details.creditor'='{"name": "Forty Two"}' | jq .batches[0].batchTransactions[0].details.creditorAccount='{"iban": "'"$OTHER_IBAN"'"}' | jq .batches[0].batchTransactions[0].details.creditorAgent='{"bic": "SANDBOXX"}' | jq .batches[0].batchTransactions[0].details.unstructuredRemittanceInformation='"CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG http://exchange.example.com/"')
+ echo -e "UPDATE NexusBankTransactions SET \"transactionJson\"='""$NEW_TX""' WHERE id=$OLD_ID" \
+ | psql "${DB}" -q
+ # Now fake that the exchange prepared this payment (= it POSTed to /transfer)
+ # This step is necessary, because the TWG table that accounts for outgoing
+ # payments needs it. Worth noting here is the column 'rawConfirmation' that
+ # points to the transaction from the main Nexus ledger; without that column set,
+ # a prepared payment won't appear as actually outgoing.
+ echo -e "INSERT INTO PaymentInitiations (\"bankAccount\",\"preparationDate\",\"submissionDate\",sum,currency,\"endToEndId\",\"paymentInformationId\",\"instructionId\",subject,\"creditorIban\",\"creditorBic\",\"creditorName\",submitted,\"messageId\",\"rawConfirmation\") VALUES (1,1,1,10,'TESTKUDOS','NOTGIVEN','unused','unused','CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG http://exchange.example.com/','""$OTHER_IBAN""','SANDBOXX','Forty Two',false,1,$OLD_ID)" \
+ | psql "${DB}" -q
+ # Now populate the TWG table that accounts for outgoing payments, in
+ # order to let /history/outgoing return one result.
+ echo -e "INSERT INTO TalerRequestedPayments (facade,payment,\"requestUid\",amount,\"exchangeBaseUrl\",wtid,\"creditAccount\") VALUES (1,1,'unused','TESTKUDOS:10','http://exchange.example.com/','CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG','payto://iban/SANDBOXX/""$OTHER_IBAN""?receiver-name=Forty+Two')" \
+ | psql "${DB}" -q
-echo "===========11: spurious outgoing transfer ==========="
-OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE amount='TESTKUDOS:10' ORDER BY id LIMIT 1;" | psql $DB -Aqt`
-OLD_ACC=`echo "SELECT debit_account_id FROM app_banktransaction WHERE id=$OLD_ID;" | psql $DB -Aqt`
-OLD_SUBJECT=`echo "SELECT subject FROM app_banktransaction WHERE id=$OLD_ID;" | psql $DB -Aqt`
-# Change wire transfer to be FROM the exchange (#2) to elsewhere!
-# (Note: this change also causes a missing incoming wire transfer, but
-# this test is only concerned about the outgoing wire transfer
-# being detected as such, and we simply ignore the other
-# errors being reported.)
-echo -e "UPDATE app_banktransaction SET debit_account_id=2,credit_account_id=1,subject='CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG http://exchange.example.com/' WHERE id=$OLD_ID;" | psql -Aqt $DB
-
-run_audit
-
-echo -n "Testing inconsistency detection... "
-AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:10"
-then
- exit_fail "Reported wired amount wrong: $AMOUNT"
-fi
-AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:10"
-then
- exit_fail "Reported total plus amount wrong: $AMOUNT"
-fi
-AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:0"
-then
- exit_fail "Reported total minus amount wrong: $AMOUNT"
-fi
-AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:0"
-then
- exit_fail "Reported justified amount wrong: $AMOUNT"
-fi
-DIAG=`jq -r .wire_out_amount_inconsistencies[0].diagnostic < test-audit-wire.json`
-if test "x$DIAG" != "xjustification for wire transfer not found"
-then
- exit_fail "Reported diagnostic wrong: $DIAG"
-fi
-echo PASS
+ run_audit
-# Undo database modification (exchange always has account #2)
-echo "UPDATE app_banktransaction SET debit_account_id=$OLD_ACC,credit_account_id=2,subject='$OLD_SUBJECT' WHERE id=$OLD_ID;" | psql -Aqt $DB
+ echo -n "Testing inconsistency detection... "
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json)
+ if [ "x$AMOUNT" != "xTESTKUDOS:10" ]
+ then
+ exit_fail "Reported wired amount wrong: $AMOUNT"
+ fi
+ AMOUNT=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "x$AMOUNT" != "xTESTKUDOS:10" ]
+ then
+ exit_fail "Reported total plus amount wrong: $AMOUNT"
+ fi
+ AMOUNT=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "x$AMOUNT" != "xTESTKUDOS:0" ]
+ then
+ exit_fail "Reported total minus amount wrong: $AMOUNT"
+ fi
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json)
+ if [ "x$AMOUNT" != "xTESTKUDOS:0" ]
+ then
+ exit_fail "Reported justified amount wrong: $AMOUNT"
+ fi
+ DIAG=$(jq -r .wire_out_amount_inconsistencies[0].diagnostic < test-audit-wire.json)
+ if [ "x$DIAG" != "xjustification for wire transfer not found" ]
+ then
+ exit_fail "Reported diagnostic wrong: $DIAG"
+ fi
+ echo "PASS"
+ full_reload
}
-
# Test for hanging/pending refresh.
function test_12() {
-echo "===========12: incomplete refresh ==========="
-OLD_ACC=`echo "DELETE FROM refresh_revealed_coins;" | psql $DB -Aqt`
-
-run_audit
-
-echo -n "Testing hung refresh detection... "
-
-HANG=`jq -er .refresh_hanging[0].amount < test-audit-coins.json`
-TOTAL_HANG=`jq -er .total_refresh_hanging < test-audit-coins.json`
-if test x$HANG = TESTKUDOS:0
-then
- exit_fail "Hanging amount zero"
-fi
-if test x$TOTAL_HANG = TESTKUDOS:0
-then
- exit_fail "Total hanging amount zero"
-fi
+ echo "===========12: incomplete refresh ==========="
+ OLD_ACC=$(echo "DELETE FROM exchange.refresh_revealed_coins;" | psql "$DB" -Aqt)
-echo PASS
+ run_audit
+ echo -n "Testing hung refresh detection... "
-# cannot easily undo DELETE, hence full reload
-full_reload
+ HANG=$(jq -er .refresh_hanging[0].amount < test-audit-coins.json)
+ TOTAL_HANG=$(jq -er .total_refresh_hanging < test-audit-coins.json)
+ if [ "$HANG" = "TESTKUDOS:0" ]
+ then
+ exit_fail "Hanging amount zero"
+ fi
+ if [ "$TOTAL_HANG" = "TESTKUDOS:0" ]
+ then
+ exit_fail "Total hanging amount zero"
+ fi
+ echo "PASS"
+ # cannot easily undo DELETE, hence full reload
+ full_reload
}
# Test for wrong signature on refresh.
function test_13() {
-echo "===========13: wrong melt signature ==========="
-# Modify denom_sig, so it is wrong
-COIN_PUB=`echo "SELECT old_coin_pub FROM refresh_commitments LIMIT 1;" | psql $DB -Aqt`
-OLD_SIG=`echo "SELECT old_coin_sig FROM refresh_commitments WHERE old_coin_pub='$COIN_PUB';" | psql $DB -Aqt`
-NEW_SIG="\xba588af7c13c477dca1ac458f65cc484db8fba53b969b873f4353ecbd815e6b4c03f42c0cb63a2b609c2d726e612fd8e0c084906a41f409b6a23a08a83c89a02"
-echo "UPDATE refresh_commitments SET old_coin_sig='$NEW_SIG' WHERE old_coin_pub='$COIN_PUB'" | psql -Aqt $DB
+ echo "===========13: wrong melt signature ==========="
+ # Modify denom_sig, so it is wrong
+ COIN_PUB=$(echo "SELECT old_coin_pub FROM exchange.refresh_commitments LIMIT 1;" | psql "$DB" -Aqt)
+ OLD_SIG=$(echo "SELECT old_coin_sig FROM exchange.refresh_commitments WHERE old_coin_pub='$COIN_PUB';" | psql "$DB" -Aqt)
+ NEW_SIG="\xba588af7c13c477dca1ac458f65cc484db8fba53b969b873f4353ecbd815e6b4c03f42c0cb63a2b609c2d726e612fd8e0c084906a41f409b6a23a08a83c89a02"
+ echo "UPDATE exchange.refresh_commitments SET old_coin_sig='$NEW_SIG' WHERE old_coin_pub='$COIN_PUB'" \
+ | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
+ echo -n "Testing inconsistency detection... "
-OP=`jq -er .bad_sig_losses[0].operation < test-audit-coins.json`
-if test x$OP != xmelt
-then
- exit_fail "Operation wrong, got $OP"
-fi
+ OP=$(jq -er .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "melt" ]
+ then
+ exit_fail "Operation wrong, got $OP"
+ fi
-LOSS=`jq -er .bad_sig_losses[0].loss < test-audit-coins.json`
-TOTAL_LOSS=`jq -er .total_bad_sig_loss < test-audit-coins.json`
-if test x$LOSS != x$TOTAL_LOSS
-then
- exit_fail "Loss inconsistent, got $LOSS and $TOTAL_LOSS"
-fi
-if test x$TOTAL_LOSS = TESTKUDOS:0
-then
- exit_fail "Loss zero"
-fi
+ LOSS=$(jq -er .bad_sig_losses[0].loss < test-audit-coins.json)
+ TOTAL_LOSS=$(jq -er .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "$TOTAL_LOSS" ]
+ then
+ exit_fail "Loss inconsistent, got $LOSS and $TOTAL_LOSS"
+ fi
+ if [ "$TOTAL_LOSS" = "TESTKUDOS:0" ]
+ then
+ exit_fail "Loss zero"
+ fi
-echo PASS
+ echo "PASS"
-# cannot easily undo DELETE, hence full reload
-full_reload
+ # cannot easily undo DELETE, hence full reload
+ full_reload
}
# Test for wire fee disagreement
function test_14() {
-echo "===========14: wire-fee disagreement==========="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-wire-auditor.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========14: wire-fee disagreement==========="
# Wire fees are only checked/generated once there are
# actual outgoing wire transfers, so we need to run the
# aggregator here.
pre_audit aggregator
- echo "UPDATE wire_fee SET wire_fee_frac=100;" | psql -Aqt $DB
+ echo "UPDATE exchange.wire_fee SET wire_fee_frac=100;" \
+ | psql -Aqt "$DB"
audit_only
post_audit
echo -n "Testing inconsistency detection... "
- TABLE=`jq -r .row_inconsistencies[0].table < test-audit-aggregation.json`
- if test "x$TABLE" != "xwire-fee"
+ TABLE=$(jq -r .row_inconsistencies[0].table < test-audit-aggregation.json)
+ if [ "$TABLE" != "wire-fee" ]
then
exit_fail "Reported table wrong: $TABLE"
fi
- DIAG=`jq -r .row_inconsistencies[0].diagnostic < test-audit-aggregation.json`
- if test "x$DIAG" != "xwire fee signature invalid at given time"
+ DIAG=$(jq -r .row_inconsistencies[0].diagnostic < test-audit-aggregation.json)
+ if [ "$DIAG" != "wire fee signature invalid at given time" ]
then
exit_fail "Reported diagnostic wrong: $DIAG"
fi
- echo PASS
+ echo "PASS"
# cannot easily undo aggregator, hence full reload
full_reload
-
-else
- echo "Test skipped (database too new)"
-fi
-
}
# Test where salt in the deposit table is wrong
function test_15() {
-echo "===========15: deposit wire salt wrong================="
+ echo "===========15: deposit wire salt wrong================="
-# Modify wire_salt hash, so it is inconsistent
-SALT=`echo "SELECT wire_salt FROM deposits WHERE deposit_serial_id=1;" | psql -Aqt $DB`
-echo "UPDATE deposits SET wire_salt='\x1197cd7f7b0e13ab1905fedb36c536a2' WHERE deposit_serial_id=1;" | psql -Aqt $DB
+ # Modify wire_salt hash, so it is inconsistent
+ SALT=$(echo "SELECT wire_salt FROM exchange.deposits WHERE deposit_serial_id=1;" | psql -Aqt "$DB")
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.deposits SET wire_salt='\x1197cd7f7b0e13ab1905fedb36c536a2' WHERE deposit_serial_id=1;" \
+ | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-OP=`jq -r .bad_sig_losses[0].operation < test-audit-coins.json`
-if test "x$OP" != "xdeposit"
-then
- exit_fail "Reported operation wrong: $OP"
-fi
-echo PASS
+ echo -n "Testing inconsistency detection... "
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "deposit" ]
+ then
+ exit_fail "Reported operation wrong: $OP"
+ fi
+ echo "PASS"
-# Restore DB
-echo "UPDATE deposits SET wire_salt='$SALT' WHERE deposit_serial_id=1;" | psql -Aqt $DB
+ # Restore DB
+ echo "UPDATE exchange.deposits SET wire_salt='$SALT' WHERE deposit_serial_id=1;" \
+ | psql -Aqt "$DB"
}
# Test where wired amount (wire out) is wrong
function test_16() {
-echo "===========16: incorrect wire_out amount================="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========16: incorrect wire_out amount================="
+
+ # Check wire transfer lag reported (no aggregator!)
# First, we need to run the aggregator so we even
# have a wire_out to modify.
pre_audit aggregator
- # Modify wire amount, such that it is inconsistent with 'aggregation'
- # (exchange account is #2, so the logic below should select the outgoing
- # wire transfer):
- OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE debit_account_id=2 ORDER BY id LIMIT 1;" | psql $DB -Aqt`
- OLD_AMOUNT=`echo "SELECT amount FROM app_banktransaction WHERE id='${OLD_ID}';" | psql $DB -Aqt`
+ stop_libeufin
+ OLD_AMOUNT=$(echo "SELECT amount FROM TalerRequestedPayments WHERE id='1';" | psql "${DB}" -Aqt)
NEW_AMOUNT="TESTKUDOS:50"
- echo "UPDATE app_banktransaction SET amount='${NEW_AMOUNT}' WHERE id='${OLD_ID}';" | psql -Aqt $DB
-
+ echo "UPDATE TalerRequestedPayments SET amount='${NEW_AMOUNT}' WHERE id='1';" \
+ | psql "${DB}" -q
+ launch_libeufin
audit_only
echo -n "Testing inconsistency detection... "
- AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json`
- if test "x$AMOUNT" != "x$OLD_AMOUNT"
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json)
+ if [ "$AMOUNT" != "$OLD_AMOUNT" ]
then
exit_fail "Reported justified amount wrong: $AMOUNT"
fi
- AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json`
- if test "x$AMOUNT" != "x$NEW_AMOUNT"
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json)
+ if [ "$AMOUNT" != "$NEW_AMOUNT" ]
then
exit_fail "Reported wired amount wrong: $AMOUNT"
fi
- TOTAL_AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
- if test "x$TOTAL_AMOUNT" != "xTESTKUDOS:0"
+ TOTAL_AMOUNT=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$TOTAL_AMOUNT" != "TESTKUDOS:0" ]
then
exit_fail "Reported total wired amount minus wrong: $TOTAL_AMOUNT"
fi
- TOTAL_AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
- if test "x$TOTAL_AMOUNT" = "xTESTKUDOS:0"
+ TOTAL_AMOUNT=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$TOTAL_AMOUNT" = "TESTKUDOS:0" ]
then
exit_fail "Reported total wired amount plus wrong: $TOTAL_AMOUNT"
fi
- echo PASS
+ echo "PASS"
+ stop_libeufin
echo "Second modification: wire nothing"
NEW_AMOUNT="TESTKUDOS:0"
- echo "UPDATE app_banktransaction SET amount='${NEW_AMOUNT}' WHERE id='${OLD_ID}';" | psql -Aqt $DB
-
+ echo "UPDATE TalerRequestedPayments SET amount='${NEW_AMOUNT}' WHERE id='1';" \
+ | psql "${DB}" -q
+ launch_libeufin
audit_only
-
+ stop_libeufin
echo -n "Testing inconsistency detection... "
- AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json`
- if test "x$AMOUNT" != "x$OLD_AMOUNT"
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json)
+ if [ "$AMOUNT" != "$OLD_AMOUNT" ]
then
exit_fail "Reported justified amount wrong: $AMOUNT"
fi
- AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json`
- if test "x$AMOUNT" != "x$NEW_AMOUNT"
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json)
+ if [ "$AMOUNT" != "$NEW_AMOUNT" ]
then
exit_fail "Reported wired amount wrong: $AMOUNT"
fi
- TOTAL_AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
- if test "x$TOTAL_AMOUNT" != "x$OLD_AMOUNT"
+ TOTAL_AMOUNT=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$TOTAL_AMOUNT" != "$OLD_AMOUNT" ]
then
exit_fail "Reported total wired amount minus wrong: $TOTAL_AMOUNT (wanted $OLD_AMOUNT)"
fi
- TOTAL_AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
- if test "x$TOTAL_AMOUNT" != "xTESTKUDOS:0"
+ TOTAL_AMOUNT=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$TOTAL_AMOUNT" != "TESTKUDOS:0" ]
then
exit_fail "Reported total wired amount plus wrong: $TOTAL_AMOUNT"
fi
- echo PASS
+ echo "PASS"
post_audit
# cannot easily undo aggregator, hence full reload
full_reload
-else
- echo "Test skipped (database too new)"
-fi
-
}
-
# Test where wire-out timestamp is wrong
function test_17() {
-echo "===========17: incorrect wire_out timestamp================="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========17: incorrect wire_out timestamp================="
# First, we need to run the aggregator so we even
# have a wire_out to modify.
pre_audit aggregator
-
- # Modify wire amount, such that it is inconsistent with 'aggregation'
- # (exchange account is #2, so the logic below should select the outgoing
- # wire transfer):
- OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE debit_account_id=2 ORDER BY id LIMIT 1;" | psql $DB -Aqt`
- OLD_DATE=`echo "SELECT date FROM app_banktransaction WHERE id='${OLD_ID}';" | psql $DB -Aqt`
+ stop_libeufin
+ OLD_ID=1
+ OLD_PREP=$(echo "SELECT payment FROM TalerRequestedPayments WHERE id='${OLD_ID}';" | psql "${DB}" -Aqt)
+ OLD_DATE=$(echo "SELECT \"preparationDate\" FROM PaymentInitiations WHERE id='${OLD_ID}';" | psql "${DB}" -Aqt)
# Note: need - interval '1h' as "NOW()" may otherwise be exactly what is already in the DB
# (due to rounding, if this machine is fast...)
- echo "UPDATE app_banktransaction SET date=NOW()- interval '1 hour' WHERE id='${OLD_ID}';" | psql -Aqt $DB
-
+ NOW_1HR=$(( $(date +%s) - 3600))
+ echo "UPDATE PaymentInitiations SET \"preparationDate\"='$NOW_1HR' WHERE id='${OLD_PREP}';" \
+ | psql "${DB}" -q
+ launch_libeufin
+ echo "DONE"
audit_only
post_audit
echo -n "Testing inconsistency detection... "
- TABLE=`jq -r .row_minor_inconsistencies[0].table < test-audit-wire.json`
- if test "x$TABLE" != "xwire_out"
+ TABLE=$(jq -r .row_minor_inconsistencies[0].table < test-audit-wire.json)
+ if [ "$TABLE" != "wire_out" ]
then
exit_fail "Reported table wrong: $TABLE"
fi
- DIAG=`jq -r .row_minor_inconsistencies[0].diagnostic < test-audit-wire.json`
- DIAG=`echo "$DIAG" | awk '{print $1 " " $2 " " $3}'`
- if test "x$DIAG" != "xexecution date mismatch"
+ DIAG=$(jq -r .row_minor_inconsistencies[0].diagnostic < test-audit-wire.json)
+ DIAG=$(echo "$DIAG" | awk '{print $1 " " $2 " " $3}')
+ if [ "$DIAG" != "execution date mismatch" ]
then
exit_fail "Reported diagnostic wrong: $DIAG"
fi
- echo PASS
+ echo "PASS"
# cannot easily undo aggregator, hence full reload
full_reload
-
-else
- echo "Test skipped (database too new)"
-fi
-
}
@@ -1114,64 +1342,67 @@ fi
# Test where we trigger an emergency.
function test_18() {
-echo "===========18: emergency================="
-
-echo "DELETE FROM reserves_out;" | psql -Aqt $DB
+ echo "===========18: emergency================="
-run_audit
+ echo "DELETE FROM exchange.reserves_out;" \
+ | psql -Aqt "$DB" -q
-echo -n "Testing emergency detection... "
-
-jq -e .reserve_balance_summary_wrong_inconsistencies[0] < test-audit-reserves.json > /dev/null || exit_fail "Reserve balance inconsistency not detected"
-
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null || exit_fail "Emergency not detected"
-jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null || exit_fail "Emergency by count not detected"
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-coins.json > /dev/null || exit_fail "Escrow balance calculation impossibility not detected"
-
-echo PASS
-
-echo -n "Testing loss calculation... "
+ run_audit
-AMOUNT=`jq -r .emergencies_loss < test-audit-coins.json`
-if test "x$AMOUNT" == "xTESTKUDOS:0"
-then
- exit_fail "Reported amount wrong: $AMOUNT"
-fi
-AMOUNT=`jq -r .emergencies_loss_by_count < test-audit-coins.json`
-if test "x$AMOUNT" == "xTESTKUDOS:0"
-then
- exit_fail "Reported amount wrong: $AMOUNT"
-fi
+ echo -n "Testing emergency detection... "
+ jq -e .reserve_balance_summary_wrong_inconsistencies[0] \
+ < test-audit-reserves.json \
+ > /dev/null \
+ || exit_fail "Reserve balance inconsistency not detected"
+ jq -e .emergencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ || exit_fail "Emergency not detected"
+ jq -e .emergencies_by_count[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ || exit_fail "Emergency by count not detected"
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ || exit_fail "Escrow balance calculation impossibility not detected"
+ echo "PASS"
-echo PASS
+ echo -n "Testing loss calculation... "
+ AMOUNT=$(jq -r .emergencies_loss < test-audit-coins.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Reported amount wrong: $AMOUNT"
+ fi
+ AMOUNT=$(jq -r .emergencies_loss_by_count < test-audit-coins.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Reported amount wrong: $AMOUNT"
+ fi
+ echo "PASS"
-# cannot easily undo broad DELETE operation, hence full reload
-full_reload
+ # cannot easily undo broad DELETE operation, hence full reload
+ full_reload
}
# Test where reserve closure was done properly
function test_19() {
-echo "===========19: reserve closure done properly ================="
-
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========19: reserve closure done properly ================="
- OLD_TIME=`echo "SELECT execution_date FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- OLD_VAL=`echo "SELECT credit_val FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- RES_PUB=`echo "SELECT reserve_pub FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- OLD_EXP=`echo "SELECT expiration_date FROM reserves WHERE reserve_pub='${RES_PUB}';" | psql $DB -Aqt`
+ OLD_TIME=$(echo "SELECT execution_date FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ OLD_VAL=$(echo "SELECT credit_val FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ RES_PUB=$(echo "SELECT reserve_pub FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ OLD_EXP=$(echo "SELECT expiration_date FROM exchange.reserves WHERE reserve_pub='${RES_PUB}';" | psql "$DB" -Aqt)
VAL_DELTA=1
- NEW_TIME=`expr $OLD_TIME - 3024000000000 || true` # 5 weeks
- NEW_EXP=`expr $OLD_EXP - 3024000000000 || true` # 5 weeks
- NEW_CREDIT=`expr $OLD_VAL + $VAL_DELTA || true`
- echo "UPDATE reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
- echo "UPDATE reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_pub='${RES_PUB}';" | psql -Aqt $DB
+ NEW_TIME=$(( OLD_TIME - 3024000000000)) # 5 weeks
+ NEW_EXP=$(( OLD_EXP - 3024000000000)) # 5 weeks
+ NEW_CREDIT=$(( OLD_VAL + VAL_DELTA))
+ echo "UPDATE exchange.reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" \
+ | psql -Aqt "$DB"
+ echo "UPDATE exchange.reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_pub='${RES_PUB}';" \
+ | psql -Aqt "$DB"
# Need to run with the aggregator so the reserve closure happens
run_audit aggregator
@@ -1189,88 +1420,90 @@ then
# cannot easily undo aggregator, hence full reload
full_reload
-
-else
- echo "Test skipped (database too new)"
-fi
}
# Test where reserve closure was not done properly
function test_20() {
-echo "===========20: reserve closure missing ================="
-
-OLD_TIME=`echo "SELECT execution_date FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
-OLD_VAL=`echo "SELECT credit_val FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
-RES_PUB=`echo "SELECT reserve_pub FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
-NEW_TIME=`expr $OLD_TIME - 3024000000000 || true` # 5 weeks
-NEW_CREDIT=`expr $OLD_VAL + 100 || true`
-echo "UPDATE reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
-echo "UPDATE reserves SET current_balance_val=100+current_balance_val WHERE reserve_pub='${RES_PUB}';" | psql -Aqt $DB
-
-# This time, run without the aggregator so the reserve closure is skipped!
-run_audit
+ echo "===========20: reserve closure missing ================="
+
+ OLD_TIME=$(echo "SELECT execution_date FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ OLD_VAL=$(echo "SELECT credit_val FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ RES_PUB=$(echo "SELECT reserve_pub FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ NEW_TIME=$(( OLD_TIME - 3024000000000 )) # 5 weeks
+ NEW_CREDIT=$(( OLD_VAL + 100 ))
+ echo "UPDATE exchange.reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" \
+ | psql -Aqt "$DB"
+ echo "UPDATE exchange.reserves SET current_balance_val=100+current_balance_val WHERE reserve_pub='${RES_PUB}';" \
+ | psql -Aqt "$DB"
+
+ # This time, run without the aggregator so the reserve closure is skipped!
+ run_audit
-echo -n "Testing reserve closure missing detected... "
-jq -e .reserve_not_closed_inconsistencies[0] < test-audit-reserves.json > /dev/null || exit_fail "Reserve not closed inconsistency not detected"
-echo "PASS"
+ echo -n "Testing reserve closure missing detected... "
+ jq -e .reserve_not_closed_inconsistencies[0] \
+ < test-audit-reserves.json \
+ > /dev/null \
+ || exit_fail "Reserve not closed inconsistency not detected"
+ echo "PASS"
-AMOUNT=`jq -r .total_balance_reserve_not_closed < test-audit-reserves.json`
-if test "x$AMOUNT" == "xTESTKUDOS:0"
-then
- exit_fail "Reported total amount wrong: $AMOUNT"
-fi
+ AMOUNT=$(jq -r .total_balance_reserve_not_closed < test-audit-reserves.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Reported total amount wrong: $AMOUNT"
+ fi
-# Undo
-echo "UPDATE reserves_in SET execution_date='${OLD_TIME}',credit_val=${OLD_VAL} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
-echo "UPDATE reserves SET current_balance_val=current_balance_val-100 WHERE reserve_pub='${RES_PUB}';" | psql -Aqt $DB
+ # Undo
+ echo "UPDATE exchange.reserves_in SET execution_date='${OLD_TIME}',credit_val=${OLD_VAL} WHERE reserve_in_serial_id=1;" \
+ | psql -Aqt "$DB"
+ echo "UPDATE exchange.reserves SET current_balance_val=current_balance_val-100 WHERE reserve_pub='${RES_PUB}';" \
+ | psql -Aqt "$DB"
}
# Test reserve closure reported but wire transfer missing detection
function test_21() {
-echo "===========21: reserve closure missreported ================="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========21: reserve closure missreported ================="
- OLD_TIME=`echo "SELECT execution_date FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- OLD_VAL=`echo "SELECT credit_val FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- RES_PUB=`echo "SELECT reserve_pub FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- OLD_EXP=`echo "SELECT expiration_date FROM reserves WHERE reserve_pub='${RES_PUB}';" | psql $DB -Aqt`
+ OLD_TIME=$(echo "SELECT execution_date FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ OLD_VAL=$(echo "SELECT credit_val FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ RES_PUB=$(echo "SELECT reserve_pub FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ OLD_EXP=$(echo "SELECT expiration_date FROM exchange.reserves WHERE reserve_pub='${RES_PUB}';" | psql "$DB" -Aqt)
VAL_DELTA=1
- NEW_TIME=`expr $OLD_TIME - 3024000000000 || true` # 5 weeks
- NEW_EXP=`expr $OLD_EXP - 3024000000000 || true` # 5 weeks
- NEW_CREDIT=`expr $OLD_VAL + $VAL_DELTA || true`
- echo "UPDATE reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
- echo "UPDATE reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_pub='${RES_PUB}';" | psql -Aqt $DB
+ NEW_TIME=$(( OLD_TIME - 3024000000000 )) # 5 weeks
+ NEW_EXP=$(( OLD_EXP - 3024000000000 )) # 5 weeks
+ NEW_CREDIT=$(( OLD_VAL + VAL_DELTA ))
+ echo "UPDATE exchange.reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" \
+ | psql -Aqt "$DB"
+ echo "UPDATE exchange.reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_pub='${RES_PUB}';" \
+ | psql -Aqt "$DB"
# Need to first run the aggregator so the transfer is marked as done exists
pre_audit aggregator
-
+ stop_libeufin
# remove transaction from bank DB
- echo "DELETE FROM app_banktransaction WHERE debit_account_id=2 AND amount='TESTKUDOS:${VAL_DELTA}';" | psql -Aqt $DB
-
+ # Currently emulating this (to be deleted):
+ echo "DELETE FROM TalerRequestedPayments WHERE amount='TESTKUDOS:${VAL_DELTA}'" \
+ | psql "${DB}" -q
+ launch_libeufin
audit_only
post_audit
echo -n "Testing lack of reserve closure transaction detected... "
- jq -e .reserve_lag_details[0] < test-audit-wire.json > /dev/null || exit_fail "Reserve closure lag not detected"
+ jq -e .reserve_lag_details[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ || exit_fail "Reserve closure lag not detected"
- AMOUNT=`jq -r .reserve_lag_details[0].amount < test-audit-wire.json`
- if test "x$AMOUNT" != "xTESTKUDOS:${VAL_DELTA}"
+ AMOUNT=$(jq -r .reserve_lag_details[0].amount < test-audit-wire.json)
+ if [ "$AMOUNT" != "TESTKUDOS:${VAL_DELTA}" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
- AMOUNT=`jq -r .total_closure_amount_lag < test-audit-wire.json`
- if test "x$AMOUNT" != "xTESTKUDOS:${VAL_DELTA}"
+ AMOUNT=$(jq -r .total_closure_amount_lag < test-audit-wire.json)
+ if [ "$AMOUNT" != "TESTKUDOS:${VAL_DELTA}" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
@@ -1279,35 +1512,32 @@ then
# cannot easily undo aggregator, hence full reload
full_reload
-else
- echo "Test skipped (database too new)"
-fi
}
# Test use of withdraw-expired denomination key
function test_22() {
-echo "===========22: denomination key expired ================="
+ echo "===========22: denomination key expired ================="
-S_DENOM=`echo 'SELECT denominations_serial FROM reserves_out LIMIT 1;' | psql $DB -Aqt`
+ S_DENOM=$(echo 'SELECT denominations_serial FROM exchange.reserves_out LIMIT 1;' | psql "$DB" -Aqt)
-OLD_START=`echo "SELECT valid_from FROM denominations WHERE denominations_serial='${S_DENOM}';" | psql $DB -Aqt`
-OLD_WEXP=`echo "SELECT expire_withdraw FROM denominations WHERE denominations_serial='${S_DENOM}';" | psql $DB -Aqt`
-# Basically expires 'immediately', so that the withdraw must have been 'invalid'
-NEW_WEXP=$OLD_START
+ OLD_START=$(echo "SELECT valid_from FROM exchange.denominations WHERE denominations_serial='${S_DENOM}';" | psql "$DB" -Aqt)
+ OLD_WEXP=$(echo "SELECT expire_withdraw FROM exchange.denominations WHERE denominations_serial='${S_DENOM}';" | psql "$DB" -Aqt)
+ # Basically expires 'immediately', so that the withdraw must have been 'invalid'
+ NEW_WEXP=$OLD_START
-echo "UPDATE denominations SET expire_withdraw=${NEW_WEXP} WHERE denominations_serial='${S_DENOM}';" | psql -Aqt $DB
+ echo "UPDATE exchange.denominations SET expire_withdraw=${NEW_WEXP} WHERE denominations_serial='${S_DENOM}';" | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null || exit_fail "Denomination key withdraw inconsistency for $S_DENOM not detected"
+ echo -n "Testing inconsistency detection... "
+ jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null || exit_fail "Denomination key withdraw inconsistency for $S_DENOM not detected"
-echo PASS
+ echo "PASS"
-# Undo modification
-echo "UPDATE denominations SET expire_withdraw=${OLD_WEXP} WHERE denominations_serial='${S_DENOM}';" | psql -Aqt $DB
+ # Undo modification
+ echo "UPDATE exchange.denominations SET expire_withdraw=${OLD_WEXP} WHERE denominations_serial='${S_DENOM}';" | psql -Aqt "$DB"
}
@@ -1315,50 +1545,46 @@ echo "UPDATE denominations SET expire_withdraw=${OLD_WEXP} WHERE denominations_s
# Test calculation of wire-out amounts
function test_23() {
-echo "===========23: wire out calculations ================="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========23: wire out calculations ================="
# Need to first run the aggregator so the transfer is marked as done exists
pre_audit aggregator
- OLD_AMOUNT=`echo "SELECT amount_frac FROM wire_out WHERE wireout_uuid=1;" | psql $DB -Aqt`
- NEW_AMOUNT=`expr $OLD_AMOUNT - 1000000 || true`
- echo "UPDATE wire_out SET amount_frac=${NEW_AMOUNT} WHERE wireout_uuid=1;" | psql -Aqt $DB
+ OLD_AMOUNT=$(echo "SELECT amount_frac FROM exchange.wire_out WHERE wireout_uuid=1;" | psql "$DB" -Aqt)
+ NEW_AMOUNT=$(( OLD_AMOUNT - 1000000 ))
+ echo "UPDATE exchange.wire_out SET amount_frac=${NEW_AMOUNT} WHERE wireout_uuid=1;" \
+ | psql -Aqt "$DB"
audit_only
post_audit
echo -n "Testing inconsistency detection... "
- jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null || exit_fail "Wire out inconsistency not detected"
+ jq -e .wire_out_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ || exit_fail "Wire out inconsistency not detected"
- ROW=`jq .wire_out_inconsistencies[0].rowid < test-audit-aggregation.json`
- if test $ROW != 1
+ ROW=$(jq .wire_out_inconsistencies[0].rowid < test-audit-aggregation.json)
+ if [ "$ROW" != 1 ]
then
exit_fail "Row wrong"
fi
- AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit-aggregation.json`
- if test "x$AMOUNT" != "xTESTKUDOS:0"
+ AMOUNT=$(jq -r .total_wire_out_delta_plus < test-audit-aggregation.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0" ]
then
exit_fail "Reported amount wrong: $AMOUNT"
fi
- AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit-aggregation.json`
- if test "x$AMOUNT" != "xTESTKUDOS:0.01"
+ AMOUNT=$(jq -r .total_wire_out_delta_minus < test-audit-aggregation.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0.01" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
- echo PASS
+ echo "PASS"
echo "Second pass: changing how amount is wrong to other direction"
- NEW_AMOUNT=`expr $OLD_AMOUNT + 1000000 || true`
- echo "UPDATE wire_out SET amount_frac=${NEW_AMOUNT} WHERE wireout_uuid=1;" | psql -Aqt $DB
+ NEW_AMOUNT=$(( OLD_AMOUNT + 1000000 ))
+ echo "UPDATE exchange.wire_out SET amount_frac=${NEW_AMOUNT} WHERE wireout_uuid=1;" | psql -Aqt "$DB"
pre_audit
audit_only
@@ -1368,29 +1594,25 @@ then
jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null || exit_fail "Wire out inconsistency not detected"
- ROW=`jq .wire_out_inconsistencies[0].rowid < test-audit-aggregation.json`
- if test $ROW != 1
+ ROW=$(jq .wire_out_inconsistencies[0].rowid < test-audit-aggregation.json)
+ if [ "$ROW" != 1 ]
then
exit_fail "Row wrong"
fi
- AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit-aggregation.json`
- if test "x$AMOUNT" != "xTESTKUDOS:0"
+ AMOUNT=$(jq -r .total_wire_out_delta_minus < test-audit-aggregation.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0" ]
then
exit_fail "Reported amount wrong: $AMOUNT"
fi
- AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit-aggregation.json`
- if test "x$AMOUNT" != "xTESTKUDOS:0.01"
+ AMOUNT=$(jq -r .total_wire_out_delta_plus < test-audit-aggregation.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0.01" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
- echo PASS
-
+ echo "PASS"
# cannot easily undo aggregator, hence full reload
full_reload
-else
- echo "Test skipped (database too new)"
-fi
}
@@ -1398,179 +1620,173 @@ fi
# Test for missing deposits in exchange database.
function test_24() {
-echo "===========24: deposits missing ==========="
-# Modify denom_sig, so it is wrong
-CNT=`echo "SELECT COUNT(*) FROM deposit_confirmations;" | psql -Aqt $DB`
-if test x$CNT = x0
-then
- echo "Skipping deposits missing test: no deposit confirmations in database!"
-else
- echo "DELETE FROM deposits;" | psql -Aqt $DB
- echo "DELETE FROM deposits WHERE deposit_serial_id=1;" | psql -Aqt $DB
+ echo "===========24: deposits missing ==========="
+ # Modify denom_sig, so it is wrong
+ CNT=$(echo "SELECT COUNT(*) FROM auditor.deposit_confirmations;" | psql -Aqt "$DB")
+ if [ "$CNT" = "0" ]
+ then
+ echo "Skipping deposits missing test: no deposit confirmations in database!"
+ else
+ echo "DELETE FROM exchange.deposits;" | psql -Aqt "$DB"
+ echo "DELETE FROM exchange.deposits WHERE deposit_serial_id=1;" \
+ | psql -Aqt "$DB"
- run_audit
+ run_audit
- echo -n "Testing inconsistency detection... "
+ echo -n "Testing inconsistency detection... "
- jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null || exit_fail "Deposit confirmation inconsistency NOT detected"
+ jq -e .deposit_confirmation_inconsistencies[0] \
+ < test-audit-deposits.json \
+ > /dev/null \
+ || exit_fail "Deposit confirmation inconsistency NOT detected"
- AMOUNT=`jq -er .missing_deposit_confirmation_total < test-audit-deposits.json`
- if test x$AMOUNT = xTESTKUDOS:0
- then
- exit_fail "Expected non-zero total missing deposit confirmation amount"
- fi
- COUNT=`jq -er .missing_deposit_confirmation_count < test-audit-deposits.json`
- if test x$AMOUNT = x0
- then
- exit_fail "Expected non-zero total missing deposit confirmation count"
- fi
+ AMOUNT=$(jq -er .missing_deposit_confirmation_total < test-audit-deposits.json)
+ if [ "$AMOUNT" = "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected non-zero total missing deposit confirmation amount"
+ fi
+ COUNT=$(jq -er .missing_deposit_confirmation_count < test-audit-deposits.json)
+ if [ "$AMOUNT" = "0" ]
+ then
+ exit_fail "Expected non-zero total missing deposit confirmation count"
+ fi
- echo PASS
+ echo "PASS"
- # cannot easily undo DELETE, hence full reload
- full_reload
-fi
+ # cannot easily undo DELETE, hence full reload
+ full_reload
+ fi
}
# Test for inconsistent coin history.
function test_25() {
-echo "=========25: inconsistent coin history========="
-
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "=========25: inconsistent coin history========="
# Drop refund, so coin history is bogus.
- echo "DELETE FROM refunds WHERE refund_serial_id=1;" | psql -Aqt $DB
+ echo "DELETE FROM exchange.refunds WHERE refund_serial_id=1;" \
+ | psql -At "$DB"
run_audit aggregator
echo -n "Testing inconsistency detection... "
- jq -e .coin_inconsistencies[0] < test-audit-aggregation.json > /dev/null || exit_fail "Coin inconsistency NOT detected"
+ jq -e .coin_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ || exit_fail "Coin inconsistency NOT detected"
# Note: if the wallet withdrew much more than it spent, this might indeed
# go legitimately unnoticed.
- jq -e .emergencies[0] < test-audit-coins.json > /dev/null || exit_fail "Denomination value emergency NOT reported"
+ jq -e .emergencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ || exit_fail "Denomination value emergency NOT reported"
- AMOUNT=`jq -er .total_coin_delta_minus < test-audit-aggregation.json`
- if test x$AMOUNT = xTESTKUDOS:0
+ AMOUNT=$(jq -er .total_coin_delta_minus < test-audit-aggregation.json)
+ if [ "$AMOUNT" = "TESTKUDOS:0" ]
then
exit_fail "Expected non-zero total inconsistency amount from coins"
fi
# Note: if the wallet withdrew much more than it spent, this might indeed
# go legitimately unnoticed.
- COUNT=`jq -er .emergencies_risk_by_amount < test-audit-coins.json`
- if test x$AMOUNT = xTESTKUDOS:0
+ COUNT=$(jq -er .emergencies_risk_by_amount < test-audit-coins.json)
+ if [ "$COUNT" = "TESTKUDOS:0" ]
then
exit_fail "Expected non-zero emergency-by-amount"
fi
- echo PASS
+ echo "PASS"
# cannot easily undo DELETE, hence full reload
full_reload
-else
- echo "Test skipped (database too new)"
-fi
}
# Test for deposit wire target malformed
function test_26() {
-echo "===========26: deposit wire target malformed ================="
-# Expects 'payto_uri', not 'url' (also breaks signature, but we cannot even check that).
-SERIAL=`echo "SELECT deposit_serial_id FROM deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql $DB -Aqt`
-OLD_WIRE_ID=`echo "SELECT wire_target_h_payto FROM deposits WHERE deposit_serial_id=${SERIAL};" | psql $DB -Aqt`
-NEW_WIRE_ID=`echo "INSERT INTO wire_targets (payto_uri, wire_target_h_payto, kyc_ok) VALUES ('payto://x-taler-bank/localhost/testuser-xxlargtp', '\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b', false);" | psql $DB -Aqt`
-echo OLD_WIRE_ID=$OLD_WIRE_ID
-echo NEW_WIRE_ID=$NEW_WIRE_ID
-echo "UPDATE deposits SET wire_target_h_payto='\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b' WHERE deposit_serial_id=${SERIAL}" | psql -Aqt $DB
+ echo "===========26: deposit wire target malformed ================="
+ # Expects 'payto_uri', not 'url' (also breaks signature, but we cannot even check that).
+ SERIAL=$(echo "SELECT deposit_serial_id FROM exchange.deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql "$DB" -Aqt)
+ OLD_WIRE_ID=$(echo "SELECT wire_target_h_payto FROM exchange.deposits WHERE deposit_serial_id=${SERIAL};" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "INSERT INTO exchange.wire_targets (payto_uri, wire_target_h_payto) VALUES ('payto://x-taler-bank/localhost/testuser-xxlargtp', '\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b');" \
+ | psql "$DB" -Aqt
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.deposits SET wire_target_h_payto='\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b' WHERE deposit_serial_id=${SERIAL}" \
+ | psql -Aqt "$DB"
-run_audit
-
-echo -n "Testing inconsistency detection... "
+ run_audit
-jq -e .bad_sig_losses[0] < test-audit-coins.json > /dev/null || exit_fail "Bad signature not detected"
+ echo -n "Testing inconsistency detection... "
-ROW=`jq -e .bad_sig_losses[0].row < test-audit-coins.json`
-if test $ROW != ${SERIAL}
-then
- exit_fail "Row wrong, got $ROW"
-fi
+ jq -e .bad_sig_losses[0] < test-audit-coins.json > /dev/null || exit_fail "Bad signature not detected"
-LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong deposit bad signature loss, got $LOSS"
-fi
+ ROW=$(jq -e .bad_sig_losses[0].row < test-audit-coins.json)
+ if [ "$ROW" != "${SERIAL}" ]
+ then
+ exit_fail "Row wrong, got $ROW"
+ fi
-OP=`jq -r .bad_sig_losses[0].operation < test-audit-coins.json`
-if test $OP != "deposit"
-then
- exit_fail "Wrong operation, got $OP"
-fi
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong deposit bad signature loss, got $LOSS"
+ fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong total bad sig loss, got $LOSS"
-fi
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "deposit" ]
+ then
+ exit_fail "Wrong operation, got $OP"
+ fi
-echo PASS
-# Undo:
-echo "UPDATE deposits SET wire_target_h_payto='$OLD_WIRE_ID' WHERE deposit_serial_id=${SERIAL}" | psql -Aqt $DB
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong total bad sig loss, got $LOSS"
+ fi
+ echo "PASS"
+ # Undo:
+ echo "UPDATE exchange.deposits SET wire_target_h_payto='$OLD_WIRE_ID' WHERE deposit_serial_id=${SERIAL}" \
+ | psql -Aqt "$DB"
}
# Test for duplicate wire transfer subject
function test_27() {
-echo "===========27: duplicate WTID detection ================="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========27: duplicate WTID detection ================="
pre_audit aggregator
-
+ stop_libeufin
# Obtain data to duplicate.
- ID=`echo "SELECT id FROM app_banktransaction WHERE debit_account_id=2 LIMIT 1" | psql $DB -Aqt`
- WTID=`echo "SELECT subject FROM app_banktransaction WHERE debit_account_id=2 LIMIT 1" | psql $DB -Aqt`
- echo WTID=$WTID
- UUID="992e8936-a64d-4845-87d7-021440330f8a"
- echo "INSERT INTO app_banktransaction (amount,subject,date,credit_account_id,debit_account_id,cancelled,request_uid) VALUES ('TESTKUDOS:1','$WTID',NOW(),12,2,'f','$UUID')" | psql -Aqt $DB
-
+ WTID=$(echo SELECT wtid FROM TalerRequestedPayments WHERE id=1 | psql "${DB}" -Aqt)
+ OTHER_IBAN=$(echo -e "SELECT iban FROM BankAccounts WHERE label='fortytwo'" | psql "${DB}" -Aqt)
+ # 'rawConfirmation' is set to 2 here, that doesn't
+ # point to any record. That's only needed to set a non null value.
+ echo -e "INSERT INTO PaymentInitiations (\"bankAccount\",\"preparationDate\",\"submissionDate\",sum,currency,\"endToEndId\",\"paymentInformationId\",\"instructionId\",subject,\"creditorIban\",\"creditorBic\",\"creditorName\",submitted,\"messageId\",\"rawConfirmation\") VALUES (1,$(date +%s),$(( $(date +%s) + 2)),10,'TESTKUDOS','NOTGIVEN','unused','unused','$WTID http://exchange.example.com/','$OTHER_IBAN','SANDBOXX','Forty Two',false,1,2)" \
+ | psql "${DB}" -q
+ echo -e "INSERT INTO TalerRequestedPayments (facade,payment,\"requestUid\",amount,\"exchangeBaseUrl\",wtid,\"creditAccount\") VALUES (1,2,'unused','TESTKUDOS:1','http://exchange.example.com/','$WTID','payto://iban/SANDBOXX/$OTHER_IBAN?receiver-name=Forty+Two')" \
+ | psql "${DB}" -q
+ launch_libeufin
audit_only
post_audit
echo -n "Testing inconsistency detection... "
- AMOUNT=`jq -r .wire_format_inconsistencies[0].amount < test-audit-wire.json`
- if test "${AMOUNT}" != "TESTKUDOS:1"
+ AMOUNT=$(jq -r .wire_format_inconsistencies[0].amount < test-audit-wire.json)
+ if [ "${AMOUNT}" != "TESTKUDOS:1" ]
then
exit_fail "Amount wrong, got ${AMOUNT}"
fi
- AMOUNT=`jq -r .total_wire_format_amount < test-audit-wire.json`
- if test "${AMOUNT}" != "TESTKUDOS:1"
+ AMOUNT=$(jq -r .total_wire_format_amount < test-audit-wire.json)
+ if [ "${AMOUNT}" != "TESTKUDOS:1" ]
then
exit_fail "Wrong total wire format amount, got $AMOUNT"
fi
# cannot easily undo aggregator, hence full reload
full_reload
-else
- echo "Test skipped (database too new)"
-fi
-
}
@@ -1579,41 +1795,37 @@ fi
# Test where denom_sig in known_coins table is wrong
# (=> bad signature) AND the coin is used in aggregation
function test_28() {
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
echo "===========28: known_coins signature wrong================="
# Modify denom_sig, so it is wrong
- OLD_SIG=`echo 'SELECT denom_sig FROM known_coins LIMIT 1;' | psql $DB -Aqt`
- COIN_PUB=`echo "SELECT coin_pub FROM known_coins WHERE denom_sig='$OLD_SIG';" | psql $DB -Aqt`
- echo "UPDATE known_coins SET denom_sig='\x0000000100000000287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" | psql -Aqt $DB
+ OLD_SIG=$(echo 'SELECT denom_sig FROM exchange.known_coins LIMIT 1;' | psql "$DB" -Aqt)
+ COIN_PUB=$(echo "SELECT coin_pub FROM exchange.known_coins WHERE denom_sig='$OLD_SIG';" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.known_coins SET denom_sig='\x0000000100000000287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" \
+ | psql -Aqt "$DB"
run_audit aggregator
echo -n "Testing inconsistency detection... "
- LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-aggregation.json`
- if test $LOSS == "TESTKUDOS:0"
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-aggregation.json)
+ if [ "$LOSS" == "TESTKUDOS:0" ]
then
exit_fail "Wrong deposit bad signature loss, got $LOSS"
fi
- OP=`jq -r .bad_sig_losses[0].operation < test-audit-aggregation.json`
- if test $OP != "wire"
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-aggregation.json)
+ if [ "$OP" != "wire" ]
then
exit_fail "Wrong operation, got $OP"
fi
- TAB=`jq -r .row_inconsistencies[0].table < test-audit-aggregation.json`
- if test $TAB != "deposit"
+ TAB=$(jq -r .row_inconsistencies[0].table < test-audit-aggregation.json)
+ if [ "$TAB" != "deposit" ]
then
exit_fail "Wrong table for row inconsistency, got $TAB"
fi
- LOSS=`jq -r .total_bad_sig_loss < test-audit-aggregation.json`
- if test $LOSS == "TESTKUDOS:0"
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$LOSS" == "TESTKUDOS:0" ]
then
exit_fail "Wrong total bad sig loss, got $LOSS"
fi
@@ -1621,10 +1833,6 @@ then
echo "OK"
# cannot easily undo aggregator, hence full reload
full_reload
-
-else
- echo "Test skipped (database too new)"
-fi
}
@@ -1632,27 +1840,27 @@ fi
# Test where fees known to the auditor differ from those
# accounted for by the exchange
function test_29() {
-echo "===========29: withdraw fee inconsistency ================="
+ echo "===========29: withdraw fee inconsistency ================="
-echo "UPDATE denominations SET fee_withdraw_frac=5000000 WHERE coin_val=1;" | psql -Aqt $DB
+ echo "UPDATE exchange.denominations SET fee_withdraw_frac=5000000 WHERE coin_val=1;" | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-AMOUNT=`jq -r .total_balance_summary_delta_minus < test-audit-reserves.json`
-if test "x$AMOUNT" == "xTESTKUDOS:0"
-then
- exit_fail "Reported total amount wrong: $AMOUNT"
-fi
+ echo -n "Testing inconsistency detection... "
+ AMOUNT=$(jq -r .total_balance_summary_delta_minus < test-audit-reserves.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Reported total amount wrong: $AMOUNT"
+ fi
-PROFIT=`jq -r .amount_arithmetic_inconsistencies[0].profitable < test-audit-coins.json`
-if test "x$PROFIT" != "x-1"
-then
- exit_fail "Reported wrong profitability: $PROFIT"
-fi
-echo "OK"
-# Undo
-echo "UPDATE denominations SET fee_withdraw_frac=2000000 WHERE coin_val=1;" | psql -Aqt $DB
+ PROFIT=$(jq -r .amount_arithmetic_inconsistencies[0].profitable < test-audit-coins.json)
+ if [ "$PROFIT" != "-1" ]
+ then
+ exit_fail "Reported wrong profitability: $PROFIT"
+ fi
+ echo "OK"
+ # Undo
+ echo "UPDATE exchange.denominations SET fee_withdraw_frac=2000000 WHERE coin_val=1;" | psql -Aqt "$DB"
}
@@ -1660,28 +1868,28 @@ echo "UPDATE denominations SET fee_withdraw_frac=2000000 WHERE coin_val=1;" | ps
# Test where fees known to the auditor differ from those
# accounted for by the exchange
function test_30() {
-echo "===========30: melt fee inconsistency ================="
+ echo "===========30: melt fee inconsistency ================="
-echo "UPDATE denominations SET fee_refresh_frac=5000000 WHERE coin_val=10;" | psql -Aqt $DB
+ echo "UPDATE exchange.denominations SET fee_refresh_frac=5000000 WHERE coin_val=10;" | psql -Aqt "$DB"
-run_audit
-echo -n "Testing inconsistency detection... "
-AMOUNT=`jq -r .bad_sig_losses[0].loss < test-audit-coins.json`
-if test "x$AMOUNT" == "xTESTKUDOS:0"
-then
- exit_fail "Reported total amount wrong: $AMOUNT"
-fi
+ run_audit
+ echo -n "Testing inconsistency detection... "
+ AMOUNT=$(jq -r .bad_sig_losses[0].loss < test-audit-coins.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Reported total amount wrong: $AMOUNT"
+ fi
-PROFIT=`jq -r .amount_arithmetic_inconsistencies[0].profitable < test-audit-coins.json`
-if test "x$PROFIT" != "x-1"
-then
- exit_fail "Reported profitability wrong: $PROFIT"
-fi
+ PROFIT=$(jq -r .amount_arithmetic_inconsistencies[0].profitable < test-audit-coins.json)
+ if [ "$PROFIT" != "-1" ]
+ then
+ exit_fail "Reported profitability wrong: $PROFIT"
+ fi
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run"
-echo "OK"
-# Undo
-echo "UPDATE denominations SET fee_refresh_frac=3000000 WHERE coin_val=1;" | psql -Aqt $DB
+ jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run"
+ echo "OK"
+ # Undo
+ echo "UPDATE exchange.denominations SET fee_refresh_frac=3000000 WHERE coin_val=10;" | psql -Aqt "$DB"
}
@@ -1690,39 +1898,27 @@ echo "UPDATE denominations SET fee_refresh_frac=3000000 WHERE coin_val=1;" | psq
# accounted for by the exchange
function test_31() {
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
-
echo "===========31: deposit fee inconsistency ================="
- echo "UPDATE denominations SET fee_deposit_frac=5000000 WHERE coin_val=8;" | psql -Aqt $DB
+ echo "UPDATE exchange.denominations SET fee_deposit_frac=5000000 WHERE coin_val=8;" | psql -Aqt "$DB"
run_audit aggregator
echo -n "Testing inconsistency detection... "
- AMOUNT=`jq -r .total_bad_sig_loss < test-audit-coins.json`
- if test "x$AMOUNT" == "xTESTKUDOS:0"
+ AMOUNT=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
- OP=`jq -r --arg dep "deposit" '.bad_sig_losses[] | select(.operation == $dep) | .operation'< test-audit-coins.json | head -n1`
- if test "x$OP" != "xdeposit"
+ OP=$(jq -r --arg dep "deposit" '.bad_sig_losses[] | select(.operation == $dep) | .operation'< test-audit-coins.json | head -n1)
+ if [ "$OP" != "deposit" ]
then
exit_fail "Reported wrong operation: $OP"
fi
echo "OK"
# Undo
- echo "UPDATE denominations SET fee_deposit_frac=2000000 WHERE coin_val=8;" | psql -Aqt $DB
-
-else
- echo "Test skipped (database too new)"
-fi
-
+ echo "UPDATE exchange.denominations SET fee_deposit_frac=2000000 WHERE coin_val=8;" | psql -Aqt "$DB"
}
@@ -1732,30 +1928,25 @@ fi
# (=> bad signature)
function test_32() {
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
-
echo "===========32: known_coins signature wrong w. aggregation================="
# Modify denom_sig, so it is wrong
- OLD_SIG=`echo 'SELECT denom_sig FROM known_coins LIMIT 1;' | psql $DB -At`
- COIN_PUB=`echo "SELECT coin_pub FROM known_coins WHERE denom_sig='$OLD_SIG';" | psql $DB -At`
- echo "UPDATE known_coins SET denom_sig='\x0000000100000000287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" | psql -Aqt $DB
+ OLD_SIG=$(echo 'SELECT denom_sig FROM exchange.known_coins LIMIT 1;' | psql "$DB" -Aqt)
+ COIN_PUB=$(echo "SELECT coin_pub FROM exchange.known_coins WHERE denom_sig='$OLD_SIG';" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.known_coins SET denom_sig='\x0000000100000000287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" \
+ | psql -Aqt "$DB"
run_audit aggregator
echo -n "Testing inconsistency detection... "
- AMOUNT=`jq -r .total_bad_sig_loss < test-audit-aggregation.json`
- if test "x$AMOUNT" == "xTESTKUDOS:0"
+ AMOUNT=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
- OP=`jq -r .bad_sig_losses[0].operation < test-audit-aggregation.json`
- if test "x$OP" != "xwire"
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-aggregation.json)
+ if [ "$OP" != "wire" ]
then
exit_fail "Reported wrong operation: $OP"
fi
@@ -1763,54 +1954,147 @@ then
echo "OK"
# Cannot undo aggregation, do full reload
full_reload
-
-fi
}
-# Test where h_payto in the wire_targets table is wrong
function test_33() {
-echo "===========33: h_payto wrong================="
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: this test is BRAND NEW and expected
-# to fail until we implement the check in the auditor!
+ echo "===========33: normal run with aggregator and profit drain==========="
+ run_audit aggregator drain
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
+ echo -n "Test for deposit confirmation emergencies... "
+ jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
- # Modify h_payto hash, so it is inconsistent with 'wire'
- WTSID=`echo "SELECT wire_target_serial_id FROM deposits WHERE deposit_serial_id=1;" | psql -Aqt $DB`
- echo "UPDATE wire_targets SET h_payto='\x973e52d193a357940be9ef2939c19b0575ee1101f52188c3c01d9005b7d755c397e92624f09cfa709104b3b65605fe5130c90d7e1b7ee30f8fc570f39c16b853' WHERE wire_target_serial_id=$WTSID" | psql -Aqt $DB
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
- # The auditor checks h_wire consistency only for
- # coins where the wire transfer has happened, hence
- # run aggregator first to get this test to work.
- run_audit aggregator
- echo -n "Testing inconsistency detection... "
- TABLE=`jq -r .row_inconsistencies[0].table < test-audit-aggregation.json`
- if test "x$TABLE" != "xwire_targets"
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+
+ echo PASS
+
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
then
- exit_fail "Reported table wrong: $TABLE"
+ exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
+ fi
+
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
fi
echo PASS
- # cannot easily undo aggregator, hence full reload
- full_reload
+ echo -n "Checking for unexpected arithmetic differences "
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
+ fi
-else
- echo "Test skipped (database too new)"
-fi
-}
+ DRAINED=$(jq -r .total_drained < test-audit-wire.json)
+ if [ "$DRAINED" != "TESTKUDOS:0.1" ]
+ then
+ exit_fail "Wrong amount drained, got unexpected drain of $DRAINED"
+ fi
+
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-reserves.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
+ echo "PASS"
+ echo -n "Checking for unexpected wire out differences "
+ jq -e .wire_out_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
+ echo "PASS"
+ # cannot easily undo aggregator, hence full reload
+ full_reload
+}
# *************** Main test loop starts here **************
@@ -1818,21 +2102,18 @@ fi
# Run all the tests against the database given in $1.
# Sets $fail to 0 on success, non-zero on failure.
-check_with_database()
+function check_with_database()
{
- BASEDB=$1
+ BASEDB="$1"
+ CONF="$1.conf"
echo "Running test suite with database $BASEDB using configuration $CONF"
-
- # Setup database-specific globals
- MASTER_PUB=`cat ${BASEDB}.mpub`
-
- # Determine database age
- echo "Calculating database age based on ${BASEDB}.age"
- AGE=`cat ${BASEDB}.age`
- NOW=`date +%s`
- # NOTE: expr "fails" if the result is zero.
- DATABASE_AGE=`expr ${NOW} - ${AGE} || true`
- echo "Database age is ${DATABASE_AGE} seconds"
+ MASTER_PRIV_FILE="${BASEDB}.mpriv"
+ taler-config \
+ -f \
+ -c "${CONF}" \
+ -s exchange-offline \
+ -o MASTER_PRIV_FILE \
+ -V "${MASTER_PRIV_FILE}"
# Load database
full_reload
@@ -1841,7 +2122,7 @@ check_with_database()
fail=0
for i in $TESTS
do
- test_$i
+ "test_$i"
if test 0 != $fail
then
break
@@ -1854,61 +2135,121 @@ check_with_database()
-
-
# *************** Main logic starts here **************
# ####### Setup globals ######
-# Postgres database to use
-DB=auditor-basedb
-
-# Configuration file to use
-CONF=${DB}.conf
+# Postgres database to use (must match configuration file)
+export DB="auditor-basedb"
# test required commands exist
echo "Testing for jq"
jq -h > /dev/null || exit_skip "jq required"
-echo "Testing for taler-bank-manage"
-taler-bank-manage --help >/dev/null </dev/null || exit_skip "taler-bank-manage required"
+echo "Testing for faketime"
+faketime -h > /dev/null || exit_skip "faketime required"
+# NOTE: really check for all three libeufin commands?
+echo "Testing for libeufin"
+libeufin-bank --help >/dev/null 2> /dev/null </dev/null || exit_skip "libeufin required"
echo "Testing for pdflatex"
which pdflatex > /dev/null </dev/null || exit_skip "pdflatex required"
+echo "Testing for taler-wallet-cli"
+taler-wallet-cli -h >/dev/null </dev/null 2>/dev/null || exit_skip "taler-wallet-cli required"
-# check if we should regenerate the database
-if test -n "${1:-}"
-then
- echo "Custom run, will only run on existing DB."
+
+echo -n "Testing for Postgres"
+# Available directly in path?
+INITDB_BIN=$(command -v initdb) || true
+if [[ -n "$INITDB_BIN" ]]; then
+ echo " FOUND (in path) at $INITDB_BIN"
else
- echo -n "Testing for taler-wallet-cli"
- if taler-wallet-cli -h >/dev/null </dev/null 2>/dev/null
+ HAVE_INITDB=$(find /usr -name "initdb" 2> /dev/null \
+ | head -1 2> /dev/null \
+ | grep postgres) \
+ || exit_skip " MISSING"
+ echo " FOUND at $(dirname "$HAVE_INITDB")"
+ INITDB_BIN=$(echo "$HAVE_INITDB" | grep bin/initdb | grep postgres | sort -n | tail -n1)
+fi
+POSTGRES_PATH=$(dirname "$INITDB_BIN")
+
+MY_TMP_DIR=$(mktemp -d /tmp/taler-auditor-basedbXXXXXX)
+echo "Using $MY_TMP_DIR for logging and temporary data"
+TMPDIR="$MY_TMP_DIR/postgres"
+mkdir -p "$TMPDIR"
+echo -n "Setting up Postgres DB at $TMPDIR ..."
+$INITDB_BIN \
+ --no-sync \
+ --auth=trust \
+ -D "${TMPDIR}" \
+ > "${MY_TMP_DIR}/postgres-dbinit.log" \
+ 2> "${MY_TMP_DIR}/postgres-dbinit.err"
+echo "DONE"
+
+# Once we move to PG16, we can use:
+# --set listen_addresses='' \
+# --set fsync=off \
+# --set max_wal_senders=0 \
+# --set synchronous_commit=off \
+# --set wal_level=minimal \
+# --set unix_socket_directories="${TMPDIR}/sockets" \
+
+
+SOCKETDIR="${TMPDIR}/sockets"
+mkdir "${SOCKETDIR}"
+
+echo -n "Launching Postgres service"
+
+cat - >> "$TMPDIR/postgresql.conf" <<EOF
+unix_socket_directories='${TMPDIR}/sockets'
+fsync=off
+max_wal_senders=0
+synchronous_commit=off
+wal_level=minimal
+listen_addresses=''
+EOF
+
+grep -v host \
+ < "$TMPDIR/pg_hba.conf" \
+ > "$TMPDIR/pg_hba.conf.new"
+mv "$TMPDIR/pg_hba.conf.new" "$TMPDIR/pg_hba.conf"
+"${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l "${MY_TMP_DIR}/postgres.log" \
+ start \
+ > "${MY_TMP_DIR}/postgres-start.log" \
+ 2> "${MY_TMP_DIR}/postgres-start.err"
+echo " DONE"
+PGHOST="$TMPDIR/sockets"
+export PGHOST
+MYDIR="${MY_TMP_DIR}/basedb"
+mkdir -p "${MYDIR}"
+
+if [ -z $REUSE_BASEDB_DIR ]
+then
+ echo "Generating fresh database at $MYDIR"
+
+ if faketime -f '-1 d' ./generate-auditor-basedb.sh -d "$MYDIR/$DB"
then
- MYDIR=`mktemp -d /tmp/taler-auditor-basedbXXXXXX`
- echo " FOUND. Generating fresh database at $MYDIR"
- pwd
- if ./generate-auditor-basedb.sh $MYDIR/basedb
- then
- check_with_database $MYDIR/basedb
- if test x$fail != x0
- then
- exit $fail
- else
- echo "Cleaning up $MYDIR..."
- rm -rf $MYDIR || echo "Removing $MYDIR failed"
- fi
- else
- echo "Generation failed, running only on existing DB"
- fi
+ echo -n "Reset 'auditor-basedb' database at $PGHOST ..."
+ dropdb "auditor-basedb" >/dev/null 2>/dev/null || true
+ createdb "auditor-basedb" || exit_skip "Could not create database '$BASEDB' at $PGHOST"
+ echo " DONE"
else
- echo " NOT FOUND, running only on existing DB"
+ echo "Generation failed"
+ exit 1
fi
+else
+ echo "Reusing existing database from ${REUSE_BASEDB_DIR}"
+ cp -r "${REUSE_BASEDB_DIR}/basedb"/* "${MYDIR}/"
fi
-# run tests with pre-build database, if one is available
-if test -r auditor-basedb.mpub
+check_with_database "$MYDIR/$DB"
+if [ "$fail" != "0" ]
then
- check_with_database "auditor-basedb"
-else
- echo "Lacking auditor-basedb.mpub, skipping test"
- fail=77
+ exit "$fail"
+fi
+
+if [ -z $REUSE_BASEDB_DIR ]
+then
+ echo "Run 'export REUSE_BASEDB_DIR=${MY_TMP_DIR}' to re-run tests against the same database"
fi
-exit $fail
+exit 0
diff --git a/src/auditor/test-kyc.sh b/src/auditor/test-kyc.sh
new file mode 100755
index 000000000..2c4fa6594
--- /dev/null
+++ b/src/auditor/test-kyc.sh
@@ -0,0 +1,751 @@
+#!/bin/bash
+#
+# This file is part of TALER
+# Copyright (C) 2014-2023 Taler Systems SA
+#
+# TALER is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+#
+# TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/license>
+#
+#
+# shellcheck disable=SC2317
+# shellcheck disable=SC1091
+#
+#
+# Setup database which was generated from a perfectly normal
+# exchange-wallet interaction with KYC enabled and transactions
+# blocked due to KYC and run the auditor against it.
+#
+# Check that the auditor report is as expected.
+#
+# Requires 'jq' tool and Postgres superuser rights!
+#
+set -eu
+#set -x
+
+# Set of numbers for all the testcases.
+# When adding new tests, increase the last number:
+ALL_TESTS=$(seq 0 1)
+
+# $TESTS determines which tests we should run.
+# This construction is used to make it easy to
+# only run a subset of the tests. To only run a subset,
+# pass the numbers of the tests to run as the FIRST
+# argument to test-kyc.sh, i.e.:
+#
+# $ test-kyc.sh "1 3"
+#
+# to run tests 1 and 3 only. By default, all tests are run.
+#
+TESTS=${1:-$ALL_TESTS}
+
+# Global variable to run the auditor processes under valgrind
+# VALGRIND=valgrind
+VALGRIND=""
+
+# Number of seconds to let libeuifn background
+# tasks apply a cycle of payment submission and
+# history request.
+LIBEUFIN_SETTLE_TIME=1
+
+. setup.sh
+
+
+# Cleanup exchange and libeufin between runs.
+function cleanup()
+{
+ if test ! -z "${EPID:-}"
+ then
+ echo -n "Stopping exchange $EPID..."
+ kill -TERM "$EPID"
+ wait "$EPID" || true
+ echo "DONE"
+ unset EPID
+ fi
+ stop_libeufin
+}
+
+# Cleanup to run whenever we exit
+function exit_cleanup()
+{
+ echo "Running exit-cleanup"
+ if test ! -z "${POSTGRES_PATH:-}"
+ then
+ echo "Stopping Postgres at ${POSTGRES_PATH}"
+ "${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ stop \
+ &> /dev/null \
+ || true
+ fi
+ cleanup
+ for n in $(jobs -p)
+ do
+ kill "$n" 2> /dev/null || true
+ done
+ wait || true
+ echo "DONE"
+}
+
+# Install cleanup handler (except for kill -9)
+trap exit_cleanup EXIT
+
+
+
+# Operations to run before the actual audit
+function pre_audit () {
+ # Launch bank
+ echo -n "Launching bank"
+ launch_libeufin
+ for n in $(seq 1 80)
+ do
+ echo -n "."
+ sleep 0.1
+ OK=1
+ wget http://localhost:18082/ \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null \
+ && break
+ OK=0
+ done
+ if [ 1 != "$OK" ]
+ then
+ exit_skip "Failed to launch Sandbox"
+ fi
+ sleep "$LIBEUFIN_SETTLE_TIME"
+ for n in $(seq 1 80)
+ do
+ echo -n "."
+ sleep 0.1
+ OK=1
+ wget http://localhost:8082/ \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null \
+ && break
+ OK=0
+ done
+ if [ 1 != "$OK" ]
+ then
+ exit_skip "Failed to launch Nexus"
+ fi
+ echo " DONE"
+ if test "${1:-no}" = "aggregator"
+ then
+ echo -n "Running exchange aggregator ..."
+ taler-exchange-aggregator \
+ -y \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/aggregator.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+ echo -n "Running exchange closer ..."
+ taler-exchange-closer \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/closer.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+ echo -n "Running exchange transfer ..."
+ taler-exchange-transfer \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/transfer.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+ fi
+}
+
+# actual audit run
+function audit_only () {
+ # Run the auditor!
+ echo -n "Running audit(s) ..."
+
+ # Restart so that first run is always fresh, and second one is incremental
+ taler-auditor-dbinit \
+ -r \
+ -c "$CONF"
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-aggregation.json \
+ 2> "${MY_TMP_DIR}/test-audit-aggregation.log" \
+ || exit_fail "aggregation audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-aggregation-inc.json \
+ 2> "${MY_TMP_DIR}/test-audit-aggregation-inc.log" \
+ || exit_fail "incremental aggregation audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-coins \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-coins.json \
+ 2> "${MY_TMP_DIR}/test-audit-coins.log" \
+ || exit_fail "coin audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-coins \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-coins-inc.json \
+ 2> "${MY_TMP_DIR}/test-audit-coins-inc.log" \
+ || exit_fail "incremental coin audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-deposits \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-deposits.json \
+ 2> "${MY_TMP_DIR}/test-audit-deposits.log" \
+ || exit_fail "deposits audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-deposits \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-deposits-inc.json \
+ 2> "${MY_TMP_DIR}/test-audit-deposits-inc.log" \
+ || exit_fail "incremental deposits audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-reserves.json \
+ 2> "${MY_TMP_DIR}/test-audit-reserves.log" \
+ || exit_fail "reserves audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-reserves-inc.json \
+ 2> "${MY_TMP_DIR}/test-audit-reserves-inc.log" \
+ || exit_fail "incremental reserves audit failed"
+ echo -n "."
+ rm -f "${MY_TMP_DIR}/test-wire-audit.log"
+ thaw() {
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-wire.json \
+ 2>> "${MY_TMP_DIR}/test-wire-audit.log"
+ }
+ thaw || ( echo -e " FIRST CALL TO taler-helper-auditor-wire FAILED,\nRETRY AFTER TWO SECONDS..." | tee -a "${MY_TMP_DIR}/test-wire-audit.log"
+ sleep 2
+ thaw || exit_fail "wire audit failed" )
+ echo -n "."
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-wire-inc.json \
+ 2> "${MY_TMP_DIR}/test-wire-audit-inc.log" \
+ || exit_fail "wire audit inc failed"
+ echo -n "."
+
+ echo " DONE"
+}
+
+
+# Cleanup to run after the auditor
+function post_audit () {
+ taler-exchange-dbinit \
+ -c "$CONF" \
+ -g \
+ || exit_fail "exchange DB GC failed"
+
+ cleanup
+ echo -n "TeXing ."
+ taler-helper-auditor-render.py \
+ test-audit-aggregation.json \
+ test-audit-coins.json \
+ test-audit-deposits.json \
+ test-audit-reserves.json \
+ test-audit-wire.json \
+ < ../../contrib/auditor-report.tex.j2 \
+ > test-report.tex \
+ || exit_fail "Renderer failed"
+
+ echo -n "."
+ timeout 10 pdflatex test-report.tex \
+ >/dev/null \
+ || exit_fail "pdflatex failed"
+ echo -n "."
+ timeout 10 pdflatex test-report.tex \
+ >/dev/null
+ echo " DONE"
+}
+
+
+# Run audit process on current database, including report
+# generation. Pass "aggregator" as $1 to run
+# $ taler-exchange-aggregator
+# before auditor (to trigger pending wire transfers).
+# Pass "drain" as $2 to run a drain operation as well.
+function run_audit () {
+ pre_audit "${1:-no}"
+ if test "${2:-no}" = "drain"
+ then
+ echo -n "Starting exchange..."
+ taler-exchange-httpd \
+ -c "${CONF}" \
+ -L INFO \
+ 2> "${MY_TMP_DIR}/exchange-httpd-drain.err" &
+ EPID=$!
+
+ # Wait for all services to be available
+ for n in $(seq 1 50)
+ do
+ echo -n "."
+ sleep 0.1
+ OK=0
+ # exchange
+ wget "http://localhost:8081/seed" \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null \
+ || continue
+ OK=1
+ break
+ done
+ echo "... DONE."
+ export CONF
+
+ echo -n "Running taler-exchange-offline drain "
+
+ taler-exchange-offline \
+ -L DEBUG \
+ -c "${CONF}" \
+ drain TESTKUDOS:0.1 \
+ exchange-account-1 payto://iban/SANDBOXX/DE360679?receiver-name=Exchange+Drain \
+ upload \
+ 2> "${MY_TMP_DIR}/taler-exchange-offline-drain.log" \
+ || exit_fail "offline draining failed"
+ kill -TERM "$EPID"
+ wait "$EPID" || true
+ unset EPID
+ echo -n "Running taler-exchange-drain ..."
+ printf "\n" | taler-exchange-drain \
+ -L DEBUG \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/taler-exchange-drain.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+
+ echo -n "Running taler-exchange-transfer ..."
+ taler-exchange-transfer \
+ -L INFO \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/drain-transfer.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+
+ audit_only
+ post_audit
+}
+
+
+# Do a full reload of the (original) database
+function full_reload()
+{
+ echo -n "Doing full reload of the database (loading ${BASEDB}.sql into $DB at $PGHOST)... "
+ dropdb "$DB" 2> /dev/null || true
+ createdb -T template0 "$DB" \
+ || exit_skip "could not create database $DB (at $PGHOST)"
+ # Import pre-generated database, -q(ietly) using single (-1) transaction
+ psql -Aqt "$DB" \
+ -q \
+ -1 \
+ -f "${BASEDB}.sql" \
+ > /dev/null \
+ || exit_skip "Failed to load database $DB from ${BASEDB}.sql"
+ echo "DONE"
+ # Technically, this call shouldn't be needed as libeufin should already be stopped here...
+ stop_libeufin
+}
+
+
+function test_0() {
+
+ echo "===========0: normal run with aggregator==========="
+ run_audit aggregator
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
+ echo -n "Test for deposit confirmation emergencies... "
+ jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+
+ echo PASS
+
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
+ fi
+
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
+ echo "PASS"
+
+ echo -n "Checking for unexpected arithmetic differences "
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
+ fi
+
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
+ echo "PASS"
+
+ echo -n "Checking for unexpected wire out differences "
+ jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
+ echo "PASS"
+
+ # cannot easily undo aggregator, hence full reload
+ full_reload
+
+}
+
+
+# Run without aggregator, hence auditor should detect wire
+# transfer lag!
+function test_1() {
+
+ echo "===========1: normal run==========="
+ run_audit
+
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency detected in ordinary run";
+ echo "PASS"
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency by count detected in ordinary run"
+ echo "PASS"
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+
+ echo "PASS"
+
+ echo -n "Check for lag detection... "
+
+ # Check wire transfer lag reported (no aggregator!)
+ # NOTE: This test is EXPECTED to fail for ~1h after
+ # re-generating the test database as we do not
+ # report lag of less than 1h (see GRACE_PERIOD in
+ # taler-helper-auditor-wire.c)
+ jq -e .lag_details[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ || exit_fail "Lag not detected in run without aggregator"
+
+ LAG=$(jq -r .total_amount_lag < test-audit-wire.json)
+ if [ "$LAG" = "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total lag to be non-zero"
+ fi
+ echo "PASS"
+
+
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
+ # Database was unmodified, no need to undo
+ echo "OK"
+}
+
+
+
+# *************** Main test loop starts here **************
+
+
+# Run all the tests against the database given in $1.
+# Sets $fail to 0 on success, non-zero on failure.
+function check_with_database()
+{
+ BASEDB="$1"
+ CONF="$1.conf"
+ echo "Running test suite with database $BASEDB using configuration $CONF"
+ MASTER_PRIV_FILE="${BASEDB}.mpriv"
+ taler-config \
+ -f \
+ -c "${CONF}" \
+ -s exchange-offline \
+ -o MASTER_PRIV_FILE \
+ -V "${MASTER_PRIV_FILE}"
+ MASTER_PUB=$(gnunet-ecc -p "$MASTER_PRIV_FILE")
+
+ echo "MASTER PUB is ${MASTER_PUB} using file ${MASTER_PRIV_FILE}"
+
+ # Load database
+ full_reload
+
+ # Run test suite
+ fail=0
+ for i in $TESTS
+ do
+ "test_$i"
+ if test 0 != $fail
+ then
+ break
+ fi
+ done
+ echo "Cleanup (disabled, leaving database $DB behind)"
+ # dropdb $DB
+}
+
+
+
+
+# *************** Main logic starts here **************
+
+# ####### Setup globals ######
+# Postgres database to use (must match configuration file)
+export DB="auditor-basedb"
+
+# test required commands exist
+echo "Testing for jq"
+jq -h > /dev/null || exit_skip "jq required"
+echo "Testing for faketime"
+faketime -h > /dev/null || exit_skip "faketime required"
+# NOTE: really check for all three libeufin commands?
+echo "Testing for libeufin-bank"
+libeufin-bank --help >/dev/null 2> /dev/null </dev/null || exit_skip "libeufin-bank required"
+echo "Testing for pdflatex"
+which pdflatex > /dev/null </dev/null || exit_skip "pdflatex required"
+echo "Testing for taler-wallet-cli"
+taler-wallet-cli -h >/dev/null </dev/null 2>/dev/null || exit_skip "taler-wallet-cli required"
+
+
+echo -n "Testing for Postgres"
+# Available directly in path?
+INITDB_BIN=$(command -v initdb) || true
+if [[ -n "$INITDB_BIN" ]]; then
+ echo " FOUND (in path) at $INITDB_BIN"
+else
+ HAVE_INITDB=$(find /usr -name "initdb" | head -1 2> /dev/null | grep postgres) \
+ || exit_skip " MISSING"
+ echo " FOUND at $(dirname "$HAVE_INITDB")"
+ INITDB_BIN=$(echo "$HAVE_INITDB" | grep bin/initdb | grep postgres | sort -n | tail -n1)
+fi
+POSTGRES_PATH=$(dirname "$INITDB_BIN")
+
+MY_TMP_DIR=$(mktemp -d /tmp/taler-auditor-basedbXXXXXX)
+echo "Using $MY_TMP_DIR for logging and temporary data"
+TMPDIR="$MY_TMP_DIR/postgres"
+mkdir -p "$TMPDIR"
+echo -n "Setting up Postgres DB at $TMPDIR ..."
+$INITDB_BIN \
+ --no-sync \
+ --auth=trust \
+ -D "${TMPDIR}" \
+ > "${MY_TMP_DIR}/postgres-dbinit.log" \
+ 2> "${MY_TMP_DIR}/postgres-dbinit.err"
+echo "DONE"
+SOCKETDIR="${TMPDIR}/sockets"
+mkdir "${SOCKETDIR}"
+echo -n "Launching Postgres service"
+cat - >> "$TMPDIR/postgresql.conf" <<EOF
+unix_socket_directories='${TMPDIR}/sockets'
+fsync=off
+max_wal_senders=0
+synchronous_commit=off
+wal_level=minimal
+listen_addresses=''
+EOF
+grep -v host \
+ < "$TMPDIR/pg_hba.conf" \
+ > "$TMPDIR/pg_hba.conf.new"
+mv "$TMPDIR/pg_hba.conf.new" "$TMPDIR/pg_hba.conf"
+"${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ start \
+ > "${MY_TMP_DIR}/postgres-start.log" \
+ 2> "${MY_TMP_DIR}/postgres-start.err"
+echo " DONE"
+PGHOST="$TMPDIR/sockets"
+export PGHOST
+
+MYDIR="${MY_TMP_DIR}/basedb"
+mkdir -p "${MYDIR}"
+echo "Generating fresh database at $MYDIR"
+if faketime -f '-1 d' ./generate-auditor-basedb.sh \
+ -c generate-kyc-basedb.conf \
+ -d "$MYDIR/$DB"
+then
+ echo -n "Reset 'auditor-basedb' database at $PGHOST ..."
+ dropdb "auditor-basedb" >/dev/null 2>/dev/null || true
+ createdb "auditor-basedb" || exit_skip "Could not create database '$BASEDB' at $PGHOST"
+ echo " DONE"
+ check_with_database "$MYDIR/$DB"
+ if [ "$fail" != "0" ]
+ then
+ exit "$fail"
+ fi
+else
+ echo "Generation failed"
+ exit 1
+fi
+
+exit 0
diff --git a/src/auditor/test-revocation.sh b/src/auditor/test-revocation.sh
index 9453c4458..277b102fb 100755
--- a/src/auditor/test-revocation.sh
+++ b/src/auditor/test-revocation.sh
@@ -1,15 +1,33 @@
#!/bin/bash
+#
+# This file is part of TALER
+# Copyright (C) 2014-2022 Taler Systems SA
+#
+# TALER is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+#
+# TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/license>
+#
# Setup database which was generated from a exchange-wallet interaction
# with revocations and run the auditor against it.
#
# Check that the auditor report is as expected.
#
+# shellcheck disable=SC2317
+#
# Requires 'jq' tool and Postgres superuser rights!
set -eu
+# set -x
# Set of numbers for all the testcases.
# When adding new tests, increase the last number:
-ALL_TESTS=`seq 0 4`
+ALL_TESTS=$(seq 0 4)
# $TESTS determines which tests we should run.
# This construction is used to make it easy to
@@ -26,63 +44,114 @@ TESTS=${1:-$ALL_TESTS}
# Global variable to run the auditor processes under valgrind
# VALGRIND=valgrind
VALGRIND=""
+LOGLEVEL="INFO"
-# Exit, with status code "skip" (no 'real' failure)
-function exit_skip() {
- echo $1
- exit 77
-}
+. setup.sh
-# Exit, with error message (hard failure)
-function exit_fail() {
- echo $1
- exit 1
+# Cleanup to run whenever we exit
+function cleanup()
+{
+ if [ ! -z "${EPID:-}" ]
+ then
+ echo -n "Stopping exchange $EPID..."
+ kill -TERM "$EPID"
+ wait "$EPID"
+ echo " DONE"
+ unset EPID
+ fi
+ stop_libeufin
}
# Cleanup to run whenever we exit
-function cleanup()
+function exit_cleanup()
{
- for n in `jobs -p`
+ echo "Running exit-cleanup"
+ if [ ! -z "${POSTGRES_PATH:-}" ]
+ then
+ echo "Stopping Postgres at ${POSTGRES_PATH}"
+ "${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ stop \
+ &> /dev/null \
+ || true
+ fi
+ cleanup
+ for n in $(jobs -p)
do
- kill $n 2> /dev/null || true
+ kill "$n" 2> /dev/null || true
done
wait
+ echo "DONE"
}
# Install cleanup handler (except for kill -9)
-trap cleanup EXIT
+trap exit_cleanup EXIT
# Operations to run before the actual audit
function pre_audit () {
# Launch bank
echo -n "Launching bank "
- taler-bank-manage-testing $CONF postgres:///$DB serve 2>bank.err >bank.log &
- for n in `seq 1 80`
+ launch_libeufin
+ for n in $(seq 1 80)
+ do
+ echo -n "."
+ sleep 0.1
+ OK=1
+ wget http://localhost:18082/ \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null && break
+ OK=0
+ done
+ if [ 1 != "$OK" ]
+ then
+ exit_skip "Failed to launch Sandbox"
+ fi
+ for n in $(seq 1 80)
do
echo -n "."
sleep 0.1
OK=1
- wget http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null && break
+ wget http://localhost:8082/ \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null && break
OK=0
done
- if [ 1 != $OK ]
+ if [ 1 != "$OK" ]
then
- exit_skip "Failed to launch bank"
+ exit_skip "Failed to launch Nexus"
fi
echo " DONE"
-
- if test ${1:-no} = "aggregator"
+ if [ "${1:-no}" = "aggregator" ]
then
export CONF
- echo -n "Running exchange aggregator ..."
- taler-exchange-aggregator -L INFO -t -c $CONF -y 2> aggregator.log || exit_fail "FAIL"
+ echo -n "Running exchange aggregator ... (config: $CONF)"
+ taler-exchange-aggregator \
+ -L "$LOGLEVEL" \
+ -t \
+ -c "$CONF" \
+ -y \
+ 2> "${MY_TMP_DIR}/aggregator.log" \
+ || exit_fail "FAIL"
echo " DONE"
echo -n "Running exchange closer ..."
- taler-exchange-closer -L INFO -t -c $CONF 2> closer.log || exit_fail "FAIL"
+ taler-exchange-closer \
+ -L "$LOGLEVEL" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/closer.log" \
+ || exit_fail "FAIL"
echo " DONE"
echo -n "Running exchange transfer ..."
- taler-exchange-transfer -L INFO -t -c $CONF 2> transfer.log || exit_fail "FAIL"
+ taler-exchange-transfer \
+ -L "$LOGLEVEL" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/transfer.log" \
+ || exit_fail "FAIL"
echo " DONE"
fi
}
@@ -90,47 +159,120 @@ function pre_audit () {
# actual audit run
function audit_only () {
# Run the auditor!
- echo -n "Running audit(s) ..."
+ echo -n "Running audit(s) ... (conf is $CONF)"
# Restart so that first run is always fresh, and second one is incremental
- taler-auditor-dbinit -r -c $CONF
- $VALGRIND taler-helper-auditor-aggregation -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-aggregation.json 2> test-audit-aggregation.log || exit_fail "aggregation audit failed"
+ taler-auditor-dbinit \
+ -r \
+ -c "$CONF"
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-aggregation.json \
+ 2> test-audit-aggregation.log \
+ || exit_fail "aggregation audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-aggregation -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-aggregation-inc.json 2> test-audit-aggregation-inc.log || exit_fail "incremental aggregation audit failed"
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-aggregation-inc.json \
+ 2> test-audit-aggregation-inc.log \
+ || exit_fail "incremental aggregation audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-coins -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-coins.json 2> test-audit-coins.log || exit_fail "coin audit failed"
+ $VALGRIND taler-helper-auditor-coins \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-coins.json \
+ 2> test-audit-coins.log \
+ || exit_fail "coin audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-coins -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-coins-inc.json 2> test-audit-coins-inc.log || exit_fail "incremental coin audit failed"
+ $VALGRIND taler-helper-auditor-coins \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-coins-inc.json \
+ 2> test-audit-coins-inc.log \
+ || exit_fail "incremental coin audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-deposits -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-deposits.json 2> test-audit-deposits.log || exit_fail "deposits audit failed"
+ $VALGRIND taler-helper-auditor-deposits \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-deposits.json \
+ 2> test-audit-deposits.log \
+ || exit_fail "deposits audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-deposits -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-deposits-inc.json 2> test-audit-deposits-inc.log || exit_fail "incremental deposits audit failed"
+ $VALGRIND taler-helper-auditor-deposits \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-deposits-inc.json \
+ 2> test-audit-deposits-inc.log \
+ || exit_fail "incremental deposits audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-reserves -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-reserves.json 2> test-audit-reserves.log || exit_fail "reserves audit failed"
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-reserves.json \
+ 2> test-audit-reserves.log \
+ || exit_fail "reserves audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-reserves -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-reserves-inc.json 2> test-audit-reserves-inc.log || exit_fail "incremental reserves audit failed"
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-reserves-inc.json \
+ 2> test-audit-reserves-inc.log \
+ || exit_fail "incremental reserves audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-wire -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-wire.json 2> test-wire-audit.log || exit_fail "wire audit failed"
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-wire.json \
+ 2> test-wire-audit.log \
+ || exit_fail "wire audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-wire -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-wire-inc.json 2> test-wire-audit-inc.log || exit_fail "wire audit failed"
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-wire-inc.json \
+ 2> test-wire-audit-inc.log \
+ || exit_fail "wire audit failed"
echo -n "."
-
echo " DONE"
}
# Cleanup to run after the auditor
function post_audit () {
- echo -n "Cleanup ..."
cleanup
- echo " DONE"
echo -n "TeXing ."
- taler-helper-auditor-render.py test-audit-aggregation.json test-audit-coins.json test-audit-deposits.json test-audit-reserves.json test-audit-wire.json < ../../contrib/auditor-report.tex.j2 > test-report.tex || exit_fail "Renderer failed"
-
+ taler-helper-auditor-render.py \
+ test-audit-aggregation.json \
+ test-audit-coins.json \
+ test-audit-deposits.json \
+ test-audit-reserves.json \
+ test-audit-wire.json \
+ < ../../contrib/auditor-report.tex.j2 \
+ > test-report.tex \
+ || exit_fail "Renderer failed"
echo -n "."
- timeout 10 pdflatex test-report.tex >/dev/null || exit_fail "pdflatex failed"
+ timeout 10 pdflatex test-report.tex \
+ >/dev/null \
+ || exit_fail "pdflatex failed"
echo -n "."
- timeout 10 pdflatex test-report.tex >/dev/null
+ timeout 10 pdflatex test-report.tex \
+ >/dev/null
echo " DONE"
}
@@ -140,143 +282,158 @@ function post_audit () {
# $ taler-exchange-aggregator
# before auditor (to trigger pending wire transfers).
function run_audit () {
- pre_audit ${1:-no}
+ pre_audit "${1:-no}"
audit_only
post_audit
-
}
# Do a full reload of the (original) database
-full_reload()
+function full_reload()
{
echo -n "Doing full reload of the database... "
- dropdb $DB 2> /dev/null || true
- createdb -T template0 $DB || exit_skip "could not create database"
+ dropdb "$DB" 2> /dev/null || true
+ createdb -T template0 "$DB" \
+ || exit_skip "could not create database $DB (at $PGHOST)"
# Import pre-generated database, -q(ietly) using single (-1) transaction
- psql -Aqt $DB -q -1 -f ${BASEDB}.sql > /dev/null || exit_skip "Failed to load database"
+ psql -Aqt "$DB" \
+ -q \
+ -1 \
+ -f "${BASEDB}.sql" \
+ > /dev/null \
+ || exit_skip "Failed to load database $DB from ${BASEDB}.sql"
echo "DONE"
}
function test_0() {
+ echo "===========0: normal run with aggregator==========="
+ run_audit aggregator
+
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
+ echo -n "Test for deposit confirmation emergencies... "
+ jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+
+ echo PASS
+
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
+ fi
-echo "===========0: normal run with aggregator==========="
-run_audit aggregator
-
-echo "Checking output"
-# if an emergency was detected, that is a bug and we should fail
-echo -n "Test for emergencies... "
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
-echo -n "Test for deposit confirmation emergencies... "
-jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
-echo -n "Test for emergencies by count... "
-jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
-
-echo -n "Test for wire inconsistencies... "
-jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
-jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
-jq -e .missattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected missattribution inconsistency detected in ordinary run"
-jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
-jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
-jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
-jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
-jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
-
-
-# TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
-# TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
-
-echo PASS
-
-LOSS=`jq -r .total_bad_sig_loss < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
-fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
-fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
-fi
-
-echo -n "Test for wire amounts... "
-WIRED=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_missattribution_in < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total missattribution in wrong, got $WIRED"
-fi
-echo PASS
-
-echo -n "Checking for unexpected arithmetic differences "
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
-fi
-
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
-echo PASS
-
-echo -n "Checking for unexpected wire out differences "
-jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
-echo PASS
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
+ echo "PASS"
-# cannot easily undo aggregator, hence full reload
-full_reload
+ echo -n "Checking for unexpected arithmetic differences "
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
+ fi
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-reserves.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
+ echo "PASS"
+
+ echo -n "Checking for unexpected wire out differences "
+ jq -e .wire_out_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
+ echo "PASS"
+
+ # cannot easily undo aggregator, hence full reload
+ full_reload
}
@@ -284,58 +441,84 @@ full_reload
# transfer lag!
function test_1() {
-echo "===========1: normal run==========="
-run_audit
-
-echo "Checking output"
-# if an emergency was detected, that is a bug and we should fail
-echo -n "Test for emergencies... "
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
-echo -n "Test for emergencies by count... "
-jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
-
-echo -n "Test for wire inconsistencies... "
-jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
-jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
-jq -e .missattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected missattribution inconsistency detected in ordinary run"
-jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
-jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
-jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
-
-# TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
-# TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
-
-echo PASS
-
-echo -n "Test for wire amounts... "
-WIRED=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_missattribution_in < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total missattribution in wrong, got $WIRED"
-fi
+ echo "===========1: normal run==========="
+ run_audit
+
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency detected in ordinary run" \
+ || echo "PASS"
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency by count detected in ordinary run" \
+ || echo "PASS"
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+
+ echo "PASS"
+
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
-# Database was unmodified, no need to undo
-echo "OK"
+ # Database was unmodified, no need to undo
+ echo "OK"
}
@@ -343,38 +526,38 @@ echo "OK"
# Change recoup amount
function test_2() {
-echo "===========2: recoup amount inconsistency==========="
-echo "UPDATE recoup SET amount_val=5 WHERE recoup_uuid=1" | psql -Aqt $DB
+ echo "===========2: recoup amount inconsistency==========="
+ echo "UPDATE exchange.recoup SET amount_val=5 WHERE recoup_uuid=1" | psql -Aqt "$DB"
-run_audit
+ run_audit
-# Reserve balance is now wrong
-echo -n "Testing inconsistency detection... "
-AMOUNT=`jq -r .reserve_balance_summary_wrong_inconsistencies[0].auditor < test-audit-reserves.json`
-if test $AMOUNT != "TESTKUDOS:3"
-then
- exit_fail "Reserve auditor amount $AMOUNT is wrong"
-fi
-AMOUNT=`jq -r .reserve_balance_summary_wrong_inconsistencies[0].exchange < test-audit-reserves.json`
-if test $AMOUNT != "TESTKUDOS:0"
-then
- exit_fail "Reserve exchange amount $AMOUNT is wrong"
-fi
-# Coin spent exceeded coin's value
-AMOUNT=`jq -r .amount_arithmetic_inconsistencies[0].auditor < test-audit-coins.json`
-if test $AMOUNT != "TESTKUDOS:2"
-then
- exit_fail "Coin auditor amount $AMOUNT is wrong"
-fi
-AMOUNT=`jq -r .amount_arithmetic_inconsistencies[0].exchange < test-audit-coins.json`
-if test $AMOUNT != "TESTKUDOS:5"
-then
- exit_fail "Coin exchange amount $AMOUNT is wrong"
-fi
-echo OK
+ # Reserve balance is now wrong
+ echo -n "Testing inconsistency detection... "
+ AMOUNT=$(jq -r .reserve_balance_summary_wrong_inconsistencies[0].auditor < test-audit-reserves.json)
+ if [ "$AMOUNT" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Reserve auditor amount $AMOUNT is wrong"
+ fi
+ AMOUNT=$(jq -r .reserve_balance_summary_wrong_inconsistencies[0].exchange < test-audit-reserves.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Reserve exchange amount $AMOUNT is wrong"
+ fi
+ # Coin spent exceeded coin's value
+ AMOUNT=$(jq -r .amount_arithmetic_inconsistencies[0].auditor < test-audit-coins.json)
+ if [ "$AMOUNT" != "TESTKUDOS:2" ]
+ then
+ exit_fail "Coin auditor amount $AMOUNT is wrong"
+ fi
+ AMOUNT=$(jq -r .amount_arithmetic_inconsistencies[0].exchange < test-audit-coins.json)
+ if [ "$AMOUNT" != "TESTKUDOS:5" ]
+ then
+ exit_fail "Coin exchange amount $AMOUNT is wrong"
+ fi
+ echo "OK"
-# Undo database modification
-echo "UPDATE recoup SET amount_val=2 WHERE recoup_uuid=1" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE exchange.recoup SET amount_val=2 WHERE recoup_uuid=1" | psql -Aqt "$DB"
}
@@ -382,27 +565,27 @@ echo "UPDATE recoup SET amount_val=2 WHERE recoup_uuid=1" | psql -Aqt $DB
# Change recoup-refresh amount
function test_3() {
-echo "===========3: recoup-refresh amount inconsistency==========="
-echo "UPDATE recoup_refresh SET amount_val=5 WHERE recoup_refresh_uuid=1" | psql -Aqt $DB
+ echo "===========3: recoup-refresh amount inconsistency==========="
+ echo "UPDATE exchange.recoup_refresh SET amount_val=5 WHERE recoup_refresh_uuid=1" | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-# Coin spent exceeded coin's value
-AMOUNT=`jq -r .total_arithmetic_delta_minus < test-audit-coins.json`
-if test $AMOUNT != "TESTKUDOS:5"
-then
- exit_fail "Arithmetic delta minus amount $AMOUNT is wrong"
-fi
-AMOUNT=`jq -r .total_arithmetic_delta_plus < test-audit-coins.json`
-if test $AMOUNT != "TESTKUDOS:0"
-then
- exit_fail "Arithmetic delta plus amount $AMOUNT is wrong"
-fi
-echo OK
+ echo -n "Testing inconsistency detection... "
+ # Coin spent exceeded coin's value
+ AMOUNT=$(jq -r .total_arithmetic_delta_minus < test-audit-coins.json)
+ if [ "$AMOUNT" != "TESTKUDOS:5" ]
+ then
+ exit_fail "Arithmetic delta minus amount $AMOUNT is wrong"
+ fi
+ AMOUNT=$(jq -r .total_arithmetic_delta_plus < test-audit-coins.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Arithmetic delta plus amount $AMOUNT is wrong"
+ fi
+ echo "OK"
-# Undo database modification
-echo "UPDATE recoup_refresh SET amount_val=0 WHERE recoup_refresh_uuid=1" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE exchange.recoup_refresh SET amount_val=0 WHERE recoup_refresh_uuid=1" | psql -Aqt "$DB"
}
@@ -410,72 +593,68 @@ echo "UPDATE recoup_refresh SET amount_val=0 WHERE recoup_refresh_uuid=1" | psql
# Void recoup-refresh entry by 'unrevoking' denomination
function test_4() {
-echo "===========4: invalid recoup==========="
-echo "DELETE FROM denomination_revocations;" | psql -Aqt $DB
+ echo "===========4: invalid recoup==========="
+ echo "DELETE FROM exchange.denomination_revocations;" | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-# Coin spent exceeded coin's value
-jq -e .bad_sig_losses[0] < test-audit-coins.json > /dev/null || exit_fail "Bad recoup not detected"
-AMOUNT=`jq -r .total_bad_sig_losses < test-audit-coins.json`
-if test $AMOUNT == "TESTKUDOS:0"
-then
- exit_fail "Total bad sig losses are wrong"
-fi
-TAB=`jq -r .row_inconsistencies[0].table < test-audit-reserves.json`
-if test $TAB != "recoup"
-then
- exit_fail "Wrong table for row inconsistency, got $TAB"
-fi
-echo OK
-
-# Undo database modification (can't easily undo DELETE, so full reload)
-full_reload
+ echo -n "Testing inconsistency detection... "
+ # Coin spent exceeded coin's value
+ jq -e .bad_sig_losses[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ || exit_fail "Bad recoup not detected"
+ AMOUNT=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Total bad sig losses are wrong"
+ fi
+ TAB=$(jq -r .row_inconsistencies[0].table < test-audit-reserves.json)
+ if [ "$TAB" != "recoup" ]
+ then
+ exit_fail "Wrong table for row inconsistency, got $TAB"
+ fi
+ echo "OK"
+ # Undo database modification (can't easily undo DELETE, so full reload)
+ full_reload
}
-
# *************** Main test loop starts here **************
# Run all the tests against the database given in $1.
# Sets $fail to 0 on success, non-zero on failure.
-check_with_database()
+function check_with_database()
{
- BASEDB=$1
+ BASEDB="$1"
+ # Configuration file to use
+ CONF="$1.conf"
echo "Running test suite with database $BASEDB using configuration $CONF"
- # Setup database-specific globals
- MASTER_PUB=`cat ${BASEDB}.mpub`
+ MASTER_PRIV_FILE="${BASEDB}.mpriv"
+ taler-config -f -c "${CONF}" -s exchange-offline -o MASTER_PRIV_FILE -V "${MASTER_PRIV_FILE}"
+ MASTER_PUB=$(gnunet-ecc -p "$MASTER_PRIV_FILE")
- # Determine database age
- echo "Calculating database age based on ${BASEDB}.age"
- AGE=`cat ${BASEDB}.age`
- NOW=`date +%s`
- # NOTE: expr "fails" if the result is zero.
- DATABASE_AGE=`expr ${NOW} - ${AGE} || true`
- echo "Database age is ${DATABASE_AGE} seconds"
+ echo "MASTER PUB is ${MASTER_PUB} using file ${MASTER_PRIV_FILE}"
# Load database
full_reload
-
# Run test suite
fail=0
for i in $TESTS
do
- test_$i
- if test 0 != $fail
+ "test_$i"
+ if [ 0 != "$fail" ]
then
break
fi
done
# echo "Cleanup (disabled, leaving database $DB behind)"
- dropdb $DB
- rm -f test-audit.log test-wire-audit.log
+ dropdb "$DB"
}
@@ -483,54 +662,91 @@ check_with_database()
# *************** Main logic starts here **************
# ####### Setup globals ######
-# Postgres database to use (must match revoke-basedb.conf)
-DB=taler-auditor-test
+# Postgres database to use
+DB=revoke-basedb
-# Configuration file to use
-CONF=revoke-basedb.conf
# test required commands exist
echo "Testing for jq"
jq -h > /dev/null || exit_skip "jq required"
-echo "Testing for taler-bank-manage"
-taler-bank-manage --help >/dev/null </dev/null || exit_skip "taler-bank-manage required"
+echo "Testing for faketime"
+faketime -h > /dev/null \
+ || exit_skip "faketime required"
+echo "Testing for libeufin-bank"
+libeufin-bank --help \
+ >/dev/null \
+ 2> /dev/null \
+ </dev/null \
+ || exit_skip "libeufin-bank required"
echo "Testing for pdflatex"
which pdflatex > /dev/null </dev/null || exit_skip "pdflatex required"
-
-# check if we should regenerate the database
-if test -n "${1:-}"
-then
- echo "Custom run, will only run on existing DB."
+echo "Testing for taler-wallet-cli"
+taler-wallet-cli -h \
+ >/dev/null \
+ </dev/null \
+ 2>/dev/null \
+ || exit_skip "taler-wallet-cli required"
+
+echo -n "Testing for Postgres "
+# Available directly in path?
+INITDB_BIN=$(command -v initdb) || true
+if [[ -n "$INITDB_BIN" ]]; then
+ echo "FOUND (in path) at $INITDB_BIN"
else
- echo -n "Testing for taler-wallet-cli"
- if taler-wallet-cli -h >/dev/null </dev/null 2>/dev/null
+ HAVE_INITDB=$(find /usr -name "initdb" | head -1 2> /dev/null | grep postgres) || exit_skip " MISSING"
+ echo "FOUND at " "$(dirname "$HAVE_INITDB")"
+ INITDB_BIN=$(echo "$HAVE_INITDB" | grep bin/initdb | grep postgres | sort -n | tail -n1)
+fi
+echo -n "Setting up Postgres DB"
+POSTGRES_PATH=$(dirname "$INITDB_BIN")
+MY_TMP_DIR=$(mktemp -d /tmp/taler-auditor-basedbXXXXXX)
+TMPDIR="${MY_TMP_DIR}/postgres/"
+mkdir -p "$TMPDIR"
+echo -n "Setting up Postgres DB at $TMPDIR ..."
+"$INITDB_BIN" \
+ --no-sync \
+ --auth=trust \
+ -D "${TMPDIR}" \
+ > "${MY_TMP_DIR}/postgres-dbinit.log" \
+ 2> "${MY_TMP_DIR}/postgres-dbinit.err"
+echo " DONE"
+mkdir "${TMPDIR}/sockets"
+echo -n "Launching Postgres service at $POSTGRES_PATH"
+cat - >> "$TMPDIR/postgresql.conf" <<EOF
+unix_socket_directories='${TMPDIR}/sockets'
+fsync=off
+max_wal_senders=0
+synchronous_commit=off
+wal_level=minimal
+listen_addresses=''
+EOF
+grep -v host \
+ < "$TMPDIR/pg_hba.conf" \
+ > "$TMPDIR/pg_hba.conf.new"
+mv "$TMPDIR/pg_hba.conf.new" "$TMPDIR/pg_hba.conf"
+"${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ start \
+ > "${MY_TMP_DIR}/postgres-start.log" \
+ 2> "${MY_TMP_DIR}/postgres-start.err"
+echo " DONE"
+PGHOST="$TMPDIR/sockets"
+export PGHOST
+
+echo "Generating fresh database at $MY_TMP_DIR"
+if faketime -f '-1 d' ./generate-revoke-basedb.sh "$MY_TMP_DIR/$DB"
+then
+ check_with_database "$MY_TMP_DIR/$DB"
+ if [ "x$fail" != "x0" ]
then
- MYDIR=`mktemp -d /tmp/taler-auditor-basedbXXXXXX`
- echo " FOUND. Generating fresh database at $MYDIR"
- if ./generate-revoke-basedb.sh $MYDIR/basedb
- then
- check_with_database $MYDIR/basedb
- if test x$fail != x0
- then
- exit $fail
- else
- echo "Cleaning up $MYDIR..."
- rm -rf $MYDIR || echo "Removing $MYDIR failed"
- fi
- else
- echo "Generation failed, running only on existing DB"
- fi
+ exit "$fail"
else
- echo " NOT FOUND, running only on existing DB"
+ echo "Cleaning up $MY_TMP_DIR..."
+ rm -rf "$MY_TMP_DIR" || echo "Removing $MY_TMP_DIR failed"
fi
-fi
-
-# run tests with pre-build database, if one is available
-if test -r revoke-basedb.mpub
-then
- check_with_database "revoke-basedb"
else
- fail=77
+ echo "Generation failed"
fi
-exit $fail
+exit 0
diff --git a/src/auditor/test-sync.sh b/src/auditor/test-sync.sh
index a69201a8a..bcef908aa 100755
--- a/src/auditor/test-sync.sh
+++ b/src/auditor/test-sync.sh
@@ -1,43 +1,167 @@
-#!/bin/sh
+#!/bin/bash
+#
+# This file is part of TALER
+# Copyright (C) 2014-2023 Taler Systems SA
+#
+# TALER is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+#
+# TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/license>
+#
+# shellcheck disable=SC2317
set -eu
-echo -n "Testing synchronization logic ..."
+# Exit, with status code "skip" (no 'real' failure)
+function exit_skip() {
+ echo "SKIPPING test: $1"
+ exit 77
+}
-dropdb talercheck-in 2> /dev/null || true
-dropdb talercheck-out 2> /dev/null || true
+# Exit, with error message (hard failure)
+function exit_fail() {
+ echo "FAILING test: $1"
+ exit 1
+}
-createdb talercheck-in || exit 77
-createdb talercheck-out || exit 77
-echo -n "."
+# Cleanup to run whenever we exit
+function cleanup() {
+ if [ -n "${POSTGRES_PATH:-}" ]
+ then
+ "${POSTGRES_PATH}/pg_ctl" -D "$TMPDIR" stop &> /dev/null || true
+ fi
+ for n in $(jobs -p)
+ do
+ kill "$n" 2> /dev/null || true
+ done
+ wait
+}
-taler-exchange-dbinit -c test-sync-out.conf
-echo -n "."
-psql talercheck-in < auditor-basedb.sql >/dev/null 2> /dev/null
+# Install cleanup handler (except for kill -9)
+trap cleanup EXIT
-echo -n "."
-taler-auditor-sync -s test-sync-in.conf -d test-sync-out.conf -t
+function check_with_database()
+{
+ echo -n "Testing synchronization logic ..."
-# cs_nonce_locks excluded: no point
-for table in denominations denomination_revocations wire_targets reserves reserves_in reserves_close reserves_out auditors auditor_denom_sigs exchange_sign_keys signkey_revocations extensions extension_details known_coins refresh_commitments refresh_revealed_coins refresh_transfer_keys deposits refunds wire_out aggregation_tracking wire_fee recoup recoup_refresh
-do
+ dropdb talercheck-in 2> /dev/null || true
+ dropdb talercheck-out 2> /dev/null || true
+
+ createdb talercheck-in || exit 77
+ createdb talercheck-out || exit 77
echo -n "."
- CIN=`echo "SELECT COUNT(*) FROM $table" | psql talercheck-in -Aqt`
- COUT=`echo "SELECT COUNT(*) FROM $table" | psql talercheck-out -Aqt`
- if test ${CIN} != ${COUT}
- then
- dropdb talercheck-in
- dropdb talercheck-out
- echo "FAIL"
- echo "Record count mismatch: $CIN / $COUT in table $table"
- exit 1
- fi
-done
+ taler-exchange-dbinit -c test-sync-out.conf
+ echo -n "."
+ psql -Aqt talercheck-in \
+ -q -1 \
+ -f "$1.sql" \
+ >/dev/null \
+ || exit_skip "Failed to load database"
+
+ echo -n "."
+ taler-auditor-sync \
+ -s test-sync-in.conf \
+ -d test-sync-out.conf -t
-echo -n ". "
-dropdb talercheck-in
-dropdb talercheck-out
+ # cs_nonce_locks excluded: no point
+ for table in denominations denomination_revocations wire_targets reserves reserves_in reserves_close reserves_out auditors auditor_denom_sigs exchange_sign_keys signkey_revocations extensions policy_details policy_fulfillments known_coins refresh_commitments refresh_revealed_coins refresh_transfer_keys deposits refunds wire_out aggregation_tracking wire_fee recoup recoup_refresh
+ do
+ echo -n "."
+ CIN=$(echo "SELECT COUNT(*) FROM exchange.$table" | psql talercheck-in -Aqt)
+ COUT=$(echo "SELECT COUNT(*) FROM exchange.$table" | psql talercheck-out -Aqt)
-echo "PASS"
+ if [ "${CIN}" != "${COUT}" ]
+ then
+ dropdb talercheck-in
+ dropdb talercheck-out
+ echo "FAIL"
+ exit_fail "Record count mismatch: $CIN / $COUT in table $table"
+ fi
+ done
+
+ echo -n ". "
+ dropdb talercheck-in
+ dropdb talercheck-out
+
+ echo "PASS"
+ fail=0
+}
+
+# test required commands exist
+echo "Testing for jq"
+jq -h > /dev/null || exit_skip "jq required"
+echo "Testing for faketime"
+faketime -h > /dev/null || exit_skip "faketime required"
+echo "Testing for libeufin-bank"
+libeufin-bank --help >/dev/null </dev/null 2> /dev/null || exit_skip "libeufin-bank required"
+echo "Testing for pdflatex"
+which pdflatex > /dev/null </dev/null || exit_skip "pdflatex required"
+echo "Testing for taler-wallet-cli"
+taler-wallet-cli -h >/dev/null </dev/null 2>/dev/null || exit_skip "taler-wallet-cli required"
+
+echo -n "Testing for Postgres"
+# Available directly in path?
+INITDB_BIN=$(command -v initdb) || true
+if [[ -n "$INITDB_BIN" ]]; then
+ echo " FOUND (in path) at $INITDB_BIN"
+else
+ HAVE_INITDB=$(find /usr -name "initdb" | head -1 2> /dev/null | grep postgres) || exit_skip " MISSING"
+ echo " FOUND at " "$(dirname "$HAVE_INITDB")"
+ INITDB_BIN=$(echo "$HAVE_INITDB" | grep bin/initdb | grep postgres | sort -n | tail -n1)
+fi
+echo -n "Setting up Postgres DB"
+POSTGRES_PATH=$(dirname "$INITDB_BIN")
+MYDIR=$(mktemp -d /tmp/taler-auditor-basedbXXXXXX)
+TMPDIR="$MYDIR/postgres/"
+mkdir -p "$TMPDIR"
+"$INITDB_BIN" --no-sync --auth=trust -D "${TMPDIR}" \
+ > "${MYDIR}/postgres-dbinit.log" \
+ 2> "${MYDIR}/postgres-dbinit.err"
+echo " DONE"
+mkdir "${TMPDIR}/sockets"
+echo -n "Launching Postgres service"
+cat - >> "$TMPDIR/postgresql.conf" <<EOF
+unix_socket_directories='${TMPDIR}/sockets'
+fsync=off
+max_wal_senders=0
+synchronous_commit=off
+wal_level=minimal
+listen_addresses=''
+EOF
+grep -v host \
+ < "$TMPDIR/pg_hba.conf" \
+ > "$TMPDIR/pg_hba.conf.new"
+mv "$TMPDIR/pg_hba.conf.new" "$TMPDIR/pg_hba.conf"
+"${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ start \
+ > "${MYDIR}/postgres-start.log" \
+ 2> "${MYDIR}/postgres-start.err"
+echo " DONE"
+PGHOST="$TMPDIR/sockets"
+export PGHOST
+
+echo "Generating fresh database at $MYDIR"
+if faketime -f '-1 d' ./generate-auditor-basedb.sh -d "$MYDIR/auditor-basedb"
+then
+ check_with_database "$MYDIR/auditor-basedb"
+ if [ x$fail != x0 ]
+ then
+ exit "$fail"
+ else
+ echo "Cleaning up $MYDIR..."
+ rm -rf "$MYDIR" || echo "Removing $MYDIR failed"
+ fi
+else
+ echo "Generation failed"
+ exit 77
+fi
exit 0