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.am70
-rw-r--r--src/auditor/auditor-basedb.age1
-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.sql8597
-rw-r--r--src/auditor/auditor.conf6
-rw-r--r--src/auditor/batch.conf183
-rwxr-xr-xsrc/auditor/batch.sh235
-rw-r--r--src/auditor/generate-auditor-basedb-template.conf1
-rw-r--r--src/auditor/generate-auditor-basedb.conf186
-rwxr-xr-xsrc/auditor/generate-auditor-basedb.sh301
-rw-r--r--src/auditor/generate-kyc-basedb.conf4
-rwxr-xr-xsrc/auditor/generate-revoke-basedb.sh377
-rw-r--r--src/auditor/generate_auditordb_home/.local/share/taler/exchange-offline/master.priv1
-rw-r--r--src/auditor/report-lib.c287
-rw-r--r--src/auditor/report-lib.h65
-rw-r--r--src/auditor/revoke-basedb.age1
-rw-r--r--src/auditor/revoke-basedb.conf (renamed from src/auditor/test-auditor.conf)14
-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.sql8606
-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.c231
-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.c43
-rw-r--r--src/auditor/taler-auditor.in20
-rw-r--r--src/auditor/taler-helper-auditor-aggregation.c417
-rw-r--r--src/auditor/taler-helper-auditor-coins.c1480
-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.c1251
-rw-r--r--src/auditor/taler-helper-auditor-wire.c1327
-rwxr-xr-xsrc/auditor/test-auditor.sh2636
-rwxr-xr-xsrc/auditor/test-kyc.sh751
-rwxr-xr-xsrc/auditor/test-revocation.sh889
-rwxr-xr-xsrc/auditor/test-sync.sh183
46 files changed, 9188 insertions, 21488 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 49f4030ea..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,28 +197,22 @@ taler_auditor_sync_CPPFLAGS = \
check_SCRIPTS = \
test-auditor.sh \
+ test-kyc.sh \
test-revocation.sh \
test-sync.sh
.NOTPARALLEL:
-# Disabled for now: need working wallet first!
# TESTS = $(check_SCRIPTS)
EXTRA_DIST = \
taler-auditor.in \
taler-helper-auditor-render.py \
auditor.conf \
- test-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.sql \
- auditor-basedb.mpub \
- revoke-basedb.age \
- 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 8a55c2885..000000000
--- a/src/auditor/auditor-basedb.age
+++ /dev/null
@@ -1 +0,0 @@
-1638356946
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 13f7e591d..000000000
--- a/src/auditor/auditor-basedb.mpub
+++ /dev/null
@@ -1 +0,0 @@
-R8JBA9089F3YRRSQDPWB92CZ5V1V0J1BPVW8J1B0P8VCVH71CYY0
diff --git a/src/auditor/auditor-basedb.sql b/src/auditor/auditor-basedb.sql
deleted file mode 100644
index fbbba67b0..000000000
--- a/src/auditor/auditor-basedb.sql
+++ /dev/null
@@ -1,8597 +0,0 @@
---
--- PostgreSQL database dump
---
-
--- Dumped from database version 13.4
--- Dumped by pg_dump version 13.4
-
-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.';
-
-
-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: 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
-);
-
-
---
--- 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 'We first create entries in the aggregation_tracking table and then finally the wire_out entry once we know the total amount. Hence the constraint must be deferrable and we cannot use a wireout_uuid here, because we do not have it when these rows are created. Changing the logic to first INSERT a dummy row into wire_out and then UPDATEing that row in the same transaction would theoretically reduce per-deposit storage costs by 5 percent (24/~460 bytes).';
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.aggregation_tracking_aggregation_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.aggregation_tracking_aggregation_serial_id_seq OWNED BY public.aggregation_tracking.aggregation_serial_id;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.auditor_denom_sigs_auditor_denom_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditor_denom_sigs_auditor_denom_serial_seq OWNED BY public.auditor_denom_sigs.auditor_denom_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.auditors_auditor_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditors_auditor_uuid_seq OWNED BY public.auditors.auditor_uuid;
-
-
---
--- 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: 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: -
---
-
-CREATE SEQUENCE public.denomination_revocations_denom_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.denomination_revocations_denom_revocations_serial_id_seq OWNED BY public.denomination_revocations.denom_revocations_serial_id;
-
-
---
--- 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_restrictions 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_restrictions; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.denominations.age_restrictions 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: -
---
-
-CREATE SEQUENCE public.denominations_denominations_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.denominations_denominations_serial_seq OWNED BY public.denominations.denominations_serial;
-
-
---
--- 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,
- 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_serial_id bigint NOT NULL,
- tiny boolean DEFAULT false NOT NULL,
- done boolean DEFAULT false NOT NULL,
- extension_blocked boolean DEFAULT false NOT NULL,
- extension_details_serial_id bigint,
- 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))
-);
-
-
---
--- 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. Should be set based on h_payto and merchant_pub. 64-bit value because we need an *unsigned* 32-bit value.';
-
-
---
--- 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_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.wire_target_serial_id IS 'Identifies the target bank account and KYC status';
-
-
---
--- Name: COLUMN deposits.tiny; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.tiny IS 'Set to TRUE if we decided that the amount is too small to ever trigger a wire transfer by itself (requires real aggregation)';
-
-
---
--- 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_deposit_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.deposits_deposit_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.deposits_deposit_serial_id_seq OWNED BY public.deposits.deposit_serial_id;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.exchange_sign_keys_esk_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.exchange_sign_keys_esk_serial_seq OWNED BY public.exchange_sign_keys.esk_serial;
-
-
---
--- Name: extension_details; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.extension_details (
- extension_details_serial_id bigint NOT NULL,
- extension_options character varying
-);
-
-
---
--- 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_extension_details_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.extension_details_extension_details_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: extension_details_extension_details_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.extension_details_extension_details_serial_id_seq OWNED BY public.extension_details.extension_details_serial_id;
-
-
---
--- Name: known_coins; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.known_coins (
- known_coin_id bigint NOT NULL,
- coin_pub bytea NOT NULL,
- age_hash bytea,
- denominations_serial bigint NOT NULL,
- denom_sig bytea NOT NULL,
- CONSTRAINT known_coins_age_hash_check CHECK ((length(age_hash) = 32)),
- CONSTRAINT known_coins_coin_pub_check CHECK ((length(coin_pub) = 32))
-);
-
-
---
--- 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.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_hash; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.age_hash IS 'Optional hash 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: known_coins_known_coin_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.known_coins_known_coin_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.known_coins_known_coin_id_seq OWNED BY public.known_coins.known_coin_id;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_accounts_account_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_accounts_account_serial_seq OWNED BY public.merchant_accounts.account_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_deposits_deposit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_deposits_deposit_serial_seq OWNED BY public.merchant_deposits.deposit_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_exchange_signing_keys_signkey_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_exchange_signing_keys_signkey_serial_seq OWNED BY public.merchant_exchange_signing_keys.signkey_serial;
-
-
---
--- 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,
- 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: -
---
-
-CREATE SEQUENCE public.merchant_exchange_wire_fees_wirefee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_exchange_wire_fees_wirefee_serial_seq OWNED BY public.merchant_exchange_wire_fees.wirefee_serial;
-
-
---
--- Name: merchant_instances; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_instances (
- merchant_serial bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- 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,
- auth_hash bytea,
- auth_salt bytea,
- 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.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: 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: merchant_instances_merchant_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_instances_merchant_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_instances_merchant_serial_seq OWNED BY public.merchant_instances.merchant_serial;
-
-
---
--- 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
-);
-
-
---
--- 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: 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: -
---
-
-CREATE SEQUENCE public.merchant_inventory_product_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_inventory_product_serial_seq OWNED BY public.merchant_inventory.product_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_kyc_kyc_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_kyc_kyc_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_kyc_kyc_serial_id_seq OWNED BY public.merchant_kyc.kyc_serial_id;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_orders_order_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_orders_order_serial_seq OWNED BY public.merchant_orders.order_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_refunds_refund_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_refunds_refund_serial_seq OWNED BY public.merchant_refunds.refund_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_tip_pickups_pickup_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tip_pickups_pickup_serial_seq OWNED BY public.merchant_tip_pickups.pickup_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_tip_reserves_reserve_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tip_reserves_reserve_serial_seq OWNED BY public.merchant_tip_reserves.reserve_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_tips_tip_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tips_tip_serial_seq OWNED BY public.merchant_tips.tip_serial;
-
-
---
--- 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,
- execution_time bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- credit_amount_val bigint NOT NULL,
- credit_amount_frac integer 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.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 exchange';
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_transfers_credit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_transfers_credit_serial_seq OWNED BY public.merchant_transfers.credit_serial;
-
-
---
--- Name: prewire; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.prewire (
- prewire_uuid bigint NOT NULL,
- type text NOT NULL,
- finished boolean DEFAULT false NOT NULL,
- failed boolean DEFAULT false NOT NULL,
- buf bytea NOT NULL
-);
-
-
---
--- 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_prewire_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.prewire_prewire_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.prewire_prewire_uuid_seq OWNED BY public.prewire.prewire_uuid;
-
-
---
--- Name: recoup; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup (
- recoup_uuid bigint 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,
- "timestamp" bigint NOT NULL,
- reserve_out_serial_id bigint NOT NULL,
- CONSTRAINT recoup_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-
-
---
--- Name: TABLE recoup; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.recoup IS 'Information about recoups that were executed';
-
-
---
--- Name: COLUMN recoup.known_coin_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.known_coin_id IS 'Do not CASCADE ON DROP on the known_coin_id, as we may keep the coin alive!';
-
-
---
--- 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.';
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.recoup_recoup_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.recoup_recoup_uuid_seq OWNED BY public.recoup.recoup_uuid;
-
-
---
--- Name: recoup_refresh; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_refresh (
- recoup_refresh_uuid bigint 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,
- "timestamp" bigint NOT NULL,
- rrc_serial bigint NOT NULL,
- CONSTRAINT recoup_refresh_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_refresh_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-
-
---
--- Name: COLUMN recoup_refresh.known_coin_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.known_coin_id IS 'Do not CASCADE ON DROP on the known_coin_id, as we may keep the coin alive!';
-
-
---
--- Name: COLUMN recoup_refresh.rrc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.rrc_serial IS 'Identifies the h_blind_ev of the recouped coin (as h_coin_ev).';
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.recoup_refresh_recoup_refresh_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.recoup_refresh_recoup_refresh_uuid_seq OWNED BY public.recoup_refresh.recoup_refresh_uuid;
-
-
---
--- Name: refresh_commitments; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_commitments (
- melt_serial_id bigint NOT NULL,
- rc bytea NOT NULL,
- old_known_coin_id bigint 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))
-);
-
-
---
--- 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: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_commitments_melt_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_commitments_melt_serial_id_seq OWNED BY public.refresh_commitments.melt_serial_id;
-
-
---
--- 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,
- 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))
-);
-
-
---
--- 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: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_revealed_coins_rrc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_revealed_coins_rrc_serial_seq OWNED BY public.refresh_revealed_coins.rrc_serial;
-
-
---
--- 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))
-);
-
-
---
--- 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_rtc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_transfer_keys_rtc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_transfer_keys_rtc_serial_seq OWNED BY public.refresh_transfer_keys.rtc_serial;
-
-
---
--- Name: refunds; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refunds (
- refund_serial_id bigint 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_merchant_sig_check CHECK ((length(merchant_sig) = 64))
-);
-
-
---
--- 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 known_coin_id. 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_refund_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refunds_refund_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refunds_refund_serial_id_seq OWNED BY public.refunds.refund_serial_id;
-
-
---
--- 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,
- expiration_date bigint NOT NULL,
- gc_date bigint NOT NULL,
- CONSTRAINT reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- 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.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_uuid bigint NOT NULL,
- execution_date bigint NOT NULL,
- wtid bytea NOT NULL,
- wire_target_serial_id bigint NOT NULL,
- 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_wtid_check CHECK ((length(wtid) = 32))
-);
-
-
---
--- 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_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_close.wire_target_serial_id 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: -
---
-
-CREATE SEQUENCE public.reserves_close_close_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_close_close_uuid_seq OWNED BY public.reserves_close.close_uuid;
-
-
---
--- Name: reserves_in; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_in (
- reserve_in_serial_id bigint NOT NULL,
- reserve_uuid bigint NOT NULL,
- wire_reference bigint NOT NULL,
- credit_val bigint NOT NULL,
- credit_frac integer NOT NULL,
- wire_source_serial_id bigint NOT NULL,
- exchange_account_section text NOT NULL,
- execution_date bigint NOT NULL
-);
-
-
---
--- 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.wire_source_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_in.wire_source_serial_id IS 'Identifies the debited bank account and KYC status';
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_in_reserve_in_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_in_reserve_in_serial_id_seq OWNED BY public.reserves_in.reserve_in_serial_id;
-
-
---
--- Name: reserves_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out (
- reserve_out_serial_id bigint NOT NULL,
- h_blind_ev bytea NOT NULL,
- 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))
-);
-
-
---
--- 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_reserve_out_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_out_reserve_out_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_out_reserve_out_serial_id_seq OWNED BY public.reserves_out.reserve_out_serial_id;
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_reserve_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_reserve_uuid_seq OWNED BY public.reserves.reserve_uuid;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.revolving_work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.revolving_work_shards_shard_serial_id_seq OWNED BY public.revolving_work_shards.shard_serial_id;
-
-
---
--- 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 'remembering which online signing keys have been revoked';
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.signkey_revocations_signkey_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.signkey_revocations_signkey_revocations_serial_id_seq OWNED BY public.signkey_revocations.signkey_revocations_serial_id;
-
-
---
--- 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,
- 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: -
---
-
-CREATE SEQUENCE public.wire_fee_wire_fee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.wire_fee_wire_fee_serial_seq OWNED BY public.wire_fee.wire_fee_serial;
-
-
---
--- 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_serial_id bigint NOT NULL,
- exchange_account_section text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT wire_out_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-);
-
-
---
--- 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_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_out.wire_target_serial_id 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_wireout_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.wire_out_wireout_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.wire_out_wireout_uuid_seq OWNED BY public.wire_out.wireout_uuid;
-
-
---
--- Name: wire_targets; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_targets (
- wire_target_serial_id bigint NOT NULL,
- 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_h_payto_check CHECK ((length(h_payto) = 64))
-);
-
-
---
--- Name: TABLE wire_targets; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_targets IS 'All recipients of money via the exchange';
-
-
---
--- Name: COLUMN wire_targets.h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_targets.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_wire_target_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.wire_targets_wire_target_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: wire_targets_wire_target_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.wire_targets_wire_target_serial_id_seq OWNED BY public.wire_targets.wire_target_serial_id;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.work_shards_shard_serial_id_seq OWNED BY public.work_shards.shard_serial_id;
-
-
---
--- Name: aggregation_tracking aggregation_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking ALTER COLUMN aggregation_serial_id SET DEFAULT nextval('public.aggregation_tracking_aggregation_serial_id_seq'::regclass);
-
-
---
--- 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_denom_sigs auditor_denom_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs ALTER COLUMN auditor_denom_serial SET DEFAULT nextval('public.auditor_denom_sigs_auditor_denom_serial_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: auditors auditor_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors ALTER COLUMN auditor_uuid SET DEFAULT nextval('public.auditors_auditor_uuid_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: denomination_revocations denom_revocations_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations ALTER COLUMN denom_revocations_serial_id SET DEFAULT nextval('public.denomination_revocations_denom_revocations_serial_id_seq'::regclass);
-
-
---
--- Name: denominations denominations_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations ALTER COLUMN denominations_serial SET DEFAULT nextval('public.denominations_denominations_serial_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: deposits deposit_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits ALTER COLUMN deposit_serial_id SET DEFAULT nextval('public.deposits_deposit_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);
-
-
---
--- Name: exchange_sign_keys esk_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys ALTER COLUMN esk_serial SET DEFAULT nextval('public.exchange_sign_keys_esk_serial_seq'::regclass);
-
-
---
--- Name: extension_details extension_details_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.extension_details ALTER COLUMN extension_details_serial_id SET DEFAULT nextval('public.extension_details_extension_details_serial_id_seq'::regclass);
-
-
---
--- Name: known_coins known_coin_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins ALTER COLUMN known_coin_id SET DEFAULT nextval('public.known_coins_known_coin_id_seq'::regclass);
-
-
---
--- Name: merchant_accounts account_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts ALTER COLUMN account_serial SET DEFAULT nextval('public.merchant_accounts_account_serial_seq'::regclass);
-
-
---
--- Name: merchant_deposits deposit_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits ALTER COLUMN deposit_serial SET DEFAULT nextval('public.merchant_deposits_deposit_serial_seq'::regclass);
-
-
---
--- Name: merchant_exchange_signing_keys signkey_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys ALTER COLUMN signkey_serial SET DEFAULT nextval('public.merchant_exchange_signing_keys_signkey_serial_seq'::regclass);
-
-
---
--- Name: merchant_exchange_wire_fees wirefee_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees ALTER COLUMN wirefee_serial SET DEFAULT nextval('public.merchant_exchange_wire_fees_wirefee_serial_seq'::regclass);
-
-
---
--- Name: merchant_instances merchant_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances ALTER COLUMN merchant_serial SET DEFAULT nextval('public.merchant_instances_merchant_serial_seq'::regclass);
-
-
---
--- Name: merchant_inventory product_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory ALTER COLUMN product_serial SET DEFAULT nextval('public.merchant_inventory_product_serial_seq'::regclass);
-
-
---
--- Name: merchant_kyc kyc_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_kyc ALTER COLUMN kyc_serial_id SET DEFAULT nextval('public.merchant_kyc_kyc_serial_id_seq'::regclass);
-
-
---
--- Name: merchant_orders order_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders ALTER COLUMN order_serial SET DEFAULT nextval('public.merchant_orders_order_serial_seq'::regclass);
-
-
---
--- Name: merchant_refunds refund_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds ALTER COLUMN refund_serial SET DEFAULT nextval('public.merchant_refunds_refund_serial_seq'::regclass);
-
-
---
--- Name: merchant_tip_pickups pickup_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups ALTER COLUMN pickup_serial SET DEFAULT nextval('public.merchant_tip_pickups_pickup_serial_seq'::regclass);
-
-
---
--- Name: merchant_tip_reserves reserve_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves ALTER COLUMN reserve_serial SET DEFAULT nextval('public.merchant_tip_reserves_reserve_serial_seq'::regclass);
-
-
---
--- Name: merchant_tips tip_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips ALTER COLUMN tip_serial SET DEFAULT nextval('public.merchant_tips_tip_serial_seq'::regclass);
-
-
---
--- Name: merchant_transfers credit_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers ALTER COLUMN credit_serial SET DEFAULT nextval('public.merchant_transfers_credit_serial_seq'::regclass);
-
-
---
--- Name: prewire prewire_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire ALTER COLUMN prewire_uuid SET DEFAULT nextval('public.prewire_prewire_uuid_seq'::regclass);
-
-
---
--- Name: recoup recoup_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup ALTER COLUMN recoup_uuid SET DEFAULT nextval('public.recoup_recoup_uuid_seq'::regclass);
-
-
---
--- Name: recoup_refresh recoup_refresh_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh ALTER COLUMN recoup_refresh_uuid SET DEFAULT nextval('public.recoup_refresh_recoup_refresh_uuid_seq'::regclass);
-
-
---
--- Name: refresh_commitments melt_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments ALTER COLUMN melt_serial_id SET DEFAULT nextval('public.refresh_commitments_melt_serial_id_seq'::regclass);
-
-
---
--- Name: refresh_revealed_coins rrc_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins ALTER COLUMN rrc_serial SET DEFAULT nextval('public.refresh_revealed_coins_rrc_serial_seq'::regclass);
-
-
---
--- Name: refresh_transfer_keys rtc_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys ALTER COLUMN rtc_serial SET DEFAULT nextval('public.refresh_transfer_keys_rtc_serial_seq'::regclass);
-
-
---
--- Name: refunds refund_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds ALTER COLUMN refund_serial_id SET DEFAULT nextval('public.refunds_refund_serial_id_seq'::regclass);
-
-
---
--- Name: reserves reserve_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves ALTER COLUMN reserve_uuid SET DEFAULT nextval('public.reserves_reserve_uuid_seq'::regclass);
-
-
---
--- Name: reserves_close close_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close ALTER COLUMN close_uuid SET DEFAULT nextval('public.reserves_close_close_uuid_seq'::regclass);
-
-
---
--- Name: reserves_in reserve_in_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in ALTER COLUMN reserve_in_serial_id SET DEFAULT nextval('public.reserves_in_reserve_in_serial_id_seq'::regclass);
-
-
---
--- Name: reserves_out reserve_out_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out ALTER COLUMN reserve_out_serial_id SET DEFAULT nextval('public.reserves_out_reserve_out_serial_id_seq'::regclass);
-
-
---
--- Name: revolving_work_shards shard_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards ALTER COLUMN shard_serial_id SET DEFAULT nextval('public.revolving_work_shards_shard_serial_id_seq'::regclass);
-
-
---
--- Name: signkey_revocations signkey_revocations_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations ALTER COLUMN signkey_revocations_serial_id SET DEFAULT nextval('public.signkey_revocations_signkey_revocations_serial_id_seq'::regclass);
-
-
---
--- Name: wire_fee wire_fee_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee ALTER COLUMN wire_fee_serial SET DEFAULT nextval('public.wire_fee_wire_fee_serial_seq'::regclass);
-
-
---
--- Name: wire_out wireout_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out ALTER COLUMN wireout_uuid SET DEFAULT nextval('public.wire_out_wireout_uuid_seq'::regclass);
-
-
---
--- Name: wire_targets wire_target_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets ALTER COLUMN wire_target_serial_id SET DEFAULT nextval('public.wire_targets_wire_target_serial_id_seq'::regclass);
-
-
---
--- Name: work_shards shard_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards ALTER COLUMN shard_serial_id SET DEFAULT nextval('public.work_shards_shard_serial_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 2021-12-01 12:08:26.821188+01 dold {} {}
-merchant-0001 2021-12-01 12:08:27.343817+01 dold {} {}
-merchant-0002 2021-12-01 12:08:27.641319+01 dold {} {}
-merchant-0003 2021-12-01 12:08:27.652283+01 dold {} {}
-auditor-0001 2021-12-01 12:08:27.68794+01 dold {} {}
-\.
-
-
---
--- Data for Name: aggregation_tracking; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.aggregation_tracking (aggregation_serial_id, deposit_serial_id, 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 2021-12-01 12:08:37.853361+01 f fa27c9fd-6b8a-4a73-a420-a9c20c435f87 12 1
-2 TESTKUDOS:10 89JVAQPM740BFC7Q5NP3BGAK1J9ASAG4CCPET13JTSSP7JX9A8K0 2021-12-01 12:08:41.746972+01 f 32ad7113-0fe5-4322-9976-29146fe0caeb 2 12
-3 TESTKUDOS:100 Joining bonus 2021-12-01 12:08:50.064111+01 f 5b41a1eb-e222-4563-985b-534f758db2df 13 1
-4 TESTKUDOS:18 00TNSQS28VF2P5ACGRFV5TGYWBH5S7554T15VC9X0WZHVT0K2NH0 2021-12-01 12:08:50.762479+01 f 102e985e-f7de-4a68-8d06-dbee971e04a2 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;
-7c639153-d45e-46b5-9212-411a0a5f871a TESTKUDOS:10 t t f 89JVAQPM740BFC7Q5NP3BGAK1J9ASAG4CCPET13JTSSP7JX9A8K0 2 12
-e3a4ee21-ea44-47ee-a1f4-34dc4be04713 TESTKUDOS:18 t t f 00TNSQS28VF2P5ACGRFV5TGYWBH5S7554T15VC9X0WZHVT0K2NH0 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 46 \\xc074de874a97e6da510f44a63fe43eef7bd3bb9284a1d29fbf346b052cb427f0d481e20a3a7a3447165db06fb5ddfae0df484593bdd18bc0192aaf5dcca9e006
-2 1 147 \\x9955203a82842400bc2b2431db96920bede1a4e42f96fe0aa0077fbcf5284e9709f6395a65fcac94f65d38dfcb02f968c27b674fd164e873979d437fc7eaf70e
-3 1 395 \\x88bb1ebc61ec29f15e6dea9ffa8a2cb4d626ec39ba5b838e449253907a0c5bd5e6acf460fa0fd0390b67ec87693740399bb372ec37218ae6833f954f82a59805
-4 1 197 \\x4bb239d99e9fa6e4cca9f1ab4bad03de98df4348f902046f617c7460cfad06e380f36d470524f622f2af81a36a219ce2a32865371d94758d2efba279a63bcf0f
-5 1 261 \\x501aaa0141c97a475743d5816c612ce8f659379ef88f628b9ad4e598e8a766fe4df1ccef00f4ca1fc537b29ebb14607f2e689e87e8eb54a735345317b8936909
-6 1 381 \\xd60ec734452b90329c7e94e7029f4565f9203f7bb5a552c7e42bc8d850191a24bfaeb04c4e5c236a07fa8336f58bde8ea82621aee8ad66b77e718b5b41482107
-7 1 146 \\x7489dd2f83bf9da47242ba192a1657cd712e645832e295759baa6d1979d0bb31a4a1c910791b2ef56b2397d1bfe652dbe7c96da6cdc61eba7ee37a33899cd10a
-8 1 231 \\x33b481db54d2d5aa78f476af43f73e0ccf52f55f333a9657cc1f042bd48888fb4675c64a430c3e1b54bf360c854d5c174573f4480bac61b0bb832be8baa2d408
-9 1 144 \\x32e07c7148371d65d6d1525c86fecb5bb0f55d2f096af56e3dd5b094e1e76e30d8ff9436fe0ffbab946de1e99b01f9fe80361b506cf096e73ed3f107c97be50b
-10 1 169 \\xbb0fcbd24fc7ab97d60b463031d566719691011d3d7ce509c51567a9b02568245688b89d84c91496c2c968ae5dd6fc7e96f0feef3eeef8c34a3e6cae0f8c270b
-11 1 380 \\x435301bcfaf676b8adffb60f0a66024f364ecf14e94d4401841972e1813c78394f7b73270bdff378d9f8a1bb807f946870de58123461098418ec864c4f5bde0e
-12 1 80 \\x93556403518c6e7926d644bacca6b437b5ba7c5477d1f6540ee1648efc28e6159a768a0b63ae1161b50956362a1170e6da9dafa5ec5317d087db39bab2283b05
-13 1 362 \\x8adcc6dadc800a47937e520e73bcfc427f4692cc8684058649c26b68422b2b71b9424f4e6b735704fe2a850af1724e2361123a7bdb0b6d2ca1e5aeccfafbd50e
-14 1 34 \\x9d7d50110d3167ceb621b653f9176e1be868bf97d8cd1de59d23623bc32dcaed664a3ba42b62e3017442a942f9fd282e1471fab3de1c6dc4810e6bf16d38f706
-15 1 39 \\xc20374f718f2b2dd838b5efba84a9b316d43d5aecdfbf95e94064e865feaad8bf1895d303601c2d42d56c75b5b53bfa72c5dfff80b377009d01393eeaca16b01
-16 1 355 \\x6a399968fd73c99471b14a50758af77fefb31e84770ccfa522f82d9ad4c81304ae4e504e531236d416392d547fed648d273f7ae94d2b4584b54e1ba53a727601
-17 1 348 \\xbb919777498f3150f30c93f38dad4fdb85b99542344385a594eee2f32581c2eb95d6c2b3e85894bb7195978c1090d1fb099ae4d7e0fa414ab4f40b5eb70d4b00
-18 1 242 \\x51566f0ae4aaacfa92ae4c9a6048fa1e6e1fbaff187f86ed43334c0a869e9776a4efe4014c4aaf5787f366b1d21ed695e5fbb9ef01c3a4edbc630578edf88801
-19 1 213 \\x860a9ebbfc3b289055c7d8124ca46fb012537b4fa5a4078813be6026adbf350d10e68b64a81d7bf783679bfdcbf8ec60015a847f2957602eabae3859468b9704
-20 1 243 \\x438ff81f5f803edf9e5ce34f3ce0fe3a0ed3f1fe0512fab7f0861f2dc57688a59125784e363e50a7a6d796604b7baf4d3ce7190a182051ded35c24917aca2808
-21 1 264 \\x80b132395f5696342c33da67d7975b66fb8bb6e8fa4ce3bf2b69eec790e1bbe7aa8b6eef1c6b57e7f830efcabfe650f325bfc1c344fcf41b4aca247698c5900e
-22 1 153 \\x65c5471413fd8fbdc53e24a40eb378fedfbb61ce32f7a641862258dcabdfa0546846fc001823d794e07132086853d70c5507c2c5adbc2b7dced59f977355b709
-23 1 382 \\xcd15a147cef28c86f9a2e25174b32442e0ab6dccde2d34f58efa9c5ff6068bc23758b2aba2db12f62d1a3dbb1b648b07e11c1952d0c8a8b3177ecbd7364eca0f
-24 1 389 \\x9a5cba279ff4107f52e63ca7c0329b6437ced5d09510963b0bc4287e3eae4c5fff69fb1708bd3b33c859ec026d9d6f6ea36387a7683d5aef79eeb107e7b8450e
-25 1 68 \\xd775307eaad78ea6f87fb87871ea9baf60371eefa8950c07431aea543e9a6f0b3af29cc679eac07e23307f5d35ef145de568262c7dcb6e502a826fe4f1873c05
-26 1 5 \\xc37086f7f3838fb295f7a40e12b4bd01aa5e2cb698f5e28f5b9bb638e242016c0bff85f4110027ad1d3022dcf018d2d2d586c651650a68709601d852ab17b00b
-27 1 20 \\xb3a95fc4b7678912c5c82b9975760ff014bf55573b2e9e3dba6437a49979b895ef72b3de59a9990b2ae8ea3749e2748ae6ff624b8543160ff21df0151acd6b08
-28 1 358 \\x78007eaa101bf164db2e9710644fc5de7938472a4a1993abfc024f779c9cbbc925ba851aa6e6feddec46bb001ee551288475214faf34e84ee828ace4a4e61e01
-29 1 22 \\xa1086ee861e329a96d932e921857b06fbf307f6383478b031604286d95ee31a10e1fc553a3ff282df10a9c53b1fe8e7734380d31d35de141744b055db633b20b
-30 1 207 \\x7bca098456b88dfa64bf9924b023f77f02150734d03bfda86de6e2ca7cf1b1b179bc5cb62e4e41540639e021f652ea085a4a159b936d95b6a1a518d1a2b48d00
-31 1 184 \\x14828242f3dbfcf48e8001d848233ad485d3dd7f814f4184bc4d1708129cc8f9ca86f0b1baa58bbe7ecc25b5cbe87c64b6fb06110ff17838de41edf047866107
-32 1 100 \\x409537254fd40a75d6edc5ecc5d1c215bdc26aac8e21f39897f9186d0e672aa4a06238a7638002bd966a5a6828a810bff6f9ccae8c85da19e4e5a192b0fa4607
-33 1 164 \\xec0ef3b7074c8a9e81b9404b0b89d5da931151dc189da556e5909671c52ea935c80eb21d1450bb664c5b6baf1c51079a09c2f93798b972afe98e7ae53e969a0a
-34 1 276 \\x2b63e017194e1e45ff8775a9432870772775f6f5d8785e2a1bac85511ac9c150db7a37557e8557b387c16d38b4b26bf61b85be636b1b44ee2d7be18fa1ea4b0a
-35 1 354 \\xc4649f87c3c3b7626b22b7a34f8302ab33de6cbb5cd3a84c74468b362108fc8ea5d32399119c07f14974b63705e7efac872d21269a458ebf1360d0d0b3de780f
-36 1 275 \\x0e033f9648e7e9d4c504700562f22be2f935404a0b67fcbaf8b26368db56a0dfd21f49710b29dc823f9fafc99a7f7b1b246aee82c8756de1aab448f97f09200b
-37 1 244 \\xdbc36806352a67be8fba48b29c030ac00b4cd132058fe382c79aa4ffcb1c3dc1c81cdcaea4ccb87b6764293c32f4e1d95f683942ac572d468c67a85fd3d27002
-38 1 407 \\x0711fd01af0e805fcd0a056b104ba123a146964c43add97fe19e957bfc816d82a834553520051794289f7a7cb9cf4f413fd4c755365f2f14d7b4cdb967eb7801
-39 1 222 \\x3e7d71cc70df93733d94a761dd517d3f208ff41c41294822c44be9a32dd3e19571b21afc5e3adccca7b037903d186b1113501904a519f0c00efb6e4179a4ba0f
-40 1 135 \\x3cab64bb04ee0ee399a269c7fcb41a26d5b6f6431a58bdb3f208ae8bf19fb6bd6e3f1dd1b16bfe8fbff883194e88b41718d51bb614ccbc32dcada8e2cdb52705
-41 1 131 \\xdbcc2671fe8a317e5a5a6550bafb20fedd89905ab6490f5a1bba9ffd214d23cf1665ea2df8f89062a26f63191e2c3d9bec3693fd2fe8bf71952ffcc2f8f2e20d
-42 1 66 \\x09a4f2b5ba715f34ec5d0f96c3d6070f572a134ad0b4a4044ab5a2cb428b71f075cbc10faafbe34c66d0d56d81f9ce402a81dc3f6ba50a6afb8deef271d1b10a
-43 1 293 \\x137ecfbb3e00c323331ac84051190f4579e58f893320f8828777e5c4a8308c57ea2ae72c27364a5e280af347b69c4d27aef5c9717fced7f0d82854c894e3cb08
-44 1 43 \\xf4f65a8342f4e70dac1241763b96b0d179f67e5c7fcf1bee7e1bba8b64003a5f858efde5f7df218785fb5443a510dd825b85af24d914236da33f53388f6c0c09
-45 1 299 \\x912413b2730bb5c01188504a4e099a0aa1c3a9d69977903ffbfdf365fa3b801aa6a87b021d0e062133811f4fc759b0f351f77c05fb2b15ee28e3d24c460ee60d
-46 1 138 \\x6a31e05f2bedf72a4559825926572af8c083ee68c966a4b30c5a676280876ba0d4864d44c4d2d0dff1723208f81ec3dbba8c53398237f32916bd258d43084500
-47 1 422 \\xbb11c24b5d67d26b569bdea7cb771d88ceaec174b0ea6860e6f566ce301c16af1f22aecf49467ec64a214a480b1a4706565d56533bcb253e4eb5bb885d00bd07
-48 1 235 \\x89c3898414eae1bc811de44bca8854ef86de76b6567c665867553c1657b9e75bb96126794082de9ec144e8dec5ac71768859b6bf87e59fc64e9cc157e3f02c0c
-49 1 418 \\xfec6039162180104f1760b62c6c5790500c7a7ced161845e65a47d19b17a5fbaab2204b7dcdd2c967b2a794164fec6f1cbd1c3a0746789fe748e1efc7853aa09
-50 1 234 \\x224f3fa2667f19143f3c25972a03bd092ab90796b9e6601e24bd1478f41fdd2ad3296d3b526ef1f16e8dbec40e63a713dc7398e00d35afcf282da1fb64a17e0a
-51 1 250 \\xe3cff870858e28b6ada565436de54049edcde29cc59123104c99da2620c38aae24ce4f6d5789fad9a153dd46884277550c3feac784c664fbbfc7fb8bebcb0207
-52 1 110 \\x50932b6ada5c4a3f46d9e3456abaeda08f5c519d85cba7a566c7c36d299001384b53e3d3d755c7e797398b5d5f35699661ec43c2e8205022d222149b90471306
-53 1 70 \\x3b4568d77bedc4083581596d1e12e2aa80c4c7807463372bb0abb5776ee52d99a11ae9db0f0672110ae03e944031e74c0d0e44297f8b2bc94a641f29ec7f8102
-54 1 159 \\x62f8e0c9c07a2b89d1b27e040e36c38e73f9ecb585b26d4ec421fb050eab51727b3c3a179e85f63c3a359b56b94cb538c4bd12b961b3fe8d6c4dcd6c9db51803
-55 1 7 \\xcd9e33bac91d40b7494a335088fa786d03f184832fd08b6c743a7816fcbe303db1ea7ee1945069329246034d2876c8a15ce9da1b4286421e8a8361688adebf04
-56 1 23 \\x7831be33ff270eb5651a033527a0af62f324e6341ba90d0ec2a7204c81b842724e454218d237d673e85103ce9100027860abdda657ed6d2663f8b803515f6606
-57 1 44 \\x450be824454fbade387aa5c81bc6a943ab34266dfc10b05c6ce22e890497112bd61c2d168ff0658ce16ce6cf619e16d5d26a58c0d563c3bb667616603c79b306
-58 1 340 \\x4d12a9146c9fea7796959d51fe34c021aec871310cfa052a06c491c78080e07e1aec868d6b053895869a2a88839d11cacc694b98911240c4cf6cc3f9b0dc2202
-59 1 88 \\xff4275072e4c565256ee8acdc04aaee4bd6cd27988d477ff120182e6151defd3f1396b20e833f800fc02d99e02682bb659abbe20f390d69f793d93bd183da30b
-60 1 69 \\x47b4b8410a9f849f4afe98461fecedea234fc09de7236c440880a70b22306b91195d02a18088c928c75eb679d0e080763234fda7a540771bf9566ec465773f0b
-61 1 247 \\xaefdb4c4d9f50f3d87f41e1a2880eb0a830bd77b6a70e95f673e1f52136db84e080f3d32d4062e7abcfe4d129d0d6127c457abeb9937c014ddeeb5e4427fdb03
-62 1 77 \\x11f59bec8cc389e3bf0645fc6a1c874fa96ddb851d8c1ce9337b0b531b2d4105b2281a3f0231a59cb96b89dc3098bc4ea13cc04eed3bfa393697e2b3e6dd2b0a
-63 1 49 \\x5a020208cf6082b3df2190ee44787369208db5d9841ed163de4ed55a3aa0903c795e8882d4c596a04465ca89668e148e8185ded9d375e12cc2e69c8de8f68a0a
-64 1 55 \\x6697643982a0fd39e6608b23f48ab14111d2bc3a9d07ff7c22c778d3068012d5bc71f50956c6875c70093d53d9427c5071c62c82ecce937ec05cfb98a7f46d05
-65 1 408 \\x0a9cdfe97346d35cf209cf423ddf3df6eed4482e806e59c2d8a738c93babe2c9c9420a3ee69ed53b4bbf1995388589bf3604a04e93aca244a7faea196bdeaf04
-66 1 170 \\xc770569c03e1b757305bc78d4b1403c467d833bd2d4711267ae78bb95626d6370fb1692868312157f89b1be4e391db8af558260ca8ac13916ba032c26fdb7e09
-67 1 424 \\xf03fbe51a4fe60c7d0c785af40dbb48360c12ec242864272fd532e960dfe7a63950c07f96aecd258a2c21fb9906f2252a4c5fe46dc7917f69e58b440b67c4c0e
-68 1 325 \\x852d04aaaced4e0de31c2b5eca3b52d022ca65a83ea52bcd69c7ce630f8db5e1339c17c1aa64e0b5373d784d920607ca2618f707fdda72a49a515f528b910d02
-69 1 174 \\xfb5c71ba90583742aa88141ab13cfbd22e79d7b6e4ff22fbfcef202a896cea8e06a9c007f45916a096b58ce9b282a7b970573e184b874192d5179ecdc325820d
-70 1 166 \\x10d7c106629bf0a8da213f1a82d125b67fe2fb2d756c4e7b7a239b7661841dd9fad64298da53d0ae3a18dbeb329dc0f0fab910a7631717ad30e79fdc7128c60e
-71 1 133 \\x8cef0a119ba393d7f3a94aeb8ec93f504d14a65434c64a102da9d1396621889a2dc9d321adddd6ee1c50c11a62e0adfb6adc2aed144c6d3f6aefc6bc8d449a09
-72 1 338 \\x79d312069ae475d90d0ae983e1f92d76a396e22b9d97b3d8c34b02fec192d479af1b03c3d715f792763ddc271aa44f36c0d7edd061579c683621171e01db080c
-73 1 85 \\x85addc0eac2b339c14e2ffda66d06ff8629813768015184eaeec5ac0f28517dce56b35a6d17694e268d616d181cbfcb0f3a8de06c1bab72a84a3246ebc030108
-74 1 248 \\x42a8d321e6e413b21fb324d7a26211abd9bc28c2bfda6ae3cf464d6fae5b883311de7948346f48f6133ef4dc6902c1ba90cbe06a5c5b920c769eb4343384d700
-75 1 314 \\x65fb7c5429d0db1a8116439c7cd28f0fde95b8ff9394b8943f796e25287acb1aa9bca0d74ed4b4eb9471ffdaa37fffa4c0171f0d82fabb3500cbc75ac9c11a05
-76 1 94 \\x8e283e3f672224218deab60800da9540b308e2a1c571fb281f2ec6ce121326e6404c3c333650e087e4a0f940b5c2793a0c073e1926bc77345ea5ba012d30cf02
-77 1 109 \\xfa87e468f2fc28f2934eeb8b27fea2679dc629cdd2f86fc3c86c7b6756818e4a3e9e1509add81ddfac79fdd4c50c53cbae310d4f2e16d1b44bb79c7d1de7380a
-78 1 266 \\xbaa1d34f44471ff2e892b57b3659309af26850aa7620a6b688eab3a3492b09abc53b11009dbd9dc138a52406fdd11676526494f53dc86c5028a6c4a62b95de06
-79 1 363 \\xbb82bba281f487c1a3ff44154b5f3c0c05e845ba957216b228515cbeee4ae4da9348ab3d41f7d9c31fc41abf0dc5101954ee1e595632563d2bf17074e6334f01
-80 1 281 \\x08e76c3fad8dc312d27a31c45cf39bf409545fcc92216f8d46b8b94eca36081ba6daabd379bd34dcbb285e5cf61beb57137a591abf2b97973d626618bc016b08
-81 1 258 \\x1bb4b4cb2b1e1ae5f040b20bf6a4abe8aa393b8462d80acde244aa181c1998262c3a89e6af00180b972cb056c6a7e21562b98e503f67e33afda1c3a1c230f705
-82 1 142 \\xc8290db4e253786144ff690d92a02888e95cc8d8f7f2a4e0a382d558b0647d823b4119e356f677ceaad8a3022a88b137fed35a35f04d19c8ed7f6ef578cb4e0c
-83 1 208 \\x0cd9cc4130de6dbf44d85c6daeb363144daffd9afcab863d15a017c618ea382bd4533f50cce2df29ff7ec51fd32ffa6933ecaf5ed83ba29e8cd3726bb26c8303
-84 1 60 \\xde386e9aaa5d786f01a72f640ec8ab415f35693807b86210a8f4e1f9deeb88dad4bf174613ffb758a0da6460e11aa60c464d272adbb001c4850998e835e2fd00
-85 1 126 \\xeb293e42a8781cd5ee0ab59ec352f7333d5819824da56a3e18f55d76e989d5db155e44940f0e69e9a3ad89b39fbd1331a8a24af955ce6dfb686d26c1422dae03
-86 1 297 \\xe7a8220f27ccb32003cb8f1e571872094f768d96223fc8f9782dbb18934586be17e6961af6469aaf27e63609ed00319c7e3d9f0176562bfd06ea07f881d89507
-87 1 127 \\x5d13d200b6b7b970fa7b89a607f6118b1a1b87f80f48469c9c0378a35c160e35d75d4d48f0459c8b2bf167d513a7746af5aafc86b4fee94492e460cc13050304
-88 1 241 \\x3b61fdb9952496911f4b4c108d8c0377783b28c589247b76ffa3d5f9ad3ce6d9f99abd593389a2fc93f7c1c94859c87063a80ca12f5b98c2daaefd989637840c
-89 1 390 \\x5baf9104b46daeee303b5ae7d28dabcef60873675482c7d7d41b006b59aab0cbd46abb69bf2714c3b3660adc52f665c42bccb16e458f752e45eb26bb6f90f208
-90 1 130 \\x556570857287c29ceb0d7b141b51b47c512d69728a11cea0330119f9a9a68d03f7372cbac1e4ac11d72dd2a52c9f7cbbf38e80e29b54a538b96ab92452951101
-91 1 284 \\x3a8658e15ba52967e946d97109961903a8ecb5f509fc7ac22eeafa5a9e1f1e8c251fb8d0cb8835a74fb3b93f958ad9394a9cdc62c4b379f3f4711ac51cc01c06
-92 1 178 \\x595d48a50e87965314e13328f4a72e47e931c88239f20394bf6b1df5f1a7236adc8a994ddb88fcdf694c3b2601025df8ea77180cec70c3fd56f0426a3d7c5207
-93 1 111 \\x3b7e5b82ebac0400792b0b76e8858cdb44b09ca24141b527e6b47e445f5c03dbd54d1e2d4627a3cbe1c9f063e41f5978656cb104f310b6da9250eefae5fe6103
-94 1 185 \\xc2f60e39389a152566da4267ae4294d907b0c4607c8787b2ca42055c73c59a0ddbb6110018fc76c821bbd452d1583acc6a79dcaa8950c5d2f55365b70053da03
-95 1 119 \\x7a38630bac15ed9408a6aefd2c5691c2b0d23b4a904bb52e399f7faf91a7155b79d2ba82de907d0e76721644f1c7c2c30d392019f3639d4b5dd95feca5b48a04
-96 1 307 \\xd07cc4c57f90253c13b875d3235cc93a9033e2a094785bc3fc40c057b6c99ea57d2b86531a5d3e0147b3e3e23d457fd1cdb932f68c10b620a1ba8b24e246d602
-97 1 345 \\x8582aa6726de25dba631c5a57f46e56a99bd0b3bcda7e7872374f09f6657d7c8abb1107fa3afedfdede5de35e63acf656d0dbab13189ea8342fc00506d37fa0f
-98 1 342 \\x8a5305a6778c386d376bfaacef0d8c2c7fec135e53a6232e1e32f319aa9404f81d45682467f69b02a5beb73ffeb7ce5f59ea10f1f20aff23b0a9ebe8d92b2809
-99 1 226 \\x383eb2ac2fc6ebb44e6d74da119f28024cce22abe5278fe6e14867d4661c80b18e0e6dd5b66f1c592ceaeaee6aec60dbcab42eae2e2e9a2ebdacfa6d9d1ca402
-100 1 403 \\xb81cf6b79b628a2589c93f2a20c3ca7a56af058ae9e78fee851a10b2c40c2c6dc4a81611e92ec857d7d394dde784b21080165bc80ec4a72540ff1b1fd9751207
-101 1 417 \\x8c33e52ddbe9f6005736a106aec46b3ba081c59a01ef90c7ba4a728d4d3d311f001f81be992eb2be48259ff83189b2a52064d33119b291626399142e0614ee03
-102 1 154 \\xf02f8121af48e2cf2978596ac13626ec6a3c7b4489d45362b499dc03ae189eda9ff3ee5b79922b6e99210c5e3f6d83e202bd66480bfb9d7cf22796a84dec670b
-103 1 58 \\xffda8423da3f20164be52f6a8b607c4768702c0ca37978da64c412711571057dbfeabce2a2b221b24bccd29d77e184d193541e91486a15e3c92c7a7c606ffb00
-104 1 188 \\xf954b4851c17a6180502a895e0fbf1856aa7d036c4b8c1b9bea7ede54e5514a6f8c4d0faa7783f2373491e811f64c8020ae2788634482dbd96c76f16f8044c0d
-105 1 399 \\x8ec72b45a4981ce79c999f975fb7d45f858b1b455bc09563ec3b6d68f21bb6c58b004c6b63ef4a3daf52221bdd25ac3dea7c3acfa9c0f2c0aaccd5da4a6a3e07
-106 1 183 \\x62691b6ad2b306b6a4a76d692436f960dae16b3eaa081eeebb5e4a85fb5f5769f416572489fedd05e14ddbaad5ebbdd1eeb63ca7ce558292501d8a4eb1360a0b
-107 1 216 \\xff5e24f460339eb6f9c36d505acb79b78a2dc38523f87030e28409e9588745c47461c290889ec41c277bfae1743bd0c10ac9487663bb52c1c73492f78eba4000
-108 1 406 \\xf40f4d0dced1931805ed39a948b5f1b30f2828df034b846981bdf4e0787b00855b889c2140c61bf7ee275fc1b1c7c63a7941695a149f85b5f7aa08a753f23508
-109 1 199 \\xb2013eda749021420c600886306f3e4850989599cedde2f5a5d23f2a8ade3f580186d02111d98c51528e8fb5e15282ec41788ff66ad68b83e81eff03fd97ac05
-110 1 52 \\x01320a094d4d6bde8d7be813a2ac14d1f414802e8bb8b9145bf5abde24682b58f49b79018e0183f8573777c6417acfb48c79fece495840726816260fd27bea0a
-111 1 349 \\x3ea29677be4387ca4829b74cc8a996333b0f106dcdf5ef04a83737e8765c8d1dcf6b65d85ca88260493ca51c989ff7eb77d17ced9a9f5455ab28890aa4e46e0a
-112 1 272 \\xccdc8fc65cb5aed9776720425340649dd0b33283505d28f7ca17346f4a8691a38f272ff34940c6c4c96ebe5c41ae54d8eac382beb5153b085983895c9ea6160e
-113 1 278 \\xb736d3d60e84317a62c58400795594ef7aa36ad6724cf3613ee7870c4bf760cb66e60e0efa8cd0297809d97a156f57060d6336af9643cf2f5e331d818e75b504
-114 1 356 \\x39b226b626c42dab0b70ccc31e2be3ce9377a06c10c8860799b295d8f6e99e1abf3932dce147a0d49a0cbbc7f1de54c3a406fc7c68dfa3c90217b6c45433d303
-115 1 310 \\x3b7eb8041746f9c715a3a9c3669ee4e48561cd52865da33a316da6533c0cdc304553fd2f9012c6e72c45d8144230658d17336e7148195ce258d9ec342b8cc605
-116 1 140 \\x17133cf226b5fb6686b12b17453211fe8b15801f7f529ba4bd292a2ca7ed334296874764231d6df66a7d088d0ec6fdb93ff78b0c573b2b3277797ae073dfbd00
-117 1 182 \\xaaebd22ef74047355203192b757e4d9ba164d3d878b0e046e259bbf2af32b176cacd30cbf2c4e718968f193cd2e5820c3b8d6bc375524aec8661b9d0ac41fc00
-118 1 186 \\x6510ba3fc965f1bff228f6b8002370f37dd184fe5798895951cac210a760aac11fdaa824163ed17c41e401613f5b73d4b52cc81d6a6c6858a76dbf772cfedc03
-119 1 14 \\x218e5c4f7f4f5ab6d7d017c2d2648e735de85ac7690ada5dbcd37dac6baa84193f850bf9a660c67c59929047a2a835e593f7838e1df6a1c3499d7c4dc8a76b01
-120 1 209 \\x7934862c301537a35b3caad6e88a41706964db6293e384002790ffd249d1142223bccd50f77999247aa75546cab6d45dd9c896a8761d3705f33660f26b5aa605
-121 1 329 \\x7037064360551c6ef88eacb0c324ce456abd4cbbb90959af5bf45458f7a626f94d1aa396fb191b1cf914beef577ebb488e9e407479ae5c59ff3714445b72bf00
-122 1 229 \\xb8392a4feba7c07ae81f0d8c5df8fd55452aeda51fb706c94ab86ed0830a876f64f4a72401a6972160da14cae0d608065d48382ca6ac156d20f049d2138ea407
-123 1 81 \\xb138c7c6f2a3bc1e152d974f9555d73e43e1ba43d8e8add800266bd10a1072a48c20c86652d56c2eef772ea1799213b33af376e4040d2cee21283dd3de27e00a
-124 1 384 \\x15275ea74605a60624d53f5b5c2a399f4275d9c198ca8250591b40de568c14de1afdf08f9d1afa9ea77f26d5b0f60013327ffaa33f2e96432625250a2439120e
-125 1 92 \\x50d08c47ef4cd25220bb9cd6277643766bec72a539168a3a478ed0f9e54f5db0d42af7e2748e3bd4110841c37cb7a381d429cfea050a8fcf319a22f84185fa0b
-126 1 176 \\x77a9fdf79472d75dc7cbf55716879d91bb1bfaa24f2261b218abe15cdc087fef5c378ce5cbf8f81fd46d30ebc85bdd73e061171f45f0bca1058d6d766bdc1a02
-127 1 343 \\x86493a76ecfd7caa62aadd58761d32170e03b9ad8090331f812d0e33f86eef29ec4f7df78b2c5ea7350a610ba330c7723ebbdb6f55fbbde8cd0eab382dd7ac03
-128 1 401 \\x7fb41ed603c731264fc7b2a85f17bace62b5186bf59221ca159a9e36c816ddce5669c012b06cd6eb717d12478cf567f7786b938206221b460f0c1f97d77de60f
-129 1 254 \\x4fe58470a96ca1e58a40eb935585b203d847e0d76346dbb1bd74ed319b40a357144b65c7a43947afc3b7c7c8450c45cfb7bc304b3cf85cc3e173f52a69a28300
-130 1 187 \\x2b0f38dfad897fa2df7cf8dca9f27eae6d3e2fa3140ebf58eddd44dae4a8dd6f0bb5435aa4efe6b07b50ae2533459e852d351b6845e06a0d0d5f46f776155d0d
-131 1 288 \\x27eb997648fe0ddca8547e22a2d96fec04088cecade58312d2b1dbd54a5fef52ddc62b614a82769613e216cb1ee7e8366dd4fa377ad29b793687cdc33cef8107
-132 1 333 \\xbe0b24124bc4dab023562816dffd002ce42d0db8d573ec12f30ed446f1ecf080ddd4c1ba76ae7760a081584b8a9e1d75820d3f05afb0493a11cada67a7e8a307
-133 1 367 \\xd752c8e68bc01fc1e960a0a4f262729cee427ee36b581deaf20cb4eceefcf896f7a1e211369f07c4e6bd9499669ef1c158492734161b52fd870083a60ec52a09
-134 1 370 \\x14a81688ac8710aa49187dfe334893b4fbafb1932220b07ab94606de47b415cfb2a7ed4f3a380eed31ce904eac42a37bc12d86b3abe5b88475a90ba54a304d0a
-135 1 217 \\xd5880bd0a916f21b4302455b3daae05ce8e987411def6c46fd13afeb3aa5b8ca7e0d63c3939d639d474813cd3ea927cb6b866c37a36476efbb2ed865ed29c209
-136 1 121 \\x6baeb0eb2140b7651d3087b34f218597609d48fc8c36ea0c77f3ae4b46cb4871990edfe8ab71a8c5615ce9d65f0f58b3ebb238f04d4c781c35344932603f4809
-137 1 347 \\x5544c7da14efe11b7f2ba2fd81d1fb7b9b612a25deef396a724262587c1b6ffee6b98b5cdd54b78c9661e714e567f5852832928a427ae71f580af004a2112505
-138 1 129 \\xaba065f2cf19b7d9da79ada2083c722b59bb9827214cb0d65ac4da0a6441ee037c8afb2e3aa8c8e466fcf81cd7d21a2de77b8ec8d4480c3b128d589d4c21920c
-139 1 283 \\xdb05e88cbcd9cf845d24a07399df560a3794c2a670dc474adbd34e4af2573afff5a8bfae6149967deb25fee6af8cb5be7dfe263b719218784fcf57f969601a09
-140 1 339 \\x53b4f5e274f8ca46ee5020328dda5fbf33e511b422a1d3e727ac0f60e28c51b296a2991e6cc99ff7be262fcb69d6ce20148dd7ad1fc9450dcd62b4cc8f8bc70a
-141 1 201 \\x9a6a5dc41c59528f3121152be6c7afab324a6ca154389c033cbaad87d8ac92907f058d112854245a0302eff4c9e90036992c01fab2a6d9b95234e0f749d51204
-142 1 265 \\x96d9b845bc74c20dcfb2f3a73a5fd039246696dceaf579322923b9ee4ff92cdc15ffd00946061b180bbb08a53d076e8bffcc2f568da248f5c9dd659a8d7b8b0f
-143 1 271 \\x2236462f3af0a8452e8634b1a9aed7a56c023cb5487f40e7d040b8dd921fb44266c422f783052e86a096646125bbc6e007844e4aec5538afcf5eb1bfe6d06f0e
-144 1 141 \\x8d3392e887f3b53f2db9f6b38849fc57cf0574fab7a1e652f55b824a907977cbbf23038eb421471778b923b3977b16227c7c891eafa454ec47347e858e914d03
-145 1 124 \\x31b20b02f0527b1460555a638911a23ef1bc11cb38e14aeb3a963bf845f8dc2c80ca7ec82a134ebebef9290b880e5a01868429420e4d02c934187e38a630590b
-146 1 190 \\xad2ce7fa514121469fa3ba26f34bf5e3e89f49c4f2af3b0a85ccdf571a0dd4c5a73e8af90a2a3916ee064105b0a527da374bcb9d287161cc9085919cb6466b06
-147 1 76 \\x14714b71734f8cf6bde7c9a069b92ad692bd73364d82ea2a159d833c834dbdedaa192eaf57a62185c207afa6a4eca85e1f49b6cb345148517ecd011d1891ea06
-148 1 1 \\x9cfffe417740092fa8145a63f64307ef7acc8a2b32630af2ba2820e9ac13b60c7c5fd96e71ccbf9ee393398f296f5ec6abd732a1b21a1614cbd4610b06784808
-149 1 232 \\xbd49f54c2027357bb72a1a13da39ee9052190a51fa4da4ac0909aee453a7427b8722b2fd90cdc59b0cd2020660079609d9204d031f87e4a99911ef12d0e2800a
-150 1 305 \\xcaec985bff0b48663782a30da1c7d71dcf975d6d74d9cb5df3a840c05e4361fb4c5a9a320d8eb6284e09e87ff1b9ae8f641bcbd744d0ffdb7bfc5c59b3e1ec03
-151 1 378 \\xc92879607a7b8d053ba29eb36b75671388af378731e969b53e6bb3c8d2ff1edadcc91bddb1b005e19ea3a7a3e54f8a40862a888942aaa1ad15572ae16518f70b
-152 1 50 \\xf689f474fa0fdf493cb00ce3e977541d97e4766669344d9bebcb6380b838330679476d1242a1f020f536a485e59c86b0edecef6360fc888748562796dcea0108
-153 1 365 \\x8cfc0ea7c8a76f05e51e824bf38f1a857719a2d141f3783703937153ba4b745513c49a59c2705a05275bf1f2b4d4d282a938833bb1db57dd5a579266359f8e06
-154 1 360 \\x143b2a89b52f4b8f77ba7b76ff7f9a759b702cca9fd8691d80f1be73cf3377e902f36acc6988a039a8d9fa738b5a847e306116aeb9e7b932fddf6e7b2ff3f108
-155 1 120 \\xc0061c6312560b766e73bf78c0b32b232cf0924ad335ede0539853521d751e0e97328ce61578401412f614aee8df26e6ca6ce81f4426d01254876d9d7f22c004
-156 1 273 \\xbde43cc3a3b5b18e89d704cdd477f2daf03cf79c7d0e41300466e8b45ab915ed0636f3ff86e23607aa3d09e7eb1f2588041ea964017dbad7c186281cb9eea904
-157 1 328 \\x00415a426cad2f007092c035fc53ae548a1103f31e72566cc82a358c448c55ab233fb9e72e49736e735d8cb8f23ff7bed73d3dd0da83d5f91f9c8c4d4acba508
-158 1 372 \\xc4448f841a59cc12d502bc056f71ef1985ef352d9f725ba321960f88b0352405acd4adbf56403ade769a175f4d1b058a88eebd6ee223b56d42b500e4f29d8707
-159 1 315 \\xc109dae837c5b05c3feb28a6eddb6c598b4cd7bca1450d7990a5eaeb86f717ff20da51f2da834386d827c6a9c1c090e3777ab494e8b5bbbe0b4d43b57946cc00
-160 1 93 \\x07650bb4ebb682b3365f2692ba808469e6782cb898533bf1b014ef398efecae800b654639c728332b7c5f186f27ab49448721ecdeca5228588e08143d051dd0d
-161 1 313 \\xea890bd690316cb330baa628d8d81bde445fb729af3bedac9321a7d84af9220c0835933a446fa56f4741e3b2f585ae508e8a5eef8aee1dd3097dfbe6fea4aa07
-162 1 78 \\x504f783c00958491e4eabc782b86e3dad315bdfa9a83dee6f018d4e459b3b082466eb5e0b0a26ab432d6c9041af7439363a0ce21eb5620eee07853521d21a202
-163 1 113 \\x65934bfac324db912a418555cb79746f9c696d241e1bf68622cca4a54ccaeb0483fce1d912c28242831547e841369fae276a2ca19ba5e1f2b8c151873143cc0a
-164 1 385 \\xa31ea49e85c73f067fff6f24fca2021fbe66ea4bbc2d9e7bd0ea18a28118b38be902c0209038b74ecae6f1d3161760359761d1d01ddcd79ab30033a7aa278404
-165 1 151 \\xef69e8935fa05ea07a3f0cf669f4e01fc2dd18c24816a77ceb38278af26c781af0cadfa7b124f3cd2b9aa4d77c790d9ceb03acbb3c5979f6872ed60c7889a200
-166 1 204 \\xeff5949d513ee9768948bc08d48a40e4ede1902dca59d9c1ab5a4934cffbeb535776d87b3d5074475bf5a9d2cdf828e52efab3e9c02cf320383e2705e57e7b0d
-167 1 353 \\x74094b85333836b05976403e5de8270b48de484fe65bc4ce6a3d38e98b56e1fd957f267032ffbd5eb197cab48a14099241292f741d1353531e1634bf2731ff01
-168 1 61 \\xcf4f5244c0773b4a278e68a605cfcffca3c65d6c85bd684609a1a65567cea1aacbab433435b509d99375485aa3a4e9c204c6ca1a4bea86c73b88895043e05b03
-169 1 3 \\xd6b6b18feb16c766ea4ea3b6cf9e88ee91a15cba530e7c0eef0f512116345cf07aed84c7a7e247e34111868950e4252f895187b5e8f9c96706fb6b625d7b1705
-170 1 291 \\x7eaf5d0a72bd48942a8a0386728ba1c1b68cebcec3fa6ac74ab28741dc3b1ec69fbf510fa0cfa08fd557ddcbfda96b357e3ea0560520c9fdf42e33b1267db504
-171 1 63 \\x5302913696991128e3c406729150e0aec00f4a5194d142b12be07a3086f6cae19a3f55d9c7766dcb7455042f822d39227a7a9fcb27a8caaa33f079bbd818b003
-172 1 270 \\x2ffb73dfede01d9dcad5fa92950ec121a126b3bc9c230f16044b1e40c4d79a86d497e6fa0bae9d8b0c151b064525f9c4417b9a8fd9927fd9ef80d822e4e35f05
-173 1 412 \\xb9f22f5d9eaf6998619825ff1cf55395c10bf41775eff0b4fa15fcd9867c0c1482928f24abc1d993e306118476fb99c0100ff0cd9ea77a9eb07fe6d2d3012f04
-174 1 324 \\x7346752d2f150e326c379a23e189beaf3b6182f6b089e805c0ab3e42c97f789885872cf280f762ba945548cbe07f8edb5d4272869dfddf58f8d7269766243b0c
-175 1 369 \\x9d8b3052e57c2973c6eb0b305d17220b19d2acd0a2096f2aafd74efc62fc27c0cbd280fa27e867fb016c985259c283b973b3de8bd51b85a09115d3ea22237a04
-176 1 260 \\xeea5bc92874a056768a872791acdeea8885bd30158670eaa6640bb453e4ecdebf9ba57c0e22e8d12a005ff4d21a8df2498b49fdf0e3c5ab31867631e7e168d0d
-177 1 377 \\x1de8786ad16c4fc7713fc5196a684fc253f25711933e1529baa5f367c30deeafb4b64df4d319856f89f5c9073e762862fb75580d34e84f23b9ce6124a41c7f07
-178 1 311 \\x354ba1c0dcaa237bf250170fcd986b9aa22f8c5ac9fff6d6db3a03972fa389f359242af81eb25d571cd21a3cd282cb7854e14bfe3706c68b99de9107a8e7330d
-179 1 306 \\x08bd7dbd019c1d78441707022a3a43b0fd4e480df06660b80d16f5ce8a2af4b7ddb3488dfe0b6eb601b4d2ae848123d524a265a27971d0e382a62adb1b817902
-180 1 396 \\x47f046fb0bd748c54d9d5dd39175c7d43e3af06ef8f7033db29a261630620e28f8da3094c3062a62f795d4b70219e7a5b2780573db33938d9188a052d2642c0a
-181 1 279 \\x8e8a1ee1484a0b9f44ae40c6024c8bf8b5b50579fbe21f90ed4d4bd5929b95dd1c3527f468da24f328d23f45506340b98b8fb35a22356dc1de9d25d6f3c4ab05
-182 1 41 \\xc65a9c738e407780496f99bf5952fad6df266dd0940769ac2280094158872b716d9a452b6b13003c0117888b6b64cb1f49a55308f98c70f78de0252b2567010d
-183 1 255 \\x6e16124b028b5014816c1cc939543e212f09065741f36c5b83b362df265442ebfea1358ecddfe686db6c145ad928ed92e4756a2cd1ab3b5776e9a98e954e730f
-184 1 86 \\x23a2bbf34cd508d442c78aec116d93d101efa6dcaa7e1fb1129122ccd59853757d1bb9139c862982af67dd8427e44d94ef97b0f04f89382a2777bfc32efb6a0d
-185 1 400 \\xfbe415a6ff34b4012a802e38276a68c8fe158755c3f4175692174e3f0efa88938817801ee0f274f0d0d2368fe808336670571bec91d11d79bcfdf4f603317205
-186 1 214 \\x8ca66caa1c556fcf6ff2d5641d679bf375723faffa87555bca333615efd5564ce1376394a6679b43ea335151ce540e7605e8260cfbff00386fc93226b32c6a0a
-187 1 375 \\x2b007c4b776d950303ed5cb439e2d29efd20ab911492ed9660a4d8d4fd873a4035a09368af86834c863fa8d62529993ccf920bd686c6bed0eedf5251dad1170d
-188 1 26 \\x1192d045a74bfc63c769c39542720e6656445a57143b36bd7f57c2912fd86e89719bf73f8fe3f2b56f2f02f46831bf3484707729f7c9c9c261ce869a49432e04
-189 1 318 \\xd497c2b9c2876ef3a91338a7b050ead167be21adab4c0636e465cdc63ddb9b1110b365365d7e2de99ddfab56d4f339902db6c8d1bb70b908b0abed0f58f73009
-190 1 35 \\x10022807b6f1b511fd76083031b696e09912766e6b386cf329e5dcbfba9698893ac5f60f83484e7c8dccd334f0df56c83798671a497bb2ef5a5428dd96e5f605
-191 1 12 \\x443228d4a1c14c9941df9c359343130d2460295130fe2ca84c23be34253f8180ca54384ef697ad47eaba71ee97a3791e4aeed31eb418f5df920a54d96cf4e40f
-192 1 327 \\x3ce62939da6288b1311122ca2f989e41a29523df46e680a1dfa49e413bbc8ae39a836a595ff79425db02bea0c23abfdc9ee7a399e58d0f8989f93866c3d3e402
-193 1 206 \\x01cb173564e9460630cad4204a7649dad40193d98d83aa5db32f000db3009a32f77f32911771ec0a7b624b9039ac166db1a87c56c980c0aa184fa933fc003f0f
-194 1 136 \\x86366958bd10b2841ee24ed10df4a3447510c21c7fe4ae51a517558825d75f7ea4f85d7684f06017749ff08f7711d583972285644075fc31aa676d772d38f603
-195 1 48 \\x36e69e3d48589e205752049122c2870d70007a7ead6fff607696d7b21f7aee1385124a8b502a2c70b3073ae123a2f5e4f51dbacd781989c73c87ddb94750d107
-196 1 286 \\xd5749a3c5b3cb2b9b9a5cb0eb0e94015c67f45fdd52691c40e2a7266bec9ecb8aabb4c5bac895e21f286590711e87fc183e935489a77b8e9bdc9976224d4c00b
-197 1 37 \\x0ff863f2a70cec80e6569b73084a97b34508cc25afe60a264b176c4317c8396b8313909b085db03b565a1551f54f1071e5389cd39aaa8a1c8936958cea65a307
-198 1 350 \\x0f87f05ecb8ecd5e34464d0711acf23004d7200598c8ddb316c796d939b8ea0f3621bd8df67a31a015b5fc5aa5ff9eb9de9c877cfc6235118b1ee366082ddd0c
-199 1 90 \\x5aa3fb981cc0477bbf93afa7e23854a92fb4402ccde5cc041cb22754cef818b1bc903b5bfef4d98bc0c8718514f5c652917124348b739573510151053416e501
-200 1 103 \\xa24f65b5336fe977bc3c1e9baa8247ce63e89e2a798b6a1a7c0b0dafed3a4d4ebe82a50f914b563a4ce76d9c7139a4a3a34266a8ff511778e49607632d1eb008
-201 1 152 \\xa869844f218d7e4dc027c05deb071db5aa16462cf9ece7c9a4a9bcf7d32b30b4dcff2a64142cec6460961fe862876ef263e7a2ad59d8d45da97db64d8efb1c01
-202 1 95 \\x0a960d1244a5b8fb6e7db08d0a34d7a19cfbf2b6b135ac6262378e33206e802dd4cf3e37ddd6cc31d1b16ff51d5edc0b09a76f18d9393e15b64c4773f0afc50c
-203 1 282 \\x8ae867d302aec28c21411b818c57074b40cdfedb8a6556dffc20859298b811156dffdf03802190d287c82b0f943552446cc2981dfb9ea3b04e7f692243ee9105
-204 1 249 \\x20fa2c32f98e7e92107bc85cc0698d68edc4ffcc6670b9d51929d7cef8a55591b94b00379d7a486c2912399bd44a25e35b55d5acddabd91312c28f73a01f5b08
-205 1 319 \\x6b30e5adfc83fc65d4b988c1b5bafac98a78cdf8731c864920b8dff2d9bbccf670b1ef3df1fefa3be9a22ab5c058207ea27657568c3874cdcbb208d470c0de00
-206 1 398 \\xbcbb8337b930587efe2a24db1858ecf00edba5dd89aa7bc75cc23b5fc717b0680b2781c684128cfff619be7b026397c0b30db87333fa021003f9ff162fe6ba00
-207 1 98 \\x8cd8908a624e554dc42ea5f0ce499d10af641b83f1e6b00dc6762ffc1d39d967ee906a9b060333d46e6f0a1e49fc01077d81eff16a85a827d7f213d6a372c40a
-208 1 280 \\x66f19f06d47a3f4a52a16432fb9a1b7ebaed5d8ec59f8dff123447b9518bf4c010e4977e0bdea26225a69de8ec1100924bb2bf7e9fec708c18f21804f59d3204
-209 1 71 \\x77723552669cef8df4085da0922f2ce2d9748d915929907b3db09f88c6263658eddaa6a8744afdfa54d91d231f8afb6134becfd8fd9976832c1792a48859e30d
-210 1 56 \\xffa369594479078bd93292e8f5e2e6af968c7f96410f61391f7de0aa9a66e7992720dbf3ae0bce7586fadb80536abced1f5957ea63c0d61a13a37660ae8a8103
-211 1 173 \\x8a8c2dc13f8c680f30ce2d2e4de4600aef1ff015be36b823bc7c6e6c4af7a9da22b5ce02aa5aebee17622c9bf806847b247ccdadda6f0c9429a87c05ea008f02
-212 1 290 \\xc4fd12f912940b4a86d304edb962e5a974ca0293a4e6f52da9039edd867a7c0863857136b5f89c48c38f08da290d0943b15212949776a5cc18c754a182d00a09
-213 1 15 \\x96b1cc421f973edb79fce0337151c0e95ecf04ec47351a72f3553167de845491629a1f8f92a01f8e34dc8903796b88d1482057d4e6f1f4879120ac84658c950c
-214 1 386 \\x27710a4c92d4665e8506606c622b3ae90232261eede5ce927d4f75724867326ec93be6b03040a664837910919feb7cefc5eaaa66e51380b7c223da17c9a2ac00
-215 1 259 \\xe41578f333b2a58c305198221ad0782777b9521076e1dc00f7fafe71a5cd738c3553e2bbd1b6457884aeba543ec0f471e832c675fa758195cfc6bde35d37950f
-216 1 163 \\xc6dd73c32a70d232fa61f6cd6b13d08b5cf5211fd3a1308fe5ca111ce843da9b803f89454adcdbc0b82e948659540b60791f2b7cb8bdd0e434c4e19413b23c0b
-217 1 409 \\x4f59e87406a5e86d4a8598adb7023def0418f4773f14634fca09e4c8f837bbd2271e94e14fdc92adfdbdb34f334db4d2951618d60cfc250ae55e633b53ae5903
-218 1 114 \\x607d39db12b28d54606bd792992cdff5e1f3a75192a29145865542921bbba5f156d35d402dbdb3debe716d8280c10e6d548041441036658405a91fbb600fe305
-219 1 219 \\x1c4af85f13e0b4e705a1ead3530b4ceb8515c9b39df17e15c87fb99a289faa9a5e7a980e92480c2669b93ac660881c2fb956ca613d6871d6234491096a6e8501
-220 1 267 \\xb0acf534651199bff4393942480ff8b2acba4637a2da876be87e9d025b20b02948dc123701f453974db160454dc1c2f31895bb0779cb92b0d5d1e59556517108
-221 1 246 \\xfe36c536e00325358e310e5c55e680fcab8d818c428ff4831e24507b03a747fe9e4c6b167c437bf61a577d5479b395c6b03457829a2af07f908d0900dfa7f90d
-222 1 218 \\x191cde049e1c1e08b2c29ceef1638d4823341e63afcf8b98be5e9746b6b9411bc87e15f3a3d3576fa0f9fc3d475d19ec34e007867f861a8815ce712398c23a01
-223 1 31 \\x0684897238298dd0efe1754ff6281716fd073690310d900887c2b9668ba2db3e7635dd46db802d514aa27717bb877b811cdd66a66049401b2cc4e80bfb698b0e
-224 1 75 \\x83851cdbaec68b71f8ef848655ae3d41fd8a66e6ca41add6fc71b99788df393191e1116ac0338d783a981978527d095620a21ae12e2e8b9ae80ba6560f6c8b0d
-225 1 359 \\x97225e40474b73a616813fc3a14c2fef198ba3f84fd908f0df80722572814af1241f4be5cb72a730d4eba42a30824c8447547bbf4b06a92f0ae27321bbb3a30c
-226 1 421 \\x6ec1038610c149455d67b08cc4f462db0afc0648c30d50d8272e668372bfca08e58a9b2a9bfee939ee1fa9cbf62232352991ef0fb8b0eac8b4b1e57118ce6802
-227 1 59 \\xcf902136780354a56cc006879135948331e33a18926f6aaf4e319652b3791a6140491cb4c5af1c493e343e4f046d3da9fe257c55ba063b76b4ed9d3159f2c709
-228 1 149 \\x8beaffedada7e45847ec13732f0947ed39c305b1e9f06437d5e41e9e111d5c66cc7790fbf920f2d38fabcafe60cff10b9504d104ec51faa9c282e1bb230d170d
-229 1 28 \\xe19525a95be0b311f2d4d3f55eb2447a9792e1848d1b774b7deb61b2df49642523248d215d10c0ca7e7c3a751f440139d4191b1f92c4147ed8b1e015d7179100
-230 1 202 \\x8eedee617cb62e601a958918375e36ac98d76f19a0b3369512964f520695bc9a27d2189a54751cd2094c18cee064bd7ee4ed168bc54b0e4b3f99371712d37c0e
-231 1 383 \\x615ddb8b49508de43b42194516dfd6028c799d33b6904e16c8356811a906d4e98aca150822f9ddce8b7c2c01135d70e8fea6729c6c9bbf8e732f9c62a9ff0105
-232 1 32 \\x6c73e9688248ecda3a6bc5863389be689339e65df52d80f359a8b726e689288f75bc1b871acbd8235daffe93558e3398f90c883250a773396a61097d2ef73e05
-233 1 330 \\x2549258093dac74d6c29ee3ed9868a50022469566963bc9ef7b17db8036fc77c07ca675bba42bc7839a211f5571e878c9858b2bfc3db19e8e6069802c6524c0f
-234 1 79 \\x1ae51f484f9ee0346799b5be6385bc6ae765cb6df534ca4e0df581ff55e561e8757c0e6265f9664a6c99bb8629acd751d1a6bea9260c4c6b202898c9a1365a08
-235 1 205 \\xdd5471665cb123d253512e233ec0285df6d8d054245db2262256833343088b940c278d59086f4ecca35c11cf21d3cbea0492c8fd5c7a74be7eff962c0b17100d
-236 1 341 \\x621a5de545efc51905d25aa9653ff0643c759924f6dd572b7ca6eb4f0b6c7747eed0445dd34e4ed884dbfc809bdabb6ff35706c224b538e5cb31ace7c4ea5b04
-237 1 320 \\x86ddff69562ced3bbc0c4c01a8a26ec6361662d1fcba4b05b6e750b3a3276b4d88e632241d30e6dc115969723e06671086ac0cff9673757e21b198b425b2630c
-238 1 237 \\xc53843b9dcb4a52bdcff456f79ae086cb5d0c8e252a8a82cd7db980a51af9116c71078f76d5a8386c6129e0010660a0c9da42e79cee576050e45f0db24bead06
-239 1 99 \\x1a86417b373f38a4772403e53338a064c527aa2494dbde84ce58cfcd3768970d2d115c8d397f39d89cda6b75bab1f54dda221158c544629558b5e18ed04f1f0b
-240 1 357 \\x060975aa054956fffdbee8857365bef37027c3f31383c60f0de86cc5a68614ec2cbdf8c5d7c5a5cf9ce272588b04db3883d1cd33a752afe468bfce551e9abf0b
-241 1 420 \\xfa348de0437f5a061d285182268a13419e998e3b9318f971f8b5305a047edfd6aafdd3075a62dd84eab199e393dc050164f68f5b048ad04fc941bd4d0f308b0f
-242 1 309 \\x049aa11bfbb8c2e676382c14c4c275b421d031c80d9c6a6f481f3ae2ab1f2b9f63785756fe51d694d57a813b8ddd0f8cb122874779789e033e4d6c8d61f0520b
-243 1 8 \\x34e6c3b4f96d3fc2d4151891edc8f9b3716a095a899a12ca044aa461f9dd79765317b15207442509c900f358921dd76e3ba84966874672f6c91ea841f827030b
-244 1 177 \\x435fb1985a8ad21c20a11df25e778507d71e03f23ec6e6e2dd4b5a763a9c9c18f44e48d8ff4d216c450d4c1f9ba0a2ea05f0c53493f453a96b4282422f34d505
-245 1 301 \\x37ad99f3c54140e3b2c1d822d7243129478f712cd62ca74b26a43eb76fd87b1b7d6691c7361259d5cbe81398cbcf2c7f9c55c1d713bf96a42da901d054d5db0d
-246 1 74 \\x8a2e12f43159071ea951f015786ca0d2a9e5576758442e3a11d374d403cff81ed8533f341ff5fb7d2c0e0df8f93b840b97d914373e9ad50790877ac7d9b9c008
-247 1 379 \\x0b29d74c0510d328146e8b5a64805a4afb10bd197b745636898d2c49dd4bac36465222aa92136007b21ad4cd276dc00b3fae02717d951f7bc67d196f2b3c1901
-248 1 30 \\x8bf9c6d1f60b6d43cd251416df0da7aefe4e3195bdbaaf0590fffc3bde570374d169016cc9272a45ee8475eee47670ba32bd28e31415bc200c3f58a407d3300a
-249 1 29 \\xda7e747c48334022f316ce36176cf92ff68ee60e14bfe0a6bc43455f1be856eab7f08b63553390adc88301641b82f39b0a0668436578cb9fa54147500e305401
-250 1 156 \\x79d78b5d63b02be1f1ef9b935313c5befcc5b4c37f693d6c370a5dd5c5518917044ee1c0f360ad7eb6b1efec1de6c9b4cc6451b7f7a84fc8c44ff9ab6a94c008
-251 1 227 \\xc70aa9451a0ea44a4291a43dc543d67b8fd993d30f73ca1ccc5eda6cd444bf3c1358fae586dd1b97f2a5df85fdce84490f3127274dce8bd630ab074c27573800
-252 1 415 \\x738f0d313f74bd20e2ea6af0c1fba5842286fe20f31583c01d680b4d71cff68e055d89e82888880c626d765683975c4fe5be8731cc3e42ee701df5c7221cc701
-253 1 150 \\xa8ca6e31bd36e6b7282bf44eaa9b967912503866fb2df331e0d33d2815fbdf7f124d368ddea1d1ed96feb030ae2b8ddc24707576e313a594cf36ff55061cd507
-254 1 316 \\x73215004788a5366da42d8dec4874790d72619b8f016881c84e920b08c089172d9f361c4a815a5e96a028f4322c09071bef09e09d6b213220238794d2c993a07
-255 1 200 \\x3a04987129d7516986823b04758fe7b81fb0d38ad49f03569af2abc7d3142505baf9ca0653728c893272fd05deda793b1185a07c579817b3d8d1d84b0468f10f
-256 1 371 \\xf9b93e84b02e65c0f832c6f3e2184bf46ebeffeea5ada72a7b430dc40761d3c3b5d688e39dc87fa31685b2a315378656702f048be0ed28b44dfab266c030900d
-257 1 172 \\xbaa3751c12662124c4793390afc97d7be8e1352b89a45af4bf364c8d2bfdd3e3e74e62563b9b7f03295b50a880f805e727d1751ba75b6ef16504bae071493504
-258 1 274 \\xcd9eac598ceb9cdc5e78408ef6b75c23c85a11c444efca30026ae7568715650750094f616f59f9833f54acb37a0d678beb584e9411c42cb70c9dbce27646b106
-259 1 165 \\xa141198d3550f8ade882da5662cb57e10fab99d248d2797abae38b1f902bc937a2e74ebc6b18e043a1a94af4eebe0392d04350501c981891f6c77554a4378309
-260 1 225 \\x4379dc18e8616ba3979b4ec16dc193a29ece3a3273272567f7c8a72bd61c79c4632aadcb96a2ac22648d369dab45606597f44c03d76d73042de034cb89654b0d
-261 1 413 \\xdfad9550783f86768b321eb704003936391f5c0a3852a24ee4e352b77bfbf281a85a4584fe4ed8ca499127baa849f6f6fa80bab23090884850e51ae33bfd6003
-262 1 13 \\x578d279dd0e1c17f28d4763f507a87f7b0e4fafbb71b59ccac7f9018e866ee5ec75d81b602a8f0008f8367cce4a7b1b738bf9376c11dcf667bcd5f679743b908
-263 1 251 \\xc4ec47345d3ab8ddbaf19ec83586a5e894cc71d86ba5ac4024c3d8ca2fb183128b4b6655e40d54a9bf84cdf17ce203b43c7ad49be856bc6025d1ca0c5d21eb07
-264 1 233 \\x0ade7fed2615a90762bf74aff07e37efa456da3a0c004d0b0e621971a0cae5094c68254e8e7121b52cc6f2d0d86151a641f36647abc09a95028a3141c0460f0b
-265 1 263 \\xb2d1d42d2fa777503e128c97279afd288ddce7c98bcf3b72998f44bb3c0a041c39c4e90c151f6f073d90b7e9d4f57d4c45746052f00e4d12ee4cfcb1d2542e0f
-266 1 132 \\x0345e5a6bda437f4de78b849a56ef530672134f42fa6cf9d675f7113a4b2b967309f51fb03f8ad5387134a7bb5588ee032e535dc767b17a86a33a0d1f12a5d0a
-267 1 411 \\x373e4b12038800058d6c4700b19bfdcbcaf289e4845e6aa168156e91a52555a4e4ca023dc23257f1160ed988a938f57b026fd8f1d05be7658c2296b83a581506
-268 1 33 \\xefef82dfcd5db9aa08a4c4675ffeff3b15eb596405f9d5c959e2e24e30316d23dbc4b3bfd7fd70cd6d4c591361ba3e867186b308a94b365492bc176d5b113808
-269 1 38 \\xe72f2f8189d1ca25cf30a3e945e6e93c7714489249c756c334c85804a9164d2e4bca2a8321ec761e431dc4fb48a4bef68ecf833e4112021940558c92f28a8b09
-270 1 9 \\x217062cb448c5d190f08e74bac9e8dd3554be12a6547c52966c6cd5bdfce47604fb8466533aff8d25f75cd7805ba142d5a9bfd87027ed561d684bc7efc943805
-271 1 334 \\xbc50238c6ceeabcd2d42c7199bf5c48d9eceb6e4d94c0e97cc81a4c8952f2cede76844eee7f6f4fcbb6be6e63e88154735ac102bc5e7c82e7f3fb1058117850f
-272 1 397 \\x52c69139765f39c7d7433e3a2ce1d8498c8e0c30a55a7045ec50c16131e67b2171924352f859dec76acfe51da03f5cc481cef3bcc0b97de1f170db53a6f02b0b
-273 1 337 \\x17fad236e34421912b28651558781fedae6aa84a444f982d3dad4317143dd405212e46027fdb32fa76efeef87884be3dfd930b54c111669a92685919f53d6808
-274 1 157 \\xa7334238f7464880b968aa39ecfe6510138a51bf04729cee6ba176ace86beb00f1230c5df7b868555696ff29ad97d6e830592c1a9b9ddc7920c5526992b33305
-275 1 112 \\x9c0eefdb305bca447790ed1bcfe39f70d689128d38b49d36f8a9e7705e98345a24ff4745b236447d20a66397b12677ab7e08bdb629e557362e140c0534dc3c00
-276 1 228 \\xdf59867ae90bd5a5110c321c00cef03c135e2e97c74351b9203fb8d9ad79f3680b46dea2a429ef3db4bcbed1cb54b3996a94a7ef0413bb635c08c821df7dcb02
-277 1 376 \\xf31811b3a95bcc49f92f6678d8bc6d4447c7d304b3f93210681f91240dc9af16a6c278ec78236e12a79bc903b3f437680ceae77c750390595503bd9002c6d30c
-278 1 332 \\x9ccf957482194232bf9bc36d988ac1ee70dbd9e9c559ab4b783b2a10366addebf61993174a0e92c3bcc32ec1af3a5ffc2f3f95e5beac68930ae26673132c2b08
-279 1 17 \\x7ebee3da4f6f69fd1e1fcca2922a078c89cc07d45e2268c118a11210c52e3fd02ebe5f6ad7f0968d8b776fd49d200a9aaf23db154eccbe74f4bb7ee35e5e5e0c
-280 1 203 \\xa8e321f00459d0b033aa11b68cc87f8dbd6f6bcec46e8e7cd0b88e4fc960721bbcc99adeccccc63bdfc4486066dc6672a567cedec62a01bd1870ee20a5059e01
-281 1 89 \\x517045dcaaf0e0b1d93dfb9d407d8224af2bbf33868d6a801a2abd4f4c65cf0646406383322f32e11f60c1b236d291f747621ad27ee24916eae85bbc54025609
-282 1 269 \\xd1a4ae86205be103d4edd4dbcadb445e7fa1d2f1e8e518ac337e9e857ed5367ea54f85054b160b77c54340434abb575fd0c76e5c925e0950f53600e730e6b508
-283 1 361 \\x3600a10e49a51796548b7b159d95fc9b3ccc1aeaf9401f223ff3792cd0c0813e278c6daa14cbec0c0374a6554c08b44b5a88040c05c066d2744b44dc8180fa00
-284 1 87 \\xbaf8396084435e259ecd58f77dc48fcc20303b25afcee1519bd2706ec10a27dfa18679312ff430f387c0a1adc5efa4f9365a58b1af9ca506df8d25d12b574c0d
-285 1 387 \\x3bd319adf8f1cf77a785d073783a6a2356d8bafac8c329901e53f99485e92eb4de2622a31904dc1a6a63b13f96476ee2392fd547fa5c050e01db60bc71725303
-286 1 25 \\xd3e9fd99c738a5ad949cb54e3200e4b4da5a8aea4886f4301fc9d095e2a402cff18a012ec5ad6c94dcf3aaa76a69d9c2c27dfb64858a9745ec8e7747521edf02
-287 1 4 \\x733be87dd89b9e4191cca7d211e1bdb0bac335b3012d85eafcfb259da7714934f82a446963d0e47e4fd9b618c3d4779c1fce156ccef20f9691b41f0c88662800
-288 1 84 \\x2ef3a87dd7aaf70646f7d3d29a76638c93ee44ee9e8efbf3cf3e5056b36bc105a2fafbfc73f4f5edafc3b6e651dc090e1c45b48a111e40fc5a044cc3e36fbd08
-289 1 404 \\xa7d25985b3ce59d2f5ca4333b724eab4d837f9ed11d2ff4a46aee9e835e1f5f7d157e403440f88b4d441ac5538b097bdfe7488367cfae6ee12e9a86e3681250f
-290 1 57 \\x7dd8036ce8f4ab6ce68cfa1e7243aab5e56c5c3484de11b52d0aa31afb6a4adcb53d79fab324f70afe176a82f70471ba6e4c45ca04ae65d0ddb4781f26a6da05
-291 1 322 \\xc5925a902f7c64f81107b3bd3951f9148defad75eed5b4caa12f578798a7c15f6e33299f1d387652c8e3e26478169fbc8fe2ffc3f6ea0ee82b9a7349aa048f05
-292 1 374 \\x84e2014c687ab11daa84a8282572ad504bef78d52565cfabdc3e4eb3d950e51dac22d42871c725d5a813509a10732b25b869729e88adc59f8ef11c2d17df2c02
-293 1 18 \\xf83a6654e844e441ec4ca8166d5ece4377f8cae37b002b8f82cd7e9f0b30966df628229a784e1e976f4de5d4b353ccf19ae8f6967bd99ddbf9992140d1b9190f
-294 1 105 \\xb34d961be21668d823b572b211d38ab4d363e11f14d13e5e2d254115d10d3844d13e4bb161d38fc11a5d6d1dddfc0d91d747fc76cc1bcf60e838d4d6a63c2c05
-295 1 317 \\x51bb00e7b1e5ede29e89c7fcd498f7958002e254d88628f84b689a94dc9fe30629f7005499877a247db4ee384352cfdeadb959e20b73250cafed9c9c984a3402
-296 1 393 \\xb895658a2c52c72afbf616f433ea328ead8f09ed586754918640ece30877e995df17ff68515a7ca44efe5df641c8708e64964662c3609434dfbc8caac6674f0c
-297 1 253 \\x0892c3d3113070b1dd7240df49738bd8154b4d9e12f154e186e3430b93eb83b2641d1bbee87ec98f55015ee71c565fa562d008f925d4e9268f67406f94b18d08
-298 1 388 \\xe3b21162cef98f1d91ed415e91a920ee0a7e1347cfdeaa1df594b93ee857791e61a1dbe4cb0b385fecbe37996c1c175ea606fa2e207f7c57586473dff6cff605
-299 1 161 \\x05db586d73bbcd2518451ea82c0a045e973d7f626d0b2c6540f80fda8006a54a56baa6d5ff136527cdde0b25dcec5a07d259e64a43348b2ec7f0fec6c3e96409
-300 1 162 \\x67de9255d89da7de9d06efdc56a9aed861e2cd339790160857855980e03ce022d5fa2fe639fc22cb9eca02af4dfa3441f55bc80490296299464b9c3ac66f7109
-301 1 67 \\x9ee8df7ca82564c02eca64da70e57b3f40de42c4a79b16419f36de88521faf7f9fabf0b8932985f736c47d0d8d0795cb628b32079bbdb982be5a47e440553205
-302 1 215 \\x2b1ffadf486413207348b6ad363e6536a2c00abf45b512f8bf4bd318b8c7d715fc0687dec93aeca99a4d3a19ea43f01e70904c1b8caf4d4080794fedd975fe00
-303 1 115 \\x5c0b1c38c1c41f7b51f7ea607310897425b0a5e704413695fe3ee9b06f170918f8034e05609c1ace25244f718731b3329baa99e698e6213c4811fa7a6c6acc09
-304 1 148 \\x04f2b60ed5c21c07eb8c3a7886618d1e508886507ba022bac991cb792a8f02c228a9e4f42dd5a97d9994b815a7adf7243765bd81784f12860c820d9dd0baf50b
-305 1 366 \\xae4120ff8470b19714a00d7b5184ffc95fa346443fffefbdf4043316100f27757f5fc3bb61b7e068041eb14a5a30df5ee1cdac8333dcef5dd8ef423dafe86e03
-306 1 303 \\xfcc7027ed22318dc80a47d14a433153692d1ffbf567cea6e96f737dfda0095c15a9b928d59f4532a02c58e335c9d0a1859e6e5a2095e0ce7a37c2e7a2aafe808
-307 1 285 \\xd90cb290dea23952abf26e1ef2b0394f20a9f12568ffeb077bac6bcbb08bcc363e75ded464cd6a5ff14b63d8496f795d3adf959af2fe26f69e3299cd6c992e08
-308 1 298 \\xbd945c90490816d5255d243c9f9b16108be5bc7550a17e378ef814a1018d27c14917d4135c5a2c0c2c5fd224e4c24610659bc80b6d61f4c79548ddd772932308
-309 1 42 \\xa6eee96f03ddc8f8db1b370126b68056a08b6b42c43b62cdd16207128dca1d59e9f34b5335216de4565e7c85656e0f73740c24ff1db0a2f6be62ce22832f3f01
-310 1 352 \\x980012ebfafee2225fcbb9a748a3bbfd013328225deb29ab69abca83195f6e291d7848b53e7c3a064b789c915eedb9dfd223f7c713b977bed84c70cc1fac160d
-311 1 336 \\x7b1e3c7221880e9f31c65117c2014279d7c46aa2a80d055eb5fde8f96bd9914e263044755c17b23a1b5a8b3d5c5438f42b7d6b62ca0ac3b47c65bd32dfdcb802
-312 1 145 \\x18585ce6251f2bbc1e71a64573d61cc9ef0b0af3e3c7d211a61170d4b979bae701e1f5713c578f402cc1a66a84ae3b30bc0713e4148e6144c4e7827ba8472b04
-313 1 73 \\x96cbf5ed12d010dcb06ed9700961cb871311557c3e54b8722fa06bca56452edbc03129d3b604254f52b5c07eb8d89fb8dd2dd608250d91fc1616e16048b7fc08
-314 1 64 \\xab233c31e8bb5fa38a5bca092e5c2fdbe02566fe9d777bb39d1cddff33fd6402fc8887ff071f5c8f53fc182d3085df6a0e8b6410d511566238fa0dc239a32a03
-315 1 192 \\xbf2e8b5e626ba9fd364bee10b375b8ba1d1d7f9061ffd1c17f6fc3187abb8c20446bb9fa3c677dc0ad23f80457c6849b92b9e358456707343628838367a1ad00
-316 1 416 \\x8de4a8595eb78b71d293db6d435e9be747d0fe11927d898c39a9320e3f2f48fcabc59b3fac250d43768dd9d20641ad66c2f31f177a82109229e582432f7f480c
-317 1 40 \\x1890f8461a2af155fd757506096405f5bc00c222b548db2ebbdf31823fede6e493a3e8813dd93cd758cff384aa18a0736e6c20a6b2154c5e2c53038bc6aece09
-318 1 134 \\x6ab574e2a865b9da5eb7767427e3f5baa8dbc0945216a16d21e071e1c9da9828637ec5778d9bc33bfed333e7a7142b9706146433f38c2c5ced9534197c83800a
-319 1 189 \\x19cfbab4f6fbb279d89ebb71a5a15bcdc2b616d99dd2018d66cc05461f5b2539f0034433eca6f5eb9a9f2a1dac5fab054e642e902c3d085e821bffc27947ba02
-320 1 419 \\xb7391a4f4f7bef81058e2551e90574c8bb92ccf203527e88951c4d0985c8207982206b5a6a302f40645d5c6df46c9157cc0f3841415c7ae557a4ec9704ad9d01
-321 1 117 \\x9b9f08f8f0c3dea7c746166eaa542e29edf612e5ee2809152ba59413c297119e2e8b6e5245101bf29d69235462c991271433c166457a581baa2c2d2cbca39e0f
-322 1 191 \\x5f8756e68133d457a99aba6c4b72e80d525834a375d22e082347e2cf2289370e4dd3a677a9ad713cb1d6ca0f2c9540ab7e35dc4b622276bcdade17380f4dd404
-323 1 11 \\xef2466d552c1c2d5ce5d6a9de4cacfe32c3489f5fdb7d0d619e4d9643bd54cea3261767c5ea9022b80a5b6514eea775109b5da962f2dfba35617cc1adb063c0b
-324 1 181 \\x208d9fd9a031c8a1c8e65128f4be394b5ab8b4e4ab18e2b0a7e15d9716b35805a74579cd70ba7b30df2d0baf16bfb149834658e3f23b7831696b8552b2785000
-325 1 238 \\x1c9441a57a0a1aee1fa387a097300a8a8908aa5822f463b3f8ea033dff4b7fefe4ae92cf39bbe44bddd96fb57d01330144db4ba373e9162c3da5ab31b8562c04
-326 1 230 \\xeed11a34ac313a47e94aaf2e7d5933f2a1c511d797a948f9c5b292f28a3db57a58b2c5a476f9aa7ea10c2e9a6a6fa4c9c69fc5c6ce1fb8597309557e573f2901
-327 1 220 \\x85ad685335f2ac95b702aaa3f23817fe602a248dc31a675a996a8002eff4b788a83a4ea87d20692368e380a492242b91de2db5f6ff015181835629bdbea08e0e
-328 1 351 \\x4db51d786c390ae2fa4b771f84d0cbeca7b21f394c1db53cabe65792ebe657b6f007b2ed9a67934a0b54d80404446a8e77b80e71d0c62854009c6123843cfa0e
-329 1 211 \\xe0f164a8ccac13fc116c6661a72a5ac50d80495cc9fafde3728c0d1a55e9ee93e671d9d2003a9b036ddac28f6d8ee90058ea2de957953818828bc82dcfbfb400
-330 1 410 \\x9fae7383508efc7357892597023ae5c6d49d413db28c5cfdf9f22f3f43eb50b74e2b5854f7c86f1873f8febcf7b7296952612d21e5182931dd4ab770556b6608
-331 1 236 \\x0b04bba0ff62b1aa216fbbf798f23c744f86165c75b751b87ed48f688a1cf8259b434fcba40d4869bc090cff65a13173a0018557aa2fb595cf9ad6c483274204
-332 1 364 \\x755c93b4dea032be838e3c7d88fa2c2a6fb0b367e08b899122c7050f9980c2911b195aefe586a1adef8500769b540e711a3f93ef03df54311e2578f9f39d170d
-333 1 331 \\xe3ee8154494ffad6162105c39eb2ccc271609d29b860a25eed11fcca09f14643daf62226711daf446248e918e9243aa6be4a454ab652403d899ebb5b7de4fd04
-334 1 54 \\xf56e002298502cad46322119dabd8b6ae6ba01dda6450aa106512f76095d027471d2cde26abff21d5591c6da79b66aefd0115c37738b9d8a3725024ea8518c0c
-335 1 223 \\x65bee5aeb583f2227bc6bd73ddf5435d38ffc3f441e8ba342ae79248803f5759b2e81fb0cecf4b3b1bb641bd6e9ce223cb3a89d318a9bf6ec51b65d4ceed3707
-336 1 296 \\x5abc5e0c7fcc6a03cb46d013204236842f8351d306f78f4ed59ad817aeadc06c2af05f70fbc357583bfdb0b68eb474e09fadbdd3651c18a1b061d4748297eb0b
-337 1 45 \\x4c0a8bbc25ad91c57cce265a8180998d60bb5d93e09813d03ada93e39c5b85690f758a87bde747483c211a6897e0bf9818c35c1bef21e6387036f01f6e32900a
-338 1 123 \\xd22eaa15669508b3eb37a0bf1597c1a7fed39bb3be8c7c48e6ca5788361cdbf5084609f6dd64bc67344508d880da3622362e6e4de11e3c81e87dbe64f8b7fe0f
-339 1 27 \\x5cfef5fb0cbcfa1412500bcc0d58e872058734ea0a7005dad3e4812399066e54b71c949e02279bfd907f4f496672b19d7ea6c278a81c927bb3c74467e6cad80a
-340 1 107 \\xfe7b81d8148a2e7b4cd6fd2d3d5493a0edf4573caf86ee077579b94c878cd70a951b223825b892ffc5c93778e232f64965236c7d6db1567dc87bbc71e3856000
-341 1 323 \\x12fa01c1c6d1a6a1ad13f9aa830f33499b24c997b32d3264c5028d223a4056b18c477133fb49c00a3d931c55f7ae4d00095d8a8f6609a703b7a79c78cddb080f
-342 1 402 \\xa7d18aa9554820608cf3f73b5760bafda34b52c6ec84980f626415a6e1bd7ee34501d378a9377743b1a71878ef69cdcd39077154f4183e26c4adcb4d01867d08
-343 1 239 \\x55a9e6b0c13c0eb8b5bd2e73a940c986525710ce69055e9dd435e134e3dd9fa1f7277a1497339be45889023b1bbea1aaa48aa8fa2e78c4578106809d9400d607
-344 1 96 \\x1fb7ba1573b41668660ed96262c6470af65a275264073dac1c0626989f0b6313a48e66254f898d40679aa3c7c3ff05d1154dde0394387d2e54e64ada878f2906
-345 1 2 \\x23f22822e1ea07a4f603039b59622c092dbedabeabf1c658239943b501fda5b1fb43acdcb522a6663ab0787fa9a02332447b17a98e9e5c8f8ab6577868182307
-346 1 24 \\xb3a8bfcf3baa514892441af8609d77f105bdef55d2e2c5428bd7e17609c56c4ef1e336195a10ecae982c0cc0e0250b117e198d92663792473bb0c50ce66cc00d
-347 1 257 \\x4239818442ccb487e2a0ac66d8dfdeb999a9c6b8b26935ddeeb8f4f5bd2bd1b61758ae89e018187ab6139256798ecb3f879eeefde07d7f0de4c04deb75c7ba07
-348 1 321 \\xdabce0317a3ac679e6f44516c6123f2072b599af60d3398c2d2cd0cb4ed77c652b06edc24b1859ce72ecb7146b892742fc9fff592145717d3cbfeb107e52830a
-349 1 300 \\x533f3ff1da3d0d14482f3faa17bb583b168bc79f28056a350a614c1923a796d4a7e9a9e502a6823313a88009d1026ded1c043946ce4b490beb89c15c66a00702
-350 1 277 \\xa94307597dc9018f083fe97f1753c99565b833dcbd6d4c3d8e777421dca5c8bc77d6d100a62712a41851e173113cc7b716d39df5facd90fc4d5d0c7df90ec104
-351 1 10 \\x9d161a67015541222c4071f6188f4093053265524d271e1172013b0bbb8dab6cf5c92c134de036a74cf83a4cce6f75dd4400cc8fa182245913beeb5cc37fed0a
-352 1 302 \\x1881023e1537d90e157569efd0af558e761ce1648880f49a3d922def30a178ac534f6f247a215aa19a316fa0d8a222d024b019bec0d06d38506fcb88b0393c08
-353 1 104 \\xb834f7345ae4c392333fc47ca5f5d6ae31ce3e56d47f8b6083a15b0850ee449d839ea85b64ac9ed91a1d46041218797a7842816aa2067c9e618afae82323d206
-354 1 405 \\x3e390f072a093d41c18fe1c7efb622b7e84a28e6638affcac3e33ac76d6f31ca569a98b86c82609180ba821b579a51d411cbfd87561dba1d0744b8e06356bd09
-355 1 118 \\x634335dd5ceeca77cb729fea1676965bf2d52d5839529c44a434f50680ee66995b220f39165b8e545df2434d8089093940b6ed4c5ab48011623af8f6d970230a
-356 1 196 \\x9e4a54692e6ede51917afb517bcf60fe74f78fc060ceb6ead202437209cb1e892dd1af4fda466658b4acfabdc9a55c8cbacdef7b36a66735f0e0d4cf501ce50f
-357 1 62 \\x69b9dc231975414f17b6fd7cecf41b3e3acca0760b084be02c32facc92e72af17ddf3e2ca437ed6b79d5b4b77a4a5c09391cff0ffe36e80d797dafb126e2410c
-358 1 262 \\x59cc3d25dff113fa2e08a7f3e36361062e84769f530e02be69628f60d2d7e49046aeb987bfa95d76181fda82b7d36452aad05bc59e1251455d61661299201f04
-359 1 326 \\x107d78aaf90caf7fad54a74cc7c6a573d493f54b0f17a7db777d62793f9317001c7ce3ab1a6d6f91bda4c6226aa4be54d2599c4e7393c90c3d8c49fa9f961d0f
-360 1 53 \\x0f19f71c4251f947b03b728a473528f081e590691cf02502b89dc5d3fd65d489eab646568cc3c3bbfa1a0b009963f8f960825f10c6f498195ae7690e6054a90b
-361 1 65 \\xf76d8147877a09e6977de5d1652cb994b032677657318a632f38b2de88a2ba6046fe59cadb5c763030a270aaa8c9f9cead55a6d2204830fcc3608395f7e0cd0c
-362 1 122 \\x2f2b1d2066d817c4abaaf7576dd532012f3dfa20dcc2b040c8907cbd674eafe66fda07ec8771f6beb964c3f3adaa945187c36db6f95498d2d695fccc7e948304
-363 1 143 \\x3ac694097ca07976e0b6ccfe532cd71aa92557e5b594d520c14f840ad52cbd794f440bc24ef1ca71781e67a1d0967486a308af9abb1db202f37b6059e9dbec09
-364 1 195 \\xe6ebfe0057979a23bc329ccce6f07658945d59e96e18306648c6b9e3b8d1559aed437f06034438be3ac1cd93b016c017b196bd8dcce968d9ba3b5eefa5c8dd04
-365 1 252 \\x2df7ed340ff92c413ea21c9ec86457c8801ea4dfb21731c5bc5a5a648854b9bdee03744a108d39196b8b468124b3cb9acd1f02e0e7fd0c2edb666fc2baeadd0d
-366 1 423 \\xedfc5538c66a385bfcab5af03392448af9657c38821721880f637aeaa64d5eedf2f1e65d55417b5173d7b9828fe4b2b56c662d1fdbe9372dcedcec16b80d3006
-367 1 171 \\x924902b9500b56b6a0c527da60083e2ec74f59bde574c6f2c6ae58689798e5ac7ecd055c6b45961ec2581534bd0e6ec72174d55896bd06688621c78d56537d0e
-368 1 194 \\x3b964f7661369a4ea4c5569437921fccb9aaae4e6b6a7c829826bc6114e0077144104df850d0314724c83eccd8cf1b15ba608acb3dbcbc05e16a1732667b190f
-369 1 106 \\x35021c88336c56d0fc37cd715e924bffe32f0e0a5062a34813b7b619d2bad112cd42d61a722c1619c5e52b5f9e4472041c726bd623390f6338aeac7b2a145303
-370 1 240 \\xfef01ad42f73ac076bfa865e0fc7235a9ed196c7344d750c2c9ea2143e515cc104aa26edb3af92715ed4526a29229b92681f00356f6d7cd8597bd26137aa8306
-371 1 295 \\xfb6a1e489acb6691323f7a77b7f14127e3ef6c6dc834125b1c2058e69d7249f323f5a1ea0fa450c1572c95cafe89c154ade9ddb72dfaa01752bccdc54b97f009
-372 1 294 \\x9684ca7fd5f949ae7363b61280c1b0a6968fb7ea536f7165da5c995b029bcfce9b0f5af1ed248bd6f3e85907e2551ec3a00939876d662d3d2b494fd97f8f7400
-373 1 287 \\x722521423a8e59bf7d61322b589c4f5db9f74cf3c56f5119110e0f414a7fcaebd716747a8356103d43c25992d317a57d4fdde798cfcaae57e801b4cd93404c0a
-374 1 47 \\x8e6f71098368addb6a59e54f9b6ab2ec79970db85ff3705dfc4bfbc327ea446ebadebbdada54faf4e53c3a45c018fa87abc7319b2848eb8805f550d86c99e605
-375 1 175 \\x7c96b91f8c34cb3648316f76df3fd090a8c9813747e07667bfda2e5e9fa9364083994e7e157a6cbaa5ac6ad1023fb41f3da52532a583897b11aa0e8a4c85550d
-376 1 212 \\xfad1a550328005ac76cfa9a57edc01f3b1ec080958d52614de1b2fd15ae6f5b67c7dc419f72901446ab80488589560078dffe37bfd5d6c916d3a86f6399fff01
-377 1 289 \\xdd7f4ca7a5c9042b0c8f1f767d68b087fa60cee188e4d9ad08d138a5cd670676f9171a4e20429f75c410347904ba6404c879c6b0c3b05c7bf45b8f0a21c9a101
-378 1 292 \\xa6cd5d2d2d9718b9bbc9c1c8a45eb88140c1ec4a3fa6a746a60a204224360197a79442fec5a231c1e761c79256affc46a6a10e1b2a368b54749693df47542107
-379 1 312 \\xd383994bbdf96ed9f1774aaa4d64daa628428d795ba3fbd9d88633a1d9ef39cbd04e97a9d11a4dcda4041a08a82ded2c02244591e837d8d1bd8d67e82b13110b
-380 1 179 \\x84cfd3fe1b426d0d460fdfb0d8014bf2b0902e4c61d9cd9c138a70d0ff542f44019ee490a500ec490c6bbb82bf484bf75827e1a625fe9be7451634441295d502
-381 1 344 \\x8c217d2fc69ab8c19af09414fd1e2b26ffce4a71d0004801c8626bfd1c7f42ca8061b4ac367de48cf6d292105b88bcb31b4e0603290c363e04090568a3f81d06
-382 1 101 \\x3087ff643cbfc973a6891f5ee6bcb907b3d96de97347d2424f63d5358b9dada8b413293673be025e871a641623e9fafb995d66be4dff47c76d33a0f302ec2805
-383 1 308 \\xc966507e93321ccdf771239d9ed207d83ceab3b3e7e1ef9118502ba1e2f766b07ad7cbf86d519be434bbfa66cd576b8235d3f8ba7344af10f28bee5a69ef4706
-384 1 16 \\x981408e0c00b71b219d3c51017598afae6cde6d115ea437e7408af59abadfb5275274108ecab6a37e0849590539089cefa7d2ddf5f4e40013713a9352df9f20c
-385 1 414 \\xd1f23f520ddcc7879be216e6dcf5f3dd2b104ac1e765f99f9f2c0dd634a2f4c7b264ab288cbe3b0a663eb31105b54d6fc54e709f6f6c873aae3d3688512edd0c
-386 1 108 \\x6325bd3cf677c9f5fe367dc5ccf8894ae4f0f6369c7a1fa324056f494a82d449a34ff35f2fc5efc36e636fe4fc7f2f0d71035f8a7b03c6d4fe5c3e0f112dd809
-387 1 137 \\x53de69a80cf0c888a0c55f877f4d0438ac3a2b36628987bd87b51ed6b7a5b408572af9499fb4e68c9c2aad3d36d9d8028676fb17d2c7b07953eb0ac77c54fe0a
-388 1 392 \\x34bc5d1ff16da69dee1bccaf5641c2e650d83696b77331f8f6bb7bd91e1807e7f63d20e529122f17a12c5d0e47de99d6db26df1a46c6dc6360bef26ee9254008
-389 1 21 \\x128533919b72e89875982f86c61f259d7094962f08cd1d5b4b31c489ad6d3d5cf9730ef2628b9e286d3d3813a72b8c8335757a2760d7eb7d37ef710d6067100a
-390 1 82 \\xcb3c96972ed7a2fe88b332f7cd865167cd0a6069da127ef8cac35d82fec71a095ec0e8f06c35defe77cb6d6892f22bb0d8f6c2653f8ab982893eb3deeed27a0c
-391 1 167 \\xe244561322acd518cc992000a2c05f0c1d57d740e30b144062072b6a4be81f9a1d7ec1e3ba1969e32a6319bab5747908a433b739021f418682a95fd4448a900a
-392 1 373 \\x7ac41422b7a8c5b001c6939ac8a60dbe8ce32459a82b9689de3c8b90a5797f75029860ecdd0c313b54b8adf85bac73784469a7fe923ab2412657c5452e111402
-393 1 168 \\xa661acb6a797a6f20f119be78bbd30d3ef8ac64173b51adb693696d499c5d69990b8ab0b145e650cbfe56ea4836408929ef30fe17b1fd1f50681a770ca24070f
-394 1 210 \\x3567c2b2ff8f3efb224d4279802215d301e5e4a913ef7cbb4a1a6afdd43efef48bcb6f74e3797f34f6ca8407b4c197be017dd8903b49e1ed631199dd66615b08
-395 1 102 \\x2ba68a140a3b8b4998461183bd4b468d7b8c7c6896ba47bd4392134f5ad62a84404e49264f577fc439c7e465d0f1136d35e209a3940be8b4d755f09bfa8d7803
-396 1 97 \\xdce0a094ca22d48f14281445b3980c7335e793d6a89abecaf2ea89528db85bafc7e2283c764413acaae049ac88661de93fcb5c93d4b61a4cddc6cc2ff299170c
-397 1 245 \\x13cd6af0df761690faffc8a21c9094fb620bc5daffab47d8be75fa020f11eb9dfb17721d240e5edf08cfe91d9e327ceb548bc2da76a7c5ce10a6e2aa5ea63109
-398 1 91 \\xd5e8a31d63f0feca8945104212e5c67fa5db174c978b161bb35d134fcd1a402fbdc8608c31654a52e649410524e8527dd07e7b98942b25d7e7161931d8aeee09
-399 1 36 \\x51f5aa6ab78edd9c12b4c97a2f053a2eb8be2f69b1d4de74c49128d98b63ba51969d6d19ef0182fbf47af942538f4298638cc5dd91ecfb6b752c1db79bab650d
-400 1 394 \\x1d5dd9d83faa72c559f59028cf3af5def024ed4cc4c46f16725b58e431e0b62882200d1a96fe66a9281778e704941c8704c518fde63d6020fe3f671c2479990b
-401 1 391 \\xdd66655f02adc6bc627f7cb5cef6ee2fd0f08fc30909714c696bdc72c47553b5e1f2f07184c87bc62094f4ea134c0de2fcc84c334a0c3c12ad958ce2220ed604
-402 1 139 \\x884bc1d4264d572a2b368d3f0bedecc2c179cb31732c4cd57855d9e2c87e4393ea26c20949d96560992f402fac046b687a8f36cc4a900fef2107f80c1864a002
-403 1 180 \\x1d2f646c8222fbabb71f216758f9fa3f36aa8852bf99ed232aabd3d30012cbc162b9b7163c2cb3431437a8ebe40548c0bd89ad92d13ae75be330d81b4e2fb80a
-404 1 19 \\x7c0e6380ca6d1731f88de25e54f239de7724f37ff242e206c485642ac9b4f6c894ba5147b6f8784d4aa51b1f929cb0b91101ff4b43fb480175ed2c918b193502
-405 1 51 \\xae999003a917a0dd422affe49d069a9419f562b8ee27768949e0d9be264c6b0cab164a6ad0c2bb239d66814bf2daa31907eba5a3e767ea161c5dd4008ad99504
-406 1 160 \\x548258ec2baeb50e12fa6b26c810da1825e2147c15aecfecc5ea960344f919d4b646fcfd3013e78b157c4776c0013f985256d9018aba870be6c67b14b66c9609
-407 1 346 \\x27c3844b6c9f20b10aea5e868de11b2327b6befd4b47a738b88fedfc610564ff3d6c1f9cb0bf91c475aafd98a21d83ddb1b5c6edc3f2f24722fa0885626ef70f
-408 1 83 \\xd3bbbec9b86ffc3e25b210c47de30871d1182c7d97407c9e2fe3340336dc4312f9623ac5079ea162076067c3126c0b17385e0f02d259fb64eacd035c8de8f306
-409 1 221 \\xf2369ade84a0f0f25f3d24f651d23af25ca05a4ec608d99bd5092e2dadb7f22a195ae85cf5dc2cfdeeb26cc880079b9cc2e6740175a1f86c95a06dbc5a65690d
-410 1 6 \\x65d8668c9be7444cc4e4fd64613b130df37e878fd334762b396262ad224300ab004a011cc91210b757e55d55705d7a80020e6513e03a7a9c5e039a518578d80b
-411 1 193 \\x254b4238ff290712c89382c1379ff2f12243df5073950ac8eaf54c44a7ad05917dd769d5ce5d2f3bc9893657b22094721bb4174a254f9592581d6a707abc4c07
-412 1 198 \\x81070ab4eae5d7c103262c85323fd3ba1135d144d4b901cf278c83c6072685081869ae198ca906642f1d822d19b546cfb4ec27a93d1c5684d47ac96be88d9402
-413 1 125 \\x31b591b487f71f9b7cf8efc2becec1ddc1c05de2eb0f96061ebfc3823ce2bf1f85d584b7cb0d064a8d3e94a42147408670d224f7b4632a31cd5563fc56ca4600
-414 1 304 \\xe79f386725756f92821083d54be464fbd2cd3eba456b7b36fa0a0a28e63e4bac9fab0dd7f79d8a41af7c2459884a76f120d55c6c6c9ebfabd8f29c76d730eb0c
-415 1 128 \\xfc4531684d7050c38c4d074f06aa06cc94bf9b2b6026cf373fe7e07da911e562204d00312b647821a1d951f5b5b4fda36f19e92f56fb04382ad6a36108d6d702
-416 1 72 \\x438808da9af8a20fd365123712a39adeb46668cbfceeb422c6359cedae241fbc915710a8b8febfc454d97d8a49660486c2857092e6c3b443e403e819ee89e608
-417 1 224 \\xae56843ac3a631d122fcdeeb5d345cf9e9a75b5833dc8efb39702922721f01ef44e218eec7f0b26f7ddbced1ad17e12adf46d3cea39d5fe15c2fa1a5dc442808
-418 1 335 \\xac92970e073ddedce5a006c658cdcc69887a7cffe332ad29273c593a1b57d82a78a1929a3289dd11e5ece60868223dc9b2d1b471c1ec2f31539290cecbc9040d
-419 1 158 \\x771d2061561fe89beeebc4f9b0d9fae4538e83dd18a4dde0592e45699cd8bc78b6bd6fa6a50fb2d4ae633b536a9d99eb613a0bc46736b5db968e758647e27d05
-420 1 268 \\xa9d7266e4b1130e5dff3b0d5b6bc522a578d6aa0832ddb5750fc3647e7e4c610e6187505cf1580cbd6e064d9f91cd0d410caac0f1038dd0b5b01c5c228886a08
-421 1 368 \\xaf0ce8d5447930e8cfa8064bc2d9f6a6277eab0f5f7171509323fd827ebaf15e119215b0336be809829a9a34aebe8922b1e322de816e2012543e78f4875dee0a
-422 1 155 \\x2f2bc03e7437b75ba49f998e8377d19fb09b96b46ef5a3938d5bf7d878ad66cf1c1ac18e58fe64c47feb2506a08669aaf607de47797798739ef4bd47408c7408
-423 1 256 \\xd25f64e96cab7fac9156ee931370f9877b39add82a43a9fc47de16abb0a573fd9b76f365c3e4fbde95f98cc340ecac48e943b1eeb93c7471de2b3f0fb4571e0f
-424 1 116 \\x0c90ebc4cdb40485e09158610b651c25af9ea4958b8d57a8d4d6c9dfcbc71db7d83d1ab42200a21c24325a116549b12b0facfe819ec5d04da05bc38b9a7abe0b
-\.
-
-
---
--- 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;
-\\xc224b524084bc7ec63376db8b4899f2ec3b0482bb6f8890560b236cdc4e167bc 1638356907000000 1645614507000000 1648033707000000 \\x70e9063063f4dc2e3532a458ab590fa6c322362e45c3d19736b28f770d79af0c \\xa96df026c9d79a0556d6ed540e8cd4465ff397bef464c3d644f401b3f3c27f4ae4c04a21463d16f75d1275404447c02778884e4370086400c3eca5e4f6d19107
-\.
-
-
---
--- Data for Name: auditor_exchanges; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_exchanges (master_pub, exchange_url) FROM stdin;
-\\xc224b524084bc7ec63376db8b4899f2ec3b0482bb6f8890560b236cdc4e167bc 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 \\xfa3cbcde17b7eb2464ce6748d3c2a01d554a293a7df671aa6aeec13661e895f0 TESTKUDOS Auditor http://localhost:8083/ t 1638356914000000
-\.
-
-
---
--- 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$letq19bXadlaHoWSFEuxmy$aXnWIfiCVeHVJf09R8T+FShPtObYSF1Y9gverSkElgQ= \N f Bank f t 2021-12-01 12:08:28.4642+01
-3 pbkdf2_sha256$260000$mIyB9Rg63QGEGzwm63hrJU$0gMEV5FWd+ho5LVhjBjAT1iFddhQGZIIi4QDGnG9eWk= \N f blog f t 2021-12-01 12:08:28.715205+01
-4 pbkdf2_sha256$260000$dhgKBUvLIMyqs1ZM6i3Y4U$jxhUoN/crNVaMcOu3N0e0ZvQkiZHeTs39GK7nHfjGgM= \N f Tor f t 2021-12-01 12:08:28.833414+01
-5 pbkdf2_sha256$260000$esmZPL2jgshidCKiU7hIjo$lDWvIym4IVTUWIW5fnZ3J64elTDo3ZUJo2+0SDdoh7A= \N f GNUnet f t 2021-12-01 12:08:28.954942+01
-6 pbkdf2_sha256$260000$GU0WblgCUlMmoTTvDQfN3i$Vzb8kXPO+Sb/nLB4n69P7XziHw8iXojyi8UyQnNwW5U= \N f Taler f t 2021-12-01 12:08:29.069344+01
-7 pbkdf2_sha256$260000$d9QovDC5Pv1rDLCng6JlUw$P75kw0ptunQ2uvcDtuUthrDudyq5YNx2w6fe2lMetYI= \N f FSF f t 2021-12-01 12:08:29.186117+01
-8 pbkdf2_sha256$260000$TRA2E375xeJJFNp8OX4Q1s$k693S9aD4/KBrX1zjPANqLph0deaZDXjsr78HNsfRsQ= \N f Tutorial f t 2021-12-01 12:08:29.300074+01
-9 pbkdf2_sha256$260000$4sr1dZ69tJTvCLxVwEhVl4$UEThXQvbobxzE+kwJzKtmzwkIGw+Vk21cQ9iZx9HNcE= \N f Survey f t 2021-12-01 12:08:29.415324+01
-10 pbkdf2_sha256$260000$g49r7ACpirnYpmc0YsfCTn$3iVVFhIZRQwVk/ORGgotGIu2eeJ4g3cSDpzne2+YgrE= \N f 42 f t 2021-12-01 12:08:29.844984+01
-11 pbkdf2_sha256$260000$TDta3lixvnQMagolTOJz7i$8sfprB5ujs0jTCJtjkpGQjJnr13WQ/PtqG9ykmw/k14= \N f 43 f t 2021-12-01 12:08:30.269862+01
-2 pbkdf2_sha256$260000$mHdqYFFgOubxxnaoXP6xzM$TgxmAhbGh85neHKSqyF5kt302ItEtFkwTFxmWvykzH0= \N f Exchange f t 2021-12-01 12:08:28.587107+01
-12 pbkdf2_sha256$260000$qjC5bAJyGnsYNCM9EUGSIi$4bfRzD+DAyCM1bf6fzKxwAy6ASMsu2/SuJi08ybkqWM= \N f testuser-7tgipbkp f t 2021-12-01 12:08:37.738719+01
-13 pbkdf2_sha256$260000$feG2TTUagptXYjbgMcQ0Uo$j6Cv1dzDkMa0RBGvcgRsbthZ8EtLnlyg5NB5dycoALs= \N f testuser-db6y8s2c f t 2021-12-01 12:08:49.946975+01
-\.
-
-
---
--- 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: 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_restrictions, 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 \\x029c7a06bcdd58acc2786a8db57b359eabefe6efa729e49fad583b160e6b40b4b1eebbc71eb11424fdb1fe5caf5dbbb29c29bd9c2a8fb5d7bb61cc3ef161f37b 1 0 \\x000000010000000000800003c44f782d431d1f8f2ff3ac13cb6ccdfef2354fe756682ccfdd2715d5f5e15d0b83c8517f16988d0598ee8f144b3692cee91bed2ef7bc690ef13f63e97bd721fe222a053d2434dfc459d971f289b9bfce456d3d60704219bc1b3d1a14c0e91ac0bf72872d2ae1c4ec6e0131c3958d847c5e5324c496ff8747d444bc57741d7f39010001 \\xed8307c77d6b9c176abeac7aeb5cd5641a1526d65aff59ce01a8cfd54dbbef7c1ae81fbea3c7f570476885b6e484705fb5982453a8f59e9284f62538d7717a0e 1658909907000000 1659514707000000 1722586707000000 1817194707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-2 \\x0200ccb719045dac20c040dbabf40b6be55382692118b14b0493d0ebb849f3040b73a60b722fe2cc7f8da423d3bcc6d9b69722e0eea6679d3007973822a4705e 1 0 \\x000000010000000000800003de45665b1ac54873f32afd45a8c352088df710f8d1b3a571a50f8f00e70d7535d57a9e35592fdf9d0cabfb097449ab33f3882d743894c1c70c691c7a5f546929fadd79d96c66b48171942a84d9e066e37c91390fb894c76bb84f4eb43d538d583f15e0ebb1c21dc1bc3e6ffee08e539a1cfbfa790b6c340089f8a4c6d9576ffd010001 \\x89bdc199a1c309fdf7465b732a19c6db5950e474ca603575fddb3e23a4551369e763b227350aa4fce44e911f24a5e1fa437fb3284f1df052e9e2f88502e45c03 1643797407000000 1644402207000000 1707474207000000 1802082207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-3 \\x07784278bd17ede8568100143d622362c356038aee9cbbe0f79996d70407b43874ab788a56da04c8e37fa630182d1b61f552995de97c23a8c0d0ace0cc8e8b8e 1 0 \\x000000010000000000800003b3cb194ba9669ef19b30bc437548c8cbf5e6a7f2bf66e6230d051c9e6e3f87030e6a336a0252ee068879e685df58b06486edca567ca3cb8fe9339cf78eb2c330ad03f1a6285e47c42ca5c267fec1c0c1410bef95d545166c7389239beabf92894736b1a766ac97fafaf3f470db9cb3b3dea1bba6ad77dd76e94470698c01ad8f010001 \\x31c372a71bbf2b56dc3a6d8aa621e6f81a58b9c498d5b26fc80717aa1ff75fde57dc004dcdea301663404bca256e68786307e15e013a77b79e9d538ca0a4a70a 1657096407000000 1657701207000000 1720773207000000 1815381207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-4 \\x0a5c5a18d4499dc81d5aaee852bee118b405c5670a6c3b5f8497e59bc5c945bb1b05bdf16116ebf79272f0d29a492ac32c25840ebaecd1d3033c12573d62be7e 1 0 \\x000000010000000000800003c5527c21afebeabae11e5629ed15bb62f9e0ff457891fcbb195bcd4edf206c4b8e1811425fd6ad50a7a6f55875337399991e2de18568f1f7c7354498643384dac6d619d17a8c94e9c7d1f85c9e739268ad3e7ea7bee96813df8e102847e04fec7d986c2d2f7631dad0cb708bfbee1bcd82e9661f83cf08273286ec370423c6c3010001 \\x028f25536e5241dd4f42ff588a833a2a1ae8e6ba5969eef0a03bf88c1f702d66c2957a50997db576bab3b95a5937ec6392e5a4f61ada07522cda35970c367804 1648633407000000 1649238207000000 1712310207000000 1806918207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-5 \\x0e10adba8cc4a6b6489b6908363f2696a4fc8d48167f25a0c409046bd93aa47cf7d0681165dbcabee127245eca177a413e51a9c8ea4075779396eb21fecb3596 1 0 \\x000000010000000000800003afcb3b7f4fb0daa23dbea00e265a006c73dd91262b722dfd48831ad28bd9f193158ec17518d3cfcf4c659339cfef8874294819a34cc925c309dc124c601c63453872cec70369cef65fbad24f3d96aa0166c244a4fe8b0e18e0bff5af74139adc0946845dfa6d4db4e57748fa3176f00248cc9865938b346b813a53fca372173b010001 \\x833616613581c8ecaa24706c12b35a00d4fefb560501446a778e533bdbcdfebbd70eb0cc1932a185949b763202fe1a108c0e78d4322c4328b5d6d83d496a3508 1667977407000000 1668582207000000 1731654207000000 1826262207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-6 \\x10f0ade480faa4c987ebf6517206027e3a311b807b4d3d3070b67d70817417c2d1178ea5c82a07883a0e9722033d8acf780662e753b53a8167fbb5ec8edbdb39 1 0 \\x000000010000000000800003bf4c01faa86becf60793237fe303127eb392485c08ec70ff2197c4544b6386123755e8dc1078cc611d0a5c9112aa22ea770e1c36000425f677bf9b69161a6f919c24a0f345019ba8d906f7d73e9f9924798eb375973ddc29ebb9b29abeba7064bd4c0deb1705d1b8240cbba1fd4194cfa94c23e9424990b7339a79ca1ae940b7010001 \\x2d5755cb60a33c37c59200f4aafe84e5785207b8c2eb7349511d6e2eb2a87f6b053c96902ef094503d9a662892742c2b4a6077b80a73d101d72135473e327d0c 1638961407000000 1639566207000000 1702638207000000 1797246207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-7 \\x1328c3ef43f0eee88ec7aa178f50c963801d312680652916464fdea809ba7b82408cd67f1f3d43b3256393eea2080721dbfa2483baf3ac9f127de0262b3acdfd 1 0 \\x000000010000000000800003ad8a782dd66375138ed179da36b76159787f8bd1055cd61866fc4dba010da4f28d86392329dd3f9b0c4af9c79243e098dc93d17222b0c905720df3232ec0b0506248438720514b85929657ad4612038d0d0fec0d9faeec01d3668762e5e1a0d83aeacad835b10d5958e6807da57027560109a5ba92989bf2bf384da2e500e80b010001 \\x187700207dee671ddbe110274305cfb77d59903ab7c69bb94a6151bec4cf330ed1c01f84b746407bda35092f143c636631641ab3aeac3abca7121d08c3e16d00 1666163907000000 1666768707000000 1729840707000000 1824448707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-8 \\x1570e7c259089423fa51781a88835b0310d72ac346de645de6cfb7ac49c4965cd6148f613a7dcd02ef8ecabf0aa25e8a0c170848b646abd5ac217368d1facf1f 1 0 \\x000000010000000000800003d3b92f35df645721f2b2b7c4dda5bcdf32074ed0027a06a71a04113caee9e41ce2f2cfb195b623263d43d6b7a06f7196441d59f9f36a11656a5cab5d16d228abb71a4e78300d3af81bb524607cd1606fad7eed9f892545c3ab4cdad521a7ea75c31f2a2925f4ea08f1837c18b1b588515fa6162e7103bb7ca5910a1d9338288b010001 \\xde4f2ec41b8926fb60fe5f1d23d8cc20d89a0638172ce7af1689e8c7ee36dd427b14bb03d6475989518971d94c15801a56e83ced74715cd92e517a0c36c7cf07 1651655907000000 1652260707000000 1715332707000000 1809940707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-9 \\x1a84d06a28b27976400964450bf661c29459b09df3e2bdeca1740c8e3f328e66cf51e1452767bf6b1666bd93390a5ba00c35fcd2730ab1d7aa0dec20dcf21c80 1 0 \\x000000010000000000800003ba4b64370aa2becfc56021444f919705dbfbafba2c2ec7f756249072582d149f3903890ecc3ab4cc7ef12d926faf30faefa544b0f71a48e9c1f25fa252079f96fd15620814957d761ec1c23b8cb39610e4a8b66aee6e8dbc5aca5a4cbe9c9d6ced10e551aa02b690590daf73d60943a7f367af7729255c72e4ba6ccb0ef88107010001 \\xb31e6e2f58dff0a1f4c8be94b7f2c40146ed79d5bdb1e6900e6eea83547017f17786584760c0a0bc330eccc5d78d8f120203f2339533520eae7598179d523c07 1649842407000000 1650447207000000 1713519207000000 1808127207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-10 \\x1cb0cda243429d5aa15bd42db21f079fd6e34089131828a243d11c2128c446c22639d1a9a96da71751c073818ac279c267508a6e87f1406e8b20fa5c1aab1342 1 0 \\x000000010000000000800003b9e8b2f0fbef44aa39ba01b1f36ce55415bcca6481efa4606fa5cdb7682ba8179d3bc81505b217bc1e4829110f43e706021dd40ebbb5afa991c15c19f52cb6b6f5ab117392ebc3aeca99695b2135b083520347d6d6e5e3fbd68e2550473e3d323027214b43df7f680534c3a9e9a6621b97912df3ed1cfab5ace88d85e2b80ac9010001 \\xcf656fbbfd6a083483d8494b1498dbf92a28f5d8c44e9881cb435eb9b820e45f494dafc99b96f8a77ceb9fe9d7e2f56f0a8acf7f78a4b6b7adaf4c35483bda0a 1643797407000000 1644402207000000 1707474207000000 1802082207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-11 \\x1db85ea12280687e27fcafbb13152104bef3ac8c209094e1eb277f7529049f0c7eab7457cac0c0d2d059a6f5a2d3848d1528a5b5dda5b921f51c16bc7e3ad597 1 0 \\x000000010000000000800003b978a37809aae1c16c37fa5ac8bc242edb827dafbd403a530ea3dfc7c9b2312b91e70ffc083d81fc865e1fceeb4087dfd47e68ba5b1d928d2ff6de124afca461b573d665f320a4f22d641ea393ae194f93d175c2e5c3f683d00a53831e26dd4e306ec674e270bc4fc47ad4440dc4ec62ef87a60526a318c933666bff8120850b010001 \\x4294d49a38ed84b67cbc9030e1b6914e9870609aff5d3698753a297622a3100cfa01f024d7dfd27a5e483d4fac4b8791587324ac22b1105a7d91f5ceb634840a 1645610907000000 1646215707000000 1709287707000000 1803895707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-12 \\x1f9cc3ee27f1d77c2f1662f9ede073090282dd3f7774333a82388f92310bf8fad73e1c8eaa14c738795480a2e05acddd9ea1a930d63785e487681215344b6700 1 0 \\x000000010000000000800003baf685cc634c67cf3a93dd580476be6fb116cfd2c58018d9a2fb6ac6975af23230c55aff714d53cf91648b43dc3c6616d19ea0ea8b105541b44bcb218b760cf9210fd249dc42fc247e21f6c22b584e9034636e9866a4a2d81bf4c254d8ae23adcbae80e990cee609897dc0d1f9c1d5c0886c45dea0326cd01f037859d9fec889010001 \\x2ddb6ee066d758959837fc2e277ecfab7657666a92526eb0a373e46cabd2f9f4b553a992432aca705e0cf2cf7f7018d0618f6d416f72b50ccf59abd54039ba04 1655887407000000 1656492207000000 1719564207000000 1814172207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-13 \\x20dc47eb80b47c6b37d9df7078c90907cc3ae6089fe9cfe3dab8d5a969f137ed7f7d58e9c03aa293759aca7f5bfaa3229e4ae1871698deee5a0a67859a4fb721 1 0 \\x000000010000000000800003a80b9e1bb5699056cf9f6fc020011b18ee3ece1412a4675173dc453bdd45c1a73d20e5a27bb9c76be741a3027531277e24605c84797901d0399ffb11e1eb1119469935aac4529773d86f9aa6c5a5ad0b70d384caefe8703fd802a38e7feb1f9e3fc2842075eb685c8b5fad7a85eb56b9d01952bde4eb4b25151b103a46faeedd010001 \\xf943d12f1bd9b4d7efc12e2c454ad493097b4a75300e01e805186779790ec2fbcfc95e416cee2ecd69ec9f1c4566e7c75c7e9c94ac491497ecadaa0709693704 1650446907000000 1651051707000000 1714123707000000 1808731707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-14 \\x2274f7316b666ce563edd9b1d9c3da2aea20fae1a69a7335cfa693f4090eb3a2d19971e2581061e4d6d8ed5eec3e9df763e3a3085fb6bc251de8077fe754e68b 1 0 \\x000000010000000000800003ca2faa67e1a43bf12de98b33292a57c5ced81d75d771e776b61ccf6ffba56a0fb9ad9bf8b730d1415033dcd455db2d0ef1710cb81ab8149e21c52d56f414300190d5fc4a41f03fdefb247bd4c6e72cfc087276134365225f8a2e8f60f5241069da3f90c28078f71425bf7909e8eaa95861e97358b7690da320763a9dcadfd821010001 \\xcf1f7db8dd0d5fe53e6e05dfecce2c5437ed0c3add3c74b35c96e155fb0dc7fc739373edb9368efa6c056799a3554a9e53e88991c66eedbc6867a517d5e5ef09 1661327907000000 1661932707000000 1725004707000000 1819612707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-15 \\x22bce690adbbd4b4a5fe9919e4482a593317341dc37821340147d13b9f10c72a3b43e3edc042388cffc03dbfbc2a015f2880464d76a5777befa0546c7bc854b5 1 0 \\x000000010000000000800003e87f94ad9c14978ba72d4b72a01f0a16012883b3cdfc57a3f87d4b9e7a43aecc3c0ff360de96df0efab9625dba6b4e5d4410bdf182609a5c37c753f9c08a218c985f614ed5acf71d9c8b43bbcb6c31b859a2a04e62ac41b842af11dfad92aede45dc439d6d486d2d79e30f4f36100848770df13f2767b20f36f4db20205821f5010001 \\x6febbd0d4476509582c766a38dfc5c7baee9024d9bb8d07926cc1e9d00a1c3679107518a9aac41cf0dd0883d4d4e14709fc3a831daba7dd7cc5526034399ee05 1654073907000000 1654678707000000 1717750707000000 1812358707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-16 \\x267883b9f6d24047d10440c442290b71f20ade5d3abed0c9073e1fce98e1222457dace466887385ca5fdb3a1d37c176284ba0790486f1a91c72fe91fff1fd737 1 0 \\x000000010000000000800003a91218506ae211a73992b455f81bc5cdddf868598dae344a796219cafed5815285b70b82ce23af24ba3922a682573af7bb4ba178fc6d3e2a620ad0980e53e037eaacfdebe3e85a573b213bdf0c7df0dc444f3f06bcdf6c0a33c1459f36a15f60a9506763a743d6473b631d6fb3684ad346261aa5abbd1730e426d2a5b071eff3010001 \\xf651a0ee0a15e9eedfcd5743dbe1731ef7490b6cbd82d754a3d2e5ccc73d1e8806921cfae15a388ae87da10b9daa5be65272fc047e5316402fefa075c1646b0d 1641379407000000 1641984207000000 1705056207000000 1799664207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-17 \\x28d4a3a532603c9293de7b7c7831633032e592286540aa8db82d6fccbbaab92bb9c843ee56584f22f19477d61150aa30a4271386fdf9ae5fd4c428bf5e6949ac 1 0 \\x000000010000000000800003b5d182cb437989bbb137925064aa83be4ed89179bc0c08a17ee1198132bd8e91a51c28c07745364e23ee2a8b42521debd9b2397b09e3c7cee4411dea88ff73f1282e7d4b761512d20bb9e14cdae3ce0624f5268e9734ea344a332fba28ae65d22ace6eb5deed37dafe46d35953ddede92d18f1e38ad22c190decccf2bb972e7f010001 \\x08b503ddb2d544ce8da3b4eb0905d1e74c422966a12ebfcde6b525bd927811d33407b50d4ae316097ba397c037bc6a474ea36e0fccdddc9f533809a6ffe55a0a 1649237907000000 1649842707000000 1712914707000000 1807522707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-18 \\x2920007439af0e3f0df5988a72b44a8ba160a9618887981c9f54a681496c89f732910984ffcde03aa32f456c4e67c3c024e2b2b61706ce843247cf885364ab7a 1 0 \\x000000010000000000800003c047ac777cc432102cf3eb4c75e76a6d14ac255807c7bb913401e4edc951bba358fb0d6158ac5766d1bf550e0763c35e790a2cb5b119f53d94ece2076fab4cf6a5b25f55337bfc7960ac3d4fe716d9ad3b30a86432043b39f049e7211a77f48e0deacdccf2208b8c1377a053177753b97ede1cd02aac71573bb9674f29a6305b010001 \\xd134ea18878912318c93209a0ed195e5349c0f493ac9cda981377870c6eecf996871fd6229595d66f6aea40dd4660b325bab9a38d3f5d9d5b39a935b39aa510d 1648028907000000 1648633707000000 1711705707000000 1806313707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-19 \\x29506ef959d47bc600708cca837c1e8b255b7af881cf7ad3d98325939ba6bb29d2a31236dfa063f7e97ef387bc2c822216735418803d5b7d0ad85f08fe41da0c 1 0 \\x000000010000000000800003ca2c9934d35c87ee536951a9b7e67aa8e31bb953ef2ff1ebe33de8641a6e144b3bc1329c1cb8a0dfde85f575f07f0536c5b9f4c5e4c96590fc3ff76e3ab9b204784ce828f7a3d31e53eb7815b9c819d376aaba0917373fec056b21088ec1a84c1e7b821092ab4fe7a7a003d286effd9b82a9be7e6add989f76ccf81f1aa678fb010001 \\xe37651b918cceb7b58c84aaafeba867451f1ad89b22a098d530170bf0ab2fdb87e6e6a5a3da8f95d1e35a237f0e18b64101a29f62266579f67ea1d463c8aa70b 1639565907000000 1640170707000000 1703242707000000 1797850707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-20 \\x2d702502804870c04cfdb599b33ad9fbfa607f4ac5e74b13214415bba6a857e1bc6f9baa1c47dee1331f444675bef062bcd865d4395e67a6ab44df235edb5b76 1 0 \\x0000000100000000008000039f2796ec4a822e9be3689526972d2fd608a792aa533917555d2232bea056b5aa23119817915fb2031de5bf73794551bcec5c1a60f4874440e6e149fdf0d1eb0b3dfd1024598faae6eb2428c1f828ea460754613ede2ac60ec36ce5756477e565bfb1a116058987772d6999eaa1e3e2e4d4d45f111d6d335149c127733e463673010001 \\x35e3df148786cacdec7cceb400f4ac0c87dad065b52e239f6c93ba2356c01795d70c8173660336b2e109a6e6846cfd7110b8189438f13871ff37cbf8a4ef0f00 1667977407000000 1668582207000000 1731654207000000 1826262207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-21 \\x2eb4d2c63176b458850cc47286bddc63d2f6a899112df92beecb5cbb35ca7925d2d155777dd51c2a33d85d3b9c21e66b19e1fa9bd91dfb08c4975383983895ac 1 0 \\x000000010000000000800003e04c8b61f88d41107f81cac79e50b4682dbcbd84da8f09fc4ae718912e62ff9af104bbbb6bef281e81fb6a974faf8e4c82bd17ad20f9bca02545e0e45b10840447361bdb3a7743b7f8512e8902899dbe5d737f537325d51fdd96a858d785816b1bd86d0b0935460caf7a33800ae447877393d7edc60a8e922ab6533d0c10d177010001 \\xd67773d4ead4a937ae7880e2dd0bb27a98b435b41b0343e017f2d372bb0d454dafcb198631757753378ec218e91ab35dcfe069ae46b33604ee2c16f56000d506 1640774907000000 1641379707000000 1704451707000000 1799059707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-22 \\x31f8bd40f559ee4ff722a7d9f548135993223db9bf1594ececb9e2dc1174eb70472f6a5f1f6616f0ef265a3e44c2a9dc77ef22c8f8f6fa099b4332c46692c4ff 1 0 \\x000000010000000000800003e84fdb034945a3d421a7cce922dc22f563a2ec7539b9335b7428984a01bcf7d083b863f3b9da9440859873a42cb70d68babcf4d83a7844e23da73c854d7414970710efb58f7cdbd1bc08196df9a7972d1a9369f5b16345f63fb5018bf501fe205f241bccdbf28e8b7b62be875fd9f9b135b7b10e7461a4bdfdca3ae018c535db010001 \\x44747292f7a16c85d182290f267d28a48dba1623e99f4dc8c5cb627e878e67e6952b70799439cb368c45069462a296f2a0ff3b6746d2448bfb5704f96cd2e60f 1667977407000000 1668582207000000 1731654207000000 1826262207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-23 \\x34482eb9de9088a0ba2beec0911755cbf0ce43b7663fd15355197d49bfaac4126a7de1fb41cee390f44b464441518355a20624e39bc5a3a3fca18fcb73c7bf83 1 0 \\x000000010000000000800003b2f6fdddcf853b7ed6b92bce9817c637827757003822ce61db1210f2021fd5176a2fd88f9f22a06653fe7dc61e6dd3ea868be3e45144134a56d0a75229b0547859d98e5d52073db8fdbda3530a0bb000b52594824673494263d4b141209d455faabe02a41cfb88604d429ea884cba761eb904fb1e35d6be25ed4dcd03ece48ed010001 \\xb2585ad3b478e3796444f44c9335e88e8d3cf66618280c849ccf1841a11ff7f26d72c18c5610459d659fa3da4dde1ee77ee7184b15c55ca9cccbdc7b43df1801 1666163907000000 1666768707000000 1729840707000000 1824448707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-24 \\x3590346b4c2dcbdb43535e39f92b61a5535a59a786bc0c64d4c8cd874a77e200de5f9e1276a69e5d2a52a983c6263e4f88dc10a375aabd0c73901338e06b2aff 1 0 \\x000000010000000000800003b3cad9157576c3c6b835c4ce2421150c489ac1b63b220e7c675c2da7fe17bcb038df428fc9f0bc86e3ebf1443b14bfa50856b7f10ff1f485fe5342c4fc6fa51140861f3a4131156f0d799094ec3983dbd21ee1737687fbc960103e3709eb7e70f39054cd323c9de8a0150c835180c128fe51764b52b3043c2ad7bc4e0f2ef039010001 \\x34478ed0fef6e60fd64241243a048669be7dffb4d555b9afcf05ac4379b5b48c6e0255c37f03b32f94bee853062b47f8544768e07ae01c5fb2105adab2556a06 1643797407000000 1644402207000000 1707474207000000 1802082207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-25 \\x37a01e2b494e11396eb2b9c3d103e9f13bf9255c9d78f673ed430737770e2e857190abc9f8993a8d62553e2fe6b9c4f66d0eb59e9fa3fd93f1f21400b801a90f 1 0 \\x000000010000000000800003b47daa07a7c053dd6b5178a39b46544bf289c9e226f1f62e7718ab6647d98d3597165144ea9a8af64ac57d04cbc818ad67c497193bbc5b88e11d64dd5fbeab115a4de65a98372201f014a71be5397885a76ab3475b6f64e9e206365b5119fa5dddeb1d01e3fd40d5ba7afec206831ab6b26b97960874b093af26e9011505b717010001 \\x08ae6483857f11add615035e48b3e7d7d8cbc3af60bfbb9580152a1a8a98ade8e06e720973b6344f71282d6e3f6b84442efcb2925226c6834cd2f2ae36e75807 1648633407000000 1649238207000000 1712310207000000 1806918207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-26 \\x39a43c3ba43138b0eb46005721d6a301fe6abac764cbe2c518c470056e66c72f67ba6c10ba30c413a15c1573c4f8f596af68a05afd25390338bf771355f8f713 1 0 \\x000000010000000000800003ed178667d0b8e45c3aaad1b8b0b1b4d80b83ae78b18ca589fe0d57c57c7edd34feeb8668c8e315852a512714a17eedf247774c0098ebd458af6b62242c252dae109691f5d1f3d1147259743dab0597a081b283b0e724bf1368541eee760fbf9c8d81e07e560c5206380e9e7298779992f1cc1b945819aa44af43f66f03882dbb010001 \\xb630be56e269bd5cd1fa564fb27873d6f7d0bcb04b3610aed69862c5a52e6ae7f8e0ac7b491a2b579021e76577aa9f251c6222252755efa95250ea93c86acc0b 1655887407000000 1656492207000000 1719564207000000 1814172207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-27 \\x3974d3a3e1fa85f79469313da20cb4e9e6b7c3c77cb462c4b07b1f196df80133fe71403dbd222bee832a27283da418144a36fc9c286d3619c780bd06e597e44a 1 0 \\x000000010000000000800003e80b07843edfdce76e7b0a6c1995c1b99e2955151f41e9dae1a2fd61cfc624545d5864779b4862aaebad8c42435f229e5c46257ffcdda381b60c19c90396de00fdc76a109c7880ece73e1d9d7161dd47ed7b33e2be46a481b35a2996a8d13b8d5539a3f1aa3e13a3b37eeac97c01e56cc6c30785767aa411581ff2dda43b0581010001 \\xc2fd01512536eb325e7b42665f38c5623d3915a241a6a87bf96b7fb159e8a65afe0b21a3b3d48ce6a0ec695b85c278381dffab8cace0a3a286d114b8b472ed0d 1644401907000000 1645006707000000 1708078707000000 1802686707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-28 \\x3ce896519d7a46698b8095ccd51c43a29e0cafd17e56bc667ed9ebb74d0f8659fef5dc82b9ea0a78a57f0c5e1a7252172ac3f9ee3af734d781811d8f20a9bcce 1 0 \\x000000010000000000800003c730b00ca5e63f5d68dce9a4de37fd3b2d27f95c021f44330c6ce8af7783612274be46ea7efa6a59d22d1c8826dfedec357f32c73f360ea56fd3773dbc39262c0a57551929457426c66543f8b0d71994072e1f95d9ae82202dfb769ec90e52ba702c880f427b79a92ac773a60aa9a58999ff696f12aa3939a90bf429e4e0901b010001 \\x61d628af1c1f2252854ca7ca37cbd855700ee5f1cf2b10a577d684ac682b8205000ce68c4a11a4420dfeee9a44485135dbe0917d3475a2e6e57cbf11f22ef30f 1652864907000000 1653469707000000 1716541707000000 1811149707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-29 \\x3e1ca6a3b421ae8dd9873131180f57def90c7bbb2f629825de2618ca6508afab97d76eb04a989cf411e5ca1001025d5e526fa4ee5db4134c42d9f263bded398c 1 0 \\x000000010000000000800003c841869535d3b9cce6aa48ac165f9ba44e16d23ee57c6747e67d614a497b032d63922b6b510c7da8e398242a6ef2dc62c56b04481045f59f94940048785579e76e0cc461f459b3b6878080e3c9b610f7f555681224a8038cff01eb332430b2d95ad19ef01bae8eb55a97054bf990bd60161393b59eed7fa3bb191f3ab2ce9055010001 \\x5d4f8b8a147940b53beee4205926aa513f507fe0dcda2007978ef2a799e7c2daf07e2f5c95b6ce27e9d552b655dcc51a5098499e84fe5a590a82dba6648fe108 1651051407000000 1651656207000000 1714728207000000 1809336207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-30 \\x41e88c910bd773d1be374c55c953b2529b0eecd1cd43d5a9b7421e684f73acba60a6ce8b75622e40f397ad1d2e15fadda8a60b4a34a58a84abf1e86c8b50ec97 1 0 \\x000000010000000000800003e7f6cd72617f9593484bc87d53a9cbed306997325c1e4a54ee1a3af099f7334e943bcc5842e597fe9040ccf3437aab1bab3afbb79ca9c9dd066db7e4ad44ffa5b9e97c8d3ea789172e0585469e1424753695c97fee14a0d408141bce54f4bef961d6e2465f52336e55119c7582ae6da8050f34a9a2e4f4e74502985c9682a321010001 \\x29478434ec71c1e615bdc95e2321bc2383ad79cf1827e7aa96c158dc764ce6e4269e811f7bf066d89a1f7af182055bd6c32925e1b3efd874d7760ab59a3ced04 1651655907000000 1652260707000000 1715332707000000 1809940707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-31 \\x48000068bd33a418f8950f07d8a623688a6c942e87b5c772a259cf528be8072ba69d0203ba55ae199ad37aa4b0fd3f2a63a243e8b7168a5a934f477c843373ce 1 0 \\x000000010000000000800003c9da5496622af38251582cfbee963c5bdfbff8d5eb3ec75d804a48bf000f8cb9ca5470357d6e3f20dcfe429361e4b992e2dccdca6aea561289f2df317ab212db1fa1338d8823b551bdf21418bf9f7b3fc3a2de28448c87c423da86f132c95ac15bbf88dbe47f2cef504d97e94d2c1acc6e777345903dffb672fba65c8bd0261b010001 \\x09181ab859a3ac4352b35cdcc2d96502ea0dcb397830c24a1d3c00b228602142d81a0ae41a07f4b65be9cf7036fdd353950adc25b3e9cc35d6d61da8c4f8ef0b 1653469407000000 1654074207000000 1717146207000000 1811754207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-32 \\x4b1c57e6683eb20e322a75242fccc3055bd200e25c572f99ed24d9de0101389f06610dc2afdedf041213b7a98aef61a642d4bf817b8a0bb52b6d6b7057a6d8c4 1 0 \\x000000010000000000800003c6eebc95720ba253b9b8528837949d3ff7608da2746bb0901d50cc86acc5ede4d4c2a4589ccb72d65013e5053401f3f441ddf27b508f3a7ad1d3d40248ed193de8f0470d0c2240bae799010fe39f64c46656436ae3208f5ec78f1f63be4855cf427466e1cd98e485d611eb4a8ca7ce10867d8e24f421f3d028f8f51140482a0d010001 \\x1108521e129118e8b32fdb52d4a3a7ceeca4ec92afab1d00f822c030b38548a8c712544c03f21b56abb5796dce3250870a3a4a7c7bbc98d0ca822a90b95eea0e 1652864907000000 1653469707000000 1716541707000000 1811149707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-33 \\x4c30862c37d3cd15f08656d6cdbec3e22d968bfdd8edee1d907cdeeebecc19302db78690c092fbb998a254ffd558217ec90b572f0451dbaf9ed6fe4e0f5452d0 1 0 \\x000000010000000000800003d6166c8071459318b67c8d7c889629f7f920a1f4a7b9d10ba0830de9887f0c831ba4822766f79c9255b523c92b5e720103d76ab7d43ac13f9d5f035935f5f1d7955fb0bc490109e88cb614ce045a0d5d9be94459d3fd610f2950af05e982230eb036ccf3ea9e9cbb49c511a49570f9621a6aae470ec2360ae961fdba3f88b269010001 \\x18615e0e4dbae57131a947aedb2b0f678d808f4db92aff18447f9e91f2b2dc7b050c5c863dc529ef9a7b67a80d8775e44747a3e2fcbe4535e5e1803087464d0b 1649842407000000 1650447207000000 1713519207000000 1808127207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-34 \\x4e7c98904a47a8eed1b93905d110c38a55f6e96dd43936716a9d45fad810c5a6cfa77ceb9c5016ff2d4006f03f3b5721b7e82da3600c94b8a11f9ab57f767719 1 0 \\x000000010000000000800003bbf649a2e43236d1f489ec1de0a467c7b7aa37689023f29cf6c39feffced77c37849240e582ba3ef0743b83ae01ad3057e443264c497ee32d4672973db0419e0022a364680c4d978f6172c38f86c9f2e6749aec8cf3e1d564fc8086153e2472edc31ef164cb61dbbeee4299cbc207a17604c239ffb49ac427ed9f73db6abedab010001 \\xc9046d4adb53ef5ac8e90313f2718ce1edcca65e1417930da9be05c5a3450fadcc6154c57017cb6f471570b4dc3861bb058dccd8ffca04a64a508f7c7a3b5b0d 1669186407000000 1669791207000000 1732863207000000 1827471207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-35 \\x5198952f0eb58f7ee44cbf8d2661c7b360eec6360b35280b48a884f502afef90b952958502ac64d9d28c49bc93722712ebc6f3197b97e744be61dc4fee3dda92 1 0 \\x000000010000000000800003c6961da18ea0e839d675bed810241612884568b7e49f343110dab0d7b201908bfb7751a000907e6adbc519019abbed6487abc1b7ed96239d2a4929f40d5f467b396f09231458e18d9f3742d1608315928d3e548f34a2e8aa1374d62cbf1e6a850ae0d1db7184c0547170d5d5eed0394a89fa2d2da83f212ed5b215665bc932ff010001 \\x7605270fe13299a31f6aa881af8860ca558f2ee393d932050abb81e9784d03183c77a7d063cb8e6a25fafd0a1682904f09078dcbdfc2bf8203d3f0f8b03d5f0c 1655887407000000 1656492207000000 1719564207000000 1814172207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-36 \\x513c47a9f58587e0e7a070e9c2c5d39cfa2e0cb0e569341c237a7fb967be89aa80f476f275eb849d11dec5de43bff74e94e68f097c70fbbb4c7441128b6487f4 1 0 \\x000000010000000000800003bfae1ebc13339737fbc047f2b8a7bcfa1ce14ed587ec0b15d99cad5d730e1b7b8652d5d50a1f8d9098f1372de0dd58c20961ab50a186d1bc8ef133a1ea8ea15482fb6187b018abbf62147b1ed61bc9d2f2d3003125e59eba7d3a57d1866ccd9397a0caefa2299775dfd8cc31de600aa88fdb8b4b212f9bf0c5e34d325f187f77010001 \\x8a44c1a588d7d7647c1bfa07be77291be3be607256600b44d8710a4eeaeef1b7163705b4598c5550ea411bbf0a11b331e182b450937c9975ccdd96475ec25406 1640170407000000 1640775207000000 1703847207000000 1798455207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-37 \\x529c21b4509c93676bf3a16500fcb8503a70a9be1cce9ca0655f22ec21c9175be29c797da64d4aabf79ae7d5051672d69c3ad8352400c1b75f0e7adb3d05c7fc 1 0 \\x0000000100000000008000039c6cc81207e410a107986fc0c44a32f13b5c296d87f17f824d6cb62712e694cac93d86bf2f18e23ba60aaba6faff413a0b44f6b37be571e11d279966f654274ca98a1a3b329d2794961f9cad7781a0c752892e09dfd469c2eb85e5252793ff16093acee52ef9b9fcdfd4479d4f2fa4c00a3f6e15713242341aaf6ad4dcaac067010001 \\xa68e52b2e7b5e7a9c3d23816fdc4f00e3de7bf41e57ca51c3c621e2c835dbc3f11c7d6d6fa699e25e304bde2131c9c3a0a959cedaa19c2ed872b1eff43dd030b 1655282907000000 1655887707000000 1718959707000000 1813567707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-38 \\x58f8e5de818b09ebdb9af715addb97dad0d528438c0d19136cde2591096456775cc76fb6a1fd8ddd0ad38e24865faf3f3ddc6ff99106d8ff3c2482d217eabb05 1 0 \\x000000010000000000800003d9ba0c5b68cbe17554d8f5f55ed1696ba527a2eb3b82dd2db883050b0330b17b30bbca816618166a442fa483ba4c5707d071165ce28e508e0b7d322f1c3424773fcd13aec42181894dbf2dd56877f07374895866173da420085970f650830ceb1f142f50fee20fe5f56e25b8ee4027b21d7dac91434e3465fa7c5e968caedfb3010001 \\x8081506f731aba9c7deeaae5ca028a021314c1b4344f5fafd0eaec0bb429c2e24682233e4cd121e0fb6818e57a03b0f15540c435a6b41237b0795b1526c2dc0f 1649842407000000 1650447207000000 1713519207000000 1808127207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-39 \\x59f0988c218e10395ebba3b1757d47c22858a620aa237f1fb0b9b32bccd8630b9c5e18080a0fde7d823c1bd180c3c412e273d533af2ca7403420f314c0a907e2 1 0 \\x000000010000000000800003ad97a1098ca06e3800173d316ec01aac72bbb3fac1c6d81032fad7af9bfe459f88c83c182e9bded69a77fec74ee69c6ec59115e2785bc3d17811d5d89b8b0c0d16a9f4453c6c54df5c8430371eae997929899fa29aeb6016219832c0d2fe6ce587ab3b95cb015ee8ed7b95392210107e79c4c23c7177ad42f2f944b454cf2af1010001 \\x40a8e1e8567d823f9c5cf3176759456ab745e779c5baf2d23baf83c0b9882d951491156dc7a9a712ef4a64cbfdcd533c7e9c72f2c19fbe4dc5dc71d572bde809 1669186407000000 1669791207000000 1732863207000000 1827471207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-40 \\x5ad8bd75a53c0946f6d0fc693c501b747c44dd8f0352e9a3f7cc111660bb11d4a28323724dc644e0426eb41e148cc3e8ae32ccba00b261aee24ea7f417da858a 1 0 \\x000000010000000000800003abd024d9c74dd282ea50c116647e50e0759ccf0fecfbdf928f82d37c6a6f14f2ac40ab2ad3257395b59a346c5b4b3a380ad3b35a52c2edf0c871dbb5ca1e96505e05f211fb7a2f4b15e43f99a077405dd9aa938a5ba7946f3a0283e31c17647bd0b6108129e9d6f7fb86f051fc7ea66c9ee63c20ef824828d0243397b4f3400d010001 \\xb2845f7f4483575510663394a590ec27aac74b1c61814eb9d9873ccfe25a09ceb2772903da6cfa834fe9bec83f98f1c7f2a6f46362fb67f1fb40338c8b6a8407 1646215407000000 1646820207000000 1709892207000000 1804500207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-41 \\x5ec892975b6818431f1136a04fb398161ba3e7dc68a62bb609edb53dbcf7ed237c78a6a12aa06e2003331f0654acddb9faf9210a32d28a83ea3b0242665d8f6c 1 0 \\x000000010000000000800003bff538b6039f641ee26cd984237388a70468aae4aa89b373da7bd6bd78dca4ac73b0ff590b71cadfd7e9172d249f25e6ed3c42848d33209b25ad427edcc560558e25c9c22a90e86c55983f9c2749bb542f4b6c90c64aede40a64ba12dd1beb503902dabe2525f6a8c2330d549d90ae2cce4b2b4c1a6802e9a3982da83cf2d8e5010001 \\xfb08bae3b94d566b2cc48f529a7d334b9d1c4bf0caea3f08c754b68c13b7ea88155171fb7de4d0bc487aa8603066f340ae437e20937e6c12277784ad3eff5f0b 1656491907000000 1657096707000000 1720168707000000 1814776707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-42 \\x5e9c4602884a80ddb6da2752e479b5b445008225ef8a1fda5a41bac1063ee4bcedbd76d88de648096f399b31f8aedfc893a2ae705438d8a70bd8657ea7472298 1 0 \\x000000010000000000800003bc65083451c00ae15586c36b24b7122b60f1574a9d94d7c10ba5de8dfe36a8eccd66172b3101c0f0fdd91f7794f067de46907df0516d12bb25c908dabf8a7b132e2878d40392de2bd073ad273fd9968dabd7bbe166e975cb71ff91d8b83e4be1005f6ff2ed4a02e5a4220c84c5c228875d5f4fcb838d21dd9eb7f7fe964e87b9010001 \\x920dd848a42bd62897e8ad31b0558fc02cb6293ce719c2e7294f78321c6b6cf9a1c9d7624d2f02ecd17e6015b059c0df1457fb1c238f89c706d6cb34c9975a0a 1646819907000000 1647424707000000 1710496707000000 1805104707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-43 \\x62009a52e5f56163bd4a2d8d4743bb14f078b68d6883ba3498b568a34ab2dfe2c708aa1a8e7c0ceb45d992286b6e2fa3eafc786952a3a49872d405e7af22f12b 1 0 \\x000000010000000000800003b1f0a78c36f8145849444f64f30b6d0cbcc30cca6b9571c8bc114718d7fba2eec31fdf7e64905a81f5ffecc5737ccf9d53a70f53b7df6da033c3c8d2374740ad18f0d8d1ab655161df56a52fc8850e8af04bbca862fbcf3a9a9c304f09f50485207facfae44cdf379e405e3e2bd99f5c368727eb736716f02bbe8d7f2cb4fdab010001 \\x938e11bf19730ba0c32bf2142224660fd9df93423e4996d0983c7b63a676f8099314bf3b4eb458aa91d11b37406c73401a37bfb6e8747c011ec47c5eb8425e0c 1666768407000000 1667373207000000 1730445207000000 1825053207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-44 \\x62148e2ece40c42428d8e9a03e8c2573979609dfba8d6c5632021bf848a17b1d1a20b4b5811e9642b5ba1eba585e63491e3dee45caeb36fe2b8f7723dfc2902f 1 0 \\x000000010000000000800003c982e71ebe111db4de1912595bfb9aa76146b9aed2045f1b5b0ed87fec92192dce493cdc4e0613908b347d180bf6312430fdda38ff603d3a16d6e1ffa0267e7ca7ac43806e3e317a4710f1a363f653fa961c566d4dea804adba45c327ac8bf0f1b240c9c02e806f0e8a20eda6f3ef75cb0caecdb3cfc968a531eb423cfc72fd9010001 \\xdaf2d3f185f23f3ebbe4024b9acb175273d4003bb32d9520f12b8d3e6294087804026529a72b9e3429c4f0bd3b38f23a176de51b9bb97c59cd5f9f435fd0a606 1665559407000000 1666164207000000 1729236207000000 1823844207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-45 \\x66b4170427de16272fdc61cfda2abd6b02318fcbb19111cf72fc73fdc6b27f16289c9ca701bc237c6c38c5da4aa4cfed9c0598b1acfea5ca26c8e644a48ae0e3 1 0 \\x000000010000000000800003c2df7d3f92037690881fdb466f7c784aec577b98dce9c57489ab00323727b6590a186f41830bb38377503c42275fb4df8e2f358ef9a8607eef4b22f1d30ad20c54a424a190a5273d30631b0054ab97be4d1f0d257f533d25732d50c85b0b26a9a72db1b94eb55758203b8b02812b6dce042d893b3990862940917151cef0c2f1010001 \\xf3f0fb1d02b032f33d3099af4b22a9eaf4b6361fdd13fd956f285a20bd45357c4478afae8ec9badf216f923686f98ecca2a6939b07a60a704fd45b51c9d45607 1644401907000000 1645006707000000 1708078707000000 1802686707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-46 \\x69d437490c9eefa8e84074bcd4c28af62a3c88e5661f05bf105c0831e358fcbec0ba1a5286140b774b62e110c977ea1b79bdff772ae15c006b2ab69add7ea641 1 0 \\x000000010000000000800003e00e1f567a7d515539574b5dd3c24a2b500ec4aaddd9e9cdcfd9b47529d5c0bcf7096b0b5e69af0759e13c9ab9048652016c05bee54d6f317fca35d67988d7370bb92ef3d43d032386bbb8354e9f8fa870cef00abe4015f215fb75d4bcf6e0d924ccdd6ba92f0839467e3e45ade7b94e7e8da71c77a9a35423a20775737d4fed010001 \\x4ec130e57dfca647dac65e076f3f2b6923c474c44c2efdb78baf5cdc4b059841bd3c765bb56d84aae55509a3e27c1228555647697a123b5df5693c471d98440c 1669790907000000 1670395707000000 1733467707000000 1828075707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-47 \\x6a00bd5c69a7efce4aae1ad541a84e57acefd65832be417dca496e2e008c89d7ca439e56a94767dac14fc4464d13f988df4e03722ee7166643b5990c8128e1d5 1 0 \\x000000010000000000800003b20ddf8a9f42eb0e54bd6bde57c793fd98ccb65501049294ceab0f73788a98f8c27ccf1d5973319a8b7171cd237e28d553bc426c9ec648b6f523f8778fa71a1480009412ca3c9df4ede46e75741da42870cf018a482db1106e53f90b210143970e48400d4338cad9b00175c5254074f90d5988fe00f7089a6a1a93ef1a79ab19010001 \\x78bbc0a1823b57d4a5832da57ec4c075c54e6768b8c93e213f2664cd42c6e1937b0dbf2aad67191c7a723d4914faf9d8703c031cd5795b7e3ec0671e1297f20b 1641983907000000 1642588707000000 1705660707000000 1800268707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-48 \\x6a34262938beaaa738f26be5702dabee52788a6f86512ef3268b6db0277023a2cf8ca5b4d1816538f07a629d4aed6a5bef9b2ce5931b4c09f49b817cd59d5b01 1 0 \\x000000010000000000800003c7ac508dedbc74038a2537cccc381ea249fabd967edf597569be049bc95095fdcc368ae6c2e43819f9517755ec3fe8a7186a5c0a50e049cdb2058ea7274f6ee2ef5f8c71d550341a1d499905f682f4daaf2c23267199f654d4ca47961c3db049a0a40fb1dc9ef6217d99d3451d50ebef8b8c5da4555786b64f86bdba43c19e0d010001 \\x36e94bd301ce5250b8f8daaef52c5428126174cfac290a545104a7edf81b732a26ef7e5baeefdd4b6482ab313e326071c3dbba2ede41d51e29a4bf91f770fc04 1655282907000000 1655887707000000 1718959707000000 1813567707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-49 \\x6bd4cb0acb6db03952b2709ea63364f7d714b5115f071665d735b87502ccf558bf2ac3cb5850499c922ca182206c20fdc3668de99d1ed7fbbad313750bf19267 1 0 \\x000000010000000000800003f13b26b0d6601524d63cb1a2bedd5fae00318b7a7502e7ce8ba32010f3c1c1f4afe9228d2495a975ee2c63dd4b662d641f4f4682559855c12b27e494360a23bc2aebbc7be5968b2e876037d3ff27e945e0177d4485bf1a38af93a966ba4919c7b276815ed987bd51d80f6299a5c08529012e5706a99cab001586e3a6a0cd9731010001 \\x5cb86c174d7c0b38f434cfc10bdfb1854a11d2ab7c6299829571940620e6913eb7149099d937d46701f3fb4a6c51a7dd2e046c1492522ce2a8ad5c995f775807 1665559407000000 1666164207000000 1729236207000000 1823844207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-50 \\x71d095c4a52f9f1e148117cc20682892d8f962b9326cc2c2dd0f653925a2f213fe6b8805889911e6b12a2e039923c9d7215dddb2b114ec8b5951aae3b9242163 1 0 \\x000000010000000000800003b48f252f67e783a22acda50133d2076188fcbed66c86e419cad75d3e37d9bee2cc9199183300a301ca0a266119f1beccbbc47342ff635bf1dd3ce7ba81f8eae49dfb745de2b6e7677d13a5b21099ddaaad7dfa6aae9faaae8088483fbc3e4fcd8a077389fa23baa61813ab142915b4afa24acb20b85a30581780f2e465648469010001 \\x81231e2fc3a329a1a68ac604c99b82eae2da9fc03e2e9097bd5f4944cd8c02205df53a7a0aafb8d4ffb15802672f13091cb3d502c465f9f8ab7c96bbf3099407 1658909907000000 1659514707000000 1722586707000000 1817194707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-51 \\x71346595b726a62b10d89dc3436eed88f64eca47da9549ed7ccaa8af982be78d0562c8d0141cacb5304cf87d387324bb880fce967ef94049d9376cc5e8167f36 1 0 \\x000000010000000000800003d8584ba0bc3aab295f7cd29c8b839a9d4f3256c314ad64871e5936deaaf35ffa3923cfdca62b406c75b2a20d18bc32e490ce6e705fb5ce9faae043cdba62ef29efb8f763e89c3f6ef9b680391118574616dbf860074a094a2e56c64f5d3f11e106e6a047362c0d86fca88e6f163b5c3f019f9697e1687c561f7bf67d1adf1fdb010001 \\xf46f81cd33d76d9638715c20d0e4fc6f6355a1fe0db17d2671327afe8dee888f0a96001c1e60ee6fd58d397c0fbbb49dc7bfe0135bf3b5e6000326818490b108 1639565907000000 1640170707000000 1703242707000000 1797850707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-52 \\x748c65c29d1b1258b94dd44ffba9e9cddf854fdc1a362fd67caa691736c74c21d39c39d3088c76ba379899ddf99ca8c8bc84fb0673c1afe208270abd6cb2bf91 1 0 \\x000000010000000000800003f2f108eb97caf46df17f047a6b8a74e984cabf2c039d828f7268d3c906d746fd911ecc9e763a2147335a2b63591869219fb7bbbbe5f5fb991b02b8396fa0ffe9053cc0398927299e1661bdc26c703f598ccad6f31c641343dc7fb6277db09cbe05cf049fdcca9426e4880498d32cb3d7634741d2ed3208cb6a4efc543ed47fe5010001 \\x3950aa73fdc49541701840c677fffa211a157d3a33fd6e3603c6d052942002c08a598ba710407a108bc16fdbdfd40f679ec97f8fb50eff4311d7a0d3564a0f0c 1661932407000000 1662537207000000 1725609207000000 1820217207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-53 \\x74b00dca32e02bc9fe0961d9efd26bb78b0ddd9a4a23033a01c2cfb1d2009bac18858f7d8efe8701e95d6844d10198fd3648de93ca5f560dc53d5519d76b15ff 1 0 \\x000000010000000000800003cf0daa048886a3c5fd427c54a036a612cf90e95ee87562ced14c385afa56265a20f936bee723504b092aa8b5bd7a3125f35f0c6ac5184f5fda18322c3817b150cac75b03fd92a5e6993ae15002aec550cbd2b7ee13e63f008f02f1239ef76891c5e9eab1584df4635b78d6faf2638e25d4ab3263e2f184bf07d855ebdf4ce051010001 \\x2aafca874a6ff3a51dc452524a756cb8b235ef89baf3e53dccf423f6f2dd1cf009615d7093a720cbf029d4ec3c2e71a8b774c2a82bf8aa030bf18dbf4d9bd907 1643192907000000 1643797707000000 1706869707000000 1801477707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-54 \\x7670c1387d121cdca0c983994f52650aeab558c77b52ca34f74b2ab27b90afbae87f791e8340444900698ee9599205a920609a4123bd0739978a716aa01de511 1 0 \\x0000000100000000008000039305843d1e07dc5eb68d69aab96f0462e1cb87295df6dde1ca13261dff7ab8c2588f3b5626e9b8c6aa1600f77a2c79e89372fdfd1b9e7f2e2aa7ce9dc5add92cde3f179eca52eacd7e6d42e4264cb600c15f6a3e52c81d719de86a2aa70b5069f863d1babf0f6ce9e84cdd95999579b4822149d9752839abd626240afd271b4b010001 \\x5922d28b8ae9d03aa1d62b5df04639fcb89515196e0743b5794fdbc261aabdd9c0a2ac6b78b5b5ed09cf30945d38356771742845381b1958355e76f8d94f0501 1645006407000000 1645611207000000 1708683207000000 1803291207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-55 \\x76e8c4f0441f13c785f0ea7429b481d926fae0d06bb644fea78a1a92d0dd97beb438e66c8205e32dd30f8a1347241ea2153e51b6cb1cfa9ac6939b6e17764f43 1 0 \\x000000010000000000800003b36a05d1080015a4e0104eb18ee1e572936d46695218781d28709be85801241f3aad0cebd16bfd51a20917d1e017ba2e34a2033eb160950be5c5120f501cd1a535173eeae937b9c6c80c2fd761dc7745a9a5b96c9c2287e585f8d569bfc58ea9cfaab6d071af3e340e18eb4622ef514ff7f2a0769c384174ca19ceb28a62a61d010001 \\x78496816410a61ada88cac6a1c16591abe6881d93d27b00655db7ac9412e186b8e7a8a93c4e9c9e0a60cbea73f2d1463df7d7443210bea59f5b226b33cef1b08 1665559407000000 1666164207000000 1729236207000000 1823844207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-56 \\x78b41c2347a620e97040bdfe45a0f6b3ebf222b9e485dc880468679d7f172c8490e54389fd96c69605d16c7fd18b4140f7cb5f5450611bacbbd2f1187aceb8e7 1 0 \\x000000010000000000800003ba22bfac159267d3f7bad306d3f4bdb447c06ed310c30068102680a105bf290fcff03985267c5b7794bbaee52ef39a09cc404f02f6cc9eec15f7babe3aa98981ea3bea1c3a3c4704a2d905bfab4d052301f0dc72a53fd8699f90da6ad63b6a93a44f3b8e4d6ea5708daff9da6a4e0760fcba81bf60060ce1285ec05d0d48bba3010001 \\x67d8108f75f7262082db3da3e5893f2fdd0ec3488f78ec0dadc10d9be9c3234dcccceb8ffff621955de29824b3b5e4fa8e150cb34bd97de40cedc2d33ba30d09 1654073907000000 1654678707000000 1717750707000000 1812358707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-57 \\x7920681d220de67765ce401b6aaca24edcee13af9b7f7304c219ab2ce93e82437b7194ffdb15a2473f65e5b52c3cbeace9d29391d945a0e2506ecc971ff5563d 1 0 \\x000000010000000000800003b03dbb57b966cdf478cfd278c2c5a3b921dd7fc0baa7112b19a1968272fe72092f049036110b637fe7a0bee93a5f13851356dc08d1b238bdad468b624eb1b2164110c5daa3a5e9c09757a50d5d85923c821c9bbca1c7c70098e61bc624cf8e6084ee2a36bbe7ab45eff3e8cf1655be631155bce5b795d0eb7f9e32c33b10d3ed010001 \\xa4067152385013a8c1bb4638c320d741f8958f9771446595d922421ed3516575bd41de5f681b258946914ba15351f7f2899ba2be6e2a92dbf3a33bfcd929e70b 1648028907000000 1648633707000000 1711705707000000 1806313707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-58 \\x79bc0514fa18a75e0b63afd189cc1c1c9aa8574f9dee22b6984941e00a62b1e1ade73bc387483f16093a3ba5ae7e2a6e1c5e5aa1a4385a5754bb35d76200033a 1 0 \\x000000010000000000800003c95a852ee230873f4edf5b2093adf580ecbde1d1331a8e7bf46541ba4141f4b878d6575e8b3854b3270602d541de920e6538813f32060dabdcf3f28ad48a50d62976e8b6affae4c2b1c69fbdd258c7a6941e2bb6ee8cc87a2dc9ee5e334424ace9042b3750a6b41e61ed3e4d5e4c0bc6396906b8a01199ef173fbe4c33e7c13d010001 \\xe126e1ba45a252ffdd533bb76a91e87fb16cace102285d550a9d620f85792457c1c62cba391fb0f9299aa4a085a7baadedd68dfc1411f4f41de8cb254a4a9708 1662536907000000 1663141707000000 1726213707000000 1820821707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-59 \\x7a6435aaa6e144de146351add9a8afdccb3abdf17935a08940e252dbe4b0cfdeb4a4a61bfa20abebe38ad00b560818127a78eeda28e08d1d7588cd32a1a66643 1 0 \\x000000010000000000800003f6299a8d54a0b6864a4830057a44ea32cbdf3b1e54d4dcf17e425c14de41d6fd3a4ec25e4897a1024e6869437067993f85857dd5a666d105b2ef866cec1bee67e7de0324597a7853b28fb0470cb5dd3978b13fb7215d37684f88f878dd0c89d9c5e8e8a00f49e47eef560e4ba1a647fd172b26fe7abd1cc0d6ad144bd45861cd010001 \\xbb18fd96a3d94946986a83a19d705fa85dbc10eceeb3f0a7dbfd39782c740cc980d5aef1ec974e9952dcaf35215d1cc619f42da99398c516143eeacea4d42708 1652864907000000 1653469707000000 1716541707000000 1811149707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-60 \\x7ca840231d9b8b3a79430e6cf4c18852a551f7af0b715db106aefb1024bbf1a2f52b0a2c55472574f30a6aac2fce4052d0d7782ebaa7cea43563c6dab54a24b2 1 0 \\x000000010000000000800003c06ee06b2c2cc562ef7589241b49952e4fe75862686627cf28da38812184b2381e60dc69c3c73669b69c031f9e6ebdcbc2b21319fd806cf1d0d03ce732eff5c20df4e2ca0123c64565ccb0e4389b14e64f63023fd482dc5eeadc77c0012a152d17c81c5626cc521b0085126ab82243e0ef7c5062fb108d55cc7f7594fec8e7a1010001 \\x7ad6f052dcc9c6f9ade92361b35a68acf7c63c689b19f80fab574886034b55a883ac80bb38f055c942afae6b968cdd5dfeb7c849f320911e9c8b99316b6df20f 1663745907000000 1664350707000000 1727422707000000 1822030707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-61 \\x835cf62da2ae3d296ae00ceedb1998c73d09a0f95cb38e4f88fe8fed4f69a293d9f7f719a72033bcf7ca8ee09efe0b83902e49d0a6ba68869552def183c05897 1 0 \\x000000010000000000800003cdcc6085823a2554cee19179db82958d8baba018cc9595b356d22d1cbd4733b1ec51ed0e4c15fa952ce5e9adaf7d7b2ad2b990418264e4d03180fdf6aaa71f1c0e8c42e19fd544d3d0799f4b69eb07844586095266ff7c9b17f049892536db4a28523a5832afbcbb77a065b413f1a5953f946237b2d58caeb819cb5c790ea597010001 \\x66f4f3fa72a2597b1972380e40db0c969cc2acc8bc071980a1ed8f8eb1aa875bfe9b50c88f6ea037535acd5ab383ace162bd9a34290f4b04a8e358350e2e980a 1657700907000000 1658305707000000 1721377707000000 1815985707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-62 \\x833c224b510c3751dc32c1ea8afc41daa86ec09f65b6d7b7b409a1ece04e8795aefc67b6aa890a47e3599585912f86a80fec3876855de180e4734d5b2d561b78 1 0 \\x000000010000000000800003b157d3c02f098231ca75ddc0f0e0033d2d442b9e0ebcaecf3c2c88f8cc04d957f1591f153830787b8dfbbb4c1b3c05c1f7b87d210f67a198a32edaa0b34aa8d0fa2aea0d6a624c1f72f8bb8be77c12a9e8f1e88f722683eba8b4a1a7e16feae398ebda3f10adb949806705a4b2ed7dcde70fdbed222482e83c02364677a0f07d010001 \\xd63f39e77df1144f0d5ddf9f47185eb3e07b89d9d1b98faccaecc2763bb8d44cbfeee813505134fe29c5b60fbe68692d1935ada8ec524562c1d1e3479dfc0701 1643192907000000 1643797707000000 1706869707000000 1801477707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-63 \\x849864f251cccf947fc3eb1519fc90af18d85890fa357d718858bea4998a9bb6cac7d28d01a137fc7ba94e76034480b12675b8e637dc4725863a1294fb4dcd42 1 0 \\x000000010000000000800003d341e0e096a97de98cb19ee57d985aa55f7ff3ef55336efd70e14501056cb852d27d20095406944d4cf94ba4c4c2215ab3fee0fe2c39363bf0b5bf98143aa5154d74dcc0118a5f19efdee018353228bea35bc39aabd73e87d7cda19758d91a6fa129c120a208ce8e71e90e56516c279edfb3418bd6580b06bcd928f6aae514d3010001 \\x0a0f12dec446fe32821302caa28b293245f6ae68f7a5c020390a810972d09d571a74544428c08ec8eb6d216cff483ef961b121716e690a763eb930ad7593d701 1657096407000000 1657701207000000 1720773207000000 1815381207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-64 \\x86e4d14d122f18742644ec85a111f5e480ffc9d2e583419821f52a89816b2f8fc889a2f9067d0d004befe4508ec600867b18d82349a368f297c179aa4cd0d85d 1 0 \\x000000010000000000800003d0788c4b45f06e032f858f90e7cb6a65996a93cccd009d5e9eafb90b9d70f3669f735285aed1c2c33b954510fd7fa818ddffbed265bbb3bfba52fc5f98a93f5b8a782555a970034a5bf8bfd170a250c0576a17cdd6c97e7e5867ce3ada8e37929ba8abc14d7cf6e166b6d538efc3fe40daa28bd6e0a58a158aefb51aea57964d010001 \\x04da9211332f37774a4c0df3f89aba72fd05c03a63a7ff92e8bfec8a4ee0aa919be3ea170a59b018964d067c79b6adef31e5a3b222314146020a77d4b4c87205 1646215407000000 1646820207000000 1709892207000000 1804500207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-65 \\x866493637036d2c51d8d1132d70d24f9fc44805af9ab5fff2ea559a2fffbf5516d0a13701adacd6399addb4bd8c2e52543920c7700651f8d5f85e9641a98b690 1 0 \\x000000010000000000800003bd61183bed377a2339d3dff3908167e550a1594a26ca4080188f60b507a0729e7fa6b5583f84d7f1301fe49d069310293dc625557c168b1bbbd0dea655eef038ed7b57c5786c9cc245a7f270aed05ae41ce34e46a9bd4eb0c458078df65f8f763e1fa656418f04c25344ae49cc9a14994e2399821788a2c1fb017d72508059ab010001 \\x4ecdb07a684e2a0e87981ddfd5122f5e8da898f485ce90c08ab44f051bafab27235894873b90b9447fd21c7d7b49d92aa567dd0b175d0c2136d011b031540b0d 1642588407000000 1643193207000000 1706265207000000 1800873207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-66 \\x8768627e8ac99c2c0973af737d9f56234c2d66eeda5c919846df02738a89314673580d18befb3c3b719de5203c0c41bb767da3b0b3516c0575fcaa49059b0335 1 0 \\x000000010000000000800003aa1281b825eaadd71cfd6f0a5eb96caad4b25e6d19af482295c5d15c89e8aee22253221c70e88b23261e816b3d7cad3136210d308ffef4a092d92a2e112c6e6c93e872faf50968680ae980f09bb2a76d276059e01ea25fef1625ee08de1b80496c46f0e586525f53d1386c69c3e0ca3d43dd303c5c6d8d9da7e92be3a661c23f010001 \\x92b8c0cf081d4e2ce8dd3274a550a24c16e96d24140bcdc40b9fdbe90a76d4820d2ed195ea5eb8f21a7c29c56d5496f64a75d923aa90ebec42aed0750f32f703 1666768407000000 1667373207000000 1730445207000000 1825053207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-67 \\x890cfc94ec3ea98af1e67d6458d9909fc7f4b836ed351ebb293144c4f62fdfd3f5999cb207d85ab6b70447ef01ff7b671c34f8e47ad0f3e26e4ba825a229b47b 1 0 \\x000000010000000000800003a167614df21a6f121062f62431ca89259745d4147b2c6cde459922f08d48fccbd5253996052f9d2a1428488fb052e29ce2e6180f42215c8866005b3eb9fcf7cf5f0b0ff3c70ccc3ad8963ed34d8c27a7b553681e9bf7bd22845f945211f7a69dfb2e12d9c7e1ffbb8b437b54e721e0f65e29d9abf4f07b052f7db660eba78c83010001 \\x259efdffd90f57b2b3635a23d3633f591e90e007ebcd0331f0f7aee510a86ac58037f74fa0c30a76baf2abe299a2309ddd549116c74b9537595a3d9a90e14508 1647424407000000 1648029207000000 1711101207000000 1805709207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-68 \\x8e3cbc14b02186cb82a5b63c4a00311c978b754217881a16c984cf9c12f47d5dc5463b95396335d0a580c03fb213bb9591208ee4528bb1043760ef9e605f9b8c 1 0 \\x000000010000000000800003d7e5e31554382453e69c6ed9c21abb79ffe22d0b1795bbc17edee32c1b3aaf8cbbd275eb58272ab2a788684c0b79c17883e4f66e3f7cedd7c639f722d926ff8b3c9c7918c77110fd0c72644b761dae7e2e334f72e63a375c67e2d3a0617211577d1fadff6c5f4258f8e270cd91376f2587fa71ccd7b58af7118e16bfab13e925010001 \\x600fda08915faa837e4c060beabfe3547d308f516c9a98851de729681a56f1e441efff225081114f054f564fe2bd1d8abccdfc2a02f036a33c88550fe1cbf20f 1667977407000000 1668582207000000 1731654207000000 1826262207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-69 \\x8fbc94403b7006a569d29300383e5d8340c045acfd5911b7ac6616908e745855ce2afa1bfda16f1a7985dc5fabd35de079e65cc55a8c421225dfeb942c49a8f1 1 0 \\x000000010000000000800003cc71636781572d3625fdce1a68ed2718be73fed2b52df72d627dbe1a2f719a79c6ada5c448535dafcdf2bcddabdb0be8694b9bce76cb4ec832d3b38c106ba90ac2e7757137bf1303bbc9196643782c719644cca9c7baf9882f733e9fdf121fc61b42217948385b409af9c80b6a5e589818b5b8da3ca55e9404a98ab6b283a451010001 \\x982803ba2b63c408c4a536051131ba5671e53224d2da5f62dc7c9d6f035232213bcd193c47450317ef2a2815646e0c088cd6f76aef4aca158b72b4807fea6a08 1665559407000000 1666164207000000 1729236207000000 1823844207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-70 \\x9224aec00d941ed75687b970313b4f33861d293796ccd682b10555c940b33f72a04ac6fa7e2f943b39398d4698cbe1a029a9dca446e1ef6ceea5f76717b680a1 1 0 \\x000000010000000000800003d4564d8a9125ce998a5b13e829e857aa9bde5c889fe03bdd5986398080dea64d2a091cbea155da64f860e3b804d00e8494a4efe031befd6cc9ae3f512e96da2a2885e3e35572e2aab7937502a37a04d8f831fdeaa14c1f7d8ce94f99a7ffb1575d1a26c5499a2571c3a289f8613c2a55e0777c6697051e0946d6c6b6c0aef6b5010001 \\x115a8974747a77e03def0d6c65c763e21208a21ed50fe4ba4241181720225590bdd7447bba9374070c912befc8fb800c978e594d34772d08dd274c3a3ff73501 1666163907000000 1666768707000000 1729840707000000 1824448707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-71 \\x9488b7b495ccce71d2ad451cee889c78aba188aec463b8d96ea6d6310311ec91ba1c5caf8a38248029fb160f0117df3666c0c8516478774c747f6c880f1e219f 1 0 \\x000000010000000000800003d61b37ed55d51036bb277684117589fb885aa8b4c508313c4f7bab6308e1f9194fbea7217ca8fc30440c8091505e38f07684d45356804f563c491b2ed4ab977c7e6e60fdd216b24c469fad49485a47e4a822b16c0d40f16b6109ab927f1765399a21a9f38deeef69aba43935ed51b73ad99f11a1dd42ee28e92efea76ff0bd21010001 \\xd3fd40cdf3954d0ae3171cea5081245740c5f44f0f700df1e178b747e8f6743089201fbbf32697a44ceeb1f8494acc235e991844f0729924755aecf75cff4403 1654073907000000 1654678707000000 1717750707000000 1812358707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-72 \\x95b0ee54853845c3c6e92c66da4ad6cf1ef797d719a3de8f719d5e4e03cb53b3ec7c8d9aa5ad2c1c05dac022c02a52aef3770f8012b9dd9338f3d1db2d566f85 1 0 \\x000000010000000000800003d1500c5ba1a47e40b752fb3d5b91befcd7eb8c7a38a1967227d563b9c9b2b8fed7952c969615c8b4e42a78c5ac89eab0458ebb3552652cea25dd3e8c8ab663d88a7b82f0c7f22344ee0766791393c9907a70476fd372b4517304dcd1cc885a07e73ff4852014a92c892d5b9a66dd217ea136a943c85b1a28834921fcbbd4e0ad010001 \\x74ae5d015794c947d83ea95837c0c8e13c3f9560d7c240a00c01dfd6356c05e9bfc200c2e8e3af061cd7997adc8af198b63c3465dfa0f534d884a7655aa3c902 1638961407000000 1639566207000000 1702638207000000 1797246207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-73 \\x9584e8f117423c2f97cbaa68c13918969187913ea666c63a2ca0cb207d5524bc608e9adc436bb6862c63c6f01d929645d9227c8b88b8954bbb002152993206a7 1 0 \\x000000010000000000800003eb5197761d7ba0812e9a7286d6fe1d2bb7db0a10cc144a842c135a71f56fe245274502954f6a43a97bb35968f32f394bac31c39e1740c52bd3f6bf05a523805a0c7176c65b1164bebd641544b6e201513317015a21b552b379ad507f6dc53f807a615bdeaf643d85664dd09430a1c419dbbd946c9c762bb2098c8dcf2a322ad5010001 \\xd0cdd9491ec861028d8942f67daba4a1a75558eb76b26d9f252fe24327fabc065cba1b9bb634ba50e1cd4d5f485db3296922914ea26e96cbaa581043a1ac500a 1646215407000000 1646820207000000 1709892207000000 1804500207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-74 \\x98ac7a696cafa00500ee00f22d10243081460b283a69823e328e49ede0c7daa01f0c19cccdd6ba86f3c2e934147b1f373755038442872b4d0714563b95b0a524 1 0 \\x000000010000000000800003c582e0e2c82269fa3857134b9fd24d1e4f44eb0e302c3b1eaadb630c67911eb5abf9eaacee3eb1f019577262ec7e2fbecf63fe1183c97f6d46981d3f136eec82697604bea9bbebc741e063bbe8bee008d13ff7be461edbef93de7ce8616f8ce4ffb8088799c336871087e928daff5d57d3013e9f731d225979160fab87c4d385010001 \\x3984c31c0eb74bae221236e47ee5971e3423ddaa9b1d22ee516101c61c04012bf2fa0b54923054bb5903a5b2f7ce973c17cbd2463b9ecddafad7051974de2b09 1651655907000000 1652260707000000 1715332707000000 1809940707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-75 \\x9a80c2c0873e2e12baf1945948876e75b0d826b17d08ae06d9cec3cee0706c6d9b36c36f812a22433da4f1370131028b8212d25fe169bf75f5101c07a60b9a3b 1 0 \\x000000010000000000800003c69a1ae2cc601c9a94c0c839f5b32ba8b0bc77c3b3b908b6f27c219169a1803c0e23a36de6824afc5cff75dbfc35a8f201f1f7c6af21315e84e377782a59adec6968bdbed220c6437cdf76f67e74bb87dfdcd5e8d0e1cd5c4cec1860a6db3ef5d38f02b108a9e27f7b66992b5a96b7d3ba9390090a2aacf3fe656cd9403f22af010001 \\xbc1ef06ff56e5ef471f411be6d8c93ae43dbe0a7a5f0b06cec4f1e59d66c45f93dde60595d40be13d7e6d1804fb0a63a49fd1f7cf5e5f40c4f0f73f715526808 1653469407000000 1654074207000000 1717146207000000 1811754207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-76 \\x9cc8afb2f9b5a78017fa89f10c069457893a3a301b94d1e5281ba0d08b95a3e67b76ea2f3aaa23be8945ece91ce0ae5008202487a5ba164d6b009de4ee40bc1c 1 0 \\x000000010000000000800003d56eb35bd6be96bf148cde4412a4fd6647dbcc8f441c5c689274021a1ceaebf178ad01aa8302b2f63e5f646519acab406666ac35f62a805cd7bbe98be2a39f232cf7efe895f7d3e57b1f3b9b7f57a48029f01fa5d2b3fa2c83cb812a96a3719fc6fc241a1e3aed0109c475ec75bf6f5be53d432422a881230ca03b814dee3c61010001 \\xd49c7374a39c3ea128e5239b50f621e1b5fe00c58b3b41945377e92e11e770d949b738d1b9a5b7ef60aa038c338dc9f4161553ce6b8fc385c521ec6fac62eb0e 1658909907000000 1659514707000000 1722586707000000 1817194707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-77 \\x9e44b8f23d90e58669418789abb37676c0d9642e0c3e0685e3d0b5ec7619246cee4f380cd5e225a68b995802dab3f7125100d0260ccefbed932d1bd112f74f15 1 0 \\x000000010000000000800003d8944e06d5bc6e9cb6a7f947f0b2ff7820856582dec62e01709a41184179859bde8a66b54a8395dd068c465e8b7cef5a3bf3cf64822f046611046af84f26f0e8897aab8d7d49008d542dd0c5194a4b13698db49dfc585ff9d1909154d95da893289f754fedad0bb35789a9931daebcff4933daafc233e44bf06ab43f57a1d2c5010001 \\x7fbfd6c80c33105f591a73bd64c3da344755ed6321986e737d7d24c8a60fc189888e17d5774c4b20c04bd0905739763431677f51e3fa57d776858e5473c26401 1665559407000000 1666164207000000 1729236207000000 1823844207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-78 \\x9eb4daaa65acf1d91321b99236ac53dba73bfaa4673ec518f9c29b0d3048f96c5e39eaa1861edcc63c7a205eb2d90f979e5bc9ca1216ea32d8888af8b2f94f33 1 0 \\x000000010000000000800003c52624d7eb4f5f7eca6334d7052e0a2c602f157ffbd4ae809d993e6d7ce7e7c45025cebf2bc21cfce1447edc97e6258b94b90e093743d54fb4afd831d084462baa58c811f35474f35ae86701fa550ad67f59ec6e543055833ccfcdfc024b393d46f87d18a2b059275b47c651e145df86748fe04d294d475484ec5a0ce8bccf3f010001 \\x2f47a1d45ad88a22d84cb416dc89fd1a93239e5a57afd061b74b831851fa497b89cbc6037c90e66e04c1a09e60e785f8619c995997eada1bd1e8fd28d2608a06 1657700907000000 1658305707000000 1721377707000000 1815985707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-79 \\x9fe80dddafcbb04562031f8f0536414c8ab4ea000a76d0b62f34b93f3c4441985b51273f9661c968df1016480ecc1f33a5aa2df9837b86bb9c20980176e135d1 1 0 \\x000000010000000000800003b48d5e8e025aca7a55181daabc7e87d18cb47348c176d27189d5fc2bc2bff823b44300db7dda01a9634498abff771bb8da6233c16c3eefb9895dcafdbdba663638ef13de2f1e8dc2232cdb203f57a7e4287faefecdeffcd3f8ce5a920daa31e36e059ca874c060c7576e134f366d9093cfee41058ee80d1d52832470c520026b010001 \\x7b32bb1031c099adb52cf042fb9de49ce4bebfa00c13f010d96f4c6200101e8174fdcc62ae717ac5e082c2afa60171d985f5065ff10ffaa411135b9a04bcee0e 1652260407000000 1652865207000000 1715937207000000 1810545207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-80 \\x9f8c9e5d1d0a7900875ce5820461be6168d6b6d949c9a23a762ef6045e2961db53383ee4bfcf58351695d63fa3c67f1501a0f151d085bc2770b6a048eb7cd40a 1 0 \\x000000010000000000800003d1026c1341ba31ea966ee83305fc829a5e6e265f8099e3742a40f11fecc83cf167150b06966df6e23693a9ace1ee1c0cd2dfc0c6023b89fb92babf11580f8f21a4ca1ecef547f10ef75c3296ae4f288dbdef005a24801668e2ff3e661cb8437c27d9e2379f0ae91c59618da03f07180c3794bee3a0858654143fb767d7d30a45010001 \\x493060634f96cfe583ab668f8da57ce759a9070760a779f0939f144fa15859bcf68e40affc7b5a2fd4a130ab3a248bf2816d320d23f5bd4b6324d2868836a80d 1669186407000000 1669791207000000 1732863207000000 1827471207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-81 \\xa058d5d0fd8dcb19dcf309cc1180313a36dcee21337bf4d0e1d6d3b352da228017c35e454da1b7bdd085da48b4b38dededdc08125189182de9f8380edb2a0308 1 0 \\x000000010000000000800003afd625285a320a7e93aebe1702b3292983de1cbabbe43194558d0da3552d2c257f7a9af13eb42ea3f08bd2c6aaa4e06bca39f8f6680cd0da31da9c3cd116089ab580b676fb3a44bbaa3180e68ad5515b75d490f17f55f1738f332c0820fbdad59e086ebad815444d9c1788333d2c4306d67a7ac8542dee3c5c603ade09e53c5d010001 \\xaa8ef0ed431c6a026979c26e6bc00e8723ac36fb52ba1ba548e8b70983e7904ba5737987ff5b0fe990326e81f287fab4e47c3d03d42db14ed2567108e968920c 1660723407000000 1661328207000000 1724400207000000 1819008207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-82 \\xa000a4c20b8414d9c6563108ac9d9c4cc3fb32945414ca3588bc955ca48d5fe6d518aa67db79d5d3d9e888a0288d5c9ccf125e7a5fe4a0d9936944532c2e21f0 1 0 \\x000000010000000000800003be29c7381a66b3318557302471b648b90d7191f555f1ebab2a113fe560a5d5bbbd5cd49d069e23007940a9e00f2878cc3722b9ac4cdc18124185f867725dd41d89e683b42e7edac8eae641377a151b9c1cf6965191b9518e647294cfd16488b55599efa1d71c7b0a34e15d144e6c015c36eadcf95f54fc93eedd051cadb00d83010001 \\xa05b997c66c5085c48f3888753780189a7b00781799bb0aed8a23415731f32d664a754a8a8b5078193076f0db00ecae866d1581502b00dfae2e2ef258044030f 1640774907000000 1641379707000000 1704451707000000 1799059707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-83 \\xa274ea8848e7251f61a2b806ffa98c47ca37e3d2aed8eb739dcd693a55cb70a62c0acacd18aaea347bc14506864aa1a2fc4c2de34faa8a439d44e26e1dd54fd6 1 0 \\x000000010000000000800003abea1c7b0aac9dcfbe75ab32dc4f573c29a5365b303e7bed9418ef2934bffa9f77109e93ff4a981a7f1b385a8aa2591cfbbd27bcf83b008f634877bb4228370988a1a4c524c196cd56cae924ca54d3e61223fc9ae48e29adfe9afa693ddc951fee210489fd3f696f0ade5ea5a07e153a79d9b3c783c2591c2d1a9cf6becd0e37010001 \\xe5224ce4b9c3e390d616ada87de6b78a400cb3df813e39260144aaf0fdb19325a7c26c7d32e0e15523c206f86051b1b380b338e504b559ada9b8666d49439206 1639565907000000 1640170707000000 1703242707000000 1797850707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-84 \\xa424d4e23dcde17d78d8aba886252f4219d173b88975f7957cef32c8e4a0a53dd7973cc32e2e95d03774f400478599ae8c031abd09ca0e986d6f6d23f6b09153 1 0 \\x0000000100000000008000039d2dcd7ec0b91398ac731bf4f3b9028e9c0614547b2d46f72555a0bf4df1a64ca91a2962af56cca0e544707da344aae148e49d09879a7a229d5c1d6b7dde31415ea3d23b21baf840f00b8642a25469b40059fe0e316a1ac929394ef38bc3863b88df577733956316bf70dae7e02e79d7061f45161465514cdab44339ceacbf07010001 \\x6768ce53bea2b1a29a080a94b3054c2fabe6801e0be43f8575c10ee64ba53075ffaf54c2e22dda7936e798458dc63da1e2b147880c5cb6dfab0ac5f4564c9505 1648633407000000 1649238207000000 1712310207000000 1806918207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-85 \\xa9043c4c0fa2dd81981004ece85b94dc08576cd1e1a440252c03cd635541fd467dc149069012cce1a80e2843fbe9e4aa357e8782a57a2bb9d1fb1074741d32cf 1 0 \\x000000010000000000800003abbe2b200cdf5f6ee10d89dfd6a7a88f67445ee51268c72b09b4f01d291ed911f3161a987cd65b82ab9dd59c4a75b9b30dad8f52295b904834f9599e619d48d8e4fdf7bf8470145470e695194d52a970ad4174c1c6eefc6d767aaba39ce4e78315be005499baa7dac787a4cc7e185cc36880e11db3158fc50e2fd7164d86bec9010001 \\x5dd45ccab4f518c2802ac254ab49d0c8c2fd61110bd27c4bbea842731737e518a98748e0a9dceda8f3cf689438eb9d1a6387149acf423e1f8070d6a43739850a 1664350407000000 1664955207000000 1728027207000000 1822635207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-86 \\xa91c95477bd7536ec61fdfa3651b7ecb75b2a3d54d8d28fa12539e3ae0cc14ed928cf574144df720d1f55dd7bdbba3c6c53576a88c9f169c9e2d47ac6c1fea5d 1 0 \\x000000010000000000800003b4598b5618bbc006db89871855fef23aa912a4c3afc0c080b5fed805967f7dc029fa82959b2dbe6ed580eefd712fc2ca3e91bee85ef0493f2424cec0fc555e162b9d0a17b7bcddff172fbaede84cbe8f70c46383d7b63e26eafcb544b7d7fbcaae26a3cb6a581134bf31c8f04669cfd5a1040c2697e6827d118762cfebf9462d010001 \\x37b3ce7bc5fc39de6e14f24ab5980dcb72b0533f36383ea18cd89bd11131b3db7b047407d2313414473fd7037188ce6b84ba96bee577f2bcf7cc702c155b440a 1656491907000000 1657096707000000 1720168707000000 1814776707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-87 \\xab248b8dc5f72b96d9624aebb0d10172ffb66bc261cf9e3f522ffc9531fa681d02ac073ab0c467c844306f1157799e6b827343560cee153ac01a6f0d95d4f9ca 1 0 \\x000000010000000000800003acc788a808153aa80972470dc1e3ff35af67005338cbf97e0cfe005dee4af3e4d2a23c660d01fb4b310f442a8a9cf18b2a9a21ea9e758825182ed3d882f07e7d62cae0a6ed6efe002520aed6ffeb5e1b978544ab3154e79d67dbfb8d6721f65be89c7f778e375079a70cecd84eed83c0af20cf98518d0243c9ae24b233f66be5010001 \\xd9cd3f0647bc286a1791f701eb28c55c2110b24aad226e950b9e8be793f03ff5e7050b8d188e57b05c8cbddfc892d35f3742b26e9806bd45dd66945f6a35ce0b 1648633407000000 1649238207000000 1712310207000000 1806918207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-88 \\xaeacbdf6353969c1e66369e4d30e256c628346a7c4b2694c42dee7e92061dded8d6588b361ca5e259a43fb893020f7f0c43fbbacc68aa0e115c3ea10cfaacedd 1 0 \\x000000010000000000800003c5b17e7533658a5819861d77623d6118b1d46943458268d9db458d5976f4133fec053b7f018d98d7cece2dd9460754887d2a8a6c26d87a71d28054ebb27c705d96034dec9293471c00270b78c44cab35d4653299b659bda5cf0882d058f8eae1c087bd6f7a795053e9fa669b55a429aa77380abcaa852015b416930e35b447d1010001 \\xba1fd0c1c26195f7080774ec03778e8955551803f56c8259d1f24bdc26bf99b9e5491312d716890b88096bff6001e35a22b7c59775d5498edf07249fc1718a07 1665559407000000 1666164207000000 1729236207000000 1823844207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-89 \\xafd0cb9c7c127a9c67fb3602ac9f6301517668cece49d9e085869894597ac0253241d0bee3d0bf4ca94e6fd78cd927ff840fccb8606be253cf3ea5a0d6738c24 1 0 \\x000000010000000000800003a6fbf8d8679456408e7a34983798a3e841077a429aa0e058f4c70c175ff35d2bab6a60d5d0cccaa8c28d3459102f570ff6a8726ce1c084c242d8f2e7e4acbeedf97b8774f4bd71ef0fa2c7ee06dbc14fd3ab7da37b349f1ce32060eb9f6eb3ba1cd300e28b3c2025f811a856f62d6380e632baec55cdf4ec4b21d72c5bde0289010001 \\xb8191933adb74c5a657dce08d76ce1fa03724b4f6577f5d3f8a94b242d446099778f11367adf0354bf6c4083d6146c6da1eb37fc492f8ca7cd6a19de24aaaf00 1648633407000000 1649238207000000 1712310207000000 1806918207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-90 \\xb2c86011b894dc18e26e7aaf34d180da225e41ff878377ff870cb4c39bccc5d75de50cd4b4c2bbfa65ce6c267cec1303ccff4a188289c050e4fcd4302bba2c00 1 0 \\x000000010000000000800003ed6503de5f01a13163987f073cd9efce9177177259c4a8261beda3383bd08860b135f6b06822a25ba6b4b5d4f9af540a869dff1c20e3bc170b400fdde1dcd9a8c0289fef7c691b75e3451f945078a39431f6a410d5477fc520f464bbfd8ae44e5417f295011f2af56307ac52a39ca20a06fae1d8649861f740e1f71164b5cd0f010001 \\x184fbcabaae6aa90f1d130d395f3fbafa27ccc192f18ea6d5f0d3689f884942fadfbd3926f2967e153416c28b9e00d651dfcb980126fb53ffdb44820e67b6100 1655282907000000 1655887707000000 1718959707000000 1813567707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-91 \\xb4401877e6e614157dd0833cd2f0610c0a76c0317254ce3ed898f65de8f795f67cc8ac1aa2f703e0e554a5a97515e6babafe9c7d75d21458309c373dd6e0d0d8 1 0 \\x000000010000000000800003d28a6a41e0fdce29574de023e2377a56aafaed1ca30f98aa58c050f76c474258707c33695faed58cb61e58ff39439d82ab249e7d46a641f65faad131c3bd346edc75056d4be4d39cee02429dd2dbefad22289af499bdedf147c2cdf464191dd348bb5901b42553ce76c76b7e802b82ef4b41ff1f58882ca25bb406732188315d010001 \\xcb016e1faeb6e753eb99e829fe83bdbbfa481d638c5986527bae40ea10815ae512f7782cb31f96ae8985982e4ea72bf6f729299632154ea49258adde93f2a30d 1640170407000000 1640775207000000 1703847207000000 1798455207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-92 \\xb570cec8a19c329398e45c4ae17b059a0d1f04c2bda778038c0f88fdba6e8b458502c99c7f8e0ba98fb71eafecc6359590e5af937a310d6bf41240200bc67733 1 0 \\x000000010000000000800003bc63ccd8a158dc34ca09b612d5a40e27e3ef38a0bd004b84bf8a1a8ec36ad1e9ffdd1d745c465645fa73d74c23e1b29fd2b8f140ad7fe292feb17998ff8fc667d81e37f57dfea93d0d78c0cf192fc56006609c7f94b6b1e7dd8153230230d571fcd7eebb67946688c74395900e275c21a8bc799ba468582a33d84fa5d1c9b3d9010001 \\x24be91707ae1390f27b5a7fc9d525c88bf38cf3b49856a894e9ca4548043e4819abc8db525102db0819512377810b0dfb2bd4ba36985e0a46992d46685b7d609 1660723407000000 1661328207000000 1724400207000000 1819008207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-93 \\xb800400c04ccd788653279a7a47a3b598d55ef1131dd1750deb720a688a28e341543b04ea59a09f45d89ec48671430a833075d01c47a744e848212fe7e594cbe 1 0 \\x000000010000000000800003ab744ffe0ed15329ed8af4ae42b893fc19093f58347cff63f7b279f538433b2d683c324ee56a4b9d7cbe7f1afdd6a90aea5bbc1d0cf490b9a7d1ff1b3365b8eb41767fb2f7519c7fb41d3efba075d281a5a600c0fe3f9229e6d83aa64c9d1625aae2aeb312ab81206cc4159c525752fb98a365e3ccdd7d947249f464d44865a3010001 \\x599e93ee71851ccbabd6e2d989aa6b38576716be190ed82ac89982e2b14279d1ddaf5adc5cb7930ec0c78aa8e9392cf211e740f7aec4edf29befede41ed39906 1658305407000000 1658910207000000 1721982207000000 1816590207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-94 \\xb878f75296a69a512dc938bce3cdd582feb2003d18421581a928b897851827dcc5c6d8d5e75f5e9c298c6c816473bbffc941bc053f668e2c99c9c0373d9fe976 1 0 \\x000000010000000000800003e5bdb41f03655a8bae8174a7371efbe963e791358d8091e91bef9be717045662f73ed6b7c11b47901fbea2db638600c77da6984ce689cc90d4f0c2dcc5ac6609d17a6fedca1ac63b0b624a33b6c1d8d8a032afbea988d76339cf96cdd954d49c739070f7ed111137e28fecfc818e27115dfe4d1086264bf08e7dc820f9a4f3bd010001 \\x5a745ee97c8cb444563849700b4149a165c70697cd6ffed639e575a1f29f5b851e278cb1fac23afad8d7fe7358eecaf89e54027a0f8fb5a67a5e8f771f545c09 1664350407000000 1664955207000000 1728027207000000 1822635207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-95 \\xbbb46b920f873997991d06b93ffb6801403081ac542ea221ff5845ea893bb95a08f39598d6aec6db639c9d6d57f60138dd35cc92e44bee2d36b8dcc1bea92878 1 0 \\x000000010000000000800003b7242f9f9e0d696d8b011f10ff320a65d778ebd9885800c0a7475dd5e0131ee41d4b5ecae13ef197f4ab9c3bbf8b2c2d4176fdaae4565172edf2373f305899e52cdcb8dfb8acf46fbec01a6d08ca72e3b26740635da0ba44ecd43048bc465c29b241042051902b5aaf73ec399a5076a275bfa43468a3fcf460851386d388e30d010001 \\xfa1d9803ebe311233a1ccbebd85fcfaf7e85de605bf39062e8872acbdd7f07a700b310c17ceb9b349c640a966adbc336d23920a23812325b7314a790dd3f3100 1654678407000000 1655283207000000 1718355207000000 1812963207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-96 \\xbcbcb595ae09cf4b7b3ff04a7bf45da8604c9c26ceb0a98aaf4a48d6737fcd065b6d0c268cf4d153de3bac7015c7df4de1961af32ef5a2290284225ebc8722d8 1 0 \\x000000010000000000800003c1a20ffc8037b3e0fb692adb3da9fd7010fac3faefd374e60ae26dc2d412ea4f303b323c2779f143fbfda1b72ee3a9210b2ac24750782cf7bae22008cfb03b329d6dbcf38ab77b64ded43ccc1d29fb2b35de5e7c98b225c86ad4248c49c9f646d5e2ec585a27239ebc388afabc5a12eb76279a4035737bc935d2a27fe0932fbd010001 \\x04eaa4eceb7148c28c7cad9dead8d5491f6f56dba566e3e28a0a7ca70439d994f761062c42c81c61e0140b9784fac976fe7139e98cca424e2e9edee76ae52201 1644401907000000 1645006707000000 1708078707000000 1802686707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-97 \\xc2f8b743e2cefa52c18caa0ca4df13fb9de89c7f583081aca581a588b50fe36d6af3f3823b05dc01138a7244526eab47f57e260c747ce47580d464ebb1cc05e6 1 0 \\x000000010000000000800003c912fb8fc6fa4b04dcd0c3ca4804acfe14334bce57da571a8ef43781e7f59f85770332efaa00659a154dc9dc115ac7d43c1486b43c0d9944de9c0f88f7c05b6e3cde1074659f3af657f5952a0392565f41c123285de8bfbc4d098a2db2c39bf1041e024aa9479fa33a395575e274855f99bdef4b017f22ba7dfdc9902df38aa5010001 \\x7307ce031e6f27cb70c4db204e00fbc1429164cf45fe0e46bb3bfb362158f0a666c903a2bd784fe3571ac5485dac9a4200b41ed94a26fa16b16254ed2c42180b 1640170407000000 1640775207000000 1703847207000000 1798455207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-98 \\xc43cf7cc55cacf73bfa6f6217433d9675133501d6020765318603aa2fa224f6f9d2974d554d80888fe47235eae346def8e74f70d27d1b8ed926155aea0055833 1 0 \\x000000010000000000800003c0f3a11e2afbb20796eaaa3aa49f8249a3987650b2dba8055ca5d996ec5c5c73444ab4db895d2a8912236f716cfa36befb4b3c441afa1c9754d44d8971109fcd38aa2ff267628afb47fcc595f6e683a19013a8e95c6b5a7a2af29d665045f5aa19a53886c4a5b1531532356c35016abd4d26fcd9e687f24e5a58baa386881009010001 \\x9d02b95a2a92eabbcd10c677c08e12cc9dfd1457167a95aef5e6ec473ff8ec4d14b89e042909febe29fd870506ac0357373db977cf220ea4288c34d2eaa6040b 1654678407000000 1655283207000000 1718355207000000 1812963207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-99 \\xc4b873d4a42efedeee6285730702a7f4fb31c726c0d5d3236f56726792f8ed8c79a2bcb4813ac8ccb756991c8659348d185cb8a2243394e5456b5ef850d2eb49 1 0 \\x000000010000000000800003a7e5065b18211144298026cba9ac18b0258cce85551b3251b3006734fd25944b9d212bc9ec68540e76ad9833097d0bf3cf11a5b7e9d6709fdc4245f8252f119bd5d8bfff1240d187a92ce8bffe85d74ad3a197067c61b0f296d7a1c20c01eb956f0ead9df5df05f030d02d74b342788eb42a95295d475a92d15f40c0f594e51d010001 \\x0e0371cdcdd168db937acd59dba9ea01d1b361b61277f011ab231eeab4390051b7c07957738106b9c60c86be0b7f1595f0387822b7a7961591772da074ed0e07 1652260407000000 1652865207000000 1715937207000000 1810545207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-100 \\xc65cf8c8a380404a862256275c551194bf83880d18f1853a8da3bf4fafaf3f9bd96a8461f68ace3eb3a5d8ebfced939a04178cd7bd5a9671b0be9336404e9f93 1 0 \\x000000010000000000800003fc2a8bc577e2ecd5cf23f2e178cf2f9063b110af7267e3f3ee6f30670a0978c1604b769c25f00cd01aa7aa3e09a70e11cbd76fa128ebf9fe38b2e1d3ba4656ca99b20314f2d9f5d6963d6094d73a42e4c4d6f111b3f794875bf8da53dcc962b2ef6d85ad90dc58500580c91cf11a6e13081977ebe9cb4e0a43c7be269c51d9f3010001 \\xfee5727b12ce933c0762ed13690458f51da36dade8bd4a34725aaeba06d0d486ae55262f7b3a63884202286031953d3e6601cea1ca48bf7ebc50294e2be5b103 1667977407000000 1668582207000000 1731654207000000 1826262207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-101 \\xc7fc18da6374d15818bb118ace502bdb38e7fb6a0a2e1dfd236ac7dead9446b348bf72f2c89ef0f450cc7751ace4e7529c6bee0b427ef345a9f27f64a7bee7dd 1 0 \\x000000010000000000800003fcc446e83f4e5873968347b8ac876c4b6091abe98e2e137a64c669ba4cccf7445a1e08f7f920795d3071e1d41447ea171e58e40b36975ed562be8bb594c5bce68f9e1cd5ca70fb47d31521355ebb0d6e7dfe0a933a4145cb5040f4bcee06ed3cfc9cb1dadcbb4635683c3baed66d5bef4007d0e4e9467dc1b7bb17ebacc7b139010001 \\x549e8d8183b416d54cb0c30abb9f774430166ecbb7ebc763750e6166945222ae0cad7ed63bb3bd9b64c06fcb188483f954a118c1f93808c9f097b4e16c7a9e0c 1641379407000000 1641984207000000 1705056207000000 1799664207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-102 \\xca18119b3cd9b2a5e5dac49c958a4c5b75934e36d07be37483fe8a488aae1cc0486d7a7db9ccebd9c67b77993fc7c2f1519dc3ec32001c79dbb9153cc8698742 1 0 \\x000000010000000000800003a0a7b8015f2190904187f5369350954b283485fbdda82cf9558a6703099cb4d3e612d9b34e05bd34ba792d2c05f8cb94a04a7401445c86461feb4c49915e6ee2be6c849efd195917d7e9745453a726ea7d6efbabaf14f504adeede782e470148527848cc067b83558172a83054bfdd6100fbb09cf5d236e59d9e09c85a1255eb010001 \\x87b8ab6f973783d9472d9fc3aa8b0c1b51b79e22c28c797473d3a706048872470bfc9075681b1d9f8b4009d174d62111ade14288cb9221b95069a9e7be4ee503 1640170407000000 1640775207000000 1703847207000000 1798455207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-103 \\xcae82e83d002aee720ae611be90c65f4609493fc11446a8b07d416e281616f54997e8f915a8fd4a099ddd5898a5e37b325efa657d5359b8b40ed2a19f6bbfc67 1 0 \\x000000010000000000800003a4ae9aaa65a1b9b2b0739451e40ddada1e642bb2145f2e315c493347027ad60f4e023835641be7c0b635821ebfc28c2f72a5623d17367352f725f0feb202c927587336d95453ab0adf9170b652131353d53af521c7eec252558c77233870843c94e046ac4d977e0ec60bcd38abf03faac396150bad5e0d1d5d0640a62714c357010001 \\x2d975150651fd69861352deaf7536bc57d37db8d18e1c47ea2fe5458e2790ddcbac6b99f90a20cfdf1db92b19840ad8c80fc5e5e35756de08bca7e474c1a940e 1655282907000000 1655887707000000 1718959707000000 1813567707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-104 \\xcaa0bba1eed96cea618332b401a7ed2c3f5ab3b43c2837837877de7e4d0b1e9c7fed63005a46e37e093c3bb07f667117fe4fee923517de53ad029061fbeb4e26 1 0 \\x000000010000000000800003f3f490c0df747428993eacad00af066f233fb9ae501a374c40deaa6e19cd019413822ffcf06254dda1191652ea403aa694ad1544aee863edf6406063a8f6e2b951d46d2dff09d5d957a4adc79e78e721f95301ffe310b08b042f73730adabbf46d0e3562aad6398043315de4bd4d4b772d7ee2b45227f8b3c7cbb95f3a11c1ad010001 \\xf8b92251b571162e743164d8fccb57dc53ec6f3fca6bf8af2ecd906f6b22084dbf6166d8e8d040a6ba280f16ddf598c3bbc48e1825317e88c6323c377d14ba0f 1643192907000000 1643797707000000 1706869707000000 1801477707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-105 \\xca604ad4aa1a48f5a4cb020ae1c41989ddfe6cb61649cc42843b8530c80c3bd8a4510e89b2242d3c1ba960e2e17ba1a73324646ae80ce46ab9d544e03f9e7bab 1 0 \\x000000010000000000800003b8eec2b600bd80bf7c2c22deb08b47cc938002b951085f2df287f9f4531a51a3055ea03d8aaa192414ffb88e3f37e9af86139f929b5bff38dd10632439d7b4ef7fab869f9f2d57068767b304b03e165003560fd4da31f18a4b50bd893701b05a521bf499670b802bb7a553739e9d83586d9b0cf01fb48b8eb44be5f1a749f00f010001 \\x0c9f327b98bd9449ab10225cb129e4dacbc0af9d57fa66c1a35a3a918b522b01a90d97d594c1bd8ec8efd62d0242a2dcc87580bce970f9d60fc8ff4035b41e09 1648028907000000 1648633707000000 1711705707000000 1806313707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-106 \\xcbccf6edc8499d511fd54ad2104c1f085b702bea91a861923e6f11eb222ca51362aeb507a78f846822d337e2656e57cb5cbd3e9c04c8e1d668ee2219708bf6a3 1 0 \\x000000010000000000800003c3ad9e8e2ce76161a1cc2ca2fb55392a812c6bca178a020bf78366afc49f5f952db6615f66dfc164df1a326befd1271838a98dfc60f5898eac5da9492875f7b1192aa1b9608ed6249484538863e4979fc0f3a00da0862c2e2934f3351967cb330a22ba35a79014bf3d58e117d356dc22ed49c10b07a42206aa218576ad616bbd010001 \\x511a2c9c4addb76045aa830d48333b56d72c45184d0da672c53dcf0262ffe8652cf0bc90a4fcdb194491b69b3194f029c6bb94f87a7a2cadc15feecc2a80380a 1641983907000000 1642588707000000 1705660707000000 1800268707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-107 \\xd0003b0d9669af132ca63c56ae001ffc39bef4b4e0e5a792ecb52c5755bab1fc1efc0c00e55f77ceb287264936424b0d31407eed820cd5c9a1ba58e66094c680 1 0 \\x000000010000000000800003dd560046096fb8b1f8178b599cf633f94e0ac0b62e361f5dee502543697269a1558ef2e3b3972615462363492382671ae8edcccc7f114f74172d07bdd677e8b93865fdb6a8dbcc5f08422bfb4bdce80d2e73b055c80c749d64e0cdd92d473054c25455000d82d1c1fe40cce550c296dd7ff190f3c95f639987afea300c83a2db010001 \\x81c57fefb9634c1f53a7a9a2005581e2d09edf2d0732f0fc5ca5c596fcdff4455f2b04bcf077aa7f44a47052750de9a985e6ab559d4640cdaf6ac30e4e2a5104 1644401907000000 1645006707000000 1708078707000000 1802686707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-108 \\xd1e8e85e50939a454f1b60dd887335fd5d7e6ba1e3be660ab23a3067ffb0c34a4286608f44cd47c7095f32f83ca72e1d6c4eb8ecd98bc53cc95df17c01244902 1 0 \\x000000010000000000800003d82fd1dc03455d0cca6bc1879163f8deca051ed4cf0ef00a2c7f6179a58d11f9f323f1ceede3fd26b2dca04bcdbb77ac19fc3c6bfd4b61150dfd8c0e26ba2604134efbbde600e3af9ef1d69e5cf70d549e286225d2862df357cfa2cb34def0c6cb77154fe1b6632ecdcc2cc89829096856a8049a648a7fed61227672e2e4dd9f010001 \\x50e7e20a94a008ca49ba58c78e6381658503f34ca09da6d9706ec45be031fda15dedcf827e17cb598ace30e6123df0ffdb1d50465eafafa6bb859639ae72e108 1640774907000000 1641379707000000 1704451707000000 1799059707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-109 \\xd46c1eb2b15beb565ef19cd754a70874eea025e2747f310f62668a8dc077860c7e93558fd736beb700b85a8aebb40e5d39904f48e90f1b3ef77874f0de19ae69 1 0 \\x000000010000000000800003be277c85c858eeff4d4f06abad250441dd1b25291dddc6b4e1a900943717c7555ceab4e1328791d16b50d467b41aee5cb53c202452b225684447676e2c6dcd8aa7dc31542e4881fad4bc808b2f1ecf776e7513e9d1c95373460492d8c4ab90a72b1d1258f9a82c9b67366b26b7ad19e1dae335cfdd69fd0906b21624374d2e11010001 \\x438b27a767ca8480f3bcfd5b11d4a3df23634ecd36fc05d918bc6918b250a077ba6588c57ed66f6dd6f890cc830b1b4e91ddcdc055a762094a1f1394d6086109 1664350407000000 1664955207000000 1728027207000000 1822635207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-110 \\xd7984fa508f3392c86b8f9e4b8c5d66a5800d75efc71e5b24c1b71513fc8b1b8685344c0f1e6e3e590daceba66f9fde02d0fc1cffaafbeeefbb323a62c04e976 1 0 \\x000000010000000000800003be66549d10accddeaec4f0e020b3340a68391b888e7df3045750b2ec3f4da0826b69de1c45445013445711342ab7ab39a29a4bac4b51330bf8f6826005c045ecb74249eb173f0638acfc621594e4287dd88773fb6a7591492f7aa06b37f4ee6eccaf79bee154bc745941bcec80d76131110ae5f60a682691592b21f37fb90053010001 \\x6db9a2030e6b66615e3b64f3600a6e3503eda9e5c6f901e8348560dae5bdea66ef0ee305b168cd3447eda103d6937048c159152ec63aee96c2ac5208dd5d6604 1666163907000000 1666768707000000 1729840707000000 1824448707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-111 \\xd9a01c1063bafc8e6234b14302eaa3efd2f98f0c3a9a5d2f89161a5f7689117f4e7bcd37ceb0070763e333ee6b0b17f9b3dce5a904c0e662c8575a259a532303 1 0 \\x000000010000000000800003c2c8b245290b37328dd1397710fe444f007e0eb445dfc1425c3864cc896cb1cce1fd5fecef35e99374aeb4dbf406a4464a2e8e0db3f2970de1bca3940be5f5beb7aaeaaec5f864215bac78a419232d5471dedce2bea401ba0e684c6bff2d8fc9bf8ee06b3b3f52f003b6f9eabc4e0282451cdb421880feaee3279f3223bd94ad010001 \\x889b1182cb8f35ed1f8c96b972e66c20924f73295b28f00d0d96e56083c8fd64837abdc520c99f42613e48698b590d7eed457d6310ac4dca2d40c3d5ec90960d 1663141407000000 1663746207000000 1726818207000000 1821426207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-112 \\xe1a4cd966e8e48ae37270e841bbd6663d171f099b59db4ecade266105a911cd194b6d597238e026f553b5cdbe372cb963f75aa4633874b09ef52b2d6875bc20c 1 0 \\x000000010000000000800003c9223a11871ea01cb6cf573404a7d5b2bf34c5ded09a6dea67a2819a31f4981a8383b97de72ccd7064ff1c714f9bac7a0ff010cf76a144c0345b057f1e276444d11af827e6873c74fea2e5e463c79a382af29548bc59bba5c4d8a1ddb868d5def058d5849eff40560eac09a147ad50027464042e11d606d4b304bbd1f2ab1647010001 \\xe745b9ecf66812eea8bd21a9eaa913890ee73ad31e1c7c2f264f68b21a3b765e8a31fee330512ae1a1f0b70d977c9a42dc560e84c5453b53b952679d63e4c006 1649237907000000 1649842707000000 1712914707000000 1807522707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-113 \\xe44c044ee97d376c8bfa55a296d8e9c72b6301459ee8782e57573c09916900e448877a4d9d4bb019485aabff67804259fe79e68a287fa8f086028f9a4a24e997 1 0 \\x000000010000000000800003a938fe9eaea59ccd0fdb326a28a4620198ff7dd0874cc6978fcc8f512bcb875440344370f26fe9fd2a0f4aa1a1853c0ba8cd55033bbde5e06108f410663f765d3ec4e0848c6e3a2357b1167d3085fffdc3c109368ea5fd42517b12d7a5294a1b683dec9dbc2afaabc9244b913d3523d61e69968039a0ec042b8df2f6ce47fc47010001 \\xdfc05858379ec496600ecc44b76fb0386f25f0ef11988807bf8be98a5e38704531ac06e9474debb07d22fa6c5e18e59601939088a901a4fd894c6ee5bcf51f08 1657700907000000 1658305707000000 1721377707000000 1815985707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-114 \\xe61856c28ed94e93bcd8bff0f4b82de95a8a0af85b09a24c728988d8441d8491c43f8a45103af3f3c95796cdb2ebe719a16f15053e52e9e8be896146d8eb7a06 1 0 \\x000000010000000000800003b55e71fd1b61012ca6fe26f9846be1232d261ff827a23e98aa14c4a26abedc80318290dbf5cc326a15aadd4e4124e95d848521d375b61edf7649087abd4091a6ad988af2a88aae98973aced2900680927a5229abf3609b9d5532d66247603db8dbabc0c3b5c72b4bd0a63f718a598ca1a169dd1c1ab78c6a2f50d38d3c7274a3010001 \\xa6ce3b8a80c26ecfafe1734dc18218d392de526d25779661a15643dfeafb7d324446677baf2b102deee25b022554f37774ec800f8be60b2cd2e61ef58f20ef09 1653469407000000 1654074207000000 1717146207000000 1811754207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-115 \\xe6a023e5713985af543d4bfa3bdf54121607837db7d1138ef1c4da3036d6a3df75a6b95d5b9c48a893ecfda922b70f3c59304abed0bdbc792b1fcb8b758da83b 1 0 \\x000000010000000000800003f655b424d8d5b785d925fe12420393983a23798964aa66a19dc9f80cd345a6c2caa9fc7a07f1b668a1012e6ee23fb7aa377ab9c595a2eedaf4152d0bb188c247342aa3df2199bc7cc1f158a1fb439e7c3a6a159afc170306001f7c222cfb806d0c0f8c454ced41def65296cffea83fafa37d90687c2ace4d767a0faed07492bb010001 \\xea9c994259d69c9de69a858f0cb94fd9d48c19237a88677ec7ea33bc623286e0fb660c753246eb2c70d6077818a7a3a0ca9bad4ad1352b4d3beaf19df4807a0c 1647424407000000 1648029207000000 1711101207000000 1805709207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-116 \\xeadc70edf58b1f4b7b08cd98d7975dd9f879d05ed63444f311a2ab8d0bcaa3e6a3846e2d807c36e87d077d95d0d2f59e228f0f6b927d39532a1ed4ddd33f0c76 1 0 \\x000000010000000000800003b4ebcc0af11a01a273a3756c4a9cb50fb4bfb4d36227db829c09c859a8312d3114e454e52b154da61ef6cc6799cea434e11eb5332aa12943fcbe109ba6e2d2269651b30e45ce533a5dd94492eef2a5e259210e8a1d86b773ad811a05ceffbd7b6791ec55d5d341572232733c4511cb44ebbec44db505a43780829e1d224720df010001 \\x42e07a2bc9f2618f1372ee6016ea9d5c5fb946fe00f5d27e5b172fd5c77ca07d871903425e3061c23dc6a6456ea913cb7c92a1207e4c8bc97e166bef2676510d 1638356907000000 1638961707000000 1702033707000000 1796641707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-117 \\xf0705811549d6325009c9745ee9fe372cfd5dc54308f06adedfd07f3a98514d49eb0a4d84bbb91982a000693f067c7d466daf9d019a23f5a327f4cce908df809 1 0 \\x000000010000000000800003c340b534e52e4d660d31b7947e325419ad7eab50b415f76b1b977cf6cf8d84732bf25c5644813392432bedd2b507964f1f5174d3ae2fe87409e43f3bfe7bdbe1d14445831c34d1de490810793cf668ce6b621c2178164fc0ce7c3c08433b0d27ea31f5c88841af7c025d2d998308b96230044db1603c1c2bc28051beeb0da8d7010001 \\x709690c1b5e359fa48e4931971bc7dfe2136e8a40c2415b004af6c059d515efb4609b8df7f0b8e2ec987ac91ccbedfbd97d3e5cf34d7ce118f69744eda82ec0e 1645610907000000 1646215707000000 1709287707000000 1803895707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-118 \\xf168c275773f86999fff5a5d23892af1bf50e673a53637c8358aa1629f928a4575751381e70a4b22d0661abb2864ad05629ff0e1656c2226121cb265e0204249 1 0 \\x000000010000000000800003bdae2e591559fdf47fcea130f71dba6b421e16658e865e3975ec0f560f2a4f686a1fbe96b01e896f6648504fef4ad51ad9a43b6e3f798ffd61a4976a8b1faf7224eeca269c52139a357ecf950cae3acf4a071d0bfe4abe794c4a9fdf476326d7911cd909377d60a38698fd9f8c327299162976bd47a9dd7b7411dad345c21e41010001 \\x72565d2de1ae91fcfcc504d094093d3fa1948718a6243106dae261d00a41446610306a12768601f1cf2ed916e3d1b673191cae05b8f3bf2308d818bf7e3a3106 1643192907000000 1643797707000000 1706869707000000 1801477707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-119 \\xf548d688fea8bca2df101ebc9d305b07ae4ece3d68c80a3e5902211c18a8cac74efb4b09ecafe2575025648db64dbab872434659a4c0e0db6028ca83c0c461b7 1 0 \\x000000010000000000800003e23e349d85a97c9d572c7b9450661df9e42d9fe81a4dbb71b268a7a41f6be40e71d82854fca9a7575ea7d3b004f73eac77676df4e8b075a1edfca134a29655d1b66daebe6b8654f53af262d34cdc63b3359db17a9d22361211d31e6b100ee57ad6a70b107f22b87461e7a37414b299c76ca309519c5f4688b1ee46e4c1b3f80d010001 \\xb4e3e3e4daedd99fac5735461a3ad7bb4732b140cff0a8d7808cb581132d4910e9990ae80ee3521c7df0c1a3bf162ea8f14947968956d08563d25aa22b255f0b 1663141407000000 1663746207000000 1726818207000000 1821426207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-120 \\xf9e480430f2ce6703d905b4b4234ab40c7b71f25b16554e1ddf5b3a157acc448c0f9b6b2b0cc603a320ab09b887310fb2495f4ca1ba86ac439844ee51336929f 1 0 \\x000000010000000000800003df4cc746d486c5bef3887624e6bec2c0499f39e7b64bf7c0c5e69dc66e3820742ea062a01a2bce1bd1ab81f55e025e5a21d126ef8f9f7fd2d452b7441e1e5c385693a3db59762b554e908ff465bc1be275fefc2ce9d9d5c4d198414bda9072151733a27cfad464396a37ecc21b3da5b7df0bfe6836e9a569ab3b763d9427843f010001 \\xbd3390c8eea521757bb121c4520682631ed23e9d01ba1689c3e414baf2c9b6025d3cb469d5061482bd58c717f254d9cf9d0a88f626f18f0df81d1301a08b2b0c 1658305407000000 1658910207000000 1721982207000000 1816590207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-121 \\xffbc3f0ac66e680c561a40ad6637f76e8f7ab756ddf47fd194dbf9832789bfe3cf4324037cb3ce09fb716fa842d7cc5fb4db3df0929c34d41884db53807487db 1 0 \\x000000010000000000800003c16fcaaab8ff799095c5e81f002bae76e41184615e6735d2f92f9c6fabe94afa56377505d62a76c152a1f01d90a1fd6ff9f6b99a62b62bd9622189bfe30196bd82ac5f9c0bc450452d539be15b63615a07c3fc0b96231e3308db3ecfe2fb2249363cb2b8aeded5eb2b6e2f317ff04806f2ca8e37230c19c1a398705d2e591763010001 \\xc3a7daa14613cfdbcd04c78c5a43ef2825f0b12711dbff59f3e99df551e1d4ff9ee64e6f1fd972e3942bd285170efc4351616b88f567e5a530e8d306d3f27c0e 1660118907000000 1660723707000000 1723795707000000 1818403707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-122 \\x02d9512fec81b7bb0d108f151fd98ff9ddb3ff3276dc6263088957f64efcf653c5122faeeb20931bc543f911e9655d03020e529246bdae4029b35d4629b6a3e9 1 0 \\x000000010000000000800003bc071db7681be3c16871b42896aa2b90ae61baed7dc32d6752c426b4eabe8d46a90b3af508d8837ffe2fbfccc7de87a7458f3e92d6b3876809be579e8d02d5ca2b1c8137b413fb0190134f959dabbd3d674cf9222f2c638c7648a9bd0053e46e00e682276825911cec0aadcf285142fc8d858907663ccfbeca69d563656b778d010001 \\x2b17aafe244676ff26f183885a7c584cad824fde01f42a8e08097f0e3064e0d1cf9defe29f7c9980c7ff854b870a4f0dbd09384fbd41b85a1927b328f6c5a606 1642588407000000 1643193207000000 1706265207000000 1800873207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-123 \\x03d978d97fc860af7727d4f1e1bbbdd885834fe7fe5323e9d8b557afe03aeec767beb8af28ea2548c68e3afa2a1980eb91ac2f4a27cec4bbf05212d50073e96d 1 0 \\x000000010000000000800003b29f1ad37fda3e260384954ee3b63fdb55d2a433b6e5e1b53bed449cba9927f377aa6677e70142e8caeec6313084b53b6ec163897c0363f25304249ddc54b17ca598c616c4a2ec9c0467c67d9871afbc2e6d9dc3cbfa949dc517d71de42a20cb6366fcb1766e6294c0c504bfe548b29820df218384b2141ebe0300f88f60796f010001 \\x45c9945afe16ab384152a992bc61a3c1d8f6ebe5ce4c08b6b4e59687f99c5aaf8fcd9db64c6c4e189b2086ee32e16a5ecdff1ac13159ea34cdf5f838a4bd7408 1644401907000000 1645006707000000 1708078707000000 1802686707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-124 \\x0405dc2d0708cf80b12d9262ab3afee47159ba8e30cd6929a45bb990f8f5bbe73c2179e0e2c7b759a1af8dba2d8eb3be43918ecc4cfdedfb3f65d0e010409504 1 0 \\x000000010000000000800003a67c14de480e6e1fbfedc1d6a289973708d0cc642d28e4e41adcf0ded4ae87e5395d1bc254fcc97cb34269f79cdbbf24a7a0bb68e80b7acd914ea6604ccdbe68f479c21260f4bb0df9c52f99cfc7db436597462096e1d60a0262189a3b54035948b0829c7ea5db7d4a35e888f5d36c21487efe39b8840eea75097eadd4c76c25010001 \\x3c371fc02bd67c079c610995267b5da580d4f693ed86ed09ac0b1a6668ab0deeb3d97023a20fb976c86b9e1cda1dcc6862c495e838f9c6036c796d4f671f1202 1658909907000000 1659514707000000 1722586707000000 1817194707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-125 \\x0619665d441a506b108928b1a054612dc1f792b9bd221b9b02a3eceb7f23511e219ea50903dcb7138c604056d4b44ca6dd2243004d3c32079ac9209dc5aec028 1 0 \\x000000010000000000800003c1924a68b3c754e6f55c34b561d6f8056b2a53e020d73082556b01592ddaea4cad06e331bee22c3de913816c2a5bc767f90be775c2b88489ec1e23473b4bbbca70053724a488f052db2fa55dc04c8b456c902670160196f79b3a7bd84bc838e4a54c5efef967300d1f7d8697b0bbd91be0b8d3701da4134621436ef01249fd6b010001 \\x2adf2785b9a7b349d5cf2da4e50dd63d875d218c2980c16fdb14d93c3136028bdd7da80ffa0f92440dc158b38219f14283e703d874e1668dd3904ce619bc9c0c 1638961407000000 1639566207000000 1702638207000000 1797246207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-126 \\x0d415ef4c3b0b26416acedc2a5117f2eec5071e3f1104bf5e50ac3fe0be7a83195db0f46084c98342d4c3f8f54bfb88de57352d79a8600eca83e3a7be35af4e2 1 0 \\x000000010000000000800003bfbf399584f107234751071c9099e18ad182ac3f16a222278f7051a0440d502ebc96aab84d9b2d4d2ff37c8e78cc2ae793845c8020fe0d6633b1076da5dfbf6ad749a1a9b20d595faef6923172a84cbc0ca1e01bf7f64ffc0f6b2004933268d19da6c8eadfb3039c3f1ab986a9b303b5755d4b0e5ddd6cad4aca5ad9823d639f010001 \\xee8fcbb00634adf241cc3a2868cd6eca8869ebeadee57e6af24316cba59a71d869972a269f0680de405f0d0278c7bebd72d14fd08bad788c9421128098a3890d 1663745907000000 1664350707000000 1727422707000000 1822030707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-127 \\x0e45d91b9094f60271dc77677883f27132202b8fd18716bc4f77246622017418bc1503dab1de33a7fa2d66b43b5acd7c23b8e6d4b2fd4cf718c676147b65c6c4 1 0 \\x000000010000000000800003e06a438965c025edfdc637215fbd2916df94bd248f7289a63ddc89e1085e33876754ad111abd200eee57ea95554f5544fa1911de1f4af60c11f8de91234b15d3ec146322b1d0c307d6eade9feaa4104848ea22350035c1fb456d90c393663b7bb0151546ae85e83230c945688bcaea60e08b04510cf85d42a76b57ffb143e221010001 \\xe4c0b7c4a4c1079a2043b7a8cc9fbb0e48f532f0990b0f0e690c3bf4a80ea70375cfc8dd032cd2f77a6ae81f78ee141d03deeb90602da62486f6ac70ee5ba003 1663745907000000 1664350707000000 1727422707000000 1822030707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-128 \\x0f39427354adbe8d2fdddb4af42db250b666ed321b3c69bca9e0eb26a3adf1cf6bbe45cc0789d2583137d5cf88b7f46b197b0f89702fd21399edc1508d7f7873 1 0 \\x000000010000000000800003e0489fef040f6356762bea9bc9f245ae3e82c3e6447fee37c921df4789ae89ef12a549727a2ac46b7f6c86f11be89544be03fb546b2cde2d773e6e8af89b8d6658f9cf40dec51d59b0988e94e818a56609782719f041bd67e97acc629d09d699cd54a88718c00d40ab89aec4f94b8e8bd5f1a5f2e5bb56d54ac1a2514b6f969f010001 \\x53bb398ce379c8dc1612862a037e5f66dc60bd8c9a3a489e8d79ef8d68b7d58f73691bd45fa70b28b7d728bb7189cf79d6ebec342854b09a5a183a918ff37c04 1638961407000000 1639566207000000 1702638207000000 1797246207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-129 \\x14415f738567d4759dcbb9765624cd744516e3a82115d44113db9698712a0dd3ebd6a02fc688ef698158cd487451712324a0c6965b310fa05b16d186c11b0eea 1 0 \\x000000010000000000800003ea15f6416dff513922f6d18faceaa66f2f529804419b4f945026330a72616292e7fd2f9aefff885e2e21fcf0b9061d05118ebe1c73513a219713fdd824662b0cc219e30700af3f9c3f1302a892e79362d0a3f9f5a88a72ba205df0d254a0b162d4ee20ca9d10bcdf8f1429c396c8e0eb1bb918983fb38249c45e21eea36022cf010001 \\x820f39c04638c220b20a1207a46cd9aa478b3922f35009280ce4616973de8eaea0229426cd88a209cdcfc4ce1557efccd076b126fe2a0a63a6e3a982a5435a07 1659514407000000 1660119207000000 1723191207000000 1817799207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-130 \\x1a61bfe7bdb02a0293fe86e6432d005367c4d8c6dcff837faf8c883e7535a22bbd501ff00f94e2bd1d785b1972b6faff67ddd8f2f52fc5c9389299b1d1aca30a 1 0 \\x000000010000000000800003af03ec407d75aaa5c96e2ad933a36a8e8464172df8cd5c6830bd22659df24de94b0c62e9c65e593b63d4cdd069c13c416e8f744061d751aa0fc5961aaeb6ab11c1312c4f1f2ff1a73fe8e873e118a00dbf753278c2a7f153af4de0deda4620fc906a42a640bafa26b69f4d80fbd415040f8dd6c41adc9b901a5399cd7ac2f981010001 \\x1264f8a1789ecee34d4adc565e383f24f16a9f702f43546a5b5e42f95a8faf71cbb3d9ed5d51b8c90392654c5ff6c9ce8bcd1c05fa9b5d75da7496f761d9890a 1663141407000000 1663746207000000 1726818207000000 1821426207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-131 \\x1c19bc3ec30196c755b0b783166deddeb076650a39bea9b7012b2bf333eac993cd7b27ca0d3b33d9dd64bff35c660324127983a65e0ff770bf66a923dbbc774a 1 0 \\x000000010000000000800003a99874984f6d2a4d961de107e21f2e87880c581aaca76fb954bd861babfa34abb098de91532d5bb4e66682ea5312902ffd0362cce2e65ebda71b7de902126119b14590bc9b480980df1c385fd0ad014fff40cb0f7d037e84d242a175204618345d54d020d376e87824b6ea8d3296b5990fd1d3b890528d59ea22b2c093462b99010001 \\xa68914f0f708d3466be4fa8de26c7544d3b98a8ea05b4940a1cfdfce22496568bab86a17260d3c0a934919abe129726bf1826d10527adb798d31113e465f3900 1666768407000000 1667373207000000 1730445207000000 1825053207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-132 \\x1ecd193bbd6f272a328e9fb633870b1190469c0a526308ee34e08765d66f2a6814695073db37bd71556e4433e7673dd2d92c1f4fc798c78a52bbc6d52ffb3eae 1 0 \\x000000010000000000800003bfb61ce1504086cb8602f09ed30726f50cc818ff62919a5f8238cbc342e8669578f18fbd52e707fa0116135766640f298bad209db5a4003734be68bfe932274a60d0cee76b03fdac131d12941fac3f2907bdb2d3118f96a905da4b30d5691b6d740218e9d5703854a721abce31fcba447efa87b025e220872b1a0f7d83cd1929010001 \\x5e06e975e049e649a92a963e35b8947d784e36ff633704813618c3fc1e2ec0db60cf775db3664b596830f99fccf82d38866f7d71e56cd04e0d13a35fa2a22906 1649842407000000 1650447207000000 1713519207000000 1808127207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-133 \\x1e85a80703801ede10b3db8159ab6fbe589b6aa85d88340bda44a8ed78cd1d44088bdbff51f33079e32b3f2bfd6e08df4b70a5c43b6538bd2946832487744b2b 1 0 \\x000000010000000000800003ed3581a9b050552800d1b1eb1e1a22308b890dcde2956d46b3349e6c1b0228a504fbcae811a6c93bf1d51c5998264848a09bf90375373a1940de1c9c184cc816e19a698d82c480037afb1e6aef0734d24240943eb4946668ba4adb29fcd784233e17c1d36b1cdcd14b02c4bed74f42c506abdce1aa61b6e43aee76512a8718bf010001 \\x0f0d2a273340c7a0aeb572b81eb0970e08436bc860f68cb985735e586314d6a6304931150191f96349bf546a21f95762101502745aedaf4019e55d086de3c803 1664954907000000 1665559707000000 1728631707000000 1823239707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-134 \\x200d360ce14c043039c867d013d3c7a635f8e3fdd1154823156147a00949dd8067efaeab8c640a233e04bdc3e34ee67da16bd86d849faae6d72bfd2128822aa6 1 0 \\x000000010000000000800003aa3558995ed48a7aa6eb2783e30c142f32922e5bccf8d922eb413e94f0fd324333c424a880e5ba8a51fd28e57ef3dc8025594df71167f4b095906d142b54c6ac39007e44935789af6c68c29f101e8b12b9a708b5bb7ceb6ac2f34ac53ba3598c4bf3c1d880bdfec3d4dd2b251861a3c473e8e5a6e59b758fb2261b230b17d513010001 \\xeb4bfa0aa732d504aa10d23a11cbd515f13b6546fc31cd14b263c68cc8043ba8b263e7fc595468fbd1d64f739c14cb951b74f054a88e7a4217656aed6c05ed02 1646215407000000 1646820207000000 1709892207000000 1804500207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-135 \\x219da360804fd1bb2c3dd5b1f60e89489cec06b0058aa8011a97eca8da01dfc77219286d39ceb330501442b5c7551936835d1ef164d17c9993731f1f8c46db17 1 0 \\x000000010000000000800003c14eb6cb966212ac9cc3ac1d085b36a521190de27f67b54c565ee37d919c299baa87df24947f0ca2ad43eb986a47e5da3fd9639e73079bc234c4ae6dfd325d7b74fbd9dec74f200c70eaea91d486de572c010e152d587e0831b3741c90769ae280bb9d888e78bb3c83dea88939585c4f598c6ca657b78e0c47ebe6dd55b25083010001 \\xb82da326d3d50d8d7157d94016968744cfd6b20e5224e8f6ec28773aebbc8fdc0875ad0ecabd879cbf16fa8aa2adef7a1e9ba276c602c111c1a9ed4f64d1ac02 1667372907000000 1667977707000000 1731049707000000 1825657707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-136 \\x22654a329b94c15c36e145a22f2c79482331f047e1a9dcc7da5219d1dde505d53f2676c0079be85599eb68ca4edb888b740f85e5636a21f7a2daab37d3f712b3 1 0 \\x000000010000000000800003d92272ce2a68f4cf499f7603223ffdb4d9ce31f8f826200320863e50c3b95d48a49d0fdeb4409f6525efa8498db736524db370e1891c27f4fc5721d955ed74a315946795bcd975b30a77faf31eea187d22d90e23022785ee6187da12ea7cb67ea77f2cf2067edf224ad47642a81556a79775d006bd32d721276c301c31a6f287010001 \\x662b047298fa4e886cde31508c1487aab11e7fb58bcfefaf9f75c227a0daf453dfd5feacee613094aa96027af11d6b9086cf574451550d251fb7345d33a3a601 1655282907000000 1655887707000000 1718959707000000 1813567707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-137 \\x223de7651ffbc593024c412cd41687230b076e65261303270b0fb415b37636d59f5277511d1373b30d16c9e3db6ed9fd5e47c65ac947b804eec902aa90eef005 1 0 \\x0000000100000000008000039dffc9045d3c0af1b10c3385a8b55b031c4634211e2803b1a11ab51eb0145bb56a543565cb334c4706be9903852f5ddc144cf5f95bd1e41d96986ad4cdae70e4df623a7b859f6ea926659bec8345f99d530aa4b88b80ad32c15e0ab0a64342bbfff336a812dffdfe16302207aca8c670406bb0f9c24bc49c182e3ded56d477bd010001 \\xbdcce7ad7e16439a46d0eea6e456bba0cd8a8509a30746be7932e7ee257645056d695966c0d885119e86487c2038d1fa683cdbce6467581972b659f5b1717a02 1640774907000000 1641379707000000 1704451707000000 1799059707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-138 \\x2281463600a2be40da4c1f20225dc54a3246941ce26a94394f28eba8c65b77c4843d06db4675ebe087b4edef81664c86394105d2a3c0b4aa040e2812513e2d0a 1 0 \\x000000010000000000800003c9a5fd76f4352caa8ac5d0698ac2fb14f2e87d19c9ec3af6e2cea251180ba1dc4b8f743d20e843615a2656e0aa2b292aff6cc71adbe08608a231bfc577fe00a5d03e69b869a709a82f1129fb53487384a1121e752c7394edee4dc5899092a023e5ef14dd42bbc5c3ecbeac71587dfc62a38a93215c06dda22542902ce2b1dd5f010001 \\x897f5d7ce3f62b01f114ab78898a268eae4fe5aa915d3fe12dd81f77586cf02e14fe9d59cdcc4686240422675f1a625df67dc773bd8385a0e231113a7d5ca80b 1666768407000000 1667373207000000 1730445207000000 1825053207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-139 \\x26796ec6c42987fcefffcadf2d82c2e5617c39063d9bf03760e39f38de8613501dc24ba2871aa2943153c930079615f645634f96ed2e58c58a4f9cb915c89d3c 1 0 \\x000000010000000000800003d7b7eb8418618c6862c749c0a5e1697359cdc29da6868403809bd41f281781ee9f5c6f1894c932088789ab79199856d2c5e0535bcc84a0240fb678be5a543d921ddca37e541a2c631973d60e5289ca3e241c8137afdd7061f7d3a4b4348a54a3f01616b2c709cfeba3e7463c017aec680d6e55ff21b47c5896f8c20aa387f2e3010001 \\x8fff2f5a26698681445280a03a64292a2b197317b66072d52f1c24dbe1c681158386d7cd6fa7957156b549efbf9720c9162ebedf31162328bf9c6545d1652304 1639565907000000 1640170707000000 1703242707000000 1797850707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-140 \\x28a5cf15b0dbd07ed999731ce6c45e2caeabaac57d0e98f489c289a089b0792cda4aa95d74d0d48e0a51c625671efe2e589f79a0d503e506af870afb652b6988 1 0 \\x000000010000000000800003ac7d9e9144feaa347da5084c48f0aea712c994de7057a53217f573ce5160edbc16a225c0f1d4c847f9b7964dadceace4c7eda733dc17dffc944a1f48ba8bb99594c1bf26f30130703e81a1f6417d8a01e4f4d4e9be4363e4ca17bd4694d28bacabf57517e2d143573c15449c40d5ccc566f1fab09cccb7304d0acc2620da76a3010001 \\x8c91ab04561f245fc8ac10dfe174c84aec07fde72a67e4758a7df9ba1f88ab94fde053732524dbc847ccc71b5bae07d8d0edf26c9eeabcdfb722a96f7458fe0e 1661327907000000 1661932707000000 1725004707000000 1819612707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-141 \\x2ad1fcad9164b8187c2c80e4718503e2da367d1baca43886cf7270ff431afee2ef942cc7cdb9ccbe751be02b97b3c339026fdef00e73a1d4c7a4f26f07fe84c8 1 0 \\x000000010000000000800003b89e2514cd90eb04292fecb4c62b662aa6ce2d593ebfb0c7a5eab771cc1ebb7a5f57f3079fd0f4a28d3cc86eda4487f3d806aa7c1f8d757f9fc0d3ceb2ced76f19f7ba2cf9f3278dc59f6fe864df43f466a0705be5b3ce68c8608d2b296c100510e8dd3b8a595d05b579a059744605b8119e2cb2201418e12cb513d065e31b5b010001 \\xb484c74aca2f717caa5ebb8eb8e049ecc8f262b16bbda5e2bcdc631e5706beaf2e1d3a6381771384319a36348718d492090413573927aaf381769c79806b4707 1659514407000000 1660119207000000 1723191207000000 1817799207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-142 \\x2df55749f82c6c3babe4ea950439be13436d788da36beac3a790679d4c344dd5d660e4f439fd0b637e71a16f344eb24c96ad51080af330deca310b6a5909d99e 1 0 \\x000000010000000000800003c17dd3f71096b68e6ad72181b2a13dec350b53f8f888d5d32af1da4d2a8504a0fd579c7837ff9be585e1cd547d969fc2142c8ec89272b517dc2594e2c6e54bed0da1b917b4c6464afcfe490f898de177bcf0eb18c866f6b1361ca51b4ca2a2723bd865f5950287c97451f8ea4c3b9e56a852493fe1b5119bf31ddf1ca18c6403010001 \\xb69a0cefad9c044f9c3079125ee26aebf8f3b88f0d9b5f537644040a74562bdc125bc4dd910b86ce62d6cfb2f323f2b62281ccd8309779451b74083644b4c102 1663745907000000 1664350707000000 1727422707000000 1822030707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-143 \\x35c50ebaa84a5f5efaf79d1087449c8ecfe64029d3ef59cc612db7f623958062824293f9c5e4123f925b69bfbb825012a0fc8b1a5677a1bcee97673782928950 1 0 \\x000000010000000000800003f0d8caba37052691c1618a7e1a9f0b81d139925d8c2c96abcff30c02be154af9fa2e83777fd06d2ab346a5a2a2c4b274cde546c564ee5a8cf564858f4f6d9cf87386bf14eda190a25f00867e308a82d48b6ef89144fb2966419d9a6995957280d5ffe37bacc3048e0580b5c5ac2528f681fa40dfc8f84c2be2ff3a0846479a99010001 \\x7fd7827aa9ad91b91d81e1a5076f3a6334dd21c57512c16fba7b5881716f7f5b26f85c924afec43ba0f4cc3ee8e3edecf60466736485949c3fdd30f0541cb505 1642588407000000 1643193207000000 1706265207000000 1800873207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-144 \\x3b71724482c2d496cbb897313d28020a959936bad8d70ca727881f197eaa0b03983d602cec09a8a8a1fe9dfd3a3dceaa09770c24cfff42c6575193457c31bc7b 1 0 \\x000000010000000000800003e9da4a2e0b1ff2d0e379a94dc39fa56510a3f0709a1924f6a7983d7001e2772ee39b1d60345fce7f71a34166c31131c152be117f5b14b00c4cccae2634c1accfe9bedc38fce71e85b8d1d5506afc3b86046ceed22403cace09cdfa154aa9dd98daae3ae3aa3b4fdb45c8c835f1b21eb742380747828b5ba76d25447c35fc8a2f010001 \\x0e4652b40a057be76cb123f4cb428375d11c39d8e9540c37cd532edccf65c06c84c664945d59b9d2067f10f81de66502aee3a2d34c26e59bfdf6e94fc349b701 1669186407000000 1669791207000000 1732863207000000 1827471207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-145 \\x3b19d2d1428347fd05e35c58ae3c3d4e0a7b2392ce38ef5c74ff8ae21947acbcc0ebbc7b1a72644fad6aa01b1fb89899b73d4beeeb8fd84ef419317d018ee23e 1 0 \\x000000010000000000800003a41fcaafa604b58a264d3cf2ed565d2ca56414bb29b624605ef8238d62a6a86373b51c6d9903f273ceb429a8409d47f43e34fad5975774ce7d2f837a38fb61090ab8e2052e0e75cec29131052cc5b5732b91f69e7a68ba216ca2ed4ec65b8a4c9c81914e66d43abec1ee58e6036fd3055c02b05d78274c7d422ee295e24f0c4f010001 \\x43957db5692d0497109c672cc1e2bca1a4f946f12a4a284ef13680cc3230619bbc07ddc48c83bfc08467cb31024329c5162876f7a15f77eb2cc8f19314935c00 1646819907000000 1647424707000000 1710496707000000 1805104707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-146 \\x3b0538514309afe7bcccb988cecfe1c20de1d80819fca633f4efd3e576f9a82f5c462263e2714c515857513710cc3ce10f0e15e475f8336039e2de19a7c92dd8 1 0 \\x000000010000000000800003db5710dc3151a4e70ea67e49193e56fb9ac723f99827f6be4f9079c96a5f8d68831cda5e1043b9abc92f97ec0fc7da904212d8c13e678cb3d4e580f6253ec5a47ad4988572eb1230b0bb2cd59e01d4cd43a9d75ef10b79cd1d152dbfaa22b5d6ba17d9cdc33a8f65d819cc38fc727d52998136b80bff6d9d9a06bc8594f7bcbd010001 \\x9f3715af2f3f60018e05b6e1bb3e9c5e9bb9b6e3d0a1f325e82cbd5f302ba1a3a93fead90f1bb4631885cde69dc802ebbdf2a844bb8e52ae29da73e3c72e9106 1669790907000000 1670395707000000 1733467707000000 1828075707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-147 \\x3c153d98df912ecc17335f02b6575ee9f142657b0fefadc6728c4cc44757d44922cdd2667241d0cf0f1ef569bccaff90426312a76840e56b3f3186d60d49ef5a 1 0 \\x000000010000000000800003ad77e0d4e733607704a6fb4385a5dd5a5cd9b40ae98f461ee476d1388b6c22bb204b77ca7aa91bcc94e8869d064072ca9b9d844ff4064fd147077a8a3e8eeb172ccb6c9a6f2ad4c9e035481acaa93eb62d7eab5499a5540aded04719de55ed9e1908517295394d5d9e8815ce3837fc2323b4545409548f118ea5c039abea6c3d010001 \\xddb35904559a095c7763d310ca49294c4586deadb00c63903e1c6b59ccdd35cf70212675f59a8e64442d41b06d1c32dab7de989cedf9f7bb3cfb33c484b1d00b 1669790907000000 1670395707000000 1733467707000000 1828075707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-148 \\x44fd941afa07c18df42f7989043111430ccc9ffa3826295b27269c4fe481f6f6cd5471956504fde2b2053f3a8b7b05ac2dcfb64191a4d7f89ebd42cbcba36800 1 0 \\x000000010000000000800003ebb0eff4cec291c93b6db5c710166525302d7a8b8392ab2c7c308888963c472085efec3fcca13f823a4c41c215cc76c3da7deaa79454b4568bdee58f052dfd004d10cf9915a90e282dd13396411d4ae6dd9cb0a4f4d037184c303419d266758a36854d8181fd3a5bf3ffa951162c3ff1da82c85066502ba80fc44818831bf4e7010001 \\xb9ef40cc8db5c8388d64a5f5d878ef4511037aed9d06c055de27f230de8d8bc3cf9d4f9f691c7aa42d1f09e28de97625fa70a32e99138000352c8cd238fdb50b 1647424407000000 1648029207000000 1711101207000000 1805709207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-149 \\x44812904b811f3a5e58148c07ca5b6d752e68b913ea803e42c5cc774e5ed1ecb88e19f1a3b7c8c37034f0bef7d5220034325836f6291803c8bb2d5f7355f8042 1 0 \\x000000010000000000800003c0f0b14e8f71607c8920d01553014f2d5e3660a1e94a4e550dd6c29b7840161c11d25857cb3ec355432698552864ef6cbf6e36bbde8923d0da057f478a62aecaf244ff795c23105dbb7b3790af9d32821644820f6f2464380ed358ada2fa58d17dc4b5c71178678fac9c04d5d9661349d7ed955b1050d1779fdfd6a62e6bccab010001 \\x1f4860762174caca2427325554de1ad6fe76a52928396a05280543db3c2460b31947bd35a50dd849a0389e16bbb166e6d6892da8af45a9ac2647b28fd15e6c0e 1652864907000000 1653469707000000 1716541707000000 1811149707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-150 \\x4ac14919e01b54f014aff517ec18f98c8d19f1ffa7a7305c8a7dc65fe0dfe13162fb6af7cc0c59a5eb53f737686e32adc5741fbef64825e02822f1577d57d41e 1 0 \\x000000010000000000800003a657b550da3a10fbae5dd729f5e4fc974dc5548cfafaa16982a26e5a2b6b6bba350e59e3096beb47e0bc69b1ff9174a5cebec9bfe38348ce4f3ed65bf70278514cbd244c65a92bd34fff2d6eb81969a7e23729421f657c2abeeb831bed23f99897e950e3477c92711d2fc03f38b6007b0fe44afcbae6fdea8871c9479fee815f010001 \\xae3b46d99dc3a629eac69651323839c4bd8e687271e0cf3440c8f47735c757116ff582a7ca42bc644f0ee6b7db0ed7620bbca07d81ac5b959bcc9205f4257605 1651051407000000 1651656207000000 1714728207000000 1809336207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-151 \\x4c1d539c7d10b99534846377a2f8185ca1ba74a924e522dc7e14c422abf6bfa7ca5ef28958cbcb9fb4029b46a6fd5f40372a7ba6ae756485b2a99d6911052a99 1 0 \\x000000010000000000800003ba1b32321db443b4632afdeb725c22e9ad686cd361f1c1b664981a4412ae0db787488867b8acb921c72eed12d2b2a84fa10fb3f6b460cbe672fcd3038abd8d4400b3acd4b11b8d08e563253693be68cde2e06c8c1df70d8c964afc4d324e805fed719db5eb99e478539fe084ed0deaa1ab7953de1d0e629b7a9bd387a2f33dbf010001 \\x7b32f7328b261ebdaa66040e07fe2f2979f63ee662a9686a2e958c3c0c912bbd23ea3c7c1da97121e51382f7c43c80e63c4fa4cc9f9029fffe34350ba3f54304 1657700907000000 1658305707000000 1721377707000000 1815985707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-152 \\x537975678597678314da43fc3dfbe27cdfbc2642e8361a150d35a0c3d5b80883e3520a8295c51c6a9f997ca58957164e38e43a1c7d6ba850ab5609b0856e00d7 1 0 \\x000000010000000000800003d216eacd09b957220d6af41d1c4be5285cad3dc3c64c632bff9704027d430a95726b3655fadc0e9a83ccc2bf32e0006712938ba0c37c76344b8dce1534347a76f38adff15e8e9a7be143cd5ac4abe1209faa19f0e29ae3990647373742a04621ef4b425e0cd300eec3339f3019fa31b82cacba95ac93bb62f0ae3f9d4dc1f89d010001 \\xb9f940460a3ce2936a03c322f4a5045592fbf3de97988f72d581e1c4865d0037854fcd9c89f0f84047dc8f8383d6d797014a6463bf1f0f88ef43e1874c9be20f 1654678407000000 1655283207000000 1718355207000000 1812963207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-153 \\x56858ce35bfdbf6f7be5a299ee079dc75f4e50d684b0c979d2d3912b1bcb92d8f7039196f30d64741769d0e3e8a04c698218412d0093c18b2e60b376e35c598b 1 0 \\x000000010000000000800003e3879ebe3387a2a66c480b2efb26c3185fa488cc6880aa3748b1ac071309ab897de16ba14ac7ef3b1a34ebc7431bb2b45cc8b30a14ba744175e6a090d9bf0176cc2ad8ed504504dbe4c7001a123e4ad0697be436827ff8ed9ec52f6c1799907247ae5be23fc4bc41b5c745b81ddd754fd4adbb7a3ff38bcb5321b6beb159e993010001 \\xa01f5d84c67573ebc1570a0b551e0657b61cd45e928bc02e4352c875ead571d04d5ca0638e4efecc3ec7211721f86b92bec94f36e920dd48f62b427a2afe090a 1668581907000000 1669186707000000 1732258707000000 1826866707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-154 \\x5755ef2eeb0340832e5a47adbeafe519c3ab59420207a710249a2c800ac8f2d5fa64221237c960b43001b614d7e0152225970a29f729602473e99a8840f1a40d 1 0 \\x000000010000000000800003bcf1fef5ed05fd1ad804066ac45e276b32d859ff28fced9b24cac6aa82917dbf1948108740fcc5106f63b59a27ddbc6ff92c7b8e1bd96f754c216c1a3255fc46c378eb2004ae76f7955bf800eafef2c9c5d483a03d80fc1eef21105e08911b363771bb303b7d83960b17f6490ba3cf48c44ffbfa9aff430015ed3647affaba6f010001 \\xe3c6665c78f7e5abbb9dc1050d85a9bb684989ff4df855766924c536ec6802cb76c95d69bf201ad8e2d4998a484a7134f9701071edb43f5c186e8bbfaf00be0f 1662536907000000 1663141707000000 1726213707000000 1820821707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-155 \\x588931b9d0d2c7eeb96e9e597d0da5642a9b300e2d32cce8d6cdaf6f835f6f4460772e67c214fb85ae658d79d4ded7dc5a3a6f8b94772b926f6db6db903b7160 1 0 \\x000000010000000000800003cb16fad8b255abf924afac96190e9320f1a8af3c9f72bdbc77f6cccbe593b90b5324ac70551ce0d98d20d81e3a6e5f3b3141476bfb213dd305eb43e394f5ffe95d3085fa69e94aac63c113ca01181e1138a001574f9eadf4dedc0afe15613ab5c493a6a99ee92ff09df681b0939445d506e48e34747adb58f75789e27a5d7247010001 \\x7fdeade2c24e8ec82ce37d519339decc2679c35e312679fc64066b3d1c1eaeaca6695c4dd60f141127838f978824c5f58cf2e64715d17e88b038a93e5116440f 1638356907000000 1638961707000000 1702033707000000 1796641707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-156 \\x623d228eebb27aaf940fcce68ef85081ccd0697c8e3ab3f0e367957ad9a00fb80b39e27894e3acf496772e278cfc6f114b2163f2ec843062c69d9b20d1d4d285 1 0 \\x000000010000000000800003c690f8b9629b8ea065e9aeacca17233cdf7a327b6960ae7141c196af68db87df87589373a93b971a7e0b304c6d0409e9f06b94ae88628b1ff198d96a448c6ab1d8652eb19388e11043619ee3621a77fc6ab5f0426ca50dd49e19f45d6b35cf0cc9dba41c52d7abbb5464c8e18da68c8017f7ee4c04f5a40dc24acc1afeddf2d1010001 \\xe9540fe34e30aa38232fdd504a02057ee9535b590fd937cf3d98c57d6dd059d133bd23e17ea62c34cc88eda675d0e005e15f4012a99b33a64334fb706116af07 1651051407000000 1651656207000000 1714728207000000 1809336207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-157 \\x6309a1bd9a269a819a9531343d1be703e84b9ad2ab9c7840f1bb77616ddb502026b88ce44722ae1782463a3e1246c3a91d4074ed32fda54ff4cc2a850bd777b8 1 0 \\x000000010000000000800003cc92c4f4f8bf70cdc9e6f237a48af057f6d4b597a07e340a1c4beb2ca6a42672b492e15fc3724b1a6d65337253a6db7d2c690384aebd6542b8d0d3505e97815f11afc0c3c42096013cafee596058e05649270aba53f7697eac0e9cb8367bc65f569bd56159ef64dd30606ed5b432bbd13ef5e1cb5ad1f7a0d53c104acdb3205b010001 \\x6a935a9ec43660023349dd4985cc39a4dfdf4114531ae3f2ef1d88aca316b8600dec8a54379ff468789b7b4e20cb70f412a90aac96bbbc6d59e06a97863cce0c 1649237907000000 1649842707000000 1712914707000000 1807522707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-158 \\x63c58c60a12fa1c505e176ef6e5caf55f66ac2bb1323682ce57b5a050c9605b9f6b38a8e1efcfff5c35e2d3651cd930d2aaa016c51592a47e6c7fcc296e4e102 1 0 \\x000000010000000000800003c5408cdb91dafba446646d1e9c535c62449d92aace1bb0f16b1ed2ee17a97d68716d172e075fab13f912d95108bff287e704a6490deb79b766536c9c45dab40219dca7853bc1597610ef5508e221d383a07af025dae469e94923da72f104ef524629d472bef46d3604453d7b7a156265464868830d303d45373d007fdf650bb1010001 \\xacbd18d2f99aa485a97e811cf7f210cc749132398b6c88ad7f49d994d703a3a4bf346c902a26672a53145be43382a2dc8d530f4a6235a4b4d27528921c2f2e04 1638356907000000 1638961707000000 1702033707000000 1796641707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-159 \\x63a56d745ae4f2a8741729d7d88e7ba71ebfd096827b4a855fbb7632e5d0da8be78b19bb297bba225fe08692aa4470dc1d66e7cfd01f72c4e982bf93b452d454 1 0 \\x000000010000000000800003a73c31de8a0cafb15ccf2531af5be4af67ff64dfc0022aaf1b39522e6429dbad4383b1029c1231bdc07d8b69f7bdaa01dc4a8ceed531aa18ad64d1abcd236d0a31aebe9b9eacc0ec50861f7d55097be84f22318b20a6abd5340757f8ecb4d8e9fce9dd625cd4fe682cbf741af8b88af2a568b1045bb7438684e03b82e44f7bd1010001 \\x4737aa50d13d5a15e6a7a2451c344443336b45a6c845a871f1f050942e1b1f312a845e4173d1070fdfc0cb3a1ed5decab1ab496bb929b46486bdf30cf81a7c04 1666163907000000 1666768707000000 1729840707000000 1824448707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-160 \\x6b49467955395d31cff84faf97a31157067b9ced45855d9a31c6741b025e65b60b126457bc18c08ac0681ccf0269e9265ced4131c7ce8807fd182c451ba8673a 1 0 \\x000000010000000000800003bb10ede28124101ec08c09d1a20092608b8142bbec7b046362918e76ff97182ec9275cec0c9819b7e7edca59465396b3a2a71c08a4d44aff84720ad5b5789b532b9e74e8be86e7d1a731f23cf602a073c5ca30672e53dfa5971f4f85c1db1dd65b0164cc60dba4734fd66452a4a1e39cc40035699d94c9ddf79c6f57ee2c064d010001 \\x168db54f481d831aaa096d7d04e47d2fb2270d91fcc557845e5b61323a04741e3a2c686d2a0a40b1a676973f9bf9a772eb1fc0cd5cf2fa895a76060584b25300 1639565907000000 1640170707000000 1703242707000000 1797850707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-161 \\x70118c39152088cad055ff26947fa187daf522b244d776b990c70395aa38633f192dd86c18071d0746fadabed4783f15ee854f60f37b89de579c85a4f1be650e 1 0 \\x000000010000000000800003c17e8f321c627b2d35c5c138f486865aeea075741e0d5d8c218bb4dce7c84716c2de15c79e8d4d5e9152db41a94fabefcff0e1aca52f4bee859cc07d8b49445c639cfaf25dbb97b61fba6f70a3c28de7b1c498d13a9b5f34b76f361845809917538a188ea7965d2e55a0e1b460d3d125310bb0f45bc8e9102c048a84ad80d4f1010001 \\x932c75d56d5772d41bd0e93efbe1b8588f94854c15b4154d7cc4c5708c413ba145d2aaa1531654bab56f088e03baac710d66607c5bf24fcc3f483c9eb184b708 1647424407000000 1648029207000000 1711101207000000 1805709207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-162 \\x70955d8e35de31943b19b675fa22ea8c0f262584795ffcd7e08856dbe7f4960c7944dd48337c5190cbb1f1681387ed76a3a28cf8e1ebf701b49b8956e17ccb2b 1 0 \\x000000010000000000800003cb15df4d27c9501339d05f63acbd9449fbf87139942ad26dcfa93415a82b41e72a138be180558b75915d20bb628604f7c3d04ba259d2a1eb2b724f17bff09570de9392455e8e63138a22edc611b57dace00a039f5305e4367787af31faabdc7cb3bf603690555bfa6c338c543753c4d750b29065fbd0ccce709030f3d842605d010001 \\x1b4ae8ba9c26c206cba1d42eda2a645903ca140b3429fc819b5c22b22d4c6dbe5792372c2e65b80ea83e3da9ff2ead1f999cca872ba33968f99d32989be3ca03 1647424407000000 1648029207000000 1711101207000000 1805709207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-163 \\x722571c9cbd8dc3502514ace085450fa2da2b7129962f64989eb39a42e92845996afdfb9d32c76f2a1c635bae2fdd4c6089338a543b807da8de921fbb9c93877 1 0 \\x000000010000000000800003d715e14d5041b3da077b26b6aa3db33a6897dd44ad5c13d6d1894f0b26fc1553aca40ddc3c268cbb390ee6a2d6c38d95e13c9412b2694f47fbee2a71c7cc15e558836a4e93d899af7625566c428a0eb074bcfea07ebb19120df3f185534cca55e7fb56467f0acb853b2bb8265bb89020cb160145fcc5f57e15373adfd579f6f1010001 \\x08be0c1caea01eb881df9c91e58e33fd409310d0a73b00e4af01635cd674c68abd122cb21d4f33de06d089b4d4713edb33b6a99ae1f7aeb567605a39159ed409 1654073907000000 1654678707000000 1717750707000000 1812358707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-164 \\x7339addc26f212ddce9a3d4df9468e6364965c445b53438f9aa42dcaf3f7b48928b012aeaec7d4d81ebf48730d06cd0465faa6b01919b5606fdb03650cb02ff8 1 0 \\x000000010000000000800003c5f92023eddcf9c4504f8e1ebd13b0f268415ca4a483b1e3978699fc9fa2ccb833692a2e6216cf53a922316342eca35526480691318cb66c96f19d087974a370351994753dfbfd322cf10511c18805893de7dc8b16b838fe4bfa242240ca4d31235375d21581f42a4537dd260327b947b76c00ba9782ad786f51e09a4ecd5827010001 \\xefb0c00a1ae75f2f12b80ad008b07dd1c6bb870541f7af2883efaaa6a8b92a5baa90fdcbd723cb2b48b28c087cbedab8e1ed95982cc833daba3c5f14b4a10e00 1667372907000000 1667977707000000 1731049707000000 1825657707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-165 \\x75492fcb5acfbc10ca2f997b9ed8f196515cc27aec4270dc97f372bd6acc53e8575863be0874f9f9901b90e4dd99a05c250c112bd2b779ff1fb8293bac2f7a9f 1 0 \\x000000010000000000800003d8ee166a4b8769de3fe1277729f24ef75208951ea1164e9dee5af94f67c053dc0007b505232388f19c838ebe068a8e66f8b3812833b97fc8eb71c79b2d0bc76e2e5722c38c2c8053bc3d728e3052f425e543e1e3737e42fc0d5174d251fc4087db3fa32cbf8ef3b83b96449bdb5d4cabde32f283174cd5c947eb8610689166e1010001 \\x7c45a1d1b30c7442c8432f14a09f0cd95c2a5cc0b4e2f847f0e5852a2362e4b4748a96ebfaba9c7c25dd1525a1fdbd65944300f8eb18a288abc1024553078d06 1650446907000000 1651051707000000 1714123707000000 1808731707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-166 \\x770d9aa768bb1da2421e8b1bf2aa3591f3a7aa312b97db7dad4e4daefd71ed7a5c4d9a882617596743de02a79890e5f4d7889d627f07ee667655665562af0a49 1 0 \\x000000010000000000800003c3e4e3d0e820a8ccd44fac95ba8bb4745ed947e6049ea78f9620362ddfede77b4843f4bff12a4c74d7af518cdf82296db585ddfb342e69208d0a7ee8a0d2a8ad7c69aafa444a3f610c7129f23dae75bab5ed4573dad71569ba248aeac4e27806626daa324fbb206c42b890718116997e7050ea82040201318287d328d089e443010001 \\x8d49f906bc900cda51e417dc75b111f173a06718d02fea68367b9e2395afdc808cabd0293010a7a697b2aa113fa3d8afc9764e1aba8c051887475f09d2220a0a 1664954907000000 1665559707000000 1728631707000000 1823239707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-167 \\x7701de84114b0ddb781293d93bee7d7d329f6ed2cc8efb0e02458a811604b7f9b039185765613fdfb7d4bdf759c1afd6ae41b12cba1f3d9e3550c6b2696ecc23 1 0 \\x000000010000000000800003b78e3c17eb31d21158f28f2912174b8ee50a708fb4ed9741aa33ae8ebe2a787858cffa1db937f7a255c18a3f1db8f6410dfb5b137ecae00bfb33ead3ef691a17eaf1b67ed60780ce3be567ca7d475071a94087fdf8fb527cd12b021587af7057692c3fff76281bb459c50d2787dfa726b4da02e4af8a37a89b96d2b30975ad27010001 \\x0db5d90c3c39645c39fdcb8e65b7fef91e7f9b29fc3aa5e10512b2657bc602cd1aa7233acb35d5bb46d46444b389e76899513438701d66c1d5913fc77e6c9a0c 1640774907000000 1641379707000000 1704451707000000 1799059707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-168 \\x777136e6dfc8636ef4c597226540b50e19a61fbe86dce64d516c09588e9ec291b75939eef02cfc13810bfceb3818b5b829f289bda18008f8924132b310ca3d20 1 0 \\x000000010000000000800003ca7ac963b29fa6766d5a3a3163b51cda4c87d216ea2d5eee6108d5519a470246e8ac9a2ed3384f7894cb18cf001dd282b1addf6bcd6b910bf3a031a4dad3bb813b8b11f3e9504b0c89e63d47441e7ffe4b7d6047db23234834cd2a794205afd901a82e19c487c72c68cce6f49417a34e7cda46bec3b595c516b4e01a795bbf9d010001 \\xb569a74fb512309f5a034f5e4f40299bc484d0575397560ebfbe2085ce66752a8404d2740e245efdbde2d194b4ab2a71e625a43010a569054160e5c0b6626807 1640170407000000 1640775207000000 1703847207000000 1798455207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-169 \\x780dd53e4c43ef8e74f4e6e62009e3588538f72774e8a45bf484315af12816275769659ca62341d1ddb687fc71c8e77973947a1d5f1774aa1ca6840e0f754ff8 1 0 \\x000000010000000000800003bcd405b746343e4515ead0d7265ba5f5b68fffe618555ed668a175da33190b0a4fd5106a946ebf33ac19c8892e0f8bd2502f1989c77b4d995241cf6604cef45ec10970961cebd5bed9d822becb4b0fc68593c424e23f67c89103ddcc347609f409a34b82417f581b62dcfac9f1709f6d979a24c6fda9b070b165f3c7732b4209010001 \\x0477edba16b630180a3b57c292319d6da3ce0407cd41a409d81c2012eddc4e3a19471d998bf6bd55cea935b330da3eccebd27631d257f7e281f8065c21b9b20b 1669186407000000 1669791207000000 1732863207000000 1827471207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-170 \\x785d64eef1faa396b2525097432e98ec6f38f838fc7ce7f4e8152bf3b43ef0c41cb12cd797427c0fef8b1e9513fd86b8a8535fa26e262c2801823c286d9c5c02 1 0 \\x000000010000000000800003cbea7f6269a2b64434ed74d9d9604b58a637a1c403dbbfef1f0d015c6472f5bf4f102bc189557a02ffa99995687e0e8b5a04efced17abd4d00fe2f9f7527f10da079df4361cf0387ac4c09753796ab4ead27397f65a438816d912abf308fb8399d0faf4356cf468973a2e60bb593e4414fb80c1986583f96b2e090e0d82c0851010001 \\xdd4aa74e7a35f888df5ef46e53440c78d61fb31b3265be7db635e386bb52628928adb7baff4069b1cee2fd4e7aacd5e70acf3e3b8fb40494448bf2426a069f04 1664954907000000 1665559707000000 1728631707000000 1823239707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-171 \\x7949be9e088e1caec150c831cdee65cea98e316c23f8407063a86496c1c8579064798c98a23ab86e3cb83d05da5f8f07d89e88d3ce747c12b066ea0fff2a10b2 1 0 \\x000000010000000000800003b4a54ef9019dd8027b51620a786b256a7fc3b57b17ac026ab1eaf75c347cf42c6b7dd1ba17d1043ac9d1000ba866f8ece8068d2d456e930ad6dd0ea7267635e23b98513111614f64fee22c897473020c5e09d62bcbec22cb72719ab640782dd517ad45d0adebabb04f896548f972c97e477fe9aef328ecd74d6ecb7070e005f7010001 \\xab21068c3f8b2a322575a0d044b61bf8526723dfded50663cd3423305a25107400d50bd31d61b6da6b4a277f293d8523b5bb7e084fbbc9e61957c3d6f1afa401 1642588407000000 1643193207000000 1706265207000000 1800873207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-172 \\x7bd913fcfb61f685347f44859392a30772971149abf1ddf0b14fd84c0fe59485acac0b83199fa89b938d4239d649f37015277d1d04db222f582b28341c27d5da 1 0 \\x000000010000000000800003c68b4483cc0cbb9f299af1a381aa994ded584db0ea24f97c963767384dccdfd03a2756f58cf40341f5c4d7c22e8f567e7e4b4ee5bfd719f47ba6db6efa354689297cdf3dee010135af157cb7cc9547051a79a6cd6fba6096196d0724e0ba9540b2859906253d45c866ca31e178478a8bddec3fbb4fa54de1b8e775e24b8f3fc9010001 \\x94e3cbcc79a6e7d05a26854f97d05651edc5a87b2047889c0907cf65d9dbe01539976ba86760c26f2e0396e8d01c4f97793c148547272a31455299866f306a05 1650446907000000 1651051707000000 1714123707000000 1808731707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-173 \\x7f4d7e6ad484ef0ebac7b8a34b58a020d143bfcc2114f1c67c1631f86cc48e7bbe81872e0b0d5536a1ac5605eea5256d4b9c42b186f2a96308060a1a8c576144 1 0 \\x000000010000000000800003d5eb011c8c2b3f883a57cfcf9a15807b4dcd96d89293833a985fb51d3689c790663e0c1391dbd4462ab3a09e8359aa5e2a1311dd3edfdc8fe5492d7e5ff710e2cbf96dc6c6e500ecd42b7d0c778f6fc0bec354e6d39c5de7ac0d9a8ebecf1d04a9b5759150ff33cea36b4694d2dd7fef65a862f71fd348a290e13b82b2f47293010001 \\xbb1a96e6aeef7883fe4a7edcc73e5cf90a1d6ff9cae296c130c5d4438c5b1f8d644422f6f3831cdb44341aa4cfefa7f0e2ab72db4a306494711583d8fc1d0d06 1654073907000000 1654678707000000 1717750707000000 1812358707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-174 \\x7f75dba5d780d2e4fed7f56693b8344b5ad885b9a7d8ed4b27af6c9e666926e5bba876f928d55e10d03e306caf6bc148bf4a23c3682b3aeae3357886efa74a81 1 0 \\x000000010000000000800003c98b1eacb09209c4aa1256cdcb6ee416ed0423c35ec1673bdc98016d5ffce1cecfaed920e679624001fce32c6a574d0ad158c3ce15b3192ce41029c83564527f1c1fe05775b516d60819b0ffd7943a092eb0db1fe80666398c271c4135cc98d1ceb4e58da44b340cefcea3d4a7754e198c4aa4c458d6b0109648841ba0d8d5e1010001 \\xcc01eba84a6dbdce0dbc457f28d2b7cd0657cdc48f82c09da625b1856fd5f38329ac394ef30341a6aeffb5484130d7f8718380b6aec316adc063fab9e407c50f 1664954907000000 1665559707000000 1728631707000000 1823239707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-175 \\x7fc9bf5940074bdf7a52544868f909fa71bc0956414d5737f556a03c933453c6a7721d3aa0f29a3d8cd95e39670522fa3179d1c282f67bb920a94ec3d98c8b2e 1 0 \\x000000010000000000800003b08c3b4b175fd51a991c927722187d5fad0d362ab1653d5ab1de7cdc67abada9f033707f60fd21ee9faa093101aed75678044246ac4a935dcbaa66f9733269af53983b3de4bdf4c04f97d3f556fe7ebb0c6218696fb2644c16f559344899f0ac6b4a2115daffa29822c481b6003657472b0c08ba3dda2913a7fd0cb8c5e1f19f010001 \\x855986ee3b06375677259f9f6c6974c9b335b2ec94f929de2a2a771f0c02b019652670754c98169fb047fc7866ea956c77f502dc8a46c1baed3e7b966c79210e 1641983907000000 1642588707000000 1705660707000000 1800268707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-176 \\x83ad663dd2d4d8eac1936b456a96daff27bce3d30174b392a9afc1bf41dc79c9175aa5f330bb9719e64247f87ae938b00c5aca649555c06be3efa5115b790bce 1 0 \\x000000010000000000800003bda8d919008545b3bfa90f09693178ffaec7ad1976cb8aeb3446b231b8926caf5b2ef4341cb70bd257694c4c8938cbb9785f0ffa3eee071172339c1058ecf4bab21f74315c6392764176c7799a472b875ab3048dc4f9afe1bcd3ec3cfd52e6529e0e199076ceffe31b4bfb0e45972569951fdc35e6108a170939cd0bcaaaa7d7010001 \\xd54c226b036287a5872f470a29f54ecc99d1a222ef7cb27e081f45824567676304502d5102f92f366881ce1159c5f3c4849611c7e230f35a5b61cba994be3206 1660723407000000 1661328207000000 1724400207000000 1819008207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-177 \\x86e1795db0e3af41bc2c37e6fc03e7acc52a65d39fd7d4860654832133898dfd0de50bfc576b4adf815e36b4c0093042c7948a31610befed91583cd6d19e37c4 1 0 \\x000000010000000000800003c8fba1c15353d4686cc54649d31e04d429d20b69161c5c13e1cdd057a12170e181af31b4879f6ae9e3dd5eb4ceee1b7c1334f54a1bc8accb07d1c8d09938e0fd069722078f2cdab8d51b93378b491f10a800b07a6500b5403b7c23f975b469f038106cf3a4e2420b60e1384a0f46649ceb45f87585cc4ef65bb320250ee03ca7010001 \\xbd2d6d5d5a4d245061d693a08028079c194084e5c21fd2e58fa638cc94dea962c8b233779ab7220a52d3ae106d9522d78cfd1bfb23ad489bbf7f8b13a3b06f07 1651655907000000 1652260707000000 1715332707000000 1809940707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-178 \\x8649c33cfc3d0a47f086ffd0cf7cb5afffe0e77a82c0c12cf24b0b5ba6f181aa38628501cb9b54823d8d7adef2c5bb21abc467a462cd113c04f58cc19178fe90 1 0 \\x000000010000000000800003bc1c78d1be04f6c39438d229529890263631c8e786998a41473443854d633dc4a2b84829351019902ee5799195c6aa2da71a214339a7f27d2a65b409e25a1530c71bf34825f3bc7363cd166c023a5872929407ea83bd4713f38931caa22fe4aee3c953aaa9245f2b5170f4706a4ad8cc323693af22303338cfd53bac6aab07e5010001 \\xdb5dc152d102bf1071a301d7ecdba68ce7142a7a2c6e5367fea735b24f8010fcdfa8b28d691efcfb81e031ee2b8414ac0f15e88c1de3b4e00898a70710164e09 1663141407000000 1663746207000000 1726818207000000 1821426207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-179 \\x87bd9a29d5f416973725824f7ef209856bb17ff658c71efcc1edcd08455b2f6900139e13a8acf506944a405df42e719d707b2ffaf9199aa888055b6cc144c519 1 0 \\x000000010000000000800003c053a49a2429a5abf1e462856e2632e7a1124c49a82dc0074e60edca25ed18d5c7497fb12c54deaf2b0fc6e28474f066e3c4b8b927293025091f200a0d5039f988cd2216693d75a24a941e5cb464b22d7042a47c5e3c3a09addc8ee363e53f905be497465fb5097fd10e2b3552166d984bc8018518cda17c748cd537caaa8319010001 \\x44b76c2c0e6a2187c2b845948e87532c3a627c9f8fb8e45770b9b634e7aec38d7277962b8c5f9c19d00c37dcae11072f16e719c5b83ac5e7054deb7bb605c200 1641379407000000 1641984207000000 1705056207000000 1799664207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-180 \\x884da637a3db48c4113230ef65b075d2d6e567dc1e2ab342686807e96efa122bff68f2b3547632197a121cfc0e98af407ffd9eaccf0ed82dc227245d489ea273 1 0 \\x000000010000000000800003c29b0d39de7314f9ed366f188e0857fc8d8d97212904bafc65447685189ca760dc9a7861ab114f45ec76d5d4cfc1c750797007d6e2428d6c2c57c5f98e003718bbc1990a6108b68f3b52d3b93227775eae616dd91751f51a8c1d5ffa3643032e81e0f18fb56678abf9dd99b365f1702067d192cc0ed7cfdd54646a1c776fe8d9010001 \\xde9ca5267a51949b95d19e369a125eb6353b5996e90d3353502eac8f4501f303312d7bb0788e703dbb80ad1caee9b866b6d8b355586d9d549110fd6b4dcd1f0e 1639565907000000 1640170707000000 1703242707000000 1797850707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-181 \\x8cb1fc2e1b3c6dda066a4d7be334a40508d2bd37b913e6fc134d2491abeb85a9f5f0e5a9012e9627af79b3a04d878aee14a35be29df80a781460ac625b6b2543 1 0 \\x000000010000000000800003e06dede90d259f9ca753fc963a67042fd3ac7009047af80d883884ba1a8223e12c36dd4e4ddae06575f9830a2bf7ba3ca56544fd26c7d8725fc3e2e597204ea416631d3175a0f6256a3a759487a7c5087461c495326ae1898f8b423e4feb7995ff08aeda248a875f6a3b2e084f5d5624178241ff9066ead72095774148fa4e7b010001 \\x84a82e70f26d13770990c138d9ede53c3f3314396fa23b11afba1b849a04e4db40e67f679f0243c4fdee56e2659ba3fe11700b02d642e29567571a9e0b435608 1645610907000000 1646215707000000 1709287707000000 1803895707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-182 \\x8ec92840dd0b7da113b1bf4afe8651ec90df09705c8d617b1eaa066829fcfba106ab7b4af2c187efdb9f51d64f1e886be135c1dcbb4bdef0bacd15d1b33f16b4 1 0 \\x000000010000000000800003e45134432b9f065f415f1c51154899a28e85916362662d688b14ac7e2264ca4a639a49f61d77a888b3cda81dd5c17666365cf9f6cdb55baf5262eb787ae2964ffa39e820529a96e517de0b9f40969c17f6caba5885e9befce9fe90004e7cfcc6f2fc464f93914ba2fc285868591dc828cca0bd33afb36d04b15fd7c32c524c85010001 \\x5aca22c46bcbaab38bf633cbabda05f8bf719f8474749edeb50472f9236b39067c2eec9a92340d1e129c513054de85413436cbd79512d7b008248c1180a0be0f 1661327907000000 1661932707000000 1725004707000000 1819612707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-183 \\x9451c52d45b48509e39bd81374c5557744d5f403c5e13a6bba191a0076e266f5396dcc8b59c6b9e040e6be598946741b84d5d4e98b9c819d1962543b9c45ed34 1 0 \\x000000010000000000800003ba221906e64a2ccab89b004de7e1e3cdb29493ceeeb9f54694552b14ac2b5fbaf82383d01aeb0261128bd8c23ae978f386b69a6ea2a1d76ef3679b9757352e30529b0eaa99fd1890adf8109605032dd5002923c4502926148e2c4a7971eb5709913aa1488dcbc184d60989c3252c72b030c672edeee1fcad084967780b3f054f010001 \\x78e834aa62f8f14283106b7d6c0178f7b0fd197e389874a77a08b6dff620849bdc5ed1e97b5fc13d01e944d68199d88f0aae2662cf54b9763769fdf099f3f805 1661932407000000 1662537207000000 1725609207000000 1820217207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-184 \\x9569ba34f046cad06ec35f74e0a960cda3c0943dcba873672bba2dea4986efb0b277d8f4487ec68d6e3faae11a93b6fa09af5762b8cdb0bf63b4c8956c946e3d 1 0 \\x000000010000000000800003a6a75f534bc5e36d034d84eac3820b76d8b2f1de3f8810456b270594a48b4032bbc5bbce0d36e9650c39e1ffb9d1a006560afd082d464b6039336da73d0a193b40ef239daf8f411974cb905bee3aa1dfad6a4c4c6bf2311ec1a398412357493c304bac455c5612a04b6dd1fcaf594918c0b901eb1dae97c53b0c6d23914db3f9010001 \\xba6f7fdf9cf45e75240c33de2dd18c45f2e144e1c402037bcecd30c98182506b1ce1b8b9c045b919747a1b903266d4ab66cb215c84044f6d2307b7d9145d7d01 1667977407000000 1668582207000000 1731654207000000 1826262207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-185 \\x9961f49a0ab4f26dc567d883930f9ee1d1e46d71e423aca7920674ec2be3e16d348a9fa0bc69ed700bf710483dc6faf58595bdc73dbfb60a261d88a2c0462119 1 0 \\x000000010000000000800003c792c93d77262aa3e2e3bc8facf6b8a1e67b2ad5f0ae32f40855b6f8aeb0b29ce21679cd675d062ed6c2467e39abb240758ba93a5c3f973de7b13b05822c91e3e089fe49a5732077803df607d6931ed307498de3d390c9dfb17b9bb2eda57a478e9912f16a34abdf4bb184e19a7d6f93cca491c3a4c4645de3b4918ad66d57bb010001 \\x47825a1fdd1081af41f356e2aa0e301df8c9824464214363f8bcaca565b0cc14f4241e23a6de02bd87e87adcb2e7b16601e2214abe87c2202cab80f06d0f4601 1663141407000000 1663746207000000 1726818207000000 1821426207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-186 \\x9b8db333229285b761c269bd75cf4b94caf8a134bd72ba33d8afb4d13704d8e1168339bbd3b199c04917d2b38c652d0d32403269c0fc3cd1760bd29a6b0edb75 1 0 \\x000000010000000000800003c4bce8e6acf6c0e941cb4a7f82e62b240e62d9f9487f7da14b3b5775fed139fdba54338702b15fb2c97727a04947cc2a4e17d1eec82c53cf3f794fbcc4756eed8fdecbe0ff1f811e0e1abaf6f58770761d8f38f0a0dc32fdc80fae61f6fbb6f6f6315e15585c04b3807373b04bcd8ecb7dc51bc43760f216815ab416313cd4b7010001 \\xd1deea13941ba31da3c224c673dd98d048be61fd223fc827388dab1cea1026665ff86cdad5154cb38f55c349cfcdae6ffbff7f04bf1ca732ff0df8c3a4e4d00f 1661327907000000 1661932707000000 1725004707000000 1819612707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-187 \\xa0096bb1371ae97b911965dcb4b1b03080b96e95fd85a187ba8c796aa9a0ef7ebdd89f3d54b374fef4827daa229d26cce958ac625db60302a1437d5df8ed260b 1 0 \\x000000010000000000800003b8785d8aabc06554ce231ee933037b64138911ef6727365799d5f5051b4556f0ba62f62daf3940c7e7857cb921a2b483343c969980fc9ba16af6c7a438d2627461c20e29c3da5c4f44d0e80f7126681ceefec184a1f0477671b8b43bbb7d7ef1a76d2b6de3a39194ce954c03c2b9ba3be2642e9a90e7fcebad27f1555cdee84d010001 \\x9994d80ec769e62e11c8b3af0ffa3edeb6a9fd8c84bec47a5d591068d380283520d7b2125b5f0c4512245b77d2e443437bff06326f371a471293beb8d4edbd07 1660118907000000 1660723707000000 1723795707000000 1818403707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-188 \\xa25540f0a493a3054260c56ead265f0b492df98323e24bea67b01f59e72215f90f0fbe81230df0ccc8dab02ff553f11583cba835036caaebcf19bbf96438021b 1 0 \\x000000010000000000800003af85469b40f9b98e338bacd750aba83657a8b09fdd19bd6214cd26d5da89253535862041c6f4c256c225a21420d1ba438bacc43756358f6d763c088d527334cc0ccc0fc7b88278bc19a518f54b97b260ada2b30e5351acdcc762c851c6730f7a0488af2c7d975eb8a67ba960635ec6d15f58a26279ddf3bc41a688a0050bd693010001 \\x221eee7c967fe7c18c47dddbc785add42220d25c605d05d88a5393508b241eadc2ad31ea5a9b38f6e104b83ba828273f4f9a29d10fe6efb31b595c0b8457f60e 1662536907000000 1663141707000000 1726213707000000 1820821707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-189 \\xa91929be7a78f0b313a34983c7c0f5ab271830f850467e5c8926c89bc53ff41976c2acc0d6f8f11ab08d35f04675033e027736d7655399e0945fae35226283a4 1 0 \\x000000010000000000800003d8e51528ce6d4dd17178ef49cea6148e9d9fa26a979db8eec6d1c4607c44ccb99051d9d3e5f1c2e50021393bc1942ba114c864c1063fc6c069aed16fa0eed5b052d576839d8cddde00982a61e60894700ce9c5cc4ea965190b9368722d3f69f4d47025538e139e6d4d9be40946acb48b11a45eec16faef10b0d8c49e2c17b7df010001 \\xe8ca6795361dc9055d85b538558a2db1b05e6a137cce3325cd0af4aa4a997f46136bd90799ea3610ae29b4ea789287562f96524064390df27cafe964576b0907 1646215407000000 1646820207000000 1709892207000000 1804500207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-190 \\xac9935d79fe1115e173b3ee01063b07be455f89597330783ddfc91f7479fe5358eefebe24c91efe61a15137b5bc3a6e465c5d4d2ae967eb3c9b3b49e1fd4695e 1 0 \\x000000010000000000800003b3a23d70c4420a70b87024eca9cb0b119a4c54628361a85240366d7542cff4907ca05edc32243805f3439b794a5f62f41bae82973fa113d732d8be7623489334e0a2c56693f036a7bc0f96baac08f90f5a51d5db9d623b848cb7a11c2e53b0083037d2f9ecf9b990ad223ab3ad28fef8ae90a57e18675ca8ba7654b865309199010001 \\x129f6e0e8bb2640fbe051892eda82748fbdc2bd1b9d855b4f5efe95727b226f85bcc1cca1fdd8a4cc64fac8c2c627f8780cc3a29109f3bdfb70de2aca6e2e906 1658909907000000 1659514707000000 1722586707000000 1817194707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-191 \\xad01ac8e902b74e7c83a43ce5f87130b7a18e265eb89ce612c6f60ede4ec07f699fef60f1f02674ca1bf4c2c6c159ef4cf42f3fc1c3f1a72128ca3d477448ebd 1 0 \\x000000010000000000800003c588303a95ab215e828b00464ca52dd273ec85d2cd62935dacd03ee706738fadf376ade3179f1619dc2a5000046bccb7e044518c53a22c3175fd43354e25f311b86ef4c47c4098cb155221f64b06dec6b94cd03ed7d60fba73803a023f8b98f0051c25cd97cdaec4e17cb93194b0821439c1f99f8151e8c7ac0711edaff91b8d010001 \\xf45f1be18dc62d9fc176d48278698cbf62002ddc0da1899e52ba403ff00c57bc914d1a29d869f348af003c71350bb18560e559305c5c42364e15d26a7fa8350b 1645610907000000 1646215707000000 1709287707000000 1803895707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-192 \\xb1eda56df8407fb48bcfc817ad0ce523d8c8455e13580b232a616655da731e12cb2287317667f4e86ca50001e0c3b14b68fc668d5769864734c33f8d364925bf 1 0 \\x000000010000000000800003bad25ddda31cdae0352b19ae4d9c9de1e5a964df089b025e0b9a057badf739838d8f023296b8df06b7e6eb11a29f04d1e1b5628fbb51aa9e166e60f1c67281fdca1055a71496b6d7ce10852ce4361eb61c3c7884d12420d800228cca779b742d15d3fa7c21a579c08dd75f5c48b0b97ef89cc28968a2bec5adabc3c953749b59010001 \\x0d47d89ba8966cd4f370d4f5b7dbd008940ac3b1833374eb8bc1f7f6bf3cf71022826d2ab751f8e354d90653fb457dafb37b176b3b1cdd427a5808b379e99306 1646215407000000 1646820207000000 1709892207000000 1804500207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-193 \\xb6254cc2ef251314d79e3bce3bd65c301f1ecf94924463b1c9f96111b4837fa865851ef3cd3ef083d702d70361298b44cb42a47c109622577a1b231302671b56 1 0 \\x000000010000000000800003cbd8fbd36c8bbb948d49de237e969a10a26d905ebb22a3c7dac5a9538e64bc29b37d1c75477bbb4ea542bdaa9002cd45e66e17b012b40e9ff1ea9ee110afdb028156ebef11c758d0d058800a3772907f035e11caccd3d8b7efc157539df08b374876ff2dda19a694b47001bde5c3faacbdfce750f2f030f336eb2ae16e9d310d010001 \\x3d93d5c1074fbc14da93fc9b10250b9fb2285721a9e07c6a92bc24fee2e1a2f05c199db56f34f1860d8f89488ba1577b144424f95b3a478b39b924aa11cec602 1638961407000000 1639566207000000 1702638207000000 1797246207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-194 \\xbe310f287faaf9a81f93db3f942a3fcd420bd70d2023fbd329eb77d761ada67ce377b1667cc560865649b0f39b9158f2e4ffab357a9f2f7132dfb929c1111169 1 0 \\x000000010000000000800003f74ab7f2be6f064d68bfef2353d08277513b1366999ad831c22937f13bf64b137aa064a2f49e6e9049db321fa85650e2f80f984f5a8dc2c5a2cecea884ddbf45b2ab01abff4e98463ebc3a269e0bf223dfa1686b32aa7cff429059a281d947b9f44ffc00c891a64acbbd7ea8c0502011238437239989aa3ca410391565af860f010001 \\x13ee44560d3c37eab9c9f9d76a676e639225bc5169146a76d49df6e02764aa022988656ad1dceece9a82e7a3232450e869007f6408f40b142911078281fc9d03 1642588407000000 1643193207000000 1706265207000000 1800873207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-195 \\xc12d932fdd294f70682fab6bc941018548cd3b9a029fba0c022e3690f971cd5ac7495524e54881be329bede1d74f74278bb5924800b46137323d318fcbc84259 1 0 \\x000000010000000000800003b663038a3bf27e5fc53d28b256547b10c814b28c5b4041be45f725b0ac33267c9afbad1da56be39a4601927b58b081b40486d91937a46421bd597c80cf0d4e6efc024e1f97e2afe176f8c780105d18fc55d594fcf9c349f0340fa24290a8638bfb2f8bc272aafa2aac234c382e9f46611b1fff02a18f295298360bb05ac669d7010001 \\x959fede8585950c509a22f8d0ed2dd2f9122267452003879c395d9510b647508d563224986ff6affa96f779e7e77a20d2e44064bb1819eff32141ca8e30fe605 1642588407000000 1643193207000000 1706265207000000 1800873207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-196 \\xc31916090e230e355a693105b6289ef60b7bb0cc3f455c912e8bf94f035db38bdc9209acacbe0226c79b910a11a367e7065efb232907c1adaebd33b97b04b48e 1 0 \\x000000010000000000800003cbb04543ea74b38d7d45289160109cd3ac5af21ceff406c0234c42b3e936d62fc79f13e7fb33b22cbc289acbfb479085ff1063290fb001c51a3414603bd78e20b925275aa33c26c591d5369d3f41010b79eaf74bb3eea2d0decb6032ef774e00f88634c1b9e6912cd63575f871040a3218809f6c4182532af352bb57fc33a08d010001 \\x32f7b27d2f3bacbd2d07dc66001866c1e334f18ee58648d66abbfe55d665622a7b803a8d0c5993c5dca9fa642648e6191fa0d91b0c06ffb3abb5b41ba3449d03 1643192907000000 1643797707000000 1706869707000000 1801477707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-197 \\xc56db23178c248b92aaf72a057228861ec2c91510fa83b1be1e1afebe3d4625f1e7080e9c49e2c5af6ed22f40e8aa43539f7caefecc4bc4de4f406434e043763 1 0 \\x0000000100000000008000039e3483c36811f629ba2196d23fe7be0d4fdcf3f5609c80b08c18840cae3269c0e98f51ec913eac4d7d11d07fff4c87a875476d33725495330a1385f502fed976b276d6ad016acc14f3dbe8f51da4aad13a117de29e0388999347da6d3f32c755df7c2e75ced27e7a93084d5757f8c71d86767d2e862309bfb586c748eaebc55d010001 \\x35028c8485d6878f6557f9fdeadbc4ee72542ccc4b9e2ebe6c6bd08b2db0f8026f8f8075fde46e3dfcd0d3e8f68d524353424f0e207fac118a4205cc6bcdae04 1669790907000000 1670395707000000 1733467707000000 1828075707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-198 \\xc911eb63ddf4593e2bf22ec8fcdb7c14b110a94bbda5b665120154a658a277af41823dec12932027679ff673d4c044810a99b4c4750041b58505106f7a5c791a 1 0 \\x000000010000000000800003bdc7488e0bc43ba83017618ec98c1cb30c861c4aefe825973ec6262751617bbfbdd953d667b024415cd16265a0adbed7499226e5acc703880d4af291580262ad2bb70b941d330b904889de31100fe283fc2ae65fee94a1aa6217e48d038545cfd59c88e4e6014b0b1bb3e059a1e27d62efc1d474304c01effa1a707f5d178ed7010001 \\x2cea549813d2778703d0e018068a3c3029803b3406d9677386f7f111607920efd16db21337a210e9cfd74fe3c5480ecca28cad8339078e61fc8fbc11b8186d0c 1638961407000000 1639566207000000 1702638207000000 1797246207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-199 \\xcab189344176559c67fe9b69832cefde8c50c24f06505e0bb555d9e03c69cee9a7f512934444cbe117e2769118922d7867c8e1944f5b57dad45f00b0b7592ce5 1 0 \\x000000010000000000800003e4fdb48b143c74665c7f682be74116e360fbf9e7b54b9b248deaeede0c2f60ad1e9daac2b1557d3e2d67fac63149eb01d5f21d81b5f7475f7a32968c404781e5dc2665f72adfbedebc2471677c5b2352e851f18f617d341267d8f14000ad65de47fc34356dfc0b4bcb98df87da25da972f056281a493d41a6c18ce904bc64bf1010001 \\xc2c8c367b01c3d19d460562efb08f192433e6046559ec6b221a1c23d8e7ee5adcefbc27277042cb9a85629fc47ebf8601d3b16f9634420aa7364e827d7b10b0d 1661932407000000 1662537207000000 1725609207000000 1820217207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-200 \\xcae1f7f7a294307c77c78e13b28a1d1099edd87274c2402f8afc9494d19f02c5fb6902dd0ccc2be61e64bfee81cffd99f984eda0a288623d111f7436d4f2c2e7 1 0 \\x000000010000000000800003a19b66d3675adc0029fc68de5d2ed14e0f536f82f9444faef10af20c164157a2b371b32839c91328abd7e94a2b61de0d0daa7d6ec034ce103ed7bb246788f81f3bc45f6bb987d99cfa77d394b932e650a2f635f87e7cd5c98bdc9e3af554ff10db0830e27643d287fdff7ab01ba1cb33abc6e4b69e70a89e1a652d021286ccfb010001 \\x2699b998e0c51c2e6a5612b0c93e47d9aac9eab8e6339e31a00bee67ac2f3fecaf3b9118cd4ca152c06074a0fc6e5e063f20400bd734564139a147708e29870f 1651051407000000 1651656207000000 1714728207000000 1809336207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-201 \\xd109847edf2c15c28716ffcc43683e14ca70e6af7d807506e528d8dbff992db7193f6199578acfefe7b0d4ce676ec92e73616280705d0fab16a364c91b3e8e78 1 0 \\x000000010000000000800003a5240d18b96d39802421cabb9340091b848b9df1eba37b7d34d32baf89a5595738193665d07e7ba7f4cfe9ee4b9635b8b4b62305ed8e763bc24bab6d15116d21aa3c183105bae5ca1e65f11a8667e1b4ddbed603e988eb5ce0eaf51ef69857818bd8df6134c7cb6e4fadc65e162b151f679bded110d8e915ac161a8b8b7c7e91010001 \\x659918487bdb43be6000b7641716030f6006a13f7ebff6e91d2d26975602c5f1ee42501f2fa7e8e3040799430a0dc441daf129eae7ea47bc33afc09ed6bd160b 1659514407000000 1660119207000000 1723191207000000 1817799207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-202 \\xd169281b8ffb6b8992677044f70a8ef5cef056ca1a050d91bc3e298e106623cd2a75acc49f252b0436de1a25f21e1005c9e2894df5a6209c9bb6dcfc20800931 1 0 \\x000000010000000000800003c4ee7feb23063cbd5e66d04f41bad02709f28528e0d9ad6606ee8229269add7184db4fbb000fdaa2b1e90424bdd75948e5048a7c0dc6e180381b2f371d137a9a59ffc497956c49cb4fabdb9bb2b12990570cc1ef6bab6d33bf61882aa52d7abf7be72bfd6f1aac8e00d43702f2f6b35b5e5b9b5a4926e85489201e1c4fe51e41010001 \\xb7f8ad3396cfcafd3015c92fd85f26f229c6ef75a38ee5087eecae29207cda8be81622e8d9e8bf4f200a9c1fd6e2856237abdfa17460f6452a3146eaac80d104 1652864907000000 1653469707000000 1716541707000000 1811149707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-203 \\xd5ad4dab8f19fc53d72e7c9c74a5486ecff31cef8db021c27221e94fd8f2c9973f6c3fc9c4af94918a8ea70470377eff295bc08bb66acfaba5de12674386250f 1 0 \\x000000010000000000800003c89645a167333b134819e4ffdc80d30defe143a9b0178d165a36edd0ea03d6eb4a8dc1761b1acee1908c3d90c232c1d7921f0f912e1bf00133662911d2dde6de8daa9a36872bf05cb46aa5313c4d71426ec102d09d80a9dc1e81905217dd39c4a0d478a543e3ae29f27da9b50a7f90c24cefc26dd043daa12b95264ea89813e7010001 \\x0d6297c12b6d68c515cf180966d900fb45bd06a160e84e6acfb731c8b3b623ce02789c73be32004900184637b19333a3cf1d99730acf0c1d77a740a346fad603 1649237907000000 1649842707000000 1712914707000000 1807522707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-204 \\xd9112270dd7b467cf5ca8da31a72887c94573720edd6a4b40bcd3f43e3357c869bff87e0a4fb0b8da02100ca5f246bfb3eb2b33ce4ca3bfd610dd7f6ceddfecf 1 0 \\x0000000100000000008000039dda3c5983f7302093a61b51a1f528f4aead6c7b9d9d748bf0ea729a10d49292640e29c0bf80f7bd7b9d2aeeda6948040a5faa6ee60bc87de2fda9b74c06fb0ad4e581a9b28e7ee2b8be811182b4e6c8905332f40accd2da7586b86546638f6cef174b154eae46577b7fb19fa4e3213257673904d0318a4be814dc2dae8e0581010001 \\xe6e13b60364a87f16a597f7c192ef2aa984a4772dad28435a996f0f91f8b5d80cb3cb89cd1940d554ba9f7c34595f7499d89218dd57eda34765cba1af6a62b07 1657700907000000 1658305707000000 1721377707000000 1815985707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-205 \\xdb31ee2110df3886c129d528195e115c05012cc8c29d684f8fa2f824e260a4accdfc308932b6b72a780331b2edc871f9cd521f334cebcb41892db7b30ca38c1a 1 0 \\x000000010000000000800003b3b768256321e3d9de9fd4dcfcbf591e857aab71f02e6a0cacedfc859c0b1e288c9458b868aa5b3c0ce2e5f1b67c7471df57602a00b41b4d312b187a5ac4a0c2d2b2e35b9dc3a2c420858daa5c649b0bec219fddd3742aa65e5eed9f2da4b1f68116ab22a929acd1b63af3e1135ac02f78773555ca9ec4c0aa6291583e41a005010001 \\x509e08d9ae41241e9e7c8ec354f521dc28c4d9cd05f2ee95db0951809a7a476969782acf2395eaffec9d5525c48bb2ad181747a19cc967ba35cc26fc1a3b2206 1652260407000000 1652865207000000 1715937207000000 1810545207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-206 \\xddc11b18c5d1eaab5b62df0d494bf3b28fc82f81828c8f3ea7fcedecf71958e9b69a7fdf80cf12cb3bd862d0e381914969cdfb95221c4bf1301888eb54607521 1 0 \\x000000010000000000800003c8d3e097e0b87243acfba162a38a90887555feeddc355bfdd641a2a4bb51d1b8c1581794fbd63bc28b92c3f0ef678089cc44f7fa5d843f6ed4ed91fc297e9dcda5c47103f1bbbda0ab23516feeb5e6d22caa240a149f2b305b3b29b523f7805001efb0e2184e43a5990dd6263db6e81cf70ae4b9ff46ad2ed88e36caa6cd3029010001 \\x515ae5e6c6245a8d33c58380539ae73e68d289aff7644a086131a0bad64ce959a1740e2d15410673776910bc8558c75c41e1fd0ddfef99f5e90068d4b9e6ce0b 1655282907000000 1655887707000000 1718959707000000 1813567707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-207 \\xe1a1dd9014c648585430977632b5e346dd69df35bc96c11622839f4b42f7e493dd5eb3bcc5fc2cf95c53e85b3710a7c0df239eb92e2e23a7cd26f65564a045f1 1 0 \\x000000010000000000800003d8f013b31b3a2465cc3ff29cded45608df4aa24ab94c05ebf4ee1cb38d6e8bbb810eca8b37fb449228fcc2b6447afb2cf456be1a87edc3e96eac0438b6d9baffc40dba97b819d705d13f12fb847e0ae5ef94a3506806d80c65cd7cc1fa453d88c085e90dc60fa34a37732044615c31117d36d20216c918e437b2b6f1adb8d7db010001 \\x8183cb294bdf1b201c87c11d5ad9b7f0088276a8a56e07fc8961035e5acfd15c934f4c26374633bbe399a568078fad51e7c0d837479aad23ac38ea009bdf4a0c 1667977407000000 1668582207000000 1731654207000000 1826262207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-208 \\xe255f4982d9b4785dbc70e1e4f2b060f334b2c90c36380525ac2700b50f0e1e329d44122ea75d335808cec8ff81877786aeb75195ac672205de5184ae6104338 1 0 \\x0000000100000000008000039f9d77732f5606fcfc048eb5dceba09faddbe1a67790b7c3b44be159bdbd92220249900bfa9bb43be1672276085a4f36f9e4ccef5c9508fc469a4a2327b343039d81d3236830488cb399d3ddd55f2a8d63c613e3fbab52425381e547b52e393a04deb431f812200b59b1251d3c63de2f16b0f3204d7cdd03c54c248ff1dbcaab010001 \\x44d566d08ae79f2372e0066010ba2024315617883ff75b7e283fcef0cde2ac92d40f7aadc1cee7a109dc8d5565a4e9f6230024083569c382305338be42b48303 1663745907000000 1664350707000000 1727422707000000 1822030707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-209 \\xe3cd6788b9be307dea9267b4e306c461f9a429126a32ab2bce1e3d9f95ef4e3e548bd6f64b2738e1094bbf19003718de33ec89d9fb404ecc2b0685b11f77a691 1 0 \\x000000010000000000800003a9c042b5f132333425b478312fe94c1514be56cc46f5015d10a1106bd7d49764ccadb2456f9d747c74c7ecd1dfe428c3c6fda6e366f73cec06af290db0a9f05b0b96138dcfc06b57e156e76f79abb472fdf088e09158c716372339e4d95de691e06eccf89facc7b7787d5cb46b8cd25d4c7c0f3a0301b18c06fc55337492e67d010001 \\x4ca4e008af40ddc8af642dae461a7feb1b27f7228d76349fc5c961b4224c59745c399a996d4d5816afb8a757192014c6678ee588874cdf26106b6076d8beb60c 1661327907000000 1661932707000000 1725004707000000 1819612707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-210 \\xe499159b9663afe4a8772e284c16f79fc2e4a7bdbfad78a1c2b0d8440b5c0147cf77ae266124f70deebffbba3541220c3120b1f352674f25acfc332a19ddc568 1 0 \\x000000010000000000800003aca77ed3a57001f1b5acb5995fadb6ebd98545ae4cce25ea6b1f9c355e2252885113d945b8e2dbc55fd4dd46261edbad1ff2449c2f5aab5c73c0b09bd2a7939860433c754e34a9a281ff5f0145baf73a7c2156a91b71e32c6c9e570864904d4aad1432e9e1bf3235826d0d530f7a5b317ec70cd9ded09847102c7c0e838e6261010001 \\xdfd31c90da1e5f8ce16992e3ba14d4d7c45ebf1f92536ad2219728df39fbb8338cab8a52b7a9cb5424f6d87b611cead70a3463aa4ad617949cff03a25e91870f 1640170407000000 1640775207000000 1703847207000000 1798455207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-211 \\xe60d96444f6b955443e17dc9894affc74eec98c934c3b68db954ee11324ae62c9dab772b80d2b6ffd9aaa9f7229c96806b4284f6c1ee6f9ad6e18e5fece5c2c3 1 0 \\x000000010000000000800003d9848fba9984d9ff2070053d778ef7af94629bab191fcc93f15991745361214bf6ea15e0458de68e12dca25e07f6e316c2f70e8ea2f0a759ac908d6796c77799e8a00d4f662f61b54b5a53f1d5514fa3aed968c07e7ab0379868d8c4c2cbbffbaceaee6bf65a15ab2a4b2cc9f348a5a125a23c4b6591bc91c7061c262582a49b010001 \\x770a44a4d0b72d76937e071473b8631d895f70dc1f6b706e3d37b06ef4a09ebdb3d67bbb906bac047d3c58faae4d81ea27a4fd52701b95c02cc6b73c14807a0c 1645006407000000 1645611207000000 1708683207000000 1803291207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-212 \\xe6a1ff563df017dae2134e68521bd21fbb05c44c02005be4865fa8cee31c7f1ae0f368408e0ac773891abaa42fdcdd8b322a598010ca0ab9bac81a3986fea2cc 1 0 \\x000000010000000000800003bddd5da982c364d1ce8f9f4f21a7e4a442d48cbbf69d827a9365a3d406683f950e33d25fdfba2d1e914aebb6dd6f5d58bee1219b6c9f081f2be208c9f3ca0474e68a67334c4385601c491d886ee49bad25e8f5b467ba48c2ece302b385c5c0d6dad697ea4e7eb6fe1c954d1294c3ed1e07083b31b70f8f65592c9604b12d8713010001 \\x5e8cf583bdf481b03c4431bc5c9e92214fe1b71e00253239959f21b71e955bf161112568fb3e7b47e6648225d3034fc0fea7dcf58df35419e00c71a9e0ad9504 1641983907000000 1642588707000000 1705660707000000 1800268707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-213 \\xe6e1b1e4eb7618428c93882f567ee7637b05673755943a2a354d2557b505ff33ad2fe5e5d98e5dd7ae6a5e010582b3b7c7abe4ecf2af71d7afbb89eddf27203a 1 0 \\x000000010000000000800003f9277c06dcafe96c96bc30c0dc654be168df7f85ca4d241ed2f0e1035a542d821aa82d1bca651e2a0f05900cf7d3827f7c39293c936604b41171c83ed42d587194d3d3a4e3eb63d245e72142b230ed4d28f98866b6136a3afabd1c59ab70686afc3bb16b5e01ad515afb3a6438a062723547ae403f48e011574c87b205f2c2a1010001 \\x70846cec056321de8a3de71d37d4c879319022d4822695214e3d39fe5bce787802cc135bf751e42f35aab5ea40e26f47739b566893c193c3d5d084f19a5db801 1668581907000000 1669186707000000 1732258707000000 1826866707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-214 \\xf50985ce7378d191f347f05fe1422f98217b8e0684a0bd91999c9ec10ff482955f38f2f177c618a239d500c35dbc0bdf37646b9844c80954d87bea1398f6054c 1 0 \\x000000010000000000800003b834cd76e4d0474354e33cdea07d5609b36265a712cb4b63a83b3218b236dd2e0606355e3df305c354331326c7afca5f6c42714437ba766d2df1400b59b7e7a1206202054226f21b4d3f2def732bb93d373f87432a30f509e3c45ee9a74438692fb2659ead577e77c53749eeda583af33f4a3f5666495c2aefe313a616d61c7f010001 \\xdbe51c3bd7db39bd721c881ed561edab5f9c35e5ef8909ba03516840d487ea7b8c0e6a11f75bbfcf4b1eb7a7c9ef823e7eaeedb710bbe5335719ab40c9aa5206 1655887407000000 1656492207000000 1719564207000000 1814172207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-215 \\xf7d997f3642fc4468a9665580bb46940f2547f616c2f1f77e2549cf59b4a449fcef1c25c916dfa1b87a64950db674ecb1369336858c9aa0e3fd9bdf08829d157 1 0 \\x000000010000000000800003de010eb45f6f07b101e2448a5318227ba186090f28a81764d3ce3f89e77dfe35967b8d0c38d9136c117deecdf9e332839db5c9268e5eafc487a1bfecc8ba08ac285a1ed617436a47ff29f31a16bede8f657ca47134117c126bc1be6aa52a6c5fd50df1d952714bd40d7ea77be65cdb292a1c3a111cebd80535de6dd046b85f2f010001 \\xb062dcd1afe4d98ef98a639484f64b195be1a202775a98925f27299901fcd16a648cdbf9e4ece63c49ce496720f8a816308d02352543df733407a45d183d4d02 1647424407000000 1648029207000000 1711101207000000 1805709207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-216 \\xf729ec6bb2cc6814ce53d630750ff2ae97cc4ea5311d18cacc2a6b4125307cbf324c8a65da1947849a1f957f628a1b7f7146cf0813221164d331f33d0a3743c2 1 0 \\x000000010000000000800003c42c52ee18b4f7d4a85414881cd2fb415f717a7c6a3f1ca4d43230a4736a7c938056071ebd0580eea4845d950746216258db269f65b411e1be733bef029091b32d3e8d0ce6c10c90ff3c574d4764c86c25ff5c180740510e2b6d70f5e11337cba4af08210cf3ff5736acbecbeeb8fe91fbcc1476dc67e81aba5ad750d1da8dcb010001 \\xa91c59fc5c8a55f8a631c68db2ed7f825ec38bd2120cd0eec4d42a00185fa1128fa699c518e89afc85d6c3781abb16c8205a2875c28f74bf499a14ff14466200 1661932407000000 1662537207000000 1725609207000000 1820217207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-217 \\xfa919294afb1b77bba9ccd73ae5ffecae90a5081b7185c5a46b2f91cf6b16c5a7491967324d2b114a330a7874a8b177db8a5b024b741eb88509bc9a18cd0ec6b 1 0 \\x000000010000000000800003d56c08d05e42e816cb6be8c2ff52a2886bc6f0a7880868661fa26f66fd8f4066c1c366a442e3c16109462c2cc79483cfc2fd1e5c8f110c432b78630823666c62759f75f5d36253b1b757ef7d9b06c8bcac18fc30c9b85bf648decbdf25a74d292cd6ed94ab0493ef8f5178455646e0793bd58bdb469c0f6e10cf4d21968b6671010001 \\xff6000f8687eeb87ea901e764a0db976d929ebe3668c364f360563eeacf95fe9e2a437ba60e8549cd4c461df1e6ed4c8837e785dc1046a193aca6c919e929508 1660118907000000 1660723707000000 1723795707000000 1818403707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-218 \\x00125a1454a77aa34a81240e0a9449cbb1488ac32256d969653156286329dd3f4172af83de57595c68a39aafbf6d2dde3db82ba0b128151d3fcc6c822486c532 1 0 \\x000000010000000000800003b9dfa3aefe5127324b8edfd739dba7bda9353d244dc026ce31bc681ba0f3c56e98978bd663e66b6551d053bf3a23546255319a3b3b04893342a9cb5ea79a7c20ad9271600ea142c9764fbb736b85bfd99675faef9b350f1f79c9ddfee5ce85b9bff725a60042de5ebf5e821f9264255387fd59284741855baadcfee16dd22599010001 \\x91c7bd03a85a33063d41963d61fbd203d5754692755aba57c6f1e8adaa0ca6c580218791cf40194721b64404a15ce173b4d54c2b3d6bf1c2631f91bb0928030a 1653469407000000 1654074207000000 1717146207000000 1811754207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-219 \\x02a6012d562301b8e61092590caa7cd999d3c6b81fac47dc77d4673d341717cf2921e341beb8ced80b62e14e5e2163f4cd421df22348e4b2ea4768433e3b8541 1 0 \\x000000010000000000800003adef82c1f953a5369d0c5563bde18faa756cc94c506db8ccbf699f4c0514d65843dd0326cb891d967b676c9a56770f099e87ea05eb880fe9e53be65ba30f6b30eee5cd470f11d7c43957c57c97ddeda096bd56a4169ccd460fd4e9ce7d346a0772aa17cc1bf2326b755e7ac0a4b651bc3a97f30bd5b1e459359084cb4269d4b1010001 \\x14caecad0b421802af513280bc5c53fbb5f8ae7f046ac89e682ecda738e7bae5ee45b4b2b4bc246f7a0c9ac2d648d843adab6ac0b91fd5f54b0d99bcd52dfa02 1653469407000000 1654074207000000 1717146207000000 1811754207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-220 \\x02fa3c3e9de56e8e79448fadeca0d1725588152fcbf7cbaa3cd79bd947755a0b0ba7bff74a32796fdf98a5bcb7fa996aeab0734010fb7841c7b0e7b99601f37c 1 0 \\x000000010000000000800003c1b83dd2ec46b39ca8504c5aa48d12cd42bbc2c5277110e8748b340ab73ceab08cb247286f090149569ab7e74fa28a78876f0ecc7c54eddb3a75d99d853e0302c96391fa41fa6c5d46d19b115a9966fed822fa8b5b55d585b371c986528a59daf1171100dcecd44bbc124c647097bc9f8fef481041473787d66ba0f001eb599d010001 \\x0f544eb0762cb4d384194d3ff76d5420218ff162f6ef31b8bc370a59fbc7e448b490bfd4aaec09782292b51b5553f6c38035c4b7440167f58766507f344a150e 1645610907000000 1646215707000000 1709287707000000 1803895707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-221 \\x02ee0b3c0929792003d1ff2424b732a48ba9f640e4f2b39fb23a693d6005cd2cecd9bf17a3422d6c0e9ab71fa88813d91598486fde2dcea64809e2b434b63658 1 0 \\x000000010000000000800003d0a697a69d074a155ba320295eef305a31c9ccd20d933d6b3bf9827500ba0fc4c3b0e49c56d6ecb9371a3f201b0929c87f97857d02c427935621204bc4c58c7ac39695f2f4af89e2c35a11444655fae82a57f02f826584bd54e0d579bdc58e8b40a9f4390e3052a0f845ed274c706eaaf87bae3c71e64d514d9120edf63de0ad010001 \\xfca0e752de39232fa51033943a48c988cfaf1518839600500d90627f9e53c1ccd99a16d7f7d9899b809ecae467883d9f6f686a5360dee626c34960cf1a01ad0d 1638961407000000 1639566207000000 1702638207000000 1797246207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-222 \\x045aba5d8a13da62aa104c60f9303c30cc15dc8845e489e9a951585ac74e2031231a86d0038063a47f5fdeed7d2236f709dd39077e09a84581ab99e8ebc83d0b 1 0 \\x000000010000000000800003d217265cc9c0dbdc83eac8f1d67c06a289b22df92b8248396adc75f244581ce5a803ed9fba9c0149fdd259dbcccc9b8d8799ad16457c3e69ff7858f3cc7256b2ded2d9e4acc31c5c07178d8c75cdd4663d19bdc89b81dd5bb25df236b61bcec95fb7af3fe8a9da8ab21b613ece1e02c67a76f5c88c7a04c199a9330039fd37a1010001 \\xf103d45b19f9c1a3811e0ff776c2f773750676aa2bd5f29bda7a075e9b3d9886007c3e9ff4ec8ea80da2832de660aa86a8c500ce2e71aa0a89921e811ea47801 1667372907000000 1667977707000000 1731049707000000 1825657707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-223 \\x07e22bdba146c10f658794f8c024f8633c4e55b6991376be39b36821688eb944da2dfd50a466a79d44f6de15ebf2bb229dfba84c52ea7abd7f2af0330dd0a0bb 1 0 \\x000000010000000000800003d17bba50fbdaadfc7291645cf7ab3ba6e1e6d942c94d1e04888ea59654c8e551df75e40cc037ccf7147237dd95ee0b7b293f338dd7d0d1e6b53c0a3299b5bb442bf2b0b5708b6de763ce9724d3a0320b637db222ecd937ca9a585a40a225d873f6d0170cc666eab435dcb37fc1edb1fc799628abe32149edb8af94c7e9a47c7b010001 \\xb5db937f476e6095d41615677d240255baa08cf99609cc2e2bcc24fed69e00e125fe8c50089e5f832432c2f37c392fc1a3bfacf3c639741ccd920441b0d2050d 1645006407000000 1645611207000000 1708683207000000 1803291207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-224 \\x08fee60f3ef005eeaa63ca6f5905a87ba06286369200192a35bf7fce0ada972595bf4abbc78af36d4d1c56d74adc256f5fe9aaa4941ffde7ff18c687656f7e3d 1 0 \\x000000010000000000800003bd7c04f71b705c7e45052ac47a11c357bc44c14b4d579cf4045f9f6b697f1c17ece56e092875d3a7ffce468607ca147913063df988e8ac4df63448a065c02c5571a2ad353a8aa722fa81b4a1c927a76e3702dc3a52be4d0fb678f5eff7e1b51e3012a6a0dba54bc861dfe15ebae535c07636b6cd2bba5fabcaa61948bd250387010001 \\x33634f0041961cd5ddeb0d4a4d3a1686b4536b0659aa91edf690003addd53e6059a2c8099514420383283d49fc97cf76e34cd09749d2271c6d86fd32bfa9010b 1638356907000000 1638961707000000 1702033707000000 1796641707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-225 \\x0d7262c06fccbd30d6438e53f75b0a053ba4100e2503593c76d3173bb6d493d4d95eb50e8e9324345f4360c02ccff00b18011824c8af7cee94cac196ee98c6b6 1 0 \\x000000010000000000800003c2e8756b3df008c3c7850821bc42bbbab7633aecb55c7ac43f0d9a4249211b0bf9cb35f6020cc219890200a1e141a81e91b0e61c56363b94bb7b0648b6c6d114102df631db3a0ea50600d16df012776b6d1af70166ce2df9456cd9f0262fb349f71c88d78ab0918b426e79217363336c94271bb7239ac537254526204ac81387010001 \\xee246452d53acbe4eca8a68ae7ebae8efc0624f0cb2cf2df16a0f6a53077100d4a602e4874aafcde13defd2f0ca98b1a4c6d506f21059615e76f233951ed140c 1650446907000000 1651051707000000 1714123707000000 1808731707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-226 \\x1386f2b5ffa41410cc46b0e725cab3e4b8c884bae6fd732794b9ee41809a0843df35a5cda11792bb819286bd23b81a092fe6c113b5a1ec27e975d08e865d846a 1 0 \\x000000010000000000800003dbe6c736e999be5d0af1dc3484fff5493dfd6201ecd042176bf1ad4ba38dfc2115eff74958dbb6ad4ca07910cd1dad733121ed21d757c1746a315e2b9a890dd4067c6e4d420f388f7591493fbb1e494594ad50957ce46dd4902c44a446ba37810a76731b94692d117a80ae9bacfe2d8e15f933f82342d28a9e0c2f9060e37d0f010001 \\xc1880d387cabb19d1d4a793a4906a8db6b981d2b07381c1b377e6f7335006698fac24bc1b86de30ed76c8631394028dd7d273e43d6dfe70c3d0a5e697f493b09 1662536907000000 1663141707000000 1726213707000000 1820821707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-227 \\x18465ccbf0ac49c668ab384f4f4dee141d317d38c9bf8019bd01b85afc88d20355785fb30897f41214664368bcfb6555f75cb3ced2a5b13a21756ec0308575fc 1 0 \\x000000010000000000800003d770c2487079ba2ae8eb9e99bc8ce71c3b975b570fe09fd327b67c4f9eba6ba812ac81e3a95eed14e9e3226d55cff4cb38ca3c184bf42f46c3a0b00bfd6429450d73d0ce585cf6f9de17618ac35048e872005ed8a186ad1a197b0526a78e297beda4563156f2b1b67577d37d90a689dfc64d33b81665bd1649e7df60082e4ec7010001 \\x1e6d611ed44bbeb53540e6f219b670ff6b323e9877a8f617c5dbfd91d59261d20c843ce012a97e990548bc91612aba0dfad0e60375d518a9b0c02c0313844104 1651051407000000 1651656207000000 1714728207000000 1809336207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-228 \\x19ea59f9aeb1f765e7a61582f3759bd4f18ec1c2003257a8351e36bf8b6655f2b057e87858d8a96cece03a7d3c4ccedf5ca7559bffce7090c151269e668a717b 1 0 \\x000000010000000000800003b8230dea99f666f382d71d274276038de81ebfb5e35fe6cb1ec65840fd762b6298f7408dec21c0c14dc3d4f118496feee3f183a72e2342eca4d1ac51e35f24381aab332d14621038f6f3309d12577b21107b6137c7f371dd45e43f4b50c8a78ffd4c9479d329ca81d5f5f5f2df439a7ff87b4b31b173d6980f7864dd7592ff3b010001 \\x8ef8cb8e306fec81c25512c80ab24c20a563fe130f2fbc8b1c64291691b66de6b960e9b0a368d5d538076d40b190f98535bbc1b38a95e5e9590af986c8827b01 1649237907000000 1649842707000000 1712914707000000 1807522707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-229 \\x1a8ef1e8d8b254a98a03f43a0b829942a5eabc897cb6b08b02e8af70d47cdfc1205131e6bb3ef85a235d66be7bda56daf06cb5d7d355b7274e31ca9604a33c61 1 0 \\x000000010000000000800003d8a7d7af503c75517cb738f4e51942070f7b97b6e1eb575b6a0ea3c5a6adbe37dc1e0373a09bfc49ee15d36e3d8c4751eb3ea428f60656b4fcbeb28cd800cb66444ac45dae5014481c8db2dbb4f097ff96e20c4764dcdd8f461c6ba846c506ce4029a7e4f71fa891b4ccae4a2444d3a40131ec536548f1a5131377ec0760f1fd010001 \\x7168669f8143ad7fda8a8a61f583efa986af7f20137729ee0f5809890420d570c80a54cda30e9ac08ba39587a6f16a034c84d7ede70210cc6249ae44217b7102 1660723407000000 1661328207000000 1724400207000000 1819008207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-230 \\x1a6612b1b553fc142172379ee64db345b50cc413d37f5db2d80a5b573c9c687a1644d806c9512c5cde734b7286edf65dc9b52d291842e8831ebbcd35964adf6b 1 0 \\x000000010000000000800003d9ea53e79fccb2e652ad511e778a30307868bcc42f9467581fd828c8821c95dfcf6d4834b0ff1ba181e9324c73122587c7e7d89c5cca6028ab30275b789ee2dc69ccc0ae4c3e40e38b65fe9eaba865ffdc17a1b2fab1646b9e33a67517cbddcacbefc1a202909fa5792042d90e8c0ee5dd5c6be422d31c2168ceb474ece48eff010001 \\x3b3b10918c1af8adbd2ea015a03f6728118dd5b140edc73e25c84e361832ce80cc2c16f76b128265feb5a2f5fb282152b9d28a4160cdc7244f470b16beab8708 1645610907000000 1646215707000000 1709287707000000 1803895707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-231 \\x1d6ed76d27239a844deb4cce5302c8bcf9dd9161ba88d73d5ba2a5cc848ea367c51b38679b64fe7139ce39ccc9efb2eb1e776fb222afaf20baae731a309094b0 1 0 \\x000000010000000000800003d7c32f8984b0d5966b6bdc95863b02ac40dcb4f43925c0aed1063a7b9715d530d5b5d55838d5102bdcf4551b1b92fe01ffaa118866f7a6fbf0b38f5309ac887b830da3acaf11ab3a0b0dbe9e508acd6883b55646a9eb9d77be6364bf3e25ee33e6496d12cefb4847ff3ec4f684a84084cc8fb6af5d493ae7d95e393c315cf583010001 \\x6421fee55a46288b89cb39cf4bf2ebebe59cc37361363aa3e37438af4b83dfea91b0648fd32173246efd69b06b1e17c0fcbfb0206f9b1ed6cb3ac65d838d820d 1669790907000000 1670395707000000 1733467707000000 1828075707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-232 \\x1d123f3ef8e61a069f4b85115a5ae378d386f767b575204e76d7b28482497d31c0860e128571af711cbb82b1d23669d0a8d9b6d7421f85efab33ad2ce33b2920 1 0 \\x000000010000000000800003c90c299fbb4b374e3c6221b88b2470a684ea2cfb9cd57fdb1d4a9be5635627daa22fee57e923f2e7a5a24052367eeab4854af326f70b42f9ff18384b06316ee9dd67506de6ae1171a26adb0b5f332042b08979538e27f82aeae401a0fbf7e3948169df89b8a2bc25bf0423e5e0c2588a466569740c632cefc063d7be90a64cb5010001 \\x82de49b819da356515146d22eef202ce71bbb3baef71ea9184445985459321de0d9017b71f3a29b2a868aa1686060414078fc6bade15e6e34c7a285672faab06 1658909907000000 1659514707000000 1722586707000000 1817194707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-233 \\x2266d9aaae00a3d8dd33b76f9f288c027f9c6b9ca51000f3e0b01e27a8d25708b6a201b29dcda02bd2f059ce72d741c2b7698be36cbd74e61252b119611b2763 1 0 \\x0000000100000000008000039fd006cbb0c907220480d4bf4a6313d0dbc5b7545d178efe66cc332e9cb1ca145f3a04abf6d1ea0486a9fca8e60e3400065db985c7ac0e159eb360f24c308faa6a9636b6a3daaa14f76e65b9045d567018dd88b1096b14cfe46eec86e747ce5f2330771071330f9f0166d4ca69e1ec38bfbba4d09774129a7930d7d9c2977c59010001 \\xfbb5839f59198052614df9eaa97f0eebe1390cd9442d7cfb3ea87b139e4962866df008b127b5108ae7e85850c6b753a855624b23c661af81056c3655048d2d08 1650446907000000 1651051707000000 1714123707000000 1808731707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-234 \\x229228f81b99ac313290fa5d924ed7a51f822afd024585b1c5aa0a17a719fade0d092d99f1825dd835943f840a2a71279916d1cfda1e4bece80edf8b7614120a 1 0 \\x000000010000000000800003ce16edf3faab14dc280e2b8d36b4f8e569d4097a0322479bd860a179df771c69858a90da07c22b46ffa5141f90358fc6af77621fb9856a6a48e7328135552570487fdfedccde48a85ab20e9a58c208a78481a3ce2d0fe5ae4331b03d0c591391746517f2c3675a0350accb50b7d542483a96451e1397058fd5df35c606e63671010001 \\xf12c67a1dd176059ef4a5e540a370ec124c835b0fcc303599dfde1c45df4520f88c5302c3adfe5a625a3ff9782e6eeefa96b1ac57a9c91132c3bf0e267711b05 1666163907000000 1666768707000000 1729840707000000 1824448707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-235 \\x23ae1b32e5412ac8d69350a683c3ca5e8b079f00f3256c6a3ba9d3dc97c8df78814d8d2fedb8a978c00560fcc8bb9bcf3101fa56032db6766ae1f163a18ad45c 1 0 \\x0000000100000000008000039900be5acb85ee1002cb1088c63d004cf91fef13da06a5800210b94b4304156e0f16121cf08914e3e4911168351868dcaea43c6b5d34244712e8764981a5f91715882b5b6462edbab15b473922f3e3fb6afc8e5a0b495a7554c6e3f9ae5b9fa40f35948aa7455263420e10ee5247ff87d3b3992ffaac8393c6d5fff2e38e5713010001 \\xa4522c71aa0eafdb53c13dbd176c42fb96e8d8e814675235367b7558bd73506fd221df7e8a0ce531a60a9dd201d55dc5e175454f91d903fae05a9a835e13bb06 1666768407000000 1667373207000000 1730445207000000 1825053207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-236 \\x2412ff56a20e86bf1099ff9efb9f9caa77f27c111d0ab250e33a460cb409f19c4cfb3a4fcbd9103d0a23c3f2f991535b2437177a46132c7d317b8d47b9e55fac 1 0 \\x000000010000000000800003d6af246230417a2a2f56e77b4c02aa1b2cc9b3a3c7787b5ddb27a172453a4e7745e18c1f8c89ac451b8b199e13e1110905cfce09b9bfc28ca43cf57a19c9fd1dc1c72220642b6bc6167a29fb205bf292fdf6fc200e640d6d423f85bab6c192cdb8282eadb1ba45e0ad51bce2f656dcad8220143c85571bbfa5b8940650f88fb1010001 \\x535e435646e7e13d8956096d8e4943c1de1d6b447f6a9c95c2a177c75f334295471b1a1577c58a4cc4826e8c50a6119a7eb575ed66e107b08d68340509d81b0b 1645006407000000 1645611207000000 1708683207000000 1803291207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-237 \\x2582ac7a4c2d856dde3c631327e096b620bbeb5cee5f9a3b7d430e82ece98e8b072ccd97b117ca027c5274790ee4218490c60216d8b91f8b7122d38ffcae35e5 1 0 \\x000000010000000000800003c9822bc0cb70db7eae7120c6924d834294e5c3bbbf7ddf5b8f3aa55745a2eb6c0914497f7f5b5f8a656598f382cea07663d24a0d5446c6f438a33445efad0c649290c27f615c5db6956ea3dfe437d984e0d40eb2b2913e38b4dff92312ec18c602a861aa85ed241dc3e4ef0277e1da7b32991670688f8012856c18dc36f32b0d010001 \\x6ea07d3f7ed949369f53a18265e42c0049652cfe9fd743dc3ae0a5a828ac9846db5eadbe8d0b7ceb028d833d8e65c4c37ce0d0f55ae7205c6c1c4acd9e58fc00 1652260407000000 1652865207000000 1715937207000000 1810545207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-238 \\x255aa7df8dec63d0a0117466aeb1412ca2d7c620f191b73ab6df8d3ddc47caf3cfbd3e051bd675bb696a8581e49b210be7a178787c579af6e50a6b70c43b1d41 1 0 \\x000000010000000000800003ab5b2b1cf300672cff7e7605d47f56bed0db0f2361198f3fbd870e421ca8f470d50c3c2b9aa8bdc9e9d5e8597d6bd49c7eacafc888040b3c33d00ae1a4762198634cc16acb1ea67de5cb0a08dac048f9bd6b6adfcf9798dd0b1b4d3245fe78bff629f04f0e1deb66b330ea43acc629608286ab6b4e595f5b9aa5fe11efe3fc95010001 \\x333c05b1e8d0ca2c2afaa7ab6f5e39adc2692ef3d84de1d57d744b2961090e87860f44830e73d6c3310d3afd3ce8c16661ba8143fea2d681ee126bb389dad70e 1645610907000000 1646215707000000 1709287707000000 1803895707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-239 \\x2656a93873b6e4b86fe608c42446c164322d310cfd41ef418a533857d0e12131325adb38f7c61310333a463681804bfa41a9b02b12e6b53bc5aa2e8cb3bce1d8 1 0 \\x000000010000000000800003b180082bfb7a70a3ef3f107e0b98e8bee491373802c777b02b2d5e3e94ba9f51f1776f0475a578e7990ea30f412c4e11c1997d8c407f7afe02b36479abb6d13cb6795fc41f900dbaf89e27e605c0c814bba64bc7f7a3d7f052e81424aa57b14666b3b9d9afc3f3dd477597aa7477168331602987bbc8d6bca0a4261bb7d4fea5010001 \\xdebd1db33b8349f376bfa93315f66de5bbb94cc26f271b3bcb0e62e7236b37ac4dc544a3d4b3e2008f709dc974371ef9d238d658f1097db9f4f6e2b100635408 1644401907000000 1645006707000000 1708078707000000 1802686707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-240 \\x2aae53aaded67407c0e02335240200a8b8fe7e4909c4a7f701da0b82297ae79e2e63d4472d927894a48257619ad0345f07df0e86fd392fcbb0f480bef4732e14 1 0 \\x000000010000000000800003d1146af35d4a81ad37d523af2cbdcc4d8aa2e385e75e95ea1a2d3f00ccd12088f72600747edbc19cebe731f5dc870cf8268ce1467db07cefa858e3aca79317bc07da3e7c160682b934cff79bd61a1db0a9c8b1660d0b2673e316bf2d5fbb8d25b543a3e1cc00b3dce6262a120a26e47387bc5fac34b94b2d2c12bc83c6045217010001 \\x8d506ef177c1e4b4cda748c4f40463bf7a105af73613bec170f5985521dfc6b7612e198bcb91f45b956d5255eef6fd6e2841078553431726ac6cc68e743e1309 1641983907000000 1642588707000000 1705660707000000 1800268707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-241 \\x30b65884f51848995ab1e3110047ca26bbd37a75fae5f1f87f0e1f495e06aa76e1fe58aa2dbc8c79c9fe617a423a994d9878d6c7833c086827446ba05e941d55 1 0 \\x000000010000000000800003a241864322528b508c8d4f6fe9f10e41aba1fd1f71a28f47ac1259fd2f0ca7be375990a3498d38f2705429cb4355d3e8f1a1f1ae8060801d826331357c9498ef21c771ea65b097831eb21d66bb37f2750aabfa2c15aa3b5619722b8783731a406ef2ad881edfc256d4b8e743a3bfa33282051f9c5da47ef9f8ed892b820e8b69010001 \\x89d9c7d334cac2819b61feb5aaf84f31a1c66a330a95649f92427a16b4326221b8a475c7a6871ab68666e25d4c5cfc4725125f6fc91bafa0eeab0391d91a1b01 1663745907000000 1664350707000000 1727422707000000 1822030707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-242 \\x329a4ad879f7d857b4adf5101cb6fcd65adbe1cf97ff01e37c5f9a72133b331e2abb538677bc2c12d06c2486b1a0ce1eff383ebdfd905e499b2ce2f85fb51082 1 0 \\x000000010000000000800003c63fadfc2c21fbcf9653a1325131ada17fb73c8ae5568dccdfc7bb70a9cd34fc25826ede47f7d07c605f82a536545517782b1e5d308ceac2e8dfe51088c8e266ff0369db5ea7d58646276c9952839977fc8d67f3ce6108a7ede146ee8c86640ccc85dcd36ea85a710881b8cda6d32c515f25ad9f2bfda7742cc5fb5606d8604d010001 \\x893ffb046d6cfbb23573644870f913441b19f855735e09ba25c99e17f7b5ed70f4afe6cb49b5fd5cae364f59349924eb9fa75a9d647b68fca95201ccf8779800 1668581907000000 1669186707000000 1732258707000000 1826866707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-243 \\x363a5be9ce32222dea1bbcbbd6a179c07e3b2abbfe7bb76c17e1c59d15f9b429d64a68ccceb3c8d1bd40f8730244cf514c2ff3c7bb98baa1200af1b5ba9d81af 1 0 \\x000000010000000000800003bd90f105d82bdf2ce6389261a5656f104b1e094e00e0a349ee0e85c20e0a73d197f3ed998ac8ba9cb05e244b402341c0b52776086eba53928a3b4ec5ab17fde240bb67bc999841aee2003ac8cf243b9f29ed66b70063c8c92f54bc9c3a523c15c79522f106c9f400d17e4b24b792bf3325ff74c2ef1ee4ff767d2dddb91143ad010001 \\xa5587de4f1223d476acabbdfb180025df06e4fc6ce8ff4ce926d48cb3464116eabccca7d5c550f06370b58a28613278e4d41061a87cda198b9f55b0d806fff01 1668581907000000 1669186707000000 1732258707000000 1826866707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-244 \\x36627cb3c2c3757cc98146d0ce481899826f4e3c51fa04f89aeab4348fd502fc1fd72fb528a88d6edfa7956565fae2e896f1e54ff952296d61561dfe1bb653ab 1 0 \\x000000010000000000800003cb13b59d36d5e592e9c6ca7105975fc4c722a82fcb6f56062b4a646ab5a43c602e48b0eaddcee86c1193b91abeab06e22268fcea0d447adf75d179402e88f6552bb5be03e25306d4a49ef73afb93a829e1767ba7e844c812ef726b174bdf441e745e8230bd17132952bc80432ca5594c6d1f06c6b963855ced3d9fefbdf82fa9010001 \\x3cc4a4b1f794ddd168e37f6b454c61e8a36cb366d89ce964bdb3b696c777b962c02fbc0c8ea775b48241d88a709fc4be9648270aa10e8f6ef23aefa3d2d11404 1667372907000000 1667977707000000 1731049707000000 1825657707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-245 \\x3c96ec46ea981ee4eef41e8db45be58ae342112ac6b872c5060a0cd4630c472e0fce197a37eac5c15b2defb531459aeacea85c669dce134d6d523a3be0556191 1 0 \\x000000010000000000800003df2b9ab4ab3ae39e8208d9a0f9ff51cdfc807d414579a854afaae3f457be1e93d113728b66f85122e40180cce12481146a5c3a33e8e7c7e6181f4477cc7f15eadf86086b1c52042d66c808275682951e0012af100666f0b8969d8856b5daecba8de4475732edcf52ea56ea4ddb3f0a3835bb8b9122dd4fbee2753a60b2e78079010001 \\x810f486924d5448d5853d8d0c165fb94c901dededd59e509552f500692b73dc9bf0c058b967f447e68b26ccb7db6be409b39562bfac66983d9d0f21c16261d02 1640170407000000 1640775207000000 1703847207000000 1798455207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-246 \\x3dca7d62252d788302b98d56f411a5e5c91cdc1af1c9348d7f42dcf7a0d9f801c2340d3aa690374295ab89dc32199102ae3e811bd9bd7ef37efc31589b53586d 1 0 \\x000000010000000000800003c09c44092da350e833074a0dff5f22c8e1048462f19c7a10b05b88d0a1c7b755d2aadc46db7f3a5dfe9bd4048db53b5f140e323a17319b0b0269dd2dbba9c89d35ee8ecfc9df85273e196d528375e02c7c1721fd3bfd268622bf585d2e021da6eb418fc34b74ac83826792253235c3adce0e56136f730521eb8442bb4b0b8c37010001 \\xe6fd0a52f090799c6c5429cb259fc3bed380330205f1d02be91caea0182bbf946cc23e8789009870a5226e715a4c72a408803b435ca8011c82250f67c8b7a604 1653469407000000 1654074207000000 1717146207000000 1811754207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-247 \\x3fbed50f580cd1c267967d9e7bc82ce152485e5df3fc5a5a30195df5dc681eafc82a1ddc9f875946a9150cb930395bcd562d2db6f81299bd49f60547661b2bc8 1 0 \\x000000010000000000800003a30b76ffe620bfeb5a86a41fe7dba17d771e2340c7fbbfbc8f6e5dd74206e87342148e7ba00e44b9a9d07d8d001169cca1fe678119f0783589ff2c0a018dcabdfdb281ccc3a8780a2229e462b8d3b23587150e9b9efb955683574e925e2b1811e183d6ed8275c3cc93cef4769ba39c7b8b35449447cf8750959ff52e18e42d4f010001 \\x966fac4c7f11784e4cc2ab4f10d119b9d808e85c3e098f7711bafe49f7c66febc033e32e055e148b401e8c7cb3f0be4ce366dde1b5cf6d0d9332dcce61e39c0a 1665559407000000 1666164207000000 1729236207000000 1823844207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-248 \\x43aa34c61acfb5705c773c73c6605026370dc6829583f84819e911a39e50a22796fe16570a54ae6b8a39cd77e56c9dc649ac924f0a0e4590189b567d41b39f7a 1 0 \\x000000010000000000800003e12eace89a501d611388caf123b600d69551387f553d80d05c5037438f6d16b953b4c553c94ecc7d1c8df238f525e327e7394212d93b34ed28ddf4c52cee963cdc5d9461e958bbfc73baa4caec7dc81016978943f0d0ec56322a4810b1ddadd016014c19448b2497765c5f78ae052b9aa173caa1e7df24652573798a4714fb5d010001 \\x58171e93a7988cd691b95bd6839238954faabec11920990e767e74e8a5558e29e6d77ff04f369dcc5ad2d193832e8c5b4609da5a42a6a9461b58f966813d780e 1664350407000000 1664955207000000 1728027207000000 1822635207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-249 \\x446a7b9ce596e4d5742142d8a6aebb313e791742b494c6e713f5f7d9a10cb076a29b24097a2e0fadf01a739057459e14745eae6196dddb87849d0728ae336877 1 0 \\x000000010000000000800003cdf719f6a6b23473415ed388ae302bdc570de16ad5387ba40b6c66c032ebd22392a18c8cfa88d2084979b2906681b966a6d604bfd6fcd5f9aed04489a3f44d3654272ba79180d4e30c586d19b4b16c296be5964fda5eae8891c6d9ca29bb4d336da18656d3866511cd392282ec5691d4c8c4db24b7fdc78b941ee05d3ebdc5d5010001 \\xc74d0f7bda350ddf9cc088669c5fd6d4ec247c09b13bac028e7fbd119b6ca6e72660451ee8694b8c18805897ca7371c4e0f56036d40deb7b04077575bbde8708 1654678407000000 1655283207000000 1718355207000000 1812963207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-250 \\x479e7fbbff21e25a76188b11e621e3aa4806dad22e229563e13413683f50d13935498de3ef40c8b092e2aebbb624185a53bf5947c9cabd7291d516e0e488fc07 1 0 \\x000000010000000000800003df5ea28d322aec5c5361b4a285d9bfb5bbc381b3cd3e7185430febb44a479e5d46fc5475020f50b1922bb6f84b0214fc4230a1062473cc63851b556aea9252498edc36c89c3a3e143ac3bbc6ac00bf07315557e0b14f8a957654f011d4bfd09c9bcf7ec6a6bb4d8b40059fd1c0df8f37558a5773ceb07f0fc993d335ea56731f010001 \\x4ac8ce9fa9163663306746ed1d5854e5ed3cb8a65554210e2d18c5cf8264d308206750fc0c39fe251799503b2f734c5f23745ece108e5273451b8e9dccf1f60f 1666163907000000 1666768707000000 1729840707000000 1824448707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-251 \\x476a85e871b21620046fdde1277b96f9833bdd09d1878c68399804050cd21b3f71b0eaf546eba871d44e0dcf8cb55950e97b5e42ededa0b32bc958afb56de9a9 1 0 \\x000000010000000000800003ae831be3b9ec78a6341f88e753f4f490a6280c43f5df0adcd833ce58283d87f8287cdf41c9710f731543289d32423849e2ce24b19fe760738b1f0599bc9e8b53ca2b0e1b1d796116b3e133d55b3d012b0e955f8416c73f92ef2a44de278a758ec9dfd293857ce6b4fd07e4f9ae39c48c4c9fade634f6afb66036df107d81f3e1010001 \\x351eedee57b3971147e07d4883d7306a27cb177447bf90fbcba4b009b7004bef5c29cd20294f1d5ae55cb8c912e94798bb50f525ea046edacf9a06178b589c06 1650446907000000 1651051707000000 1714123707000000 1808731707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-252 \\x4b228fae8ee419be3dfec03dbc097fb1ee3736561be25ee6c9bc205a5c369e7e69327380e80911ed2d455783d59ed2d007418cc9246641bbc268fd834e70ad7c 1 0 \\x000000010000000000800003b4eccd3b762d2e7156ef7ed5749de58a34af2f8993647ee45d511c2db05b9d4e4d7c5de2663021e7a6bfb262cf933afa8f35589f7e6d37d33ffe9cf5ad9d3c1e3022e66c2c5895e25619156e4c9fa2b1401ecaf383b33749835949287361097dbf24c451b01545339fbfb752a50460737f029b43a2b69c3e2b140bf3eed79a8b010001 \\xa77d043e3efc8424dd03f826647b75bb695da14a969e8b30aee7aa511669efb6b15c23bb55036b1f9cb3981edab2b3338676e52d5e7e921f9b7dde2ac7636000 1642588407000000 1643193207000000 1706265207000000 1800873207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-253 \\x4f8ab01cd09e29c2d3f5ccb26662a313c8c1484ff59e5fff326538d4e3c770a1a6558026989a0e1db541a26796a6e001d0b393606326eea7afd2bb568f11e3c8 1 0 \\x000000010000000000800003b1bee88b5e4d32c42ad39556dc3d2a4b29e8588106f4de3e6647547f58531c4601a200774f0bb9c8b4c47c890e63b07885e6a3583d6cfddb8ed395d0a2f98cabe4bb73863e6f558938051c51a8578c66984054349fb56ec719388e5f7060a216468a82d54933a658bfc56acf8f3064ff69c545dda3d5565318a8e021ebd0da47010001 \\x82793f243978c49f73d53ff313b174a6a6019f4e3a81a3f1324bc90123616dd97d7a5148680e5a285b58d05ee51100e43606d43c2a4ca84a44da4574af77ea0d 1647424407000000 1648029207000000 1711101207000000 1805709207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-254 \\x53869db8700743cc814d09f2d797f9aea682ac2b26ac5c07ae81501406910f0e29d3cd510138836aed14084cc103ba7619ba7bd9373465bcd939448978af257f 1 0 \\x000000010000000000800003a7a8c62dc4651df44136d84d6d36f6cd34ae01d78cdd901b4be8a341e8908dd0ff7f1fd86736df5e993591d5a3b50850ecd3655073e6457aa0396ce0f768b2e86d9847a4aac8f3ca774ab1eaa74ca2bdc358538cc5da9b1fe832bafde5972b91b736714cbd17c49bbae0b21415657a608876ec6da12e06045a59d901a01a6da3010001 \\x146425cedf8c65485604b10b9b1bc2eb65bdd85418cb8937182493b61376ce66f720ddbebc304f39179aec36a20a8af3ea965b1a7201b320c259e656290ed609 1660118907000000 1660723707000000 1723795707000000 1818403707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-255 \\x53fe17148aab70d6517dc2736712746a28e6dd82bd01f192accc1d031754960c178eb2b95f20a25ebdc16c219212887230b58b039fa78738d9aae168a14e0fe8 1 0 \\x000000010000000000800003bcdb7a31f46039c38131a838f8acc6c22a2a3ac44c5e631359c7422236aa421a3812a8e1ae65747045a5d894b05a398f9d6fcf01c58a1a2504af22d5e642f354bc4433a68226488cafef1a294e5ef5306bc6e6f86c146313dc9c97e34a8a114ad897ff44784c5805d6d0418ab8d85e0d23d46c9a5815ba6254a3f16098ad8f11010001 \\x123208b53439847658aec94ea5a547736cf1f209161e85af94d772faee51ca308a364ef8931f2ba58ea11d5a2119e3ff49e564a3fe8332f2922e7e2bd8ff8508 1656491907000000 1657096707000000 1720168707000000 1814776707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-256 \\x5532432b0619791689d57dc04e77b25f3a2ec3a3b4b23a84dd9ad6ec5e4abe45d98fb8d8a056ca20e3b6105acdcd6976780b5212f7d72e646f36a43b8c2ab10a 1 0 \\x000000010000000000800003d6d3fccacc61e11fd884aaa896f6da2133c2fff34ed0f65b373daed0c7528c70c39914fcf10d9eced6915b7e10424d5b2aa04f277013b23627ecc8a4c8964958dd833977a8ada477f4be1f3b78728a1ec1b3cbcaaf765c56cc5bb92c1e9c25a35c594b5781d52350c48888ce7a290d4e27cf0f14b032b36a365032b6fbecb169010001 \\x7ea659a15b1aa859027b0e7c746419e8723f65282cd505da00e1855fe7cb346b0b7c0f97f3f1a26d5df3b4a869697b18f5ec4b6f56e096d328bae16e39e45703 1638356907000000 1638961707000000 1702033707000000 1796641707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-257 \\x553e0ff88a02120b92e37b4867974e13a830773fb596e48f0bc86aa914897db0027873b7cb14df0db2abd623593263c6276adfea1810bcd389fabaf10ff3b34f 1 0 \\x000000010000000000800003db7fcdf9e22f93a98da0d16ff8c0c98c713be3c99e426f36bdf0169f7ae217894445cfeda1773bd252ca60d36faf359bd0b5150190c77cb83c7e2f5d0b308228dd13c2f615c426be1dde28c71a4b4a5442264c2793a3342e7bc0357de2ce7b2e021ca1fb43a621045c5edc49e64cf138b93e6bf558e9fcc7efe727aae8882c97010001 \\x9d3b3c51ae3c9db76bac5f8bee132fbf1af65dad18202a981577df9c22ca96c114d34a9c6b1fd7b74e60a3b85eaf29e4e63d9553d4b2b0e11909bf7a3d512007 1643797407000000 1644402207000000 1707474207000000 1802082207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-258 \\x565e1b3473fbc5f69bfd45eaf2754940013de5f65a48b2417c8a879e8580226ddcaa3c80f841dbe16800cd9402b5ad2be9f7db8a0c94f4ac966e104807647810 1 0 \\x000000010000000000800003d6f3a97837687cf39e4e4c3333c4f0a2f15bc8ef38170ad7a3bf0a6da3747eeddf7894815ed06ae0f1c23a1eaaa7a0ff37a47a8be6d4bda84bbd80078f2bd2a727a0d5bdfba36f92ee6e45ba158353d4ffd01441be10514741ac958bf9779115fde77742a883a576e3b4bf355c184ede207b07199ce37fd6bbd43a8bb1ba9e85010001 \\xf7d30960dc5b575f9a2e900082a433b15e6c69c30779ee452cad4fc022d57f54aca6bf444242de06fdbe18c2d642bb99ea285e1d59d35c1158cc64b8695cf80c 1663745907000000 1664350707000000 1727422707000000 1822030707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-259 \\x58629f8622a7efbe75afc1c77cefbee983cd24920d436c9b8abd809ac426fd1415b30cab0138b20f990dfdded60196511cc2f7793826d7ca693df7ea862a9cc1 1 0 \\x000000010000000000800003ba361cf3eb28df0d06e889b9dd1eaeb11d7473aedc7988e45965244ab025f5658ff22708ce819212818d8ccc8d44605425552237b393a22ed675b39d9a8479bde3aea56c3729bcc2577c4663a322f9c0638ed9d304ffea664d7fc66c2d5131d360f50cac63184991f759f8e4dbed7087c5788a2d5f80159016ac42031368520b010001 \\x3638869fc98ac761ed4304ba5b76a96e70910f69ac571edf2183be6aef414640b83ce085516c9eaee53d69e4de43296fbecbf1b65b3aa04ff37253a4bc8b8802 1654073907000000 1654678707000000 1717750707000000 1812358707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-260 \\x5aea9c80be13587078bbc8767bf78479a4c778c8710d2babaebda9dcef3aa1e6ee9ddefd69ded1407640c23c3d979a441d83c86c68c07406464b0f55d3cc2c40 1 0 \\x000000010000000000800003af1bdfac39b742e1d5ecac8b26c8419836825496cc025797dc9e28f0c24df3cd7bbd023f0118044b1d1ec39465b449717e5487b315033b7f2096643c028c9beb703dc11e422f64775130e296e1cbab423664000441acc5356e967c6f4832cd02a42403601a21ceaded1da7eb49d64bacbcf6409e0f7a87b0f479a6358b14d9a1010001 \\x0c1d177a108f2c983307937ff561be048263caaa42ec46d0d4c738b9ea8c4519780bfbc84155ff7070881cc02a66aa38b3c80f36dbc28e1c23b1cca2b489a30d 1657096407000000 1657701207000000 1720773207000000 1815381207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-261 \\x5b86f7e532533caf0aedb91655ec1f74669a13bfc4675009d53d678af9e554f58cefebe360b77875f76b7177ae4e38f5a562b797b97637898c80bc062d7b6fa1 1 0 \\x000000010000000000800003eb4e52d3352eabf3495322f92b034e1a192d453713fd8a45b5c2d8a144329a5a4ecbb049e0f88cc58eb03a38e23fc56c25045473109411564d0617179e8acb657aac7f57a0ff5a620a53933ba18d54b6416a6eafef0c2d3d73b2d4ab0ec1c05e041717c7dcf051b9846dcc1e69614234fa40e10a100e0eee449849d253da7599010001 \\x41e057867605efd660472ccc4b8bc7f5098f31c39d3e61dc0aa06df0e63d960dab85f3a9b078f306f55e19f47e57bb7c8f94e09f5a36c2d88cdc93408198530d 1669790907000000 1670395707000000 1733467707000000 1828075707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-262 \\x5d8aea955c160f9c852eff39e1e7a659aafae2fde300dee6e77b6fad6987316246f411f4c8524b0a02f9722855abfc60d823ed10a34bcba6dedabf0c51f98e2a 1 0 \\x000000010000000000800003a0aac1c5dd73fa56f23a5076aa553c70591ab2b38ab347b29031e40ae3f3d72b527401ab63c36d9e143e40bbe18cd1b4bc910a37ef539d5b3faaa392e805fa2ee1625f32a3918589b10a431b26f2251e4a1d07b9ac8acf509362b2cf2006182c7d89b01ab677f2ec3c5a560ed58599f665037d6cf037413fd6cd5d9bfd78a2e3010001 \\xc9b9b6b1b9a09692d0cb0adc9dee6cfb9efd0db8db25c11a5c3df67e3faaef579fe215e5056f972c91df3886ae3d3cbd2ac96897d4e38964ded623cf1128ed09 1643192907000000 1643797707000000 1706869707000000 1801477707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-263 \\x5f5a4bbcb5219cbacecdba06c62e4e89b579484fbf659935f4d46d4bf26a4cff3b1ebcaf57baaaf9c3c2f3a7111d7b6ae7569d76ff5ded2c658bcd08d46adcad 1 0 \\x000000010000000000800003c04f4aef82a581ced14476f714bbdd48e2a9bd18b4601ea3c5ee3bf1c53fe59a3f3c5169599e3c062c6317aee441b4868f33318eec4a1ad124ddbec2a90d405340a4241e19e51c2004ef2a2083b1ebf28125d1f0ea663a9a0b85a6a4d5ecb27e1878cb9fc9fb05a7ad8e5e2936e119069b5375fe5ff6c7a76ce358fd4d7c6f59010001 \\xd4ea8285ca28e45d9f008abc22428d80052f54b2bd80cbe02e65b839a2c7df6e099a8125a05d1fc4f3fc951237b405138ab55e472de09d2dec4290ce3ac4590d 1649842407000000 1650447207000000 1713519207000000 1808127207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-264 \\x62de7888218737e4189b683860299ca6ed6e375804174514ed9c41a657260d73611e69dbeb34a3eb46bc079605d859e61385297133ccc2f109e3e0b64bdfab46 1 0 \\x000000010000000000800003d6fcbac531501818c86c8150e3bd5a125fff695307fec8a0afa4304251ef986288c08b0fbae029d0da6e80c9eef779f201e7fdafb37a726723c331b4d07b06fcf091df631e6ea9b055bcb63d748bca448b20953cd5bced1ba1c8e64fbe748c91031d497a65af26bab00becbb9b5fd2a21d6506106176d420aaf534423b4bbeff010001 \\xcffa583ebf7b337ba1958b80a267020c1a2900b7f3b54389da452bdfbe1c7eeb7051ed57e4c4b39b89acb51f3d68a76d00d76b3aa753663f4d212867d75bfc08 1668581907000000 1669186707000000 1732258707000000 1826866707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-265 \\x63fa503eec90c941070e704d06b70dd9cdbae14fbeb56415ca93c99cc132517235e98120e8932f4e3ee879c5f18ca119dbafe2d258ecbd5ab96d66433edbd3ae 1 0 \\x000000010000000000800003f938f484d39cb47a9102508073e247ebd4723afc3938faf76150571d5e0fed933138213bb2be06fdbc7e352f79e954b56aaa5b0d0c2e09f293a65fd820d3e1b6324d99c3fcef6fa27dee4684e43b63e90f50ff8967f728fb02d0e0ba1c7b4915d4f39d042c0fa5116d78a11d2c6a7ba8db4e0d3a363cd53bc708551afcb482ab010001 \\x5b8e60fd450375a23e9d2a068255ffacdf9f8c5b0fd1e5f07779de34653204a816b76426ee6f3d79c0b9cec93cc6932f659c11a7bc9bed9a648e80daf8d8750e 1659514407000000 1660119207000000 1723191207000000 1817799207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-266 \\x64c6225174aa193d51db51b7736f7c732ba73d7185ee281606208926214918f330400aa2c4764979f7c8e8b28ebee834a2fcfded15a76c85cbc742dde1d4309d 1 0 \\x000000010000000000800003ab6d5bac548749e434004a578a4062c9b1ff891209dcce1841a33c1840caae9e8ac9a0d3632e90585378f80c5292c7f506b54ae90f572a3e25448e8602379ce8adcc97a9f234cc03a67032b75ddf7299a99ca4004b28f1776ff4ef4fd8a5e347c71b786f7c605b5e957b1770e8b1a4506e71b109317a3a9335a023e2a5feda8b010001 \\xd0dc6650e7825f229ae66b1be824e8f334b1ee8a51f4aea06674d22e2198a78ca62772e5093a86103031d398406ea4236eea241cd337eec259444c5c89dc5e08 1664350407000000 1664955207000000 1728027207000000 1822635207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-267 \\x68aaa88de2a93ea8e44d4610910e1913d6d97c7c0244877f6a74c7da940ee87f1e354caaeed0d7c0788a9e6773412810dd069fde46f56e8984286adad9bf7bf5 1 0 \\x000000010000000000800003bc77bbaf57365a7088738f6c4fdc406dac62ffe55e6851f5446eda8e6255b5b0793b61675557800c544bbf48b92571d533b35f9e66fa969f4ccdccae0a451d578a93444e6e4940a0775d0db3542979726703155c340b1a577dd302640c9c2358a16e85e9655ef83e6505b34135a1fdec85924ed851bf1407102268d774e32bd3010001 \\x954260cc74ca392e4220195cb7b37ecd97d39f85fb9f72cd4af340cdb0b39a286d946016be3f29286104dc9272c13bbf32f920a6ed6233d0689364742ff07207 1653469407000000 1654074207000000 1717146207000000 1811754207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-268 \\x6b9e060cd1c14bcc38d622bdc5643bc16eed6daf751f3aa185ee42b4ae856e265ec7c303123aba5925b78575f9ddd18ba95445fd79c711576ed69898f828dfd5 1 0 \\x000000010000000000800003da5caad5151037c30281171ee06d1c8243b8e6e4ff9b6f75924426c4616c164eb56fce77b5b294d76a5a642810d0089df544a54cc9e4355d0b3c1af4a370512a24e8299aa1dd47fecf6568ac9d7e023c83a033c0a87d541ae966fdce8733f361f0622b631af8aebec25e18003fd23c2ce18e96c1695e802e874661c2b603a877010001 \\x6e57874c315cbdddc2cfaeb1d79b554407e0bbb829a503784dc24746c196db4c043b048619678d79bd89f1748f83882a2a5c98f66e66db630db6ca182b3b380b 1638356907000000 1638961707000000 1702033707000000 1796641707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-269 \\x6de26f257a500deb565c84d3a29d1d999f11ba8ad1981c1e1298504a5d2b6041a20caa43105d7b3683b9e6b9e7923b3236165c37b43a4e36da007880cea7e3bb 1 0 \\x000000010000000000800003a1635f7dfb468909d128305ecaecd734de2120d09cd6cb97889e2f290428b23562a9e8576f7c965b1f84da1f1889682075e71914703bbd47eed5668b46e7165fc1533646516901e982838f12a6d3c5e5a0a94de42511481a6378769d294047806a480e53d25cf229ba52e0422d30f660a289c951134bb6afa27f27e8acaf79ff010001 \\x8f759f32fb307855d152f109b6cedc584b03d31b85725bee55773213c1b27c142aa9e2fcdbb8595b581a46dd86d4bf41a84de3948b766c16789f136a4c8dd10f 1648633407000000 1649238207000000 1712310207000000 1806918207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-270 \\x6e16b37a03790ba720950b180670abab5f483cd6cddb3297270cfe7a19277d830889c81bf4d52e48295834c7fa50df52f5b154efb897b734b419d242cb54eccb 1 0 \\x000000010000000000800003eb5f374324930a2651ef467e06d19141328bc628d4ef6e86a589958b1ddfd9bfe06f07680928da32e0b545ed4dd6a1973065fcb14787673e478ea593926afd95036d77a90c99a27910756fe8eeb812e969deea429fc4d91ba2a429c721c19dc2352684115a9e76d71b15d3f75a863b0716de4a34f497d948424b75ea41703ee3010001 \\xf5200d57faf8722f5fff3f99cb9e387d0cc2c704e162234590d6ec391ee3b8643fd820a996c63a6920118055360a11d2198eed2fb2342dc17061edc6100da80b 1657096407000000 1657701207000000 1720773207000000 1815381207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-271 \\x75329549658318827e474098b2fd83668e057e32adb5d8aee5020a0d663607da61acb7734f10eb85d62cf573d229281b7a5e8772ffad2ab5b55b71c380b4693c 1 0 \\x000000010000000000800003cbd477af6ecb4646e81fc53df6b55b9d3ab2d408ffe52ad3f3ec9692153136ad22c9e59ac2b4758377857d8f0cfe467706171a59078682d98550fb6b9078391f09b4b9a34c6f66dc13707af4e1f9fdaed9ef262538fae293bdd31557b7f1c0a7aaf48e25781836fd98da0f3b8acd9dfcec52bde457e1f676c046ede9d88df37f010001 \\xb2dabc2488ba5941b0baf1301016bdef385f2b70123c4e089ec9463f46d1f8500ba8c052dde527e5098249814e0ef2817b55afdb1128a26e4064bdfcdebfdc0b 1659514407000000 1660119207000000 1723191207000000 1817799207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-272 \\x751ae75e268d34cd63ea39d9ef20cf518b38997bc31bfa55e087707ac477c615e1c294f8483505c8cf16ff364f30904259b42c95d0aa816e01b5669088d70f81 1 0 \\x0000000100000000008000039d41cb2d27543079cd2ee4a33ebccaad28983033f7ee3765c98199b33b48367f9d0def3c14d832053e95d42dfaa8cc8608f860b3d3519eb14a30bc4da23cf24449e78277060f85a373709ab008920ab619cfb66642dd9ceee088f0ff474eaa915aea88061610084b502cebd18a6cb4493f61cc04ed3b215747fc2e54a15474a7010001 \\x5135b6654197dad510a8b050a2bd8495af3eed5f7fd686fd1c6a0527f28915033febc0412932f02834e5b46990b5d012828f431d203daa6b16dfcc3b72a90f09 1661932407000000 1662537207000000 1725609207000000 1820217207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-273 \\x76d258f652d868972fef5de4b530560c5c70ccbba8e3e7caec50f9372d8b259ab0234c66141dcf2e06ddcc2dad2997465896ce9f3f382c7ca29fafd3ffd1b416 1 0 \\x000000010000000000800003af468a55c177b26dc58e442d4c4a961c3c38c28d111484f86289c3b43d2ad1d6692fabf07b1a421335d243cdbb8fe58f2147117e9dbd0ac814c18396ea84224727074d7eadb5f7e780b0ac89cf96308631beed4acba9ac3d56ee99292069556b053aaad9d8415bbd9af2e4e1ef7971625cecde2aa2b52365184d417aa63d87bd010001 \\x4a576ee1f477fc50974daf02a009f3da1969f7ac289f6de75d2999d73a7c0dc779096f0c213cb4ff1bde7bcb5ee644b534b924b510af20d63ab7a42841336b0c 1658305407000000 1658910207000000 1721982207000000 1816590207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-274 \\x781626270d02461a773574a5afa829f18c62fd6811208ef731d317284eaf46722b0ee8f1bc10b2576a8bf24a25cabbc5d6c99b7170aee33ce086aec1f52fd014 1 0 \\x000000010000000000800003bd3ef0d94e8b8171137850d0de146d03d82c85fc969f29e4a388b65350c157ac8fb6f266f694f05b3f80dba0d5a5bead80109402e3b0699976d9e80add0ecd977447c417b5ddc7c818a4d796d38d1bcb76b4dfb526ad13b6b28b4a02c330472cadf1cb717c9fc80d4649792ad46495502c28ae5190b0ea9d9624c8fc8b67cb1d010001 \\x0fb81ed9ae8e1a3bc972768eef43d159e16fabbbf3510306e963342aeac8b9efa51a7d858b81a81ae3d74656a89dcad8b4310955256b75fa4585110167e2a80c 1650446907000000 1651051707000000 1714123707000000 1808731707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-275 \\x7b4e5ce066310dc2e649e34144eaa3baabdc68223c6bc489776204f34b0c67d2c4e638408693f837f4dcfc81f1ef3fe7180c969a601b57932e18fbd0865b1f40 1 0 \\x000000010000000000800003c5703c892d477e2d6d8989f35705534cf71ab738dc6e158320b877a0945e6a671cde262520d2916aa0095861378e6c35fc64ac6d6c15f970543adb79581f877b21f4fac8a0d9adc324d37d31fe8308a685d98e4eefd95b5d55282be9197075652b2a6134795470a4652e009209a07fbc8563d6ab79a965909e0731bc58bf222d010001 \\x884072a4884a40664e120fa4c40fcfa91d8111539c16e310df380ecc2a933609e557583cd033caed5796089fb81629a81db33b9aa78dafbb3135e9359b222609 1667372907000000 1667977707000000 1731049707000000 1825657707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-276 \\x7b56574fd157a252f7b3bcbf755d84ba675788335a475cba07f95d367a9fcbb00c596846e13544768f759bea696e25740b0a75fe3e1a13b7a249d731a4baa4f5 1 0 \\x000000010000000000800003c84c740a27f0ebd9f7318a665a1dc88b19a54e655f6263cc37b1961e2bdb3d07a0a6a8b084fce2288e74e94da08dd92368a04ded7d7af670c9e62fad940de3f7efd0e9650d374d7257ade8bb53c21a38162d13380c5b37817386319f53cbe5d5c1b51e218a90d736a3e7e0e7ff8053fa3059fd9807d92eff2d1d3ede1a44471d010001 \\x042970544bc20e42e2009c6cb0f24fb9928f00f94982458e73dbf342c86c5ce98d7a2f231cf3e3864d37da28af40cc6af5c37f2c2381be51cafeb1905e86dc09 1667372907000000 1667977707000000 1731049707000000 1825657707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-277 \\x7f52f35a97ddba3d5a641bc53f0ff6ddf8b0cd10dd43e4f12d8bf20df229e4cf01d392fd7b0f51dc7f054f9798d589e0a5d342d3981af42d914f3fcf7438fbcf 1 0 \\x000000010000000000800003d29a02098e055250021ae38351cacc9d0cd3646193967390340ff096d5c8346229ce82ae95788527b952d347d16e69d08a1db2b7fa4c0f454e303c28e35e104e1a643a7c319d9732e2d9e9ba7bda488c4fb4e7be49d6b5bac72b1b0ab14956858a5396e7d269014cfc85da79b0054d87289d2cc16001a0ff38d7499cc9ecd65b010001 \\x4624f5ad5bd06e59ace7ec2b9f0e57f14deac267b4a7caa5f488ddce0083f2285e9353554ac191eb934560ad4afb99671c674b86154e6a875adb048a6d704c0e 1643797407000000 1644402207000000 1707474207000000 1802082207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-278 \\x802636136b909fdd05bdde9e17d591c7efe93a327f90d8c8670019103473c9ae225e17ac715ecfabea48a3c51f55deb1d7db05cc6475c6c7f0f20cf0225de9c8 1 0 \\x000000010000000000800003d202dde1c8eec1a3b31e2569297620947cd8e6b8bfa144ef9ba2924c7989877d5a02e54bd6db2ab45d1ac2dabeeb6db6dc61e27839ceea1596d799e70ad7f9b445ba51bf605b2e324cae88ce8cc4b935547c640eb9bcddcacd2d3230e414510ce52fad845c112bad6db51c643966ff7c91e71871a70bc705d412d4f92dc04ec7010001 \\xee9bc3bf7dcd6e2ebd5d7155264b4e1f658e4f81668fcff017de27f5b650e2acbd4df1d261bd5c226f8fb690419d1aa252891fa7829b56735356ec65c2f61703 1661327907000000 1661932707000000 1725004707000000 1819612707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-279 \\x846686ae6dc00a82c3e46e1947da63f32cc78d6bfdaa7c24c7691414a38a6dd036b26e96816979d2ea472052ab54d3fc7e577d880a5c40d81e4e647dc0b242b8 1 0 \\x000000010000000000800003c27732175dba75748a7911b3570582d414518b93bd17b6b862d92fdd7ead41a5754f477d02b24cf22d66c579fd30e06b776a79ce3272e93ca376fc0c2e474b7bc99eb68ae05330da42e0b14aa891e6bb8ef269c06dc029abc05ada76d4a9b193c3a602e596c5b707f605deea69eadc4e1477019e1860c791f6492c7e8fedc909010001 \\xa565f43436f33481fd040c4533a513172ea581b1adcb23c590c6cc8ea6a257042845b4a081938506399262fd450cb6cba1fc3efc5eb1829c0e2237d5e332a50b 1656491907000000 1657096707000000 1720168707000000 1814776707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-280 \\x852e63d61a1da7042f9349987a725e67092a29b14a89cdf06e3db865f925d020ac70ea6bf4dce6a411b10face7cf544af22fd60f4480b97ef48f9588fd511952 1 0 \\x000000010000000000800003c7b26fd4e6d767c7afd6b9da077c3ed99b97bf77fe6adb625b0b41e069e721aa0b6f74b7dd8b7b22e010183ed84a6ab34a0dd31534f305615789652f3fde62ece2a33c5e5bf40cb1e7f4dc8a4886b0552eeba5dc910d71bbf653c2f2c9de72bc2500d2ff78ea5c5445ccfdc436b1d48cd58e80653ad2484b1b4372581279edc9010001 \\x2db7ee95c9c0aea8683decb46917bb24b0ed275f9773be612ce45d267e1c74f721b70cc6da01726bbadfd597d4f4fe1883b63ac11c7ad7b932fdd1cfe34c5802 1654678407000000 1655283207000000 1718355207000000 1812963207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-281 \\x858efb3cf46740dac0a1f4a268b35bafe95ad61ca5fde745b7a006aedc190d853ff3479ecc8b683ffc30004a46a46ebf27b0b729cea22d9e6b152e2ec5f2c283 1 0 \\x000000010000000000800003c59aa71f0ebb840f2afee250bde633a658d1043b9ec5aa5ba32085da48eb52033e41af9f00352c1c367c0c8b23eb89c7d06457f960513a65864fb59c494b2ba7f98646b7b4ff6d6d9297d28d47e0abdab5b20cbbc2cfbd99f7b4216469699697438df8f9773f57895cdf4990816c8a86a3cea2e7fb3e195ad7141add56780323010001 \\xbbbc4ac24eee9ab4079e3d0a00d21e06e3ad9850e495a9b23087c5eae55db9c9be4fa21ae8990d2f83b633f2bd21d9979b75b4fad63611f78a2d260fefb8e70f 1664350407000000 1664955207000000 1728027207000000 1822635207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-282 \\x860ea0031ebb0629c85f9df60f60a7b2cb276a24b6c6e792afdfcd5e329eb9e66d8162ce351c869ffc795087650c0bea9d98ebf237b58f3a35e7739c96dd4ba4 1 0 \\x000000010000000000800003ccbd4e55b81e8ef79fc229420090aa2a4fa2a7133250bb56674cc80f842aca5994baf42297dbe848af3572799aac2db795cb087a28f69d26066b53cac06e4028beb7f7e958fe84c313525645be2b6e157799e201d7dc04df8af95b77767ff23c33735610bc5c6ca89ec891e1d675ed8d10f28236f896d878bbd172cb9b9cffbd010001 \\x099c77100b2b892b72c4c9e08275dc6afa4e8dc8dd64e7b5433b60a5fd66e58dc8d5ab108d88abbdcb63da13f6c77372b9abac148cc5d51145236498c048a508 1654678407000000 1655283207000000 1718355207000000 1812963207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-283 \\x87ca7d03beed00a1496c0a04c9e2b02a234cc8d2fa23f7d5650cbd630e2d0526a72d45a2e2c60c5486ae2a94365dd15f4489301f0eb4e8c6071c67b8ac417aa1 1 0 \\x000000010000000000800003beac4553f39358ad875c33351e67fc2eff5e5e64e31f77258af111b4bb3e0362f4c00b8dd7f663c9b5af1bd193a20b3db340805239653d2fe5a3c61bd1e6b8939e26e14560717eeb4ff651d6911555016c03c5386217878884af92f8ff1ee83bac5c3f0a495e13c1faaefddd393058b68bd7ee1eb142494c0e8d4c670f63c871010001 \\x706e8ddc5bdca867f125a125e1c4158d92f91c59c94f8048dd7d7cedac8a8deba9b546ba12023960b90ade3b21f6930fe984ca303209978afe5e94c5168f1d06 1659514407000000 1660119207000000 1723191207000000 1817799207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-284 \\x8916454d1c3cedae4fc6dea96c002c9cfb12328fe718d91e772f3c4483bfa2c1b4dcf47ae72a8e70a825f186ddffb76f7b15bba737268ff6a500453908fd8ab9 1 0 \\x000000010000000000800003dffbf1b98343567ccf17fe1d960d26ef802e0a9076a137a2e5c80995b5d1936730a0c163bf0b410ff168c4e1dd9220b56e5b5fd22bffccab89d20c10df63be283f7c582ce5bccce6620c05a17f5e714a3a487440ccef2e33e4c561c7055ffaeb2230952f0b0c7774a66d0c2dc81c67269c40b1accf0d950d4be70fc36c4d239d010001 \\x21090e46d34102136e7fbff12918a3449b2e927c39d88068715216198fbeb06f1780540105f80db390f6367b96700d9f892b1f96170880ca6a1af459305b420b 1663141407000000 1663746207000000 1726818207000000 1821426207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-285 \\x8b2692d68303279e1617e883ad4c02e64690be5ef76d511ccf18894fdc6fe250ae64f722b319ecfc867fb8e5943fea75857542ec66c82b8e6218ed5a716c5b99 1 0 \\x00000001000000000080000398412ff57d5a6652f17501a848dbb55fd7f19d50b078b7ac7180462a1e23e91fe4b30be8aeaa05fa526239fc7273de282f98b32603034f514180736a64ad31e5cc78db9f5e940da235f608d1f37327c0614502c9891b450a614517b078a80f80e5d7cf7ecab6eab7f814db16fa40291f68aa652cbff17cf2a9cf4a61d2e1edcf010001 \\x6c714305107588b335685d860fc471bfd8017492c28a15ea87d569929a4285161fb3de27a045620371492796e4b85232ecf732004c799fea2eb781ca5e7b7307 1646819907000000 1647424707000000 1710496707000000 1805104707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-286 \\x8c160e85c1eb38d824177079910b6c33e50d95999209a28eae5f1a8baaaa750738a5f207c8a5b53d9880321504859faf62ec509fa208ac1a24bba7c3a2912a52 1 0 \\x000000010000000000800003d68c84dde91d1e9871ba839f7ef5ae0b93843bb6d4b92d32194d7386f9fbc1fffd257b9a2381f18f301c35c0573d6873ed7cf144077372ddd98c57766b7c56fb6fae7a2409a6aadc84fe4593f3ce869740826e2e26ae97b2d259d8510478f5d301571d3547133107faeee671f8754422c68ee310e30dbd1046a2e2ca820dc9ff010001 \\x636b39a1ce9b61a3a6270841cf534cc4164aed76a13de85b429921f84d1a494318504b08ca6fd120c4ad89e0608a03ac6b3e6702a0c50a4fe7169b79d79b3d02 1655282907000000 1655887707000000 1718959707000000 1813567707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-287 \\x8d320397fded1709e5e01a8f7ac01dbe181140a0f43dc3fc01dd7188626e62eb62444d2c71fb25a577b720bb1952f1bd0444d6b4af38e4c54018a162f1dec658 1 0 \\x000000010000000000800003d4d8cc4622469e48fc90fe8f7c204868fa7b3750216f124d276309efdb6dbe7f64dbd6a63dc4d962a4a4f45e18e55dfeb8247197c503fb278e70da6fd64bcf51c9ae4b9a3e879418bb14a97578cb4e2e47ef47f0e119f45f74e64b61247bb6e1c04285bb9b0d291f39c91ec997c5ccab21c888c6a6244aabe290950bf29162f1010001 \\xca24336248736c185169648d9f444198539d161cf22b4ba856233b92bf67b9caca386ff61a7c339af91e4f5ae4eff6523e5b07672d3e606180bd6591ba4d480a 1641983907000000 1642588707000000 1705660707000000 1800268707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-288 \\x908e3d2331b3bb18b35501b6665425e3e45426d59109c385bdac76ef715fa3fbaa3af0c4ebcedd2a04b0e907a9ebf9158eda2e911e34e1530ce5d5e0688f1b24 1 0 \\x000000010000000000800003b5ea0755fa2457a349a7eb1898708c7a603a64b0ae1c25e81dca75ab5a579898ddbc10520cfa78188a7c9bef4421ec796cd4ab664e390c8fde6e77a9f35353749c11e7ed4fbba1b789fe55cade02d5df8ba6b901df748f5bda0d08dde9a3246785bf394995fab407e7c2df787f179c7bc35ce65681a6751f5b412686c7d77c49010001 \\xd2baba2014a9c8e3e72e3b9b88cbb763b825d8c465d3f82cd1a3ecc7e885c0cd95517dfd3151bfde73d121fda0092d7acc01894d4a24b958a65fe59077577f05 1660118907000000 1660723707000000 1723795707000000 1818403707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-289 \\x952219e9134c5f5a8f87fe0f1ea754ab28280a39011f1d9b2a04008906bccd3270260d7bb923e656dc3b00d33a606e24da72f24ceac12ee6b7ed1f31d4fb4023 1 0 \\x000000010000000000800003c3e73870605e95b7e135a20089babfb54bda77b93c4a1cc42f5527326d51badcbb8849304c700b377e42ac394db60f3e49b97db786599dc7d2a42b022695ed7ccaa9cb89005aa3d000f4e5dbda4385dc535bf0835040d16bba8b954deec94860fa66038fa82ae32356482d3fd1f0aceb290d9b05f72df07336d86775c71d887d010001 \\xe42ac66ab7c8ddf45a726d9b5bc6f131aafa2e3ec46f68af6f5fb9a4945c322a929ad3f2a8212f93e0ece561e76086eb7058c5c4bdded57dac049b4919fb1006 1641379407000000 1641984207000000 1705056207000000 1799664207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-290 \\x979eb71d6bd24e30cf65ee5736317865cc81c9fb2a19155951ccba2a6f7bff3f3440c8dfc5df7451f9c7e38e5e2449680abebe7ceceafee0bdabffe903def43e 1 0 \\x000000010000000000800003ec6d703c4a7487dc153d2252a23e367eb8c4354e8cf7841fecc5c36a2eac6648ad13f1635d5df84ec7032a7d06ccb012aa83c4f7ffcbc4f8dcd457d269cd6d77aa8cad2446be1d724fe61f4719bf63973d660b25e3e4bb6bfa6581e71c15acbc51475663b8a0ea3bf8a82d4382dfa5ada405a81ad0d697ddccf01ad4d11f241f010001 \\x6ef4aae8e7df5f4bddf226e0cfd4275134a3a4d6c4f983497f87063d08d0966650294efee3889049308599f1b62c79957ba71e2ecc1d3d8ff1ec5a34e938da06 1654073907000000 1654678707000000 1717750707000000 1812358707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-291 \\x9a929d4069ffe77be2334a11a2636be5eb5a294c1dd2593d5f954167a2d4af77c731fc58f9f10a2f6e71a6f879737ba3759b0f4acf3ad21ea0a9c5c7cec9fb40 1 0 \\x000000010000000000800003fca58e23b5e5272aba5c5a7e2f1dfcaf81aad9193c79fe50ee2cd48a06738af5f5c0a7768a2d775602419ff27652cb9f6196e518da9e85793519c4a40fc8ec45ea93905ce7fe7300aa8264661f60f96ed9187e8961bc9f850d93af5e0b00ecd3dc26571ee4fd9dd6737ab329876eea8c3676adaaa062f9ecb2c4541a9b7b210b010001 \\x456a7e65b54baedaa895b7838297eb2ac3e88cf25b22e23bd71409358aff71ed7786ea2e403b1127228da036e4bbe4078c45ef23de1b48d8641c74e6b66d3603 1657096407000000 1657701207000000 1720773207000000 1815381207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-292 \\x9b764ae50d05b10007961d5f0df545bcb5f326ef245aa7b7cb015b88a07c76185c7b5a669979e4df3ebeb1c46f76ba19a1ecee7f498f5e97774062a4f658b3cb 1 0 \\x000000010000000000800003a021627ec974533f8fb88e8f40d59c024f81c95ea80a5cf9e38816d00b789206db41b5fa86be62f7ae8356b648a03b21100ab9c30aea932e816cc74a2a4fd44db3596e2a658e50aff0b35194339d61ec2f71aad1fcea205c8e2019b75b4cb0d358d17136afc21c7b3aff637ca149c52d42df51055a9e100fb20ea52c0039b835010001 \\xeb08b7b5480f7f5462c2b0ae557ca41933d6281bb2a63e6eae12ce7115974e51d7e251355a69b16674d6394524ce59076184180072c4ccf5459526deed8dcd0a 1641379407000000 1641984207000000 1705056207000000 1799664207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-293 \\x9b2205e2db384d02f28550d3506c3a96194e8a56318e23792522966591519051a3982ba958ed340cd5abf5c148f3870a9b4b960b0605e3df1192e473f8baf412 1 0 \\x000000010000000000800003c4288e0554713ad30711d87ef45f45222fb98db467bb369672f8ef42dca060d98c38b5c9942afd0ccde98a51eec8311e40b97aa96c004795faa913b414630f133a216608644c1ec5f944ef1be98b40b5cd18f7bd79dd3e757eebc569bd78cd6981f8570361d8b17d14175c17bbfdba4edd2f928122ef21addd34fac930ff6245010001 \\x1a46fbd5083745684c211af1e581bca65b5d30e54b626188edaea6e660c8b9f9d60926720313e95f0e98f161efc364e52f5822fba3eae4da1b33cee760a2e904 1666768407000000 1667373207000000 1730445207000000 1825053207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-294 \\x9d22954fc3104061aa1caabb09a2a73679e448c9f16fe96604421338fb6b8be64caf6bdec3f2a341a2b81d16c62d0d16a313dedf31f99918600801348dd34292 1 0 \\x000000010000000000800003b95ad0ca87c15f1efd9799ae5474fb89a98fc083075934344aea35817a8be44d5d2db70b9aa11163e27d8c78089b3e4e51324fe4cb8ee71f89a4cabcd5913d3d941a1f6f5f34da8c997b6bf1a0c2bb7e5547834d6422e52e34fcbf7456f8daba42319b3564fb9b9dbaa3549fd2b7c22a7610e5cfffc9d156c079ebae925764e9010001 \\x5f4fedf65afd3e4de4dae56bb864106af40a28abb9f34a7024a946ec317324a6c23a0996c0df4f576272f8398ee705965e59ca43e4bfab52ec8d1c40c2ce350e 1641983907000000 1642588707000000 1705660707000000 1800268707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-295 \\xa022b210850abba1d3b76113806381bb54855338c5f62107877042075d92623c777a9215fefaab764962be17af32c29bc4f3e2010d38bfda2620d942dcc96686 1 0 \\x000000010000000000800003c68eff8c38dc6d7dc6a7752daf5bf5c9bb0e014c49168c17dce61d0465104d7d0160a39cf1fef9dbf8d19bfecb5cf1569b373c7493318fb717912a1f6a35bea03ba8406599374a91c426b7d09e7cb9a0b0466c1bcd2e6304770f1f113c9918f1c3b97f5c6d8d360770570d75b6a70b4c2b024233219b52cc3235aeefbf50868f010001 \\x767f2162dbf003d8caf72898d06a8277e7786815b7e0b2c8a01a086e76bbdac6d05a52106312027db74338711f21ee5cc974377da9f5e99735d5a6695052f500 1641983907000000 1642588707000000 1705660707000000 1800268707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-296 \\xa16e43842fbb2e1c63e4d5ee28c03b6a43c17d89787121a41773650c5ef0ab328682c5ac5051842a3af87605dc3db4298a4f91b1d414774e50a378aa99e4c7b8 1 0 \\x000000010000000000800003a51b5f98e2004fa23e4a33e1261e8204f202dfa0294edaa9ee7199408fc4ef54bbfc83d2a0b4e80fc33fc5174380959677d0c5ca0dca54a1e656fe316859a779f89178fcd781ac04ca51d965a58d84679eb5302547762e0f4cec0382c578888e0fbfc3689fca50599f55e33bde3d4997517522a1e134959a3af7f1363e814607010001 \\x61899ded2e8a18cb0816d5b02b6dbd43652119a207885c1d4656fea528fc44fef71050a322795daa1699317526a9dfadf86e22b208789d3d75b80e06acc73000 1645006407000000 1645611207000000 1708683207000000 1803291207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-297 \\xa2c6170a13d4bdd2b33b261a2589afcff909ca35ef1d286fc174046bbd4ef50efcf0aaf7e11fdaffc76520ac3429e863567443251a3df5358ce47780059251ac 1 0 \\x000000010000000000800003b3c0da469b0bc96f64b1f0ecdf37677ccbd94f11b7f3a182a802445d0bfcb1ad6ec7a27a2d7752b45a40c73c190514ec5ce95748adfd219ea1cffbc795c60384accb1f5623b0bb0d3fd11ce628fa5640d169669fef4eb04f46c6132706eac21717804f34e5e2cb61085365ce48c96b1ae3f51036c7ad0fb527533f352c1f8ac5010001 \\x93c79c5a545ad37c5d80f69d311a4eb1ad5ad409ab2597ea19ccf8d829a359992e7c93a0d41854ba678ac65b541c01d2c96a23232ec43d29dc1e5636bfcb6f0a 1663745907000000 1664350707000000 1727422707000000 1822030707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-298 \\xa3be61b60a777b81d434f388f84f281d1fbacd8fe044fc36cff7ed4a4c601289fa0186a00d2ce05a08dc52efcf22453db8c8519feeb4e8d7b49be51e4626a27c 1 0 \\x000000010000000000800003d3f2af00f1f8cbd3eccfc078f31d865fc7b234fae6ca1b9f6936ed66b4935986a459ecf9f0ef5454338f22acbfa5f86033c131ed73a1794096af1cda0548575b07d1ed7992a7fb04a95e35dce9d367464431ac6b10234caa933405feaa41fb94e4722d574f73cf0d0ab0f9a5d0307f86c47c01871420344e920d68ec7e687049010001 \\xf57aba962f5f5f02444b4d6704e8a3d4db794aab5b149f1bea61fab49c347377001e9ad559a959ab89af0fb82dd5be2633878b10415e1611c2eba7b38ff87007 1646819907000000 1647424707000000 1710496707000000 1805104707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-299 \\xa5e2841f476f3e97ca8b45e959d0e7312d88da504d0cdf47e731d216bb1302dd370e0231bb96175e57d2a8af2f3d58ce944e269fb7119273b7599c02c8d4b24f 1 0 \\x000000010000000000800003b3a4f02da25eaa9ea7736cb014096eb223e9c259a73e716c712d09b2b82409683563c0d50f3aa733dd8be583402a449a9b9783cbc4a7355c2dcfc5d5c6ae3ce00c95c0c7a4238e949897013526f2f1d410643d1b96b76a3ba98e8e98641c3ce9de6dc1e9c7dea94ce73031299fe33f1f6d5109ac12bcd4134cde9c75e03ceb67010001 \\xa7a3eb7446d8320cd64291b668f1b12f7c76b3adf794895043dee0f81809309f46aad09c429e0ecb91c503793e8a928d5e577eee60d0d8c25912e73d2ecf220d 1666768407000000 1667373207000000 1730445207000000 1825053207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-300 \\xa7be193ebfe07faaa3aa7fd3806f82386101413e1a38ef6dc520bf5b0c631831a291148b7e6f9589bece7ab54a2aa6c3c1eda3b376798239ae4c643a8fa06629 1 0 \\x0000000100000000008000039ffee1c5c8614103c6d43bd51698080ec86dc8bb5d53dd550684965304c2e6313d69b31db5e74f072720f1deb01ef6dd6ccb4c6b34d393e392b810be622ea9b7c7aa3ff009cecc41e61b11c3e752764f0f4a1ac751125ee12f7bd80c1fbc3a3b5319a04024cc488f643217e74d14b402b54aea17b04001a831f58e8edc942cc3010001 \\x4d91eeddc8c48a96049fc14ed9c04a7b51d243be942d9bef0578e3fc647df58f0b79e076a7d65a98f4865dda046482f301f21db7a4c1ae4275f7defdfdd13f08 1643797407000000 1644402207000000 1707474207000000 1802082207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-301 \\xa82663324569f4e695737646b49f096ddbce80b11639b5cdfa90a7beca2798c89e98f8876c4d01c7d47da5106ec14bc74282ceffeb06fdf63ec1e7006d145c1a 1 0 \\x000000010000000000800003c0f07e97a797ceec713dfd1d38d40f123dbf82bc7c2de7197e395c7b194b2ac1ea1e751f57a65806eb87cc1493dd4d51f57e5e2202f317d148f3fdc690187d084f88f7151d6bb6ed273049dbf056734cef0acc6902a41b924dad0e58b56d7251c8306434c4c07448b4713794948d5d974bc749de15cb9da865ee17dd3db296d1010001 \\x252e195f8f06054ac438ae20cd05f9e0ffdbead96081375767e0d6baf329dbe68e9059cee752783fbd87730ed452f438fc2d99aff4b490b15f9806158e341905 1651655907000000 1652260707000000 1715332707000000 1809940707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-302 \\xabaaa3d90610973f03d08f044aa377791642eac7cd8252d3f27c49147b156b581a732134528acbb3c2938eb8ecfbe438e5644172e62ea7837aca07b67c7377f2 1 0 \\x000000010000000000800003d795c2b021c6d6e33a1fae3e015a3c29c24a59e2212c5479648cc1fa467e50d2f49b3554844c1c5c0121baa785b52293a61217d136ebf7efa59ca915d871f32ad05fd4ee6f9d36dc908ca49d166dee23a97201c5a5f0658c51be9d5515abc9b695d642511f3e914493dcd8bd4e4daa0b7fc37d3d6bf957a072e853b9f369c717010001 \\x64a1a1c64cdf103a9fb6c7fcfb24ea75e348096d9fdc3a6e64606bf0ee8cf74eb476c06be8bb8a19c42b8033ca4a685f40c6c2c964010140dc3b14ceed1df705 1643797407000000 1644402207000000 1707474207000000 1802082207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-303 \\xab86b5314f48d4093d0d0e18d4919df1227ae2cefd60f1ad3b8e8e8b96494c36ff253911425bece27f696880921c848426b265aebbc155761bd1b1c7c9001876 1 0 \\x000000010000000000800003ce1f6a1d65cc5eda56798c8da166ad382dc85dac9864ea0b599839f16c4ab64d0f6ca3e4f8291f7e5af27617e8326edfdd3e00d6bf5abc230738783f7f460efdcdfe54cbb4fbd4aa0e340e9719113c08cc0d6c6b2614e4d5d2be5ec6f53ddda9b3423bf4e2da8eca8c7c2418f8bfcc825a58e445f7bd85134c1874a5913a2ed9010001 \\xbf7c510d57a9d62eadbcdb8d2b050e2543c68f7f6cd5cf391aa6f66942273ba7813dce0211978283874c58aae05907e6a27d40216be01a05a59a7b3801581b02 1646819907000000 1647424707000000 1710496707000000 1805104707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-304 \\xaed66316c2884faeb668a738d6548656c48a9c27a4389737d5baa892a92238cbea0b2ba7ef58ab28786d3531021fb50ab33fbb90ecca96de3793c267c113bfed 1 0 \\x000000010000000000800003bd73445aaecdf7c30f8c70637bccdf9619a1b8e5869ba7a6b175d61cc0e9877f60a226dafc52062188e2a50de85345a3d68d7d70387013b773d2c52f19970a773447dc8a416e16a261ee86359f0ea9a292437393ed25885a6e9714ab9f837d6c8265b8edeae8841f0c4c4e61027c11837a3d8ab1733288db9d669aed26dfce8d010001 \\xfdad83f9335b7f27dea3ec67ff8aaa07afd706f1db2a78e44b092c1d7b0cbe251da1d0ab8c8fc50507132bb7639b1c65c3e29bef1a8ab501b7051a9cfaea1d0d 1638961407000000 1639566207000000 1702638207000000 1797246207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-305 \\xb01afd642f205936fda19d5f85c025c7d653a74120868e7569604bbb18015a37e584e894bcdb3d26a15718c3384e18fa0d5d0cf4c06c6f888e68bb44b5aa78af 1 0 \\x000000010000000000800003b96f1b5b2002398ecf8d1d37b3aa1c50a5850ff4d04d8456dc63a6d3dcaddf8c8819533517e2c5846a43c7a4610b86f31cf6398b3f20e4f955e1972604e347164c55cbeaf96f42e874015630d38b471c879429bf698ad86a8e6d85a119aff230650be0507f6b209933a49764b99c80e5a8b49ecc78494d293e4de93a40872721010001 \\xd31fc610c723fbc1350e3f458321ccb1ad7db313181294cadcdd666a49fbc0d5b74599249dcdff6061494250fa03c930220455112506ada20f752f2bafde140a 1658909907000000 1659514707000000 1722586707000000 1817194707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-306 \\xb6225e46442f6f48d0fb16abbc60401811ea8078a7128e8dadfe3f0a2adabc51e409f5b0402194d94ceb4e553b780894db3c6495b2283c8d2b9402aa80d8d40e 1 0 \\x000000010000000000800003c9237c6379e9f3cbb5b19753a91543d68c447bdbf58ea2557f7635a72e03f974acbc9a114b18dd2d2006621b645450c1e1f1e77922ea5735499b9facaad18b5ab863ab8f8ef01dca28098bf5b6abe101317cb7d364b370358d76ea28862d479ee8773ea5adc020b0cdb4e1f77d2689927ad1e41653b2b5a3d8ee31c0876cea71010001 \\x69d44bec859250dbe5c0aa7ad6e6187ed011730d93efbf6de87bc17f81696d0742b7b2d45b892db7e8fc081e470c21ff8444783f0be865361c9ccebad5edcc0b 1656491907000000 1657096707000000 1720168707000000 1814776707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-307 \\xb7ae799376ddc239663724559c80638d3a44d80698404182ce249db9ddb829a198fc573cda53c87e9bd4397c4e6a6a30fde176786ee2865614c7820b8f4f5484 1 0 \\x000000010000000000800003f9ba475c33c3729300014da1e0bacef37b899086fe6240185bbbf69080014aae42aace3b58ac892110b6071c2b786899b42da2e3e9d0f992e82c6c28d408f16f8281de88ba2bd2fe2f1354dec4ecfaa8323bcbb02f436cbaa8e23705cccc893396e15e439e484afb9ca7185c928424322faaafe8309935647617b14ff4ff94dd010001 \\x26586cd234c77230dad1c67398c11a9256a71b22ff37066d8d38f61f69641969708e1cfc93248e0a02cee4d46f61b88b4b6d4a77bc0dab380f1529c5ee57650f 1663141407000000 1663746207000000 1726818207000000 1821426207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-308 \\xbfdea5a013ae3dc1227dc7112867f8ecf02a03455b8969ca327aa91e9f3aefb582e56ba11a1894bd04140d44fc2b7a2ba4bb1608c10cca768010f60859c2bb85 1 0 \\x000000010000000000800003f1fe4bf2dd1d9174656736d503525eb776b9f021bdc330224da3b4867a1b89bda9688a71fe57b6529c3694d272b450814f366992d0ef4c78798fefe7e2e9e6d360c05a410e1636ee6a5fe65a22004e713a6be7c8cac62e23cee9829107f0db2dd81687e04c8c6552abff23d93c1c5e48340f5a0649c9d2af628b830ce4dd0385010001 \\x0666dbd75077420191188271e03cfe703b0c18a71b2b4e858355b4c726ec4a85736950747565830ffc832f6c6eb5ecd340fe92e560594512973f1fc5fe854a04 1641379407000000 1641984207000000 1705056207000000 1799664207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-309 \\xc27a73aebd183ddd4ae35ad86c031a7c9bd47d89f604d0296b5f585a26782d0a8e5a6f70893e63ddce7ad8d44cf29093817bd7358f1898a8335f96f47b7200b4 1 0 \\x000000010000000000800003f1d8ef2298b3edec5213bc9911358b68027fa42d0ae8a44d42dde711583847d49e8f133452f73659129c6ddb25d24a595ab2c350e5eeb5255c56c69a238ba23c00cfd9b0759d60e860e38e20001d7b101924659d820b49f9c9683e7eb852a0706c6f67a06f0de00f4eece73ee615fd5d4ac0ae7c97df0c841d06b5ffbd43e6b5010001 \\x40ba8fefb1789bda9f8d26423fdd6ebd7474e2379d82fe656a3335bea4981c7685f569521f8b4e450921da52c822fc766217723bb73573f4d323916ddb06760f 1651655907000000 1652260707000000 1715332707000000 1809940707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-310 \\xd46a3b2e7b267a74ba93349f7cfe7d2938aae718c7f315d6d603c4ee8dc22e1d352520e7d903b10e40f6ebb93e970201f03c64ca5e1b164257d3d986c1da3205 1 0 \\x000000010000000000800003d8f3afb61545dc5f5de2de8da572c847e0f37c38b4762f732c38645e586f9f7838c475d83c896e5838e179a6458f6da1ae82f920eab12c37377ea96bdcbd3d18a676892112ac037452b9815aabe469fa5d70f5622cd79ad351f853a82910ebcd572d0aea09a6454ed2867d64f9fb44f0f6a11c5a19b2b7e0e47d7dfc949f1947010001 \\x04251f891e2d3530893a90f0f677cad4e21c974ca48439141e547e820b9c145d64e894a0d29a3f4671c028700cbb8931d869f040cc33f1bf853967c7275e510d 1661327907000000 1661932707000000 1725004707000000 1819612707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-311 \\xd6c21a1c7657bd62bf3f7752ca42ed93b478b5ef27edef6fd08470b8fea5f5a94967b91e21d2e5ba4b60d29b1737a46d52050eee2438faa72893a0c8882d372c 1 0 \\x000000010000000000800003be952a850a980c643c5a9dbc07cdf91be8d307d20ecd1c0f3706c959ec79389ee68f13dff57371f008ef7ca77e55a434a7b42aa6171fd7f24272474ebf42eb562905c9f1130c9d1e25b6b018cac312cc336eeedb2bb7d5631cf1ff13da94981439727ff9777ff943b0445c05c8ca7b59d9395d73fcbad23586612b43c24e9a5f010001 \\xff33be25297ece301acef463b52959b8d4c0a496e7d001f087b919e62c0bc9696c9ac29ecdef66cdc1d20b3d8ad99d854915be4ea75ed213566b833e0003bf0d 1656491907000000 1657096707000000 1720168707000000 1814776707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-312 \\xd836872887abcab14e4212a8092034daba1206f4e07d7a42b8f5e18e61ef8582b8488de4910da7775561d688c6859bbc17dbe3c7529967d90979f35c703f699b 1 0 \\x000000010000000000800003bd8266b1a940d4cf4b1125a705193f78ab9821c9fa59b0ad5f9264eb1f6ec5681c665a7681487c295475cf83b801ce249ee59271e0d8d3776938e5465008213b5f1f38300864b938de4a145411c92ae47a84029ebb0b3f84b1f454ad64439cd42d77aeabe37ed3adc7dd6f3234ac68ee74ae8da8916bbe8f4e6e0d8d5de36229010001 \\x33fd251c9e0bcfd39d7ebae6a65ef5dca0613befb805c8c3a021f71c4a910e4f33fe01b6096443939dad1c7a2cccdb3ed87bcd48b365eb40a622392ce8b8f400 1641379407000000 1641984207000000 1705056207000000 1799664207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-313 \\xd98a8e32c2cb21e9527dbb2406a40d554e20bf42800639168a06fc1cd42fe2481b3e1c0a73eb94b0e98cf263eec4c2a4884b79bc899cda5aa4d2dc1f4a4200ef 1 0 \\x000000010000000000800003e4a7bb0d0ae9772ada6a60eb5466e9b8c28890294c4cfc7c85436e708532b892fa7b0dbdd7b37ad82eb82476cc2d08e1923f0ae0913e44af619c07f71f8f9a374c66fad69e77db93bbe2cef2285bac32bd4fd6a8dfaf546d7a700907480775a1bdd241ace99dcf2037eda6dd86f55741d53e3663beba0f31d38d0ac83900d98b010001 \\xd353196fde4c55be1e13cc33c1e9b989c3618d320d10064b1124dd4d0e4af3d780e7e7b8c993956bc3e7f55a8a661fab102853965bb3c5bd9433e0772e269e0e 1657700907000000 1658305707000000 1721377707000000 1815985707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-314 \\xda92d80d1d6767ac7e2fa797c5bc22fcb16a1fdb453e5aeaa4b30afa82c5a9a98a90362cf41f4d2cc90a708c5549e6d69e54b438184de158ef6a100530b9ddf5 1 0 \\x000000010000000000800003add680889d9c291a9fdaf0504020d7cbb445fd627dfd3380a33349c2e84a20f1828167964cba0a4ee14be6f3adae9ca2446a0f3eda06c719dfcb5a42a04758bc49cef6569f88cb5610620d5d2df980c5fcb6757a2d199aae761098ede7c7a1ac84bc04b5f5f4b8b96a40d647cbdd0f00b4aa7f3fb868125e998fe4a2af049d4d010001 \\xd23c1b65eaa5cec4401eddbcdea6f9e302bfaa09b1ac2955475da1bc3584af1612652fb316f2e5379a166f119c7495695eb1149e802b8c56c7e73acbc3ae920e 1664350407000000 1664955207000000 1728027207000000 1822635207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-315 \\xdbd2062752e7f86e94d708ac5c59b7fa1fadf386e41273bcd91a6d753f7f25dcfb97fdbf1c58418f655acd3e668ffabc32b521fcfa02b5013c9d95f68e044f0c 1 0 \\x0000000100000000008000039a78c4c3feb0bac36287a0ecb7b7976d71bfdd4a1d8e9329606749b97f509318b88fa8f321dce4395adbae0ad207130bf02fe2b4d47485a00f62d3543abe118eaa265e946aa0d6e1c1d3d468afff46ba6ed0b083a5dacd70506958d1910b3834fb5a23bbf1c505730f374246420d513361ce43ed93399664e8e1630a4bc19341010001 \\xa19fb9ae0640a54d8740c8b51700ae1b1df46a01b6635df54f8fd68a1bdf4ed99430b073f7136c1754934b67534fac2550f9ffa1f03598f595296afbb6a1050c 1658305407000000 1658910207000000 1721982207000000 1816590207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-316 \\xe5ba282a317c7462906cc4d632e54a8c4e03295e0594ed23e3568fd8af9377b446ddb11a1ed73eefcac47844d793289a86b1817cb7087716375c00a79f6e9dfa 1 0 \\x000000010000000000800003a3da3cb31f0b433355c5bbd6b75b485fef822f28ce99bb10fc77a645e372eb87c5eca30b3b823073772a4c995e7febc0f86f2b12b303e0b476a3e9a90806758db9fa9b4ab4d9cfc729dbedb89b3496457f0e884890b9ac3ece0d5e3dca882edd6d158b4a8c95f5b6089441ed880272512516836b917d0dfb5f4544f790d09481010001 \\xf1bddb042da83d6dc4d478d182a0e18d623b8e72adb13518238eff9261f8eaa28e7cabd85a118a6d9cc22c264157e2108db9903626f0d4dc680155756231ae03 1651051407000000 1651656207000000 1714728207000000 1809336207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-317 \\xe68e495779046abe8bbe024614f01f90a304be5a2bc2281ba3c66148571a69c8ff6a3de56603cfd7243fbc0ed00fe7f018740c0c1ac95750f600b49e77f443e3 1 0 \\x000000010000000000800003b752fbffc7bd758efa5f214c41de9b705a44cf33c2c26cf0bbddb4c2b6f9cd722d85d38333dc4a51c962428e04f7a9cd11ceb1d91d1f483a4eae59a2a35b182678b8730184bae739d8257b5b8ccf00eacfaeda5135d2f4073039d4a440123fef07665d2dcbfc5a02708bc4826032795871c25e16a841d3af6c629c612c1e6601010001 \\xe250c8dc357672fb68f8dd63157dbe92f17fd447b049e5599593e06f00f407968df45fa75325f8c959be59728cbd6ad87efe60cc2bca8dbf638617be26d20900 1648028907000000 1648633707000000 1711705707000000 1806313707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-318 \\xe67ea8cbeb4ffd01c033233b9f874ff07fb774a1c314f23b9d0459988fc05ed374528d00f0db57fadb4e1bbf56cbf8597397e85eddecda3e5d93015130cec2c1 1 0 \\x000000010000000000800003c95d7a0112d3192f7c39bf87cde32aa7cec6486404036a7b23de3abfbe0dbc6c8cabae4d6d186053ca829f103685be3765fbe26c2e9acab27d41edb522691f68c7dfc3b665a58e1dcdfcca26068d9670e63703cf72016a0c18adf84350fda9f1e5c03eaa1053822ce2b31508930b093741045b347fc5d7b9227947acdbc050fd010001 \\xec04a11f0b5aa505558416b2deeb08e50888fc2f867d01da0f62788677b12c72fa7d5d9f24a8664aef33b582cc215b53f95cca9b1164bdd6d143c434d3d01f0c 1655887407000000 1656492207000000 1719564207000000 1814172207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-319 \\xe81a30b85ae51e920567f998cc19e41e08c9b1e278159461bb19e19613f8fd844b1c5f9d745c73853e341bdef63fc0ecdd2fde8a9aa753e83092febf3a5140e5 1 0 \\x000000010000000000800003b56aaae28f33a6644c067c862d9df384036c433aa7ae45b2f033df26ecd5fbd935bb8c8c3cdd8bd1b287962958b89760334f8171c12a450ceb41c263d854425812a0296fd5393dc82f29b4851b1b8f655650713ac354f6eb00de369439439d357a60a631e3857717b665d5882b78fca02ff5804b75e7edd3fccaa90497147a09010001 \\xbcd362f7d7a17c30cfbd9ab8f368807a184d3df230dadea1fb74cd707d2754c439d630eaf7bc94b71dbd9a5245c0475b35266dc1a087791a9e9cfbc122294605 1654678407000000 1655283207000000 1718355207000000 1812963207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-320 \\xe9ae5f15404d249c1ad6a5d35755a7a0cfb1d362ff5398b801e9c4fbe1263c73862712c6c2577affccddcc90185ecf9c350865301667a2e3a6200529f7097af1 1 0 \\x000000010000000000800003e14278085a33b4ef86f3310d94cde6f91d08cf50867e86009c2032f7b901fe463904e247152973623b3855cf2bb4886dbba4a6ece5041d1e378f64b0f2207ca46f37e19039918c9efddfe85c6773fc3ef15f5f7c82c2c9f6ab622cc3dfb722b19c37238ce9118fe927a584026900b755f280ec60b4492726cd65e7208c14660f010001 \\x29844509c3f55a38a164ab0679c25a6e3ff6f5433f97974e65525ee5a792848095673b47b9c37262b4a660c0481db05f9eb1bfe4e37b4a054d795d18a4df610e 1652260407000000 1652865207000000 1715937207000000 1810545207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-321 \\xe9ea06d70ad5ccaf8ff149b1e2816106b37ddf7dc7df4ccc0fa9cf780f5b4ae251fac2c0ed9ced83b77a70f62b95924fafa6cb2ff2723b796729ae9de0a9f5e0 1 0 \\x000000010000000000800003b8a88ef092f51d034d7506e1acfd097e03ca196475bfa20e1e89565bbe5d5c12cefa639436b93640ebccb191ae8cec76c01a1454c393fc40d452c202822b00d3831c643e3aa68b7d20d1bdbadc115be25bbc74b9560af2514fd7ad4a51ff38e176a2d1e4f1c81bce9541f4d45a3dca5800b7e1620667e73909bc1af0d894136d010001 \\xd1d3815dc9f17f95c08a877709d8cdefef24cbb54fdd7f1244751e2e8353f8723cf138f085cbc0686d5c166d2fc65e35cf0fc3e33da65b70b476d7c3cca8d405 1643797407000000 1644402207000000 1707474207000000 1802082207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-322 \\xec6a29b0ef850d2e4c0a764f06a4f580b2822308f02f401e14b0f89c05e17e363d84f5e99b2ea136c8acddc9f27344728957d9ee5c260dc0d8979fcf4e3776a6 1 0 \\x000000010000000000800003c10867de74e267cf7d7b797a63511f4c93bd498b3bb2a6113bc824294f55969ff1064255ed74bcf5c92ab85ac9cc773541066d502d3958b9d736f1656edc8824de89cc2f6494a7dd87bd38a14cba006f4e261b17eda653afc25c209be4962b75e5557bb0bb918689a6b1d8b29010f7e1064c0fba68a643efda9c16ce367a1a31010001 \\x365b50876c374f92363fd2400b10a7decb9bc1ec7a974fcd9886ea75fbaa4c826de2f46f9bf0b3cc738aa4dfea1012a2b983c445d133ec2e14afd1f1d3ab330c 1648028907000000 1648633707000000 1711705707000000 1806313707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-323 \\xf002d164f28e9bd4ebcbd34c4288149fa7b5507ea2f13bb7d198afd1c666b8d9ed262ff0280103f07361002db4433fa4166e3b0bc91be5fa38903d4941b0d80b 1 0 \\x000000010000000000800003a9393898a097cb98b669e875713800b33d85cd504fb76d374bfb3a2acfde2de8f44be763572a738831eeb6fe85a5540ec6146d5b94bf371822fd51649b933a66bcff158b494fed67490bd33295af8025830488742b5b4ac62016bd784d62eaef9fb6bf875d0de70bae530896df9bb0d00d8414d725f32091faca7d64bb311c73010001 \\xaa4b4799f481146b6fc399c4cb5d43775245bce19c195f839dae10f0ee51580526859c66b49ce43e4d058645ef720e3c3f07e3067b92a6d7805c634918880d0d 1644401907000000 1645006707000000 1708078707000000 1802686707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-324 \\xf52222ae43288189567ae797b0de7fc4dc84bdc03b6d22d01e2d1ca4a3c512960141d5d7fff97b4bb1b598a0c5f92a93caa3399b8f6eead2a11ba18ace7c1e1b 1 0 \\x000000010000000000800003b857f47e4e6a898acc5aaf2377f8312d8f33eb775f363fe8377175b180d0d8e44eec9c21c3f6843e28d6760cf90670f1ddc5af9850067924d5fac5416da50cd6e36eb23962e24a9f072ff3ca200fe7fa4fd66ece1cedb21b8c4f3f098ba7da8a78a9a74136c35b13aaa299982353651a0ce8f8ff2d27c01186a3476b6b2a170d010001 \\x5b9575413d1a3257734e9d378808a3a515029cf8702643648cd4feef56aad93f27f175793a552ec55fa0acae9e2028a5683ae7133927912440f01153cc41560d 1657096407000000 1657701207000000 1720773207000000 1815381207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-325 \\xf78a87da59938fd0cfa083fc9c72f5b2e72fe9351614c470fbad019a5b8cee8847f932b50011f8eb6205ac8ef2a66df046ca101d284bedc3666298a2fcc8fa60 1 0 \\x000000010000000000800003cd30a55d53f168623a75b86da1e566035817aa59f5caf89dd3b853e00d6b3d112fa865b072db9724aeaa389c13fb25c5359abdb80c1ec1f4a1edb27c6c6fcb0fcb5a48f3b78b224a96bf786cfa82d2cac1dab6ccf8e54dfec271fc07f686af225e2e5ba0495531f279925313512d1a2969e19eb6ec0c98264aea95fd00b9e199010001 \\xa5d4277482db7c1b60915e14bc850c85fb498dd9a3f1e431528c7c5076afeed52e872d2b59e1906a19e3caa5f30b56fd4b4bd97969e8be2c982a86fb6605bc02 1664954907000000 1665559707000000 1728631707000000 1823239707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-326 \\x042b647cfcbcfaf49db835ef425ff71afbdfce69e40c087b80e230c13e17cbf87faf954d6829ffd2fcbb8154122491e4fee8bca4fd6a2b92f91850b98ecab691 1 0 \\x000000010000000000800003b384a1f28fda558724365a03cfe6fcc048c2e80e795b5309818b528ad0092a40e4cfbff34f79b564b11fe323ce3c3ee400d9924bb2fc4babc77db953c36a3910b197e4b6935516a5566488ba71ad8cb3fa0cfde08276feff87b19b3c133ebaab600d2550a818754874341f6f53e89bba18434503718e8d49bd9641dff496a999010001 \\xe812ad28bcb7e0ff2c4c13d1694fe84f9c6034407e79518e671166471eb478ed19c3ae4f959d228a372f16a9759c4415c98f8518b8cf8d69a0c044d21049b30e 1643192907000000 1643797707000000 1706869707000000 1801477707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-327 \\x07af67ce08a4791a14fb875027e49a97760eec542e8730a5d050edfa6d6e13a9399b42e31a3e230938620fff41c2a295a7661fa9498ff8b9a48e16117b72c5f8 1 0 \\x000000010000000000800003c8ab8f65afac43df2d488e420935ad0ebd56959de6f83a73379397e25c159fd3d2eec9727fe50dd1c8065eae74ef3a11ae331bada3afc996b2b965e6e2840c232f4a55cd1025e81a238c9b267899852e12d7cd3df2817eb460753c679eccc5d0448d87a930303ef5fbf657288b2e8af81be25c2578815196084df0c2f871a1a3010001 \\x0faa78e9a3c8870222b6c9e055806aab4b7e1f54001b070e07f0fe0c634b80c29dad9bbc1bc8fc150c3c618db926890479425feb74bdacc01448b3178b6b1d0f 1655887407000000 1656492207000000 1719564207000000 1814172207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-328 \\x0abfc5db0a177a2172f0f8e733b216d7a386fb73036ac2ae164960e891c95efdf66f96959f458f826e3e286ede33b48cca4139d060cf7d75b1e07a348863830e 1 0 \\x000000010000000000800003cba50080bdd973411436cee48e02552d69ed48700096e13d197adeb0af292e3257d1228e2fe58a0fca5fba3acc0db7aa09f02a93e62c8108806853f5af5956936789d8a1a08f79553eccf90e617f731a3bc3aa49ed34bf9fc8ee79696d9838fd18743e1c96b4fc57b32df3d4501597e0297230f76565263765a3d7f480232311010001 \\x8f2eda414c06ce3b429b0b49854ff8c4d4b0b211066d06045d4bc32567ce5d92a03a0408adf148e77964911e2a721d3257a9f6b190e0a75567d6504422ae360f 1658305407000000 1658910207000000 1721982207000000 1816590207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-329 \\x0ed30b0ba082b9a32a43c2ff1892b3f3b13c8f6a3ad13353c86541635956f14e0dba290c21e7be7511cc37d4ef19643a5c93c41ca5d22c3b7e2c216197bf18d2 1 0 \\x0000000100000000008000039c311f5ac5dfb9ba0eeb84d5e732d5e34aac75b8bb2ad50c921ef825434f5679096595529020d400f9d58b9b55e94e3f357b8bc3d53d344f4268b6bafb1cfb8cb866c71262f8ee253e4c98d64da929d4d86eec23fa2db98c9f931b3d583daab415965a55c34c7c74905915a186a33b0e50a42dcecec7302862e415344375288f010001 \\x42b1119ba4f716627542cf8db80361364b559fa3b79d23207c26a1e5d75dd563b2bc486c90409453841abf18e290e04ff04d32d5ee52174933b64894f297dd04 1660723407000000 1661328207000000 1724400207000000 1819008207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-330 \\x1bc34b1f8140adaaa6909ada12a65205fe401fbd3be39fba59e5e7c1465de2aa7702cb2dcaa8f7ec9a0d2e31d757dc520484d88345c480061a32d04d4bb82c78 1 0 \\x000000010000000000800003a9fdc3fe1b313ac8556cbfd9f31145ef59fe07c9d80d0a66842fdd9370479c51287d8805665a7672a593be255be8bc81d1015a8837ca608b95d84d1958c40e73c96f2406fa5f7543777af4d95f379cd7fcee80496a235b97935d8d1fc357c8b5d05d6b28eeb36ccbec2f3e03a4980ce46b148771e8eac91cc6255f23330f9fc7010001 \\x39a2496bf087053677d9aa81f8042c8170585e1127eb5ebf2cf200f4ad5e950525dde4542e636a5030f6d39caaf9f58920e3924bf5bd704abf4dc601842dab05 1652260407000000 1652865207000000 1715937207000000 1810545207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-331 \\x1b4f0ec9000481a4fecbe0c5025da85add4b6944b24af88a2512c7daf58777095aa534cf27f9c9d7a9357e5c58d04e421ce81cc32dd57319a6e94c85c117d7f8 1 0 \\x000000010000000000800003e00a929d376e13d1ec72ff13a6ff0a8bf86c6b28f6ecca5c027fb30fa60bd832a3276c6c37ec9f97a4c52106115cccc64033116f870501e6892fbe61035b1ad75785008eff6e0b4b08cd4035c4330dbbec8875b8db5c66870532de85f4f02de72fce272e2b25bd6a40d9b453963fabdf08eba30a86dd99eb6e06a20637c52ce5010001 \\x4131a87c619f56c7058c1b30f6eb3b3b63ffe9c513a055618a0b385be4bd85a73a37c45614e516163e3071bfaed9699bc35b476070035d9c7faa5e975f0f7f05 1645006407000000 1645611207000000 1708683207000000 1803291207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-332 \\x1e4b19b59fa6ebfdca50eb3fccf6661d21a6b5705f1d31e1974d2b2088f4cf29b4c7342b4ba32a77464d184ed9d4eba91fa1db3b626dc268b9d387c7bd83fe19 1 0 \\x000000010000000000800003e9cd9e632172b226a067ec7878da6b74b04094096753c07c7353ce4b5abe146ccf479ab25859c4adbb7651a34fc6488a544441e4f3c0a0d4ecc37a4c23d338fd2073e580f189acd20d6ebd923c210180bfe33db881455d82752d7bf82b4a2c4c88dec192989814f1ca35d17935cf731db6f6e3d7922f38639d4fbb74ed9c0aff010001 \\x53faa76c6ff4a11d085dfd149958b42a05b3b4dd692655aa82a2ffece2a1719c6d4abfca5c5d59b278263ef1cb1bbc5d6e4a5bc0064e48c30d75c5750f4e320c 1649237907000000 1649842707000000 1712914707000000 1807522707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-333 \\x1fff9886f3017abe4490794578a073047d9e3d6cf055c759665811630bb3a4b9384e114d9af7faf1789323aab8ee6603380c15e1761a6c4090dcfd4a5b97bd1b 1 0 \\x000000010000000000800003c905b2b869664d9fe200d1aea2fde594ac72195c35d321085e1d66429bb46f441f33143755088f4e3dc64b4ba523acb745e0860bb1b24de7410949ab995bd41a70bc19ef990840232cef56f1c845bd6e5bcf3dc3e94344ab82b62aadac39c15bb59f0eeaf29007676282bbb7b83944dc18321d733705cefcf25cd705146dbc73010001 \\x381f690846c2d64cc0b34743ae6ac7bbbb0f8dcf6ca37c122efc051ce433b1dbcb86caa00153da6846b500f5a1908d43f01c1e95ac1d74170ed47a93dd4b1f06 1660118907000000 1660723707000000 1723795707000000 1818403707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-334 \\x216b6963c228adff11f60fb12d4b887f216b4df0f3da636fe9a19f9cea2de43f04ff541c643088845730b170cbe90dab826aa81030c6a9f18e128dfc8ffdac24 1 0 \\x000000010000000000800003ad47dceef6b31597f1d157f99af0190e6ea3fca47a4a11502b042c716fac747aee676bf8e34d5cb8536b24c7882730ec35c754b5200b060797e946a72d44c69da90e255c917dc2fe4dece9478e83ebaa5ce18e690c784965b8a3ff9bdd3566f0b57789090d47f1dcaa7bbb946d36db34a9c097eab8ee383f202174a1242a5f79010001 \\xb1e5e169fd756f6044e952384df5ce04bca78ceeea04d50ccd86f5dcbbc0e4ece85ec0bb220fbb68596809f75ff49146fc76ce4a4573cb681a157230277db103 1649842407000000 1650447207000000 1713519207000000 1808127207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-335 \\x23e7ee83be30246d69475ec4c3f7265a191f56df40f258c4f47aede8743d24fb48767345664c8a9c67e33b91c900c65786f29c344bc64487d3db25216842489d 1 0 \\x000000010000000000800003c91dce74d8259833bf450015d3cb340aa62bf120db3cfabc87e7377c4baab75306d4d499920219c9f2fb3588a1aa2c0617ee97f5ef0e5778cf05531f91b790e0bed62390749780a78ec010f06e2d58ee2e47caa5cd7debe85db18838bc080dbafb74f264df67e8a72fb86ef0f023076d2bc7174e76fe8dc6a98403091aa13a25010001 \\x1f7587d6f52c06fa3f1eade293abfd5641dca95eead8528127ed15f9a5d381a8c51e55c0fba124424dac37ca0d61fe6b39697dc7b903115772db92bd1d74410f 1638356907000000 1638961707000000 1702033707000000 1796641707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-336 \\x243f22c4303c91d9010b247bc143ec89c1b3833013ae19d3d379a743231e2b266380560880e546263455ef0876181ff753a4557681e17daebda712dc0cebb75e 1 0 \\x000000010000000000800003afaf7fba97b3b6c1ed6bb36056074878018dcb29d7bee135f0d8451728c75f7effec0863bed6eaa9007a4d78ac7feb4897ef46d8ed4044180ecda5efc2c404d87e70e4febc24caa7d17970cb6358b244f64011abb46c3bfda85160cf427c14ea5b580bcef1b33de0d17355ccb4911aed0e594d00c68e36775aa5192d8f031b4d010001 \\x40826e23747db6304d73c329690c7181fbd9014ba58aa7e7b0eb4d4bb38d346d2c922c5af0e89dfef39c8df5cf5a3a38d77c53b088a955915ad44e200bbf2a0f 1646819907000000 1647424707000000 1710496707000000 1805104707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-337 \\x241fcccc138a494f260b9809b1c97aea74fa7b00d0513647cc6022524bbad38c6e23cb3837ba6649595454b63635d4dc963ad061cd6337c4acf4766558b82f8c 1 0 \\x000000010000000000800003cc0f82b988572c955c7ad0afdd27335ff9a57dcba99eb3713d8b372ea1ec66ca09beba649f6b19578a366820fde544f2167d59d2bcd8ad8dd75e26776650ac5906dcc3d2c6a05ff05bfee0bb306d71e0c9a2027acbd5da47d76702ff0d18c46f4baef5143f15b4da11a71c6b42436196e6374e1a260d3c939671c9c1e179ddc1010001 \\x4fcd2e346cee8c25bac83f2e3df362724dacf9cd98f0b5a07ac2d15d47f193b3739d4917399988249fed625fa60f0bdfd7bbcf27735334a9d6b2e6a66a93b004 1649237907000000 1649842707000000 1712914707000000 1807522707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-338 \\x25ef1520ec9509f11dfe95d634a8d81371247f183fc63c5ff6e4bf8bb11588a4d62c3f1a093f97e581596046a2f99f108f8b83ae40cec1db9ff0073e6a77833f 1 0 \\x000000010000000000800003b2468ef50f7f355e32a278d6882baa9c73a1b1cf4829141caab5009e7b254b8c8581c9bb918a2d964a641a4092500b8a8d1b9671957bfa486bc9efbf107e265e938784e8303813c3b18495f2526e2e761707e2ee21c399b7dfa046c1a3ab172d05eacdbcd41b1e685603a701572c3f91995796e0534467a4c2228e751de5a937010001 \\xaa9339ec9c4b91341c9c0a7432062835312be99a996da4d3ca4786558cd27958d0abda7034ae3bd10414c006777bdeb2145ff9cdbb76733dc9aceebfad76700a 1664954907000000 1665559707000000 1728631707000000 1823239707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-339 \\x25b7a921589822958aa19e0574518e95b21cbb28c9f73b4bb019dccd2a2286f78a7c6a1e2563ad3a306f310d300e773f9e4825149be366fb48252fabe2b18205 1 0 \\x000000010000000000800003a71bcffe16652d8ad9f9ae2722d3f75d8fad80f3b79963101ab39c8840e1dfd3980bcf5779c21d9b925464c3a432cdb8e326671d8a75445233415ad4ec0484f5c9b3c5a3ab50b721dc21a01a7e147f3d866c096b8bd7e0f165266e27a69cdd6df7198b621e541ba3a782ed7bd1c3902e985c380f55831421aed072369572a225010001 \\x09d65e376949716c6b8b383844e279954dc1c5552361e81c2fe64b05b70e0c6170f4130fef1550b2ebf82289c571002baddc009a7daffe21788a9fae0e973f0a 1659514407000000 1660119207000000 1723191207000000 1817799207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-340 \\x271fe90d17b43067d3e3209d753b1aeeea2e177f2f370286948d24f03e594d83e9a8e969945614bdb4044feea546eb8ebbe7c9104bb7852da0c229e47907c0d1 1 0 \\x000000010000000000800003dfba9b8c837eecdf0c301577f1f06fd13f90959f5944a1b1c3fa45cb76cb6a03f09b36d4dd2af8fafd30b78a78c4b25c76395ffce7f34359fdfbc6c6a252178f50603d22222006153d378513feb1370d319ac17be56ff45a77965360b6a089dd5347a7ad9133f7e0041c462b0d4bcb280dd7762fb16fee29da968a67e13d4ee7010001 \\x94f547d98388477198f2ef2f03dda484e1362ec54263b65340565ce9e6fe8e757bb49772dfbfc317a83ad86d2200219f81327eae7ef53f3256014309bfee3006 1665559407000000 1666164207000000 1729236207000000 1823844207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-341 \\x31d743f4278457a95ce33e665926bbd8a71778a928e7a2efb3ebf01ccaf26f638a8d342c7c9856388b5a545ae47d3d622f2f2d207f5385922c05de5773adcacd 1 0 \\x000000010000000000800003fc30ca857288bf5297ba34f97f8d6e8c35062765bfcaa331d168a3db4cd30ef31915d9eb99cae40a41f0da58704dd5ef6b2fb1713c352a926fc6bf43ba2a06739577eb98d44c2ae47793529d71bbf1d30d4ade19ef00fbaf508f8ae079b3540cd9055f848ffdc9b34fdfdd6ec5704f252c62e257211157a1a370f271b75ae4a9010001 \\x879de908693891ebff84ec2b43b6cb2df749588035987c11d16439fe2f156b5e3d84ead6e0c55997a47bc27f0fd00da0a88f4c0bea7e3c5433a09b9bcec0ff0d 1652260407000000 1652865207000000 1715937207000000 1810545207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-342 \\x3247892e072261b3e5660453c0511f34ca3a3c67ebf7880f2fe0506e72b8658e38404e93635237ce938524dd735af51d4a34228b934ddfaf15aeead780894f1d 1 0 \\x000000010000000000800003bdafad9b2796108c0d254c3f61405eed7e89f9587eff9f5764387488c29a307c7be333bdc47ae403fc2f541055655724ce1a92bf13b3fa8ac262fb6a04639181419e1707ecbe589299d8a638859a1a1842ee08a777169fa83e9100eafb68ae5f871d0830d78b0c6614b7eb1faac8bb84ebe9e8460b41911009cb6d83b3174241010001 \\xce9ba8b47a38d1c8bd0dd25ae3ec3dec27deafc3e40e2c982007d9f779e09822b4e14b77c52c5e5524d26428e42302d2d91767b2028b3834c8d22561ab081f07 1662536907000000 1663141707000000 1726213707000000 1820821707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-343 \\x342b17b631a6c6be5cb0471fb4faba3beb251f1d548c60fe049c05975ceb0a80bb64379021477039161c95b9a4f7b84d07e0f24a6d5e19cd5384e097e976c38a 1 0 \\x000000010000000000800003c7504feefc3697b323fa0a7fc5b5a136dc42bc30f56daf0847b42b55f12bc3df1fb50fd5c4b23e24a391d534fc944e007ac117a44adeffe83b1d94554757c593fa44404f27c13f3a08d7e4af4bc7fa7198cdfeea6cb3eb67db9c80fc9f9c74b2e9faffba11c0f4dc39777fdb72bc24e39c428d00494e72411365a96b1ecb06ad010001 \\x82715e741b910e914b40d387b9d58d2b05a857b45ece9910b41eef6666d03e929b7b8ec0f6fbca5ffa41d85908c711e28a992f52962702ac903067f422c7eb08 1660723407000000 1661328207000000 1724400207000000 1819008207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-344 \\x376f76bff4809bee946bff4cd44465f220e1341b7d64e586a74d0debbe298e4d6cb0dd7b9958e95dd18448439e8adedaf8b0d789e7407f3888f35cf256b242bb 1 0 \\x000000010000000000800003cf0996e92119f018e556b0cc1595a64c8db2cbed40720863088606086a92e7f90ace4cc459dfced3cc91dcff5d1ea18af658e35513582f0caf3104fabe622d46eb6c75ea511358017611288f86be3f2e1430c8933886822f52ff31a138ffac2715ecf7abefb0a15bfbcfd35112c383047a98057466701452aa05286b4335098f010001 \\xcad8e39d9ebda0807c85fe8b25703e0f1b9703e2c6d7fc9751b5504d9223394af9139f5ebb7a00499a22f86594520cc2ea63b0b2d6e58a25f7a5177a64985402 1641379407000000 1641984207000000 1705056207000000 1799664207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-345 \\x3eb7f0bd0371d5da80504e81b23319fa09dafc15805177308da295049079e4e82128b37293b36a6d63bdd634c21d7c108be21d939cc1c9af7603099342657ec3 1 0 \\x000000010000000000800003bc1b68c6cf627bf73e439e403e61244997ca485c48d975a7be7eb9ace314711c77d3b4f2bab6a175b6f458668a1bd6b39a39674edd6de252827b1e5fc8d03f3b46400f8f117bce2b36555c2a3d5c43173c925dc55a621f648f6ba4b8999995ac911756b0543a87b07fee6b01b84d2b1e194263b652b3259401051979c248320d010001 \\xe2ce5fe29ceb905fe19e665e6f51f74b37c1e7e07986042caa9c284f996c642d8877bc5f622a787c24c4df25f275ed69f2760a9fa0cd56e16cc1b9b8de9a3600 1662536907000000 1663141707000000 1726213707000000 1820821707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-346 \\x3ee34ca83d558ab69d7cb095cb88ef33e9fdcb0bb5e34070b4a05d6af57906acdc3ecd6b5e486d7a23c455fa223d2535ef6a36d0ba6e94c792bf83a4970b275e 1 0 \\x000000010000000000800003a457e58a5be2d20fb78af304ce0d4585a7c85795b0e0d239296f0f07d2971cdb48fb143743c96a54bf59b7619f60c83d29596b9c3c91f364b5c6aeef1c68d87e05997016a1ddb06f2165bbb83414fed5e7d8c05f9bea645a700d26170b3f5e869c47ee85b9ac2b43fa38f4bd3dad38e88608724f2a113ad71fd61629f15c9ed5010001 \\x06e6bf260ec96d594bd6fa2aa8c79781ffeee878ff1da7791bda4661907afc9261ec5063cb97bf65eef757769cd0d8a1c86c49abc2c7a775e3d42235539b1300 1639565907000000 1640170707000000 1703242707000000 1797850707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-347 \\x40d308495ca8c9d817484e4f9a829bbd5f968bdd114a592a636cefc6598dde4dd665950f16aeea5477e4fdac4844e976b4840a2c9f3eb9bc512d9e8eda6b23ae 1 0 \\x000000010000000000800003b92bb46fd8891f363eb16a9711cd384f50c71dece422b34774251c929fade75f98c87cb20ecc41cdf11e994224a19e852c26a4227495d66f2d40f1930517c26cd1e04654baa7286936b60c357ff26927c013b0d5e2b54b43db1dcae021e3181bae98329ce6c995e20d928acf2460a9bd45b2fc0cdbd4564e8e446daf6ae443a5010001 \\xbc536307d58d8c238ff88e3e9e32f3726a528c0c11bb6146af7aea8cef4a73c747b0674af68725a3e70b430329312c1b01f802b27643ab3b8d6cc91106066808 1659514407000000 1660119207000000 1723191207000000 1817799207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-348 \\x40af2ae8c1346efe91fac4e9ae48e226e51d88d145e1b8fb71b98289d8f640ea001cdfaf55b83b38aa9ea8d62e934cfc2222b55b9c32767a337046ee987a68e5 1 0 \\x000000010000000000800003b7f5776ca6eb8f667595b2f74f8ec1e6155ec99394f2507b4ab8188dfb5dedc19884f24fb7d9cbcc2ad8027e76e4d91a8e41086f23f7fd18fab0f15dc30588bf2d01e8d3c5bc02025311e98858a37a672543c51f342764cb74ce9be47dd3bbd1d3958572a95c89ef1140220fb914d018d1388f5d3c1ca4fdb8e00b2397021125010001 \\x417c2e70586cfcd1cbb78189abe0a87161dad353d6fe23df1fa310a97003bc9d60dfd482eca4c05fc81208b886a4aa37802c7dc4b6465e1a95e9862989e9de02 1668581907000000 1669186707000000 1732258707000000 1826866707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-349 \\x42135986613a618eba058ebafd6ed1458136d7c4f0f42f591ef801513c98fa5b6ff0eef10db5c332486ae7f482313156a46303ba893909d92e08c365ab2e665b 1 0 \\x000000010000000000800003abf1859955479097189c911dc7543f39ade7f033f6952d0f9a373b451af34310563120f36a1c3937a38a745c023ca9ff1eccf426143f9ae68ee31f6997e7463c31fa5d80b406532a84a319e0376391ba93f7713d95dc0dbec4c479788ea3056bf2623d18e4d8e670258ae477df632b6beb6c5ae4a20c3f70b12760b92561a8a9010001 \\xbb3f53cdf31a62eb0e0fd6230fe328576f274b7967daa7d8cf26593d7a0517c35e7d7f2f103e77c55f6c47f8c8ce2f80c5dc8da3b8d29520552fe3bd8819e804 1661932407000000 1662537207000000 1725609207000000 1820217207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-350 \\x4227ea57795dafb2bc7a8ccca72adc7eddb5433bae60362a3b2f90035c2d6be791e46878b347b1399b7239436ca25259f236ca8211ed1195d34607ad438e76a7 1 0 \\x000000010000000000800003a75466dbb77656fac778461424982bc7852e62a7314ac57fe2ce603d111b762d098acb38fc70d8eb7a884ba4ec4649382df045284dce20279050805c4024c9b18dabc7a4926efedcad8be472f2a97874f4ac3a26f561c39a15079f0dfee4d8585699e4e104fa8c3fcba2deac3b8f00da0fa4c19fdf90dd53b2f8c10918a34e75010001 \\xaeb04bc458915b474f38ab1eb6c3ec9e94d5ea955a0b02f197236c6f03e12c1177883a9fbf06298008244a3078c732969e067d4c0d0a023b19f902a1c89d6000 1655282907000000 1655887707000000 1718959707000000 1813567707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-351 \\x44eb53adcd4844ef2746294765343106ec22fc8f7e0a9e70d9c00d5900548cf5a8cb1bc997c36c615965cd1f28f08f2954c839749462394fbca9d32d2e3db56c 1 0 \\x000000010000000000800003bd87536c3612dc3ce38d5506591fe865cc222439ecb88996e16866133cceb524da659891f97a9e97cb5698bc7824c93c9bfde3fa05d1e2a98040c1876e00d0efd8ed131f701f75e3fa187dc8c520f12c1289fce3bdcec37a399e45a091da84893da29bc20259dd2d0b1e7a7e587955913f860a2d336c620eb070471476c6fa45010001 \\xca3db5dbad4b2f3af2f4a43b90b5fe4612efb1db5ee75eb39f5a649855480430d92c4e5cc7991acc1f181b2a552a2cda4a18fdead3f5f37e6609bcc4fd1bb20a 1645610907000000 1646215707000000 1709287707000000 1803895707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-352 \\x49a31a3ccaaa25ce12fdf8dea809e58bae7fae65007a45d22e7ad9eee3076bf3ea385080867f53240c02b9d0dfb17396160c970042450baa12883ce7863a08db 1 0 \\x000000010000000000800003ec72a24de9c21b6368ccdf5233dab11b7a3a881baa29ad8df498b7697b99fd3ff47a33715e9fffcb310f9bf8d486e1130a54ca5ec148e6f577bc552bca3fa62082d485062d4ada39416958d90822518b54c8657372bb331df71d4a334f6d5603da67c1c71d6d5938859639db2b74cf90fc187311a7b18b434e8133ffb4bfb3df010001 \\xf544cf71d58926bd0fb9c7647ebf2d687be993938028bab9a78fb2ee73b9c2558347475887786dc4413eecab315ae3ecfc081ad6fc8519c42a47eb3cc072980a 1646819907000000 1647424707000000 1710496707000000 1805104707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-353 \\x4a536ab5ea131478b12aab71df54f2b8514178a9b7089be704dc836ef1423538db6f6fbb0b77db4edd81061f236d3915605c2ed83af7c820feda46f19c8a8b46 1 0 \\x000000010000000000800003b5204e591a063de78d6a0acf90689295e7365e96e4d4f52cdbaad032b004bffd7e7791e3b9fd5e10122960736eedd48aa8ced1c90000478b0f494a1cb4257cbadb13266e10a4ba450cdd600add61befbb6d2fdb57cc8aab50e4231e1c6b76b693e0f5e624c0e99531c42edcb789f76e5c3cfd173731c857567a9f993d077f8f7010001 \\xefb5f12dae78608955517bd59a63e75fe30cbcfe93df06e8e853127401943b2cffaed5edd9dd3ecf6cbcb52b252e9cc0e508717c34a133d0b00a147ea1586301 1657700907000000 1658305707000000 1721377707000000 1815985707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-354 \\x4a3b662db6b2bfab6d0eed343a23ff45ee5d1c3a0838b0af881be201e5e3a7913aa1f0a775b5a9aa6422b207b0f672746a3aeec61310ca2f0b24ebc2b37619a5 1 0 \\x000000010000000000800003acd96988721d004166a78e6b323f843eea3fa2fb0431ffbaa73782776dd4fcb7206339413722e0b34d313a3e5090fe088b3e3b0b1a9db4e46b465459794226cb09c20735342a9aa99cd597005253cd9911223c9e4bee7aea385d83be048cfea666bb00501c65294817d40632a17efb16f9e7fe4c73f3f809f9614b3bb72148b9010001 \\xc9666aa40db731916dbaed05775d8ff566a3b6ecff85f657690b92c27e461a12b6824a23129ca55fd1e3f79f8b8654d5d33bc581a1f12579587ba1797faaa407 1667372907000000 1667977707000000 1731049707000000 1825657707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-355 \\x4e03d88a06399c8999ef5c18dc318fa2fec0d82130f883e244a97d50b7c413eeb0752bb3de496f2f0fa40f2afe52f996e54564d81d5cdfdef2d3f37d3214b91f 1 0 \\x000000010000000000800003c319f56955a9fd9ac3160f2d4cf905ea8dcb05ce037989f1f2ab9fb60717604646db1579168ce18c366ce99a98c347822c7829c4c2873197d7eb167a15c338e7e1532696a268a065133caf006b5104937b1f3eae703dc93f28a6218d83f43a93727a56b20874d5b19b7b123db8ae01c71010ef3548e279e7fe2c529c291c51d1010001 \\x09e20bae8f8c8440e1004f2e3ed15f9e2f4495086e908ec39cc062cf69b8a8db5f14eae500595636d22ce2537f2e69c927ef007c4c1c30df103a36cee5601c0d 1669186407000000 1669791207000000 1732863207000000 1827471207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-356 \\x50975260f940828b3f235f30fe913c74407ea65fe62fd466f4ac1dac5a374f672e9146d8345603c5a8fe42ddb7ed416f191a4692ef2a4d9e42359cf2dd3b411a 1 0 \\x000000010000000000800003d0a0447d328ee8c1b3a275aaf82d6fb3349805907a30109bfc1a6d159343b9ef2579b8187e9c5b399f27f002f7224350e77fda64faab0b5b2ad930f05cf4c85653b44c1f95f3b3c6671eb0395abf210a5817f90660e94360c48cee9994e53cbd97296d7cd5bb94ea07b25932c0665e574d13d9e53d99d0542b7dc37bb1d52cf9010001 \\x70d6d5c8e387a236368678530db54b46bd27615cd458c0b6a006c76e216a9311579fb70472dd6889524b6179570deade84803c6caf4e47a1dc82b7e18add9c0e 1661327907000000 1661932707000000 1725004707000000 1819612707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-357 \\x519b18f32230deb250235823914a31fc803396254af99ddb2c3f352e46303535632ee4d2ccf13fea394bcade70ea5096bb08437faa635efc76eca26bfffbaa4f 1 0 \\x000000010000000000800003c622b37c9fdf57233f19fe9d9ef165f08161807a8b3e643021469d798fcd716bcbb4dc042b96e58706040d5a272a3f40d429bb772f3f77933244f690c84ffe79eff80b41ebf2a9afadf24005919b1c10cf99807774e5d19fe41d53f18ef9a35e00a72319f67d93d72b9f713de1680907263aa583172f108da57691fccc4b9ffb010001 \\x889ee81515d876e4eb68f5780abdb9b1e9e26d810d3ee43c11f3a69d385233a78797dbe272626a9d2e6d95f6f5796d7a31c27b95101f6f41f46040600dd12c0c 1652260407000000 1652865207000000 1715937207000000 1810545207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-358 \\x522fd2cfac3c5f27613d9861d3973f2afda56a629ace1513261d27fb79dcdf52a21f6347d1555e5a77b17645aa0d8aee3c8e3ee08091c278fa41e964f79cb359 1 0 \\x000000010000000000800003d12aca62606de4ce58653bad7db67e54004090be5ce8c372c1a46417e668655d2f32118193bffcffc090a0b50a2b79369147a49412f79ff0b3cba215cd9f634a93e61a2baafb00a6728683fbbcf1121cba0b6de47ec7cf39c86a0c7ed949a5c46fd6442946d2843fdbdfc3c69c7d7fa6a4c7da060ec8229c4cb5afb8b887438f010001 \\x9bbe19234be37d99fe1e2d3b5c02346c3bc77aa4ad49287225f09aa2173e32de6e2853ba2b0ab08a628d5b74350022a82c9eaf900c2b69042fb6150811fa5504 1667977407000000 1668582207000000 1731654207000000 1826262207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-359 \\x535b71f67a6bd7155d124795693f79a887f13169cebfa9db0539935d5f1c4e5d773328007e2f86f5a660e7b3e150ba50ba423696c25808de39c73b8943e1fd27 1 0 \\x000000010000000000800003e43b88a93609747883c6d22b7a86aab575198ab1886a749cc3a3c7e92df5db523f75ff6d9ad09e5c5be5300af420deab9db24cbf83ba4dd0b27d58c4a0100872a432504f5ec9ddc072132834ebb568adc237e29c9c4df897347b96668e6b37b12535bc0d7313f8b2ac03e0bf719ff76413532d59021be670106c371fec7ae10d010001 \\xac1fe8ba2f9e81e629154cdd0e397d4a9e10e406dc55e1d4bcff06e500d677f83636df374a8f12abfb3e0757419f9d7f63b93ac82e68398a52b3c7e54fd3ac00 1652864907000000 1653469707000000 1716541707000000 1811149707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-360 \\x560b99f079d078f81b60b047c7f27f42048a8389ae967f0ae51c48d6d43d1d8acc7624bb8c3b477beedcfeeb1807a00a8651c2280eb04f1efdd42787fbce505b 1 0 \\x000000010000000000800003dba8709f1f798175797ddeea3081b95e9b9efc68fa4a92b3d47c842da3359060f3cb1302d1523b228cc089d5172a538aec7d833a5042f69787ff29652c05a0400dca5b77cf07bd4accd4bdfba224077d27598731e10fa9d9deefad2650db2920b82ff5ad1e9fc29fd92045dec91162b47160bd32c3868c2fee25b21261918f1d010001 \\xa8ff30cf84362fcd9345d79fe08a60cf2f4c3ee0310602df229028fab0b585e68c983ec04c6dc73ede9827d5d6bad18a176bf9521e834006d7d283ddeea17001 1658305407000000 1658910207000000 1721982207000000 1816590207000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-361 \\x5d0fdecd6fe79d6e64d19e97275983dc97f88258423f90559681cdc1273e958ac7ba0f7a1aeb22db233b25d67b2c06ccbc909ccc71f53334c9bd517481518902 1 0 \\x0000000100000000008000039f4270cc8fe195b07de8e73101e88a4528462afd2e37ccc4ccbb5e2c541cd4e7cf14ebae709cce9c7b5d75ad43fd93b836dabeeeb2eb8f6485389f7268e9319542945e229ebb8da905759c2b28edab8ec67b042750d9df5ed87f86037da096a18115fd29348890c261b6548ed74301eccd85edf354ea31337fbd9e5216373d1f010001 \\xdd01020ad3654dbc6b3b48cd81d9473396676febf020b955a6878c7776351e08d2d1ec9f537db80c953ec2145cf81c5fe1772c7494fd1adec2aee7aebba5ec00 1648633407000000 1649238207000000 1712310207000000 1806918207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-362 \\x5eb34af1bbd39f4fdbfd4b8e3cf70f7cb625759d97bdb80e8f8736bc5093f63807cfbedadaf4a9c1f77122e3959d32b7418e6386638fda126d768d8dc1f97d81 1 0 \\x000000010000000000800003b6e2619d3e2491c926db9e61b2fa9111e5c5b574de7ea3009bc32d87178491fcb7e1d456df57ae4d1857fd02120ca13f6e4867b34bf9ddb8d2ddf6cf74bd594161a92412fd09809968380211c3d246cde97ef1f4e506e7b9bb5fcc50b1ad9f228a596c11ef51c23804bf1a97ac2ead3103c4a84e58c552f3788346de62a324d3010001 \\x6d39c69908e89e23e2abab1eb1d513bc7ff51627deedc816e1dc7127f990a99d7df00d2bc2769f46f9a533d9b26eb12a9ab8bd4c54e0977646abd92b8bab3606 1669186407000000 1669791207000000 1732863207000000 1827471207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-363 \\x63f78cbb81ef3024443a852e2995441359bea505c1b742d44bc84e12c42bc3498d27370e8de467bde6ddfef8b6fd7e0e82027ee68428ba7214d991ee1a09abb4 1 0 \\x000000010000000000800003b15d4f5000b97f820186546ab62236b4842eb3b1fa5b9239743beb6a45e2f7b997642bfac8e629ab9d2a42aaaf33b2fcd1efb1288fb40afb6528cf377c351c2051125339d210b72dcf3c58855762f66ebc0d25513a82a294eab8c7ba04296b8cb27b1ee19462b080c628f8596d99729efd21418abcbfe1c8342c002c9d163a15010001 \\x855ad3b93312fdfaeb9cb7810863ca065d5f24589ec29c4031849f650bd30e94549b750b3a5ad5875b5dd0c3c5cf15f18df9007c88b35510c41e4b5b22acc90b 1664350407000000 1664955207000000 1728027207000000 1822635207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-364 \\x65efcc57d9de067e466ed49201fedf574951967300cfd5854013b31b34749f46b1e3771b10ab1541500c060292a739ef367aebd23a3032455cf6522aaab2dd60 1 0 \\x000000010000000000800003c8d56c7b3376379114edfd303aa03e7a5dc694b91c761f7b3171b232377ce600e80eed8f1e22aa7b6ceaa5693ac1fbdbd4f1d1f17f18be08fd013ba0869db60e1087d31f72dd2df2e9156fc5db842f70c2376f7d2eb748882c206080ea6e6f1faa606074755526d3bce7750485edf99d7c0551ecd49eb7410f8680ab9aff080b010001 \\xfc015605877a987727b4eb69f071a84653a7f63d9e929f1c007cfc1f2789a92a379e207b5d537bbb80fb09019ead8e3ca3d5fa11fa204e21a00dd232731c7b05 1645006407000000 1645611207000000 1708683207000000 1803291207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-365 \\x66c7cc9481a5b81957cb80bc18ed5edd1914a24d5d4c75e433dfebea26e3a4806cc4d2a1997b929e2cbbcc2219b7bcc370cad01d6f76e6c5f6257a5a777d2731 1 0 \\x000000010000000000800003e6ff68a75222c9484ea024d3f160d9dd2d6b2f38d321c4ec48787e161331b3885ee368de9cdaccedb442d8e6e80e12b7314573ba2e1dd816a3e3b5db2c61ab0d2c027ba90766292beed2c7faa5a0f19d3d238d1bded9081607ec15e4e7f12c0b4309c848dbb108da317a4699abd1a59a18377699061da57cce0156bc74273d63010001 \\xe9f990f1a85fafbc46110c4ee35f79f5ba42bb294e150004cb8c7071dfd3c31ffe39fda158d6f052e98e52a5da09d1ab41ee1d24897ba86b0d4d9cb79b63c200 1658305407000000 1658910207000000 1721982207000000 1816590207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-366 \\x6f2feb7bb007c5dac58927decd58680ce6946daf1d34d727939672b36b8ae34456e28899971f111db74cf7b6d60405d84aa8e07bbd783c108d31430a6e41bdcf 1 0 \\x000000010000000000800003eebaa0e46fc36cbf56b7428d62481620306aee225407daf1716d07ca69a14fabaaba8a44b5fb89d95470162bdd57b733e743f592a8e863e0b9b7d7d35642ca413b470123087852fa23f12c78bdbb7c069bf57ee210cf381f522e186df589d0d8692dfa0e9e6323fa51e69bcac98adbc4c86b5256967033671453f01680565765010001 \\xf16322dc3f1536a9cbac4f83c735b27bc28e01bce31720fd428baf05454a0e738007ad1de5729e8ad1c784ef551613586fbbd32cfcae390ca2dbabafaddedf04 1646819907000000 1647424707000000 1710496707000000 1805104707000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-367 \\x72ffd191ad2c26163a97fb32652bad4b4efad03a4da2c53506b75ba64fd6feccbf42eb213ef0421cf1a35dc62f57666b72832115fe23fbc871e91c1b937aec1f 1 0 \\x000000010000000000800003d549df5bfe9ab880199a11cc926d003a6073b8b251e6bdf44bd4067b70c3e54c528fd817648ca013032f75f637c4f9c6f04eabbfa8fb576dd10a47756d090c3d8cb305ade0054a8b9c97e13a6e8289c33100ea1d8235cda871646e7984fd1fa8e90680fccb25860d9c0c5e9a85685a1801a5dc8eb69990f1686c2f01d79b4d83010001 \\xdfa306fcbcf57bf9da9514334989ffd1c2e01b5f96c21020de76899a63f50dc8cfefd926e1c2659e738f84d636d63af073b599fc78075f8a4feafe45f69e8b06 1660118907000000 1660723707000000 1723795707000000 1818403707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-368 \\x77237d295d8bf9ff02082898d15cc8f409de908e247dae2d51c9b7a0271ee21769cae1e2be0c497b2844254aa408658066df3d27b431a1597bc4a7afd60f0d6e 1 0 \\x000000010000000000800003cb46e1ee4292e84470cb5ff6bd8a48017b51b6bb4995aa2ff896f4cdbb5eb096f00132e7ca2ec9f62f2639a1ef55fda926de007c32754fbcc3cc43146e7a23d01dcde7baa82a2f5fcf4381615f20cbd36509623758c0f997410e8b165582521423a1e29d3f0eb94bab052e2091a84efa12cb302b81a6151955e9248aa80ccc9b010001 \\x676ac50717cc0655893373ada8bac946caed9d22387d8575a6d1a9d43879bab8844e35a1c60fa7131ba1b2725a914b67436e7a5fd344712d270d9298e4fa9c0c 1638356907000000 1638961707000000 1702033707000000 1796641707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-369 \\x79a3527ccd49ed19548636934fae0f1da806ca7bfeda2c18e02ca14870e2a477b765ca1948b4e1c4265771b645ec93985efc6b287ffc510f46ba7d91b0d3a931 1 0 \\x000000010000000000800003db2c57f08163688cd408025e8ecf984c3d29aafece1b8b36e26c28270cdaff95ce05cceb5d0b0125385e0ada8e91a27ddc52b356612d4c9d75cd9b353bc7faf5ad99d9b878e1dd16ea88647120c0a16375a17df37d5790e1319e08a2b0923134876eb87e5111c75ddbd4a47ceea243f76ea6e1b3c60c8eefdcc602d7f294a205010001 \\x2d776c44781224eec988ab35d9ca4e462bd3597729320649e8d1fa042b07ea28576e747c220446a7bd014c777c70909f236a08aa666374aeb3b814ad589fed07 1657096407000000 1657701207000000 1720773207000000 1815381207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-370 \\x7a5302518ab4906eab11ecf7864015cfc7622001a8dff66f87b03a3df1eb8f5e680a5f0d00f0761e4cae574b13b75d92cbaade7582ef9ba43fa7db254d3fb1a8 1 0 \\x000000010000000000800003df9d094a0d86e424e3b40840e9d54db7f44631eb8b2824a1043fde40434e94ebfac2cbf37353667d329868a721db47eaf069a1713b6942dad242d1d10abecbb6dce87a3b45dbc7308e058849fe08eb590306a459fea69eb8be92ab87f247ddf915bd12ce2c5354cc8ee876ebd7539d656acd8607affacb871fd2bf0baefabc5d010001 \\x91d1d1f6960f8f78496641f490d8fff86a779c151c14f013d7e50ceba3e19a96886fe73a83275e457bca34c05fefb50dd2978ec05da69c014809e34f5dfc1b0d 1660118907000000 1660723707000000 1723795707000000 1818403707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-371 \\x7b27f0925e0fcfa589c92248a95caccb1f7c779cd27f41e0d90f9d0ce82aa09fbcafdbdf5b188e2d9ea918d24b8b0149fecff80d03c7c4abbbd02fa4bf5a28b5 1 0 \\x000000010000000000800003d4acea9bd67a584a95f8e755355c8fbd75fdc8889d6ade8bd01436a3b32d7187be5726eaca29c71301f18b6e0ba74219907e41fabc5a2f98035c41e4da527ab5db538cf9618288b6f2e70af78b7b205eb9519eae12030c94814048ae0b9269e266439bd1dd7f8932fdb0c8e1831b5d0496247c1d787d8d7b2f97aa92d6a01641010001 \\x5bb3aba12fb69160bb83b868bea73c317fd96af6bbf34d39576ff09b0a8fde2d4d5f5633e9374eecc3a3eaa6fcc178565204d48e289a2e1e9786802d6f472406 1651051407000000 1651656207000000 1714728207000000 1809336207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-372 \\x86ff1481296384128d4f4810ed0c7413fa6cf02a90f21a0f9a21809aadea89890b2487c166b49caa74bd9d57ca4224ae8ebf409380a69b20166ad331c792e17e 1 0 \\x000000010000000000800003d071dca4efaa4eef8967ea1452293fe90769ada3ed73d30f1ad10c91f6bb90c75453241c401723b2810696c3934bc93f29ec856ce75ce4a800b44e6d8871360d26a90246f449e254374246d30e008e921b578e0ff79aa6e34d4d82dd5675dccb3f7b3ffe13c78ab656f45f845c2b47b5f7e8cefe25bcace6174b9c343b515ad1010001 \\x9119c7595e3670721e1c5ca24b6330fdcfa180a04e045f9e98d56b34aadc9c8e4546c4b582d469451682441de6cdcea3cd8137fb522787acb695958ea03ee80d 1658305407000000 1658910207000000 1721982207000000 1816590207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-373 \\x87eb9b3d9a314ea975107e0d3d0fa7435bdbf1cedff99aafa8a1d1aaf8f106e3832ca05644456564a840128a84a8c00e52572c72dead6e8745600390f609ede1 1 0 \\x000000010000000000800003c8a076dd9f0d866ed368b65bdec0f78c8b468b9e4584c632f596266a9ff70695ec727d9474a2163d45f43582dff7ecb02b6cc2062d3c516ab4f96f99528c51897cd802f7019ee802646dd18edd9a85bc6ffc78d7b43df9b264e770875fcbc1b58775c684d62038df28dcd32904f186fc52024b0fb5e08a1b403e196faea34257010001 \\xd9fe35308d7256538eb62acaafe931e6754e6b9043a37c9528e8953d8b98ff23e442055230ac3032661d1bd6915e9748feb1f35283ec2a08d8425e15ab3a4107 1640774907000000 1641379707000000 1704451707000000 1799059707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-374 \\x8acbfa4c3d3d35b591689431706a2d54ca7431751292d4210a8d31ffe0fc3c93ac78809f715b0d4d5d90425f844d57548958baf6853c8d145aea276f579cffa0 1 0 \\x000000010000000000800003da81693f32ced4ce97c18c644b508cd29e0958f09f545886c18d777e72507d1a57de13b38984be4500cf622d7c3496c5cf953f11fb53e984c8d71d87f74df9b5d62bd69c363cb15399ab153d91e3bf81c03b708f923231c9a6722b24b8d25b8093dd3dfa269c16e3a90791018a600aba8ee61b2455a121fa3dc693ede473e4d7010001 \\xf1a82df65d6ae836e990fe56f19ace1a04572d735981c4b978077ed72cc24c58fa37c95c06d609881afe0dc1f25cb2e91a5216aed4f24617509eba38d3a49900 1648028907000000 1648633707000000 1711705707000000 1806313707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-375 \\x8bd3dc16f35017666b22977f26991656625bdaab29d57511b0379e23a539ceff590de64ec06401d05e75f55a4b450c484a479266a3646b896c18bd897d6a365f 1 0 \\x000000010000000000800003aeba3c1478f37319610c94f8183daa4cf230c1e2de70312e99a6116990862c834a26322594007d320f1e688b59684a7456b18b012015c6517abe65c01b1b30dc3d606b1ab62f1740fc5f25b4b323c8db17e60e25f5e3ef35ddd7a30c8ff6e815c2fc4caffc2558e6dddb7cd8244263b7ef1cad1ecfb152f99fbeafd5c129d3f1010001 \\x1a50387c04dd65d41737117279969c506a3e3ab91d243411e20348c5cf11b5da584dec6d187899d63f00825c8ff5d4acbad11eab7bbb29abc6f0d43c14e81109 1655887407000000 1656492207000000 1719564207000000 1814172207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-376 \\x8fe3aa7bd51f07c1ddcbad6a5db43b44a64652cbe4af9cc984897235371018457e34f1c9200d79f0d59b1f16f5dba728549503de2b3af4a7bb0064cf84164282 1 0 \\x000000010000000000800003ad13f7ad2199fbef172b4c56266bebd9f32bf8fcb5a43eb2cbf1e62709726d6ef7ac5dce6960461eb2f4c3d9cb71289a28df4994276e4960055ab21947db81edaa22c0f8a68fb78ba6e841a50152e44ff5fe6d3f5b979a0e99ae57e9020f2483f7b90f2f4de547155cc7e1f517e220c3e0e6b5fe947f1e94d578443f0a50df6b010001 \\x0b44a171b9cfb9933dfd504b2ff426fdd36ee88b30274f383eb18aec682088ef26dd6fd9582344f6738f308f726d75597d13aa948795821b7e91e5141955d208 1649237907000000 1649842707000000 1712914707000000 1807522707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-377 \\x9617dfc32fbfbc9bdf40975b7852974ebe4dec067c0b5999cd385cd9c6c54cf410bcb69516f37fc6b705d541b88305997a5b8c97d7f08e50f53bb7eab695b8d4 1 0 \\x000000010000000000800003ad6f289ee36e6fd287dde16f1047710d445044d3e4214b3b0ca43c0ae73a6313b6b54ebed875916470439ba65e879db2ced833fb72c91a95560ca8b3032cdf350b31e44631a192a6db09125fd3243708ce291383365d1ffbb3816df58e3bfc00d6a91542ce7f8ebbfc49c1a102644cf1919456d755cc67a84d8e40a39a5f6f29010001 \\x39fe8a5bc8cecdddf0e9da73b618d165915a33c29fd2908114b686c67e49d44ef39564886133a27130b4ff2bee180e91cbef59735e358a10f997027bbfdccb0f 1656491907000000 1657096707000000 1720168707000000 1814776707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-378 \\x99ff5f5ee3a999acccf33a08c305951b4d52b04333125be26775e16bef65509c42e5adf09d4d66398e3de6d184a28defe890054719a0f5af07ded3a3f1fd1a53 1 0 \\x000000010000000000800003a8ebff8f4d39c31e5b1094a2fd8d7c78af9f98a6438298e2bde89927be55c6995baf8cf65766bc34ca3555ba4c18803373871016614cb2dda57859d327cd3f618c19e9aca0f329f07fc7764bd93995364a8ce9ef7661915c1863b7451b10c2cf304d98c41c662afd79ba758aa792c2795335be747d2d58ee90249dd4f596cf0b010001 \\x244030c4523d52bdadf69dfc22f1fdb44e98cd32d71780a67d1905cebac74419b4c9420f22704835dc7df78d908be4da6f06a905fd96a2db6fd052e78605d208 1658909907000000 1659514707000000 1722586707000000 1817194707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-379 \\x990f504e84b4750c746af47a926c13c7897971b59ba16c8e4fa4a404d138038c7efb52763e56fe4ddf8445c9604674cf2b354a10db5816c01ec0d1a08a77464d 1 0 \\x000000010000000000800003e5d42c50a33a51df1387a2efe1ffbf3987e7f2d76fedbfd5f0096002bfaf6328ecfa7ff45723bf96bc6c6e770247d0d071ffe05e2c799a4048fb2a5b55814b4a01df40aa7c3ac42f2491349bbd52d802fd49c95414c65a808356968a4ac561f5f532a499fa77a2e2d34bf4af6b381e297b1eeace3b9026e9f5e16ea5341c03ab010001 \\xfa378a8f88d9a87ff17da52d0698e170ae7fc9adfe8eca65f117ff9f2c8f6da41daa8482ccbfd502f681b049e8ad57db638fb0287b58e0c9346025fc5370ce05 1651655907000000 1652260707000000 1715332707000000 1809940707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-380 \\xa2fbf6e343bfb89bde8e1f743c1cd542cc0ce4d0dc605e6cedc3b256711a8f3fde994a780440bdf513485897139eef7c694ce374d8ee91c3172be806e28a3a4e 1 0 \\x000000010000000000800003bcb1db30678cc17baaf20d22ff003d54a2148302f6a9f07c26692d5551b2928b61d62c20f7b9a7eebc8728a7f46da0a69cf073f6ba4a6064f8500ca14fe6549d264c50cbffc4d262f171f0ba5635913bf3dbe52a0cb18577999f25dafd816718ce5b2ce417e086dc935836e0fef212c204e3dcaa77c0a4d9d8aab45112efdc67010001 \\x0f950425b502d1d7c7633686c268ff299d2a9364e19a0720ca168755a9622c1dd02bdf60fca3f75a4378644de1730a6e164a6471557d0b588edbaf10ca303800 1669186407000000 1669791207000000 1732863207000000 1827471207000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-381 \\xa437c99908dfbe0074ef878005f31466f31ada86566b817d9da73b1d8b4a60510bdc72e4cbaa2e645b85ee122da34ce05dc6384e76c37d4fab7fcbd4665b830b 1 0 \\x000000010000000000800003d000282d6fd43ec97c1111b29d892b27b3e48dd14d506527d007d69b587ba2065c5e2c58b4a0b635d41c305e51d0f1bf8fca4275c1c22d3a8c953298676f720ebca6fa5768b093232613d0b8f4d15786690a996f9e8e142640953b92ffdc455b644a22fe24cb597163d28962e2f7265bad213c1ff59f8f051aaa23ea400e4e7f010001 \\x7afb6b33db15a35285ac29a8c97627d296c91447a4823cff5192607910d368d6e73701232208e812bb03cb5001eb1c7f9c67ffed9f9d46232ba00d7942335203 1669790907000000 1670395707000000 1733467707000000 1828075707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-382 \\xa78fe5edbdb832739a21a2d32d1569c0f21cb4fc2b389cd4482e7d6cb80115fae88b1bbf5a72ca59ff39aa586c134a82cc3db785147e4cb58bda5225452172da 1 0 \\x000000010000000000800003ef0fec1f3d5294687b7f424f2a1c8c515c2cdce3566431e4a309d8fdb89227c8a8d0c7c8b471b93904e71143a5a8e2e43da0f9abd01af144ddb5af04b29228e9d2aabc44a995716ab6e27e2bc649b36f52d40624a82f713862f5fcba89eb6d25586a9fbf1bfe4caa793a8b943842744d8148e01300dbe22c0010580e16dfd49b010001 \\x391ef1ce4a76808c0efb29ae0bdea20f938b7c67459aad1c112cc31f91b377e572ccfbf68ae60168a45a0493bfab47f4f24b1f601351b9657c725dee7b5c1a0f 1668581907000000 1669186707000000 1732258707000000 1826866707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-383 \\xa94f458b7ae38750af48dde34daa49cd9b61d5699c8ad9aeec9f6698e47205bafdad6a8e956fc20fcacc37a79eca8f4378d2d2a8b569948d1c9d3e003e184022 1 0 \\x0000000100000000008000039bf5703084050d5b104f15cbe040b08f7779390746544ba02a0bd5e54e88aa970c4190819892c1d457b2f90062939a57f76cbc819bc8d2924882e7f8073816c493ca3542d335da201f7721b9b3c2cf0e5c07f10fc190f63a27da2178d65ca113c230847cee75135696fe14d25f277f4e62a1b56860b9ba27b2572586f8de0511010001 \\xa4840e8db9671e4777162730b59b3a4f5cc4ed8a0fee767b5e35344302d9066ea892d09d6a82b19cf03409c7e5b4af142fdd633443f2561f3cc3193ef795ae03 1652864907000000 1653469707000000 1716541707000000 1811149707000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-384 \\xa99f1cfdfc0a5cbe36be01ed9395975f540d4a87131f1f9c00ac76293256125478398a490e1110ddb0ebbc9d5ffa03b05928cc4199d655546b27b9eacc0f8ad7 1 0 \\x000000010000000000800003c3a13a0a42f66d7891ba74ebaa8470f84728214309be52d2a15cf32f7e8343ab72d47eae83e4aba052e12bf33b734541bf772a01147f9fb95dacf12c4a480179ff1d48778eb3b6da91d0b3084055ba7e7afceb54138acec19c73a9e5712c2aad2c21a2881402ba3451b067b3303fe7328a21dbc7e73a7613115ca2e6d3cc2671010001 \\x7646e5269de58bdaa7c8a1c9e7039449770505d4ea4a2330bffc23fb5ffe5f061028830f37949ff15b1038bde0a3324a829770c84e98c20179687a0ab6bbe508 1660723407000000 1661328207000000 1724400207000000 1819008207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-385 \\xafa7e1117a99af973af20fe6d33766eb8b779ffa1d20ada900ae98e8511bbb07810f59026740d3a19aa305497e5f40bea09770a6d111156297d7266e514522ad 1 0 \\x00000001000000000080000398d7168d30c2a87b711bbc900a8ca81686a0481564d169ed4820d533dfaa4553e36f4dba4922551062f23319e1c1612215c9f6dd8cbe04c7053207a44e79024b114fa9fe5ea3e5a254d9e8cd1fe9ace965f9306c068265745e690da2bba5bb0be280a5d44fb2eb274604d687872ad1c7cee70a387c7c2f93854e76110a07c073010001 \\xefbe1cc96469ffd5b12f49ac5da9e12471dacd72516deb6dc8053da3711a1be6b5687d88466b5fa44fd51e148f6050d34e8ea04292b7ab86472029a8eae15d0d 1657700907000000 1658305707000000 1721377707000000 1815985707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-386 \\xb14b20cec071b2afa387faa2c48d17b59b799c46857297608767a89210cd70f66a3a2f549d56224050f86b747759d3717f34df47a50e57ab28f54c5587adbf51 1 0 \\x000000010000000000800003ba13da38fe00fbaa81523a07a025b8d77898d54cfe15a688b68806ac5e5e4dca74630fab69140570fc26a1c6765eaf0e5cbb4dd699cebcdaffe1e3899d59844025d01e89d3cf597e7c2cf48291cc406cf18c4df78955bdaedbf601ac0cc3276a1fc1f42e346cb0b844094fd29646c94e4ebd480861c5d535a197f4fa2dd067c7010001 \\x6ca06964d86635557421f7ba0b04f4a0805560b01eb4e5c8bbb6920aa7c1487feb9824230f983fcd15f976c7b7e90191ae3afbeade95a4be0b797142ea88570f 1654073907000000 1654678707000000 1717750707000000 1812358707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-387 \\xb2b327c878f779ff09f1f47fe9c24aff40fe8938fa2ef2418cafd4ec8adaa0fe2e814cb9654b7c86bc5a626652eccf9dd983726a2ccdf42d161ebf651a9464c7 1 0 \\x000000010000000000800003d6badbcfd2f45a3160641a3c76b839971318cc08b15f8a1160f74a375ee6d47be4535c1b48f90e8e48dc957c93d116c85ab4af5e6c650515d98a100bb1e1ce128039c9a313d0735412150fcd4dd055ccce2ca304ca77606f70d102b7c364166546a265d885e29a77e43927bcc499190022b2beafd49413a4f1dce6f3b66df3c1010001 \\x3045a38516160f7dc5d35bc2fb1581447ef7d95a45db47fc89059e8a50ebce7efa813145bd8390543b79815b3289ec43f5cadd688ddf27c5cff05d0b7e165d00 1648633407000000 1649238207000000 1712310207000000 1806918207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-388 \\xb5a753a28125213d0d051f652e20ec6720ca19e3e02d4fc21556760a3215d3c61cee22b4f6ec07bcde41c45bab3f74fecb8fe7b761cb7e7e5bb3c35015333a80 1 0 \\x000000010000000000800003ac5c22aa66a0e30d662d86fcb41ff3f810fab78cf079d9f817fd2422289d0de4682173b46ce5058b3f73ee5e46791b71e34a11d6b4305311e1c52c4b03644a6160b47e9ccbebf6a336e50d52eb456f77c720190589c3ddb996b3c022dc50060e12e4d9507a035c9bd512b25cc87fd7066f7ff9950de34426f3190db3e605a96d010001 \\xb5183dc7fccf7e019b86a1e85dd09fafab0475f115dba85d07a75fe876861a65f3d6a5fbbb3537681264772b7abdfea00845872cf265433db5d09f5a60f5370c 1647424407000000 1648029207000000 1711101207000000 1805709207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-389 \\xb7ff80b0a2ddbbce801e67ef0e0e5001eb0e784f45a7e15aed999b075f31dac93ec2afabb75752d777977e59c18251b745d3fb8f6320e19cd7609434b0b3d354 1 0 \\x000000010000000000800003e00f8e8cfd287175310df669e1216ea6980192cd73a38cad0c397946659033cb415d8cf64068c2ecdb67ddf3edd84345a67248515d298bc25e3095964babd54a5c035d0dcefc1b6652f4922e1d2bcfcf38a91ce936af4b24f656b681d60e5bbae0b816a9ee681e2de73af8c835bca0310ec4674b9ca135e0d986cf0b0e93cc11010001 \\x2818080fdacb3c80856c4327fa1c1924546ca0f969ed93c99c020f286df997ed5fec4e5be7570686b6bdae90982fb131460b9e905208388ca8d6b979f6603d0f 1668581907000000 1669186707000000 1732258707000000 1826866707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-390 \\xbb2b81d485dd5d6a74c4afe00dac5dc6a0895a32e916e386b60cd5509f69c234f89db124a5a2af3826d22b50010497ab43922bbe709732cf229ab3e19be40d87 1 0 \\x000000010000000000800003f05db0b491304da6867c398700f54618ca28dc13b4153878abdb2cbe7bbd4ef2f1b57a8730877bb5b752c54859b0e264079c303bf056a34539b828b3f65827d4c56f30ce9bad98e0f3994580398f438fd152ada0ea4a306a9650a3cf7a51de503d53c37b710e2520f395f9d2e93123f2ad661f7d247a99d9ce54292565d8fdd7010001 \\xaeb100eba69c9b8bdf2f72b7b32bc9affc201832af94c5de8f89eb04749ef1371c8ce4602104da9b8c465bcaa56cfa38dedb20624defb70dd97e326f111bb30d 1663141407000000 1663746207000000 1726818207000000 1821426207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-391 \\xbb4fd1867b0e99289df037213a839c92ce52e262f59b33aea5608e91be199b5a749b65df5442cf1b71d0878c75b7737d8d8316192dcb175ad2e5e62b68557d87 1 0 \\x000000010000000000800003d704f7c16d9bd9fb963ba18447e05a95ab1926424511746905c0401d5af29ff829bec522c801da8c901279beb78805d59568cf1e885d7840ca1e62c92e271be4afa95740ab72c533339859a4ad81a4f91050a609d2371a3f0aac71d6b889f1a95a4fde4d62a007ef65fbcbff56c9d829b72ad7f81714a5a421234a3da16c8775010001 \\x60e159e72654f2d18c9e84b37ca16925af19dd0a47462d0570448793a8aef8a95a49dc1531d20823d7f20a611d08c7f9c09d1e78e6b79974567c13e09388c80c 1639565907000000 1640170707000000 1703242707000000 1797850707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-392 \\xbdbb93f47041ff7a8b490a2b1fb55282235bda5773f200fd7d4a56e8a54a2e1c34d15fc2a140136cab7253c359f0792786077f86b7d38a8478c9d3d9d6653922 1 0 \\x000000010000000000800003f07c198b5a24daf91ff6c5a3b5939eae9f6f379d3ddd6fdc48d9c1d2298ff4ad7f09dfa66ddadb9bf67088a15ab7c1f2a3b6136685f44e2ae8a14dcd6ab77ec70f1f8abf2de2815210ab2be6a7410411997f0fe8bc8f32c0f062b4c2474a20898c4c845635da8835da9f7cbf88a44e7ba41dd72035a86a2cdb8d66040d0c64c5010001 \\xcb1f79c8c001321e74f8990487e6fa697dd7a7c058e2c9bf01997442bfa223acddf6337f7e580a587253113990952237af16ba3c0d244438e2abb7a878eb2104 1640774907000000 1641379707000000 1704451707000000 1799059707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-393 \\xbfc33d0c4d8ff750ada338ae1b0ca0ab95af7f13f80360683d38683e15ff32822eb377da9f722b385b974bad49a84f224b115b6020cdbabb522dd61e69fde0c1 1 0 \\x000000010000000000800003ee86ddf546f47e3a6ebc0a80cc98fe5ebfa8885ee73f9fddf104eda9ecf329600a4c7c3dc45123840c74ed52b87e42e2803a9607274c8eab82896334c8ba3a1118eab4a8955f8fc279e78b0f9d2d2ece638b127ce3c1179c5e06e52b7046ddcf1374c73d8078b83f59709c819683d5064c84a09621417fb12aefcaebd5645237010001 \\x22747b859750d745851ee20f90398cb8b923ce750f9d643293117c0ed26e0a0ee71140fd42b43ac62717419db64f969bc2c9ffd872fabddfeacba404e1563108 1648028907000000 1648633707000000 1711705707000000 1806313707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-394 \\xc2c3af5a697fcab0ca39d06eda9ee668dab198a3b60a35ef770e7dfee37be1e354b6f72ae85f5dc0fe384fd7ef072cabdc97b253f9ba9f81ba075a48b54fd53f 1 0 \\x000000010000000000800003c4745ec7b139207783eb5b61e9b9bf75ddc66f678a4b07c606be631dcbdc30b963e2fe921fd3465d7e4b822d7e26b4e9199c431a93ea2d9c8cf00eaf82aa90a703213965f2e5fcf09ce93a5517b20ecd16786cb48972340aabe13216469b72a107a73edcd51f3414285764b4f9ae491e2870884e7fee9d026540d2b635dcbd99010001 \\x3f31490e541681f2c43aef291711571584a477f19e2577bfeda66f6ec16d06f784e2091442d23d9ff1dc20f120e76180b34212a3db31d45f1892f02f74957f0f 1640170407000000 1640775207000000 1703847207000000 1798455207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-395 \\xc99b04800ab16979f15fda289b6f2ee2f3b6f349fb594b9fa4536879329566ab7657b66699f2e93a7bb035302e7f35f6b64bc736c0189f50618084ecb0daf931 1 0 \\x0000000100000000008000039d4fa580a2d9eef33e18915f38029641b39aafe73b5b5912ea1445b95f7259737c3d562237e239493f1b71aa72174c8bfdf3acc56a48b656d7f44c968d9ac2503dc47b75d5ad9b036eb76659a5013e84f0d7acf5c4c0bc18079e32197d6eed85cb4cbae584e5e9f2d2600c3cbddfb2bce0f9ba04c77b851d99383a9cfa78ac47010001 \\x19edf26f814b5dac84628e4fb8fbca6e8940c66ad9f37a9f356c2bb422ddf0b5c42e7af8397c6b8a1c016af976a8bb8a205531a8b45ff48937dc7c32caa13e07 1669790907000000 1670395707000000 1733467707000000 1828075707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-396 \\xccc3ccda35d855917f602d86381de6106bb75ca74c2244529f96bb1481b460e9b2994defc206976e3b39fa170b62f617b935dea74e2c2934fe8baace5e9b8f0c 1 0 \\x000000010000000000800003b455bbc39fff26f5c5e12f7b2705a9a54805e96fae7091b543af91a5593d71621d2edf7b49805879a5b626aac9984f073310ff8197b0ea2b667921003ed1fe88bcc7d3eb6a691234ba10bec69b79d60eb70db68cc148e04b226b6adfad445f83930002041df89691de61a855304de48516a2ecfe0b91bbc4412d1a004bfb3d71010001 \\xeced69a6e3c947c9194dfd3e52b09114aa1bc9107dc289a8485ca9ac114a562bc1bf97f74a2d4b1b5d82aafde9b85c87e4f3ae2f62b7a351635fbedd4c48ff07 1656491907000000 1657096707000000 1720168707000000 1814776707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-397 \\xcd5f6694b1cd0242bd2dc0fb7b0713a8d6a93556d359a3972b939587fbf48940f2852bf2a6d06271870e932cfbcca52c358eb5f7b060005a7818a9a383649c49 1 0 \\x000000010000000000800003c2df16a5dc66227e302bc661d5f590315a258b2953c4689f9e22b0f768970c97d27e9f23b8062692f4fc7974a2afa068a8c0dbd2617bf85d2b66da19ce34ce6f45ae3ae636975c5b1562178f5b152e2948228bc0704488bafb7b764b6d423fab0511abb34b152fc9321b1420acc89be2c92d8eccee9b1f14a7b18b8a9028f63f010001 \\x2bb5f85eb2082967f14e221ced11667bf6d00ffe9e1102aa8004a55d5b8a41ebf88d099b4f4e887fc99369822b1b77986ef8f6301d18562f2bfafd98a5c5980c 1649842407000000 1650447207000000 1713519207000000 1808127207000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-398 \\xcdd7decca0ef3d431b5f0c83e13fc817d2c0a882f4fb024421de8469fda9aed200ab4f325f94138a6114fc1e214d292aaf964ff9aca06ec0bce5aa18d41912b1 1 0 \\x000000010000000000800003d7078aab8d0db8bfaf151c09115804474197305354e590bd966a7f5ba3a50db3ca8de39aaaa7e2567937d0b274c2b14ec06d9b1c4c865222ec72852dcd6d2bfa03af04efadbc54802615560dc1134d30b6ac944e3259371283cd7c188bdf9f881e112fff91bd1a03132ea2ff8adad8f7e9a0c049ec6a138be7640b6965be7143010001 \\xd0eb8ad8e0303c9d8701e1212ae907f62cd47eb204f2c955c9efb76ea4c033b3e287c90252c335895ef523f865990e8af90c5682379ea6a4d3fdb2e019710505 1654678407000000 1655283207000000 1718355207000000 1812963207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-399 \\xcd135953b5cb1a1390353408c380af80e6a4e05e81b925171e4656eedc05b39db9f390a05737abe94f981afae014e5cd6c1ec785f9bf2a1aea74f91bb7fe3686 1 0 \\x000000010000000000800003ac92b4cad03d16cd82136f781a30c6972eda438d9f38461ef72a5f344652be5de8614b12c9ed6da2fb0b516d948c5edc491cf1724a757ec88c1263a446075e821de566828bd1334a7efadb5f3464bfe12e3879d0cc91ff970e299638ac4e513d39cb807cc773285d883a232bb53af8453452f9fb994cb92ce4f983a5dfc402b1010001 \\x4fb5dcd28a8c08f1afd4e2f155815617811074655fe5ee7e7ff337466890778dc4c5bc5bde9af706a802f07f4d58bfc14165045dc51d2c9eb31005576e5cf005 1661932407000000 1662537207000000 1725609207000000 1820217207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-400 \\xcd7f39133980fe514ceca61cfef32644414ffe1d7dcf4171713398c28f4f00baad48b4191c375e0cd9754597a94e4a3bcc8c84105e8a4ebde986013685ff74c3 1 0 \\x000000010000000000800003ba133edc518e885027b0d44935a79afed0c510556be79164094409be1ddf10598fba240853204ac130bf85ff881fdae33a53029487775ff252fa4c6c0779311c79b42300c48b926054b0998c20f064bf44718a0b0c6fdf48d7aa5a0a73dac3ec22f757d1dcb595ebc78419139cd45a8065450874a3247ab94725c44650f332ef010001 \\x8f143554b8384105eee95953a3ae7db58e79fb79523ec6c2ac2ac6e76390f3f242b979111c2d6d7037760071f1183327c6af7d88e90a5c5410ef6adba684f409 1655887407000000 1656492207000000 1719564207000000 1814172207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-401 \\xd06b5e3b47e340bd2d1df0e9e351d195e64a1dd7b9e68136a066eb36441418e848f0f1ecd3e6734637f5b6b2d31fead7ff0d4ddc23649399147068eda445af0f 1 0 \\x000000010000000000800003b946c02bb3dfa48742663b8fdc2893c25a24f175eff824da4638af345ec86f657dda453d2073eb86bbc8db3538afc3dc367c667a5125fb77c6a9ad696f32e159058cd31dc52baf072b951ee8c8f3cc02f3ec8172a0eccb94d6d334f7c6c265e9664ac56408e3459b7ffd14c44560c3378bba7d84d510f96658ca717b5f789e5b010001 \\xb436a88fcde97a00a8729b6bf0a5adfe1085ee2dafcaaff77983513b92e36a42303348db3a171c4c760c3dc8fb2992af94981e746c4e90ff45c8f3d932659702 1660723407000000 1661328207000000 1724400207000000 1819008207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-402 \\xd3e32493ee2535dc47b00a8b84fc94b86a6e7e978b51798e2d427d3b94205e12e908ec04e399b875d7ef62ecd3ee1d9e92466966440cd95d85b20ad78b51e32d 1 0 \\x000000010000000000800003cf3b4c19e1c394fc50f96ca420403ec4f20ac3d94bc2a5760410480522b49c525a80814894836f7ede904de7ca1541aae814c4c6a4659b9215bf2d4ed598195f2d7868b0c45d9b4f2cbae55d64d6100ceb41325f29fd475b42bc37ac9bc8de03453d238710aaa49c89131b94eb38e3e30fa3a825e9bfd065538d59c8364dec31010001 \\xf77741b28a9b62fa78617ba05882627ac61eb264ccc821d83a49f852b360f628f748a991db2694ef6623b5181f017fc8b93121d706dbe42dc19dfee1877eb80c 1644401907000000 1645006707000000 1708078707000000 1802686707000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-403 \\xd66bdc10d92f4709e7541fdf97cc3826105ec0a4f19907404d9b6208cb1d33ad52c4f96f67b04401e86de20548db21a36c3283b7bda2b7241391b1d5fa7b097c 1 0 \\x000000010000000000800003eed8cd91771ab3c6f75e06a6c78d5591c6d63517950c7bb09adbe2e104323710c6241018f43bd132b38cc18d0edc562b269d7ea765c43372bdbf1efcaa3c9266fdeb09f4c06110c9f03865fb32523038fff6d66767c2a2848fbd12d8f2694601aa26bb3916d9da9533c96b9b7d05a9cd239c4914cb14620089ab29ad840d8191010001 \\xb9fa42d686599bb182053477da14e3faf7ddd9d0159108e7690ef3fd8db9eb600372f75aefb65897020f522cbc8881c2d5312fd9f3c7c06659d78e637aee0708 1662536907000000 1663141707000000 1726213707000000 1820821707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-404 \\xd7970f0f2d92b9097a4b490a797ab837e261055ea9fedfac2fde5ebc9b460503008888c2d9b6b3cc9dfffa432338a1f8a0c6a98e9216e76491b2afee1827586e 1 0 \\x000000010000000000800003e28cdce3179d417a1cbe63180e353da12bec8b5bc1f212cee3302483f92e1eb6135ff3e45735a1a7d0a8e94f79f79cc16cc36395cc3852df17be91a67e827c73fe02d651f313ebf0389e0b49a9094528d41290519779c7da4a0b28217ff5dce16dd108ac93b064f578fdb6f10a55a4f3011dd7445ac7b17c3cea731d95aeeced010001 \\x3461f4bde099b1a651dca8064f5dfb26c0245c4e1e221cd5fd0682c120f7069852c17c3430f1f12b5cb43c98736ef65c4aeb0776d9bbc001834e35128b388400 1648028907000000 1648633707000000 1711705707000000 1806313707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-405 \\xd827cff00124a10f189b98975ed7fbb1eef20ff8d697832e9a49793d84627461a00275b4428e7688d706b1950e6ad7511b33c1ce98cc0b409174db1f4fd67f20 1 0 \\x000000010000000000800003f4b86788b2516dcbb7508f94129d06fd07212ebddc41e749284c689570ce672c5a47d640a3c19dee0d3a0692f3961cb7ef6efad191a32758c9fcff72c64f267cc79fcba1889a5757db16fdbad1b5e78c8ae69f2c34137a3ccf57966f923e5000d148c2dc0088461e878e3e56522e50a125e277f6b77a4afb0d3d7d17c820af39010001 \\x11d37241ea80057d93dd20b1f9efe22df440072ce26872988bb6c1adab73dc036544aa92508fc1919c8c5c35001b3ecf59ab36162054a9e0d54455b4e6c4d70e 1643192907000000 1643797707000000 1706869707000000 1801477707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-406 \\xdca7b4b9208f73f76797d452767d8c0f50532495000406d42a4bac366eebf5265c3be843a4e2169a8fd9f2d3b616ff3ab45ea221f39526d910ad5cb58c863691 1 0 \\x000000010000000000800003c0761b44fe967a4b7ad46c979f4c3374787f0f693d846efa38b8acbc1a1b9ff1a2ef4ade1520df07a904f048e3d4da7f7b070effa1041f61e96c46b5a50965bb0a9b6a8486478eda125b1a13b8c5c015aac105352d00c15a52c5a308cbe39b90f87e501b16b32bf894a3220802ec7950845c944b87cc4d81dce22e2378ad148f010001 \\xb9afc278ec16057d943c4fa046a3d0aecadf9809f1c91b70e1b5d0f478a1b5887e8717cd894684f1eab116ecec149ed57804020fe59c61a5c90864c7330e2b00 1661932407000000 1662537207000000 1725609207000000 1820217207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-407 \\xddc328ea9a7291fdb7e10d37c4f79c73523e91d0630cdb6b30d54219e1788f2b951d7f93194a548e8f1ee646583bb158d83910aa95e6ad79af6351a02c41d36d 1 0 \\x000000010000000000800003b037fc934fd95a17436f4e495291c1cf80fe8bd04cff43370876396b822137c9e428dd56fce60ceb0286c3544025f7273fb936f7e1f0d835dd77f4c187b8af4da1923db0de428397d3fdd1fb0388d18055c484c1241b5d82a3f9185741fffb93dbce23b8d5671d296279f75ab40a86bc6567ed629b1d0bd401fdf6c8cd9a28f9010001 \\x06d608cbc53e91a3e3c9f76e10c95da8e48ce57b9292bb37219d7b99b745d8cae74a2e0ddf77ecdf7c87c8419d499f4b669d8e7f3b270781dc62fb386f03d30e 1667372907000000 1667977707000000 1731049707000000 1825657707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-408 \\xdee7a5c873775fd4080265c6b378c040a45474a1ed5d4e7382815956e0c4bec4d5d168b81d1c8fb75037876c9c0b265ccbd08b7379e716b126ba465a23bcc985 1 0 \\x000000010000000000800003b72bfead6af31055e4faf30c1b7672f3133a17d8b1bb75c9b4e6e5782af4f3c0564a0e17a0a3f0cd69d19eb0ab8bc67c86f02fc23aab8b479b643c6f4e4b670427f1b27ae014db04660372ceac361617606afe0fe7437eb459101d591fc250a9918d1a169f4653062ae99f16f615921a0e9a686216e0d913bfcbf8a5a69cd333010001 \\x23c9ab07c55b026112644efc984bafae8b4427684f6122dd7d08efc153c4c3895e11bd15a60436ff97653d58bbbf44db034aaa2f10de3fa4c9cbfc909aa7f00b 1664954907000000 1665559707000000 1728631707000000 1823239707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-409 \\xe5f3915e7b0ff30245ecab05a5bd785009f379e599c57006b10f4aa50e5bd46cf3f61898befceb08810f9ea1c7410c76ff4fc4176de25db54083f139430476dc 1 0 \\x000000010000000000800003ca21fbb287b1757ab46ed3e4ec908ff9f7a33e9fdb038b0e36019d8a42dfd332a12473257f3cb568dcf8b64d902d514d56264b8567db8b9dc48bd1ae8406c561ac5ffe3375f0876b9e2435a7aa8f25e288035a2254176e28d96383b2bd7742a14dd70be4d42eb24a264ad640559776c5511d2c0f0c2ea41b685029b286f451cb010001 \\xe84198507e10c03b8ef22e12c23bf63590ff3eab4f10ace2f5a92b2e5ac30e073d02e31a01a1637762aa12128e702febaac5f464f1e929bc225c4801a9577e0f 1653469407000000 1654074207000000 1717146207000000 1811754207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-410 \\xe6776adb5e7d94f74f2b1d1c7cff6a7864340484a28b226a8e4e31a9078a001ec2daa7197937165b8865a8f4681bf7cce12e6f9f459ce8d2eeca3fc1097270ad 1 0 \\x000000010000000000800003c6bf1e60df8d6c06b3c901d21db54fcdffd1b2a06d118eead0cfd7520f908a6971cf926db45d2adc37e8cac4cda2aee8031e3b3da325e2a21b8d3398b1c3c4d3928b0dfdfde97dea1e2d796967ad04106796426b6c50d3c39a8ab5e077ec6a6a2605f6521267342520872b5f761095b9f22150c29ec791714f7fc29f2e901b83010001 \\x5aa893ed230b99d32e6d69373525cce448266db79600abc2fe0361d78c3e89515ccd4fa5358a2c11f40b45ac6f21ceba72d1dfa0baad71a9c5c18e5f4ebeba05 1645006407000000 1645611207000000 1708683207000000 1803291207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-411 \\xea33a43acaac9d46dc9ed659328724fca21f73eda75fd8d7682fa15418251648c8d71d534f0a50e6cf1e3aec8ee3f78321ce261f45ec60ea90014c5bdf96f973 1 0 \\x000000010000000000800003c874b9e3fb697a73d0595b23229b77945ec0b703a2eb06f56336fc6bb27884778c640856cf37b60aa1212466823902802c36bd8ab51bde7f7d4635b695339b5e3fd7355cd15db24cb6e6ba0fcbc43c146161ad47fa11c84002ef0ce212144d82838da2f9c7fa36c9c3fcd44acdc31dbdc745cdd1795c611f7ba0bd861f77c769010001 \\xedf7cab4da3f3f1934071bb846db999cbafe4ca7bd6130ce5b44a3888d3c1a4a4ae0eea0b30f7240f5fc61ca7479c4a200043c477206c8ce2d1b565fc498aa0c 1649842407000000 1650447207000000 1713519207000000 1808127207000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-412 \\xed23289b0e1f39f92121d8670dcb26a809a55d0bec14dc732de2a9bec755cbfec3ddde6e8951a5893e6328073586f59f96c2532dd77ea311c58c375f5a3d2e97 1 0 \\x000000010000000000800003b084aa1c3679a36d6b5eeac6fe88f2cd5b3345c52b4b6bd2b623df0af40186963719e1aaaf1dbcd46ce648514592a2f4d24c5c24f977985bf4c59225a2b719baac8bbd5dd4db736d425ae2f85e5aa6fc0fb2c056ba5f6019ff0b945630f1dc6791e5c536cb7e6bc252012eb36da7df455f477c2d149962e5011955029bc90fdd010001 \\x78d304075ff6632bb025987bccfb2c6aa8fdd0ecad485ef6862ec815157a2cf6d36a5fb2c9ecb456cf7cfc650432fb6b76d69e05b815da870bf44e58e7c72502 1657096407000000 1657701207000000 1720773207000000 1815381207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-413 \\xefdffbbca519758402a56e4e186b38e77ca4fceafc7935f029465184af1330229ac7e824bbde95f0ebf53757a4703af50911bd12d094970300701463d2974787 1 0 \\x000000010000000000800003d68416bc011ee9cc9724c2ec7252b5e2d192fce7428081dfec8410348d3d5780e0fd7c82e494724313f3198df76e3688583bf20ea016cd22241491c43a6c4b1e8c8ea857c2cc2776a7a4a46fcc1ddd65d8f1a41b9e2be958e4d9633e2a36bd4aae64edb98d0b9553756fda5e58257296ba5bdc0d71ea7c345eddc849822cce1b010001 \\xa327839831890e63356283bebb3b66647296011f956e0af3e4781d3b0303ff617dd9f392eab6f6ae1b2551fae8057419906e4986af6036131a1da9dd7b417d0f 1650446907000000 1651051707000000 1714123707000000 1808731707000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-414 \\xf1c365d5348d6655b3328d2d2a31f05413fd807ef61c513a0680a301ca90162fbe225bd0e561f1954cb3c273960ad2d888296c0ace3622680de9403def30fe18 1 0 \\x000000010000000000800003b707efc21bd92d7d38189e5530374ebefe15b899d7aeb4e41ecc393996cbaf55dccd9e25f6b7c96fc23795974e5277504dbc264215d48e54d161c259c033af18c83c0a33cbd011d33a8bee2314662f36f2905e028c056034b5abf3d199a597eeb49919e515fd9607a831cf43dc1f3ddd8b1add89051ac9a74b77d79d3eadba2b010001 \\xcfc5f4e6b593cb306f53218bfc3c6ee4d328fbc9f451da0c3bad8e2e8dc9f35939bb5ce1185c12208054f1bb1500afb083b07b77e17445f805d1b688e76f8f04 1640774907000000 1641379707000000 1704451707000000 1799059707000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-415 \\xf207b867ce9f54d9f19e8170ed444242406f2d8693678d924bc11c1b4a1b19235d8deab348e4c1740fae79af6e5d04127d7ed2419c5d3d3b267e3e9dafe36582 1 0 \\x000000010000000000800003b7d19309b9a5393cb6cf29ea3ca1a42ef8179d8a8907523fd7ec3379d5b533471eb652c76891780d7ab02499416d4fe4189261a11ec0bb1b75135904302a64245298ee871e617c0e83838fd668abaccf70a627b625a2c54c9b4c2c5394ef4e62a7a33d32a0a08feef25b9ba5d58ac14172dedfbc2607d6f06ec06eab4dd1c625010001 \\x85368c8d8cb02d22d1a4fa26e6f979c5f33e95e5b2e8678cc5d7ff21741a1cd56081c95f647fbcaacc0302c8d4f9908c3cfcab018806ff7d33c61a452eba4b07 1651051407000000 1651656207000000 1714728207000000 1809336207000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-416 \\xf5af984ef4b63bbad0524053c7d4427da00fe2de44c9c73a20a10d3211c540bbb74346823819cd0ca3d464d237a3922c44c0fb92071cdb6acc4d357f4ac49243 1 0 \\x000000010000000000800003aa5103953f746c41c89cd82ecbf44ddef0b0fa59d119153daa3acecbfd0b0e04fdee3274e01978a0173490a57981ca5da1af3260db397d41f5b84783567ecfaeeb2bdc05e02b29fa122b66d96adbf7e82fab5b5a459b40894b24447663bee17e239a5c6f31f6635203526c799b2b842467615efb67dfb0a6dbd3c60a5295ca85010001 \\x1766a88f90b81b7e00983cc8955114be30d70eb49e79546b722e5e9218914f1ddce748b5da58ec01233b1e3ee61b8d0e6258fea24ccd234147ac3429edf65300 1646215407000000 1646820207000000 1709892207000000 1804500207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-417 \\xf6f782d75ea7a470e3a7ffc79b78536abce6143954f364debb884140deb6f6bdc68ce6d8a41e21482da3ad79254d7528165040b5010009239006d172d2ed5d56 1 0 \\x000000010000000000800003b59048ffe432c0ed722638d3db58e83bf85ad46f2cd82d1ebcecd335bebc0385770f26420b32e6c851220829df7712b15f92c988ccb8f0834dc5625d0e503de6c397a181085cf2186fe74032d655f17c38316b46be3a05275fb4b40b0674dde5c44cca7e9473efe1bcd293c1b56c27234a275fb69b2f7f7ebadf5e60204f133d010001 \\x6b8177de8e63ea8aee346cee8a6acc45157fcba42619e6b74ca51c5b053a56221b80562c6a0920da1a2cb431bc8158cd88385cb60ccf52bcb5a65ede907f8f0b 1662536907000000 1663141707000000 1726213707000000 1820821707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-418 \\xf70f2890bb8dbe239357afa64b38f79d20c647096ac714e350e6517f2a2a09ee97c7a316027a362f6e5ce118b9e7b67f36ebf5b5ab9a3fac2c625cbd28e53692 1 0 \\x000000010000000000800003a9877e18d9a3950dd58619475efe0b2de838842f612503e8f5dd6e5a23279c6515611b8dacd2dd61e262079bcffb883c6e36054b36cfa0e8794c6102267e501c357211859112edd3f80837354efc2de10b74585b62c59cd035c5f6a096e90b68ba814e475d0c2d79ee8015cc9c23b3148e6d8914e4b100134f02c7923f28dc03010001 \\xc32439a01911b822d3d3c2d08993520bfb5a4c4774e1be252aa012252a5a5717749bd455cb03add23863d0da4dff98010acc462810225572e490fffafb177e07 1666163907000000 1666768707000000 1729840707000000 1824448707000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-419 \\xf90f2a38dffd6fab044e7b827b1da1792c772c665bda398a31ed823af5fc00779770c09ed7be2abc5556aded53c6fb032928abd268fe917724e729f33075d4b6 1 0 \\x000000010000000000800003c3f44c0b78ec94fce547bb062fcba2d13aa5e5ab6c298399a43f47d1da8166d26370711f6e53d1911616c873c724ff4cc3b83ffb62275c07335c8d79203f4d07baceb0af4b1e95691d69b5a2344c268e0f295680013d575c8087a5eac71a4390777c76a13bac16deb3e4563e34c63fb13b8a8ee6ad093cba39c9c51846944aad010001 \\x77521419902bf79cbbc6a79c06937e362c581c4baa3536a55c5ee547b661a99349de7af801c4c1aa92876a513a14727b6e5c50d00d19cbe441a38b867b686909 1646215407000000 1646820207000000 1709892207000000 1804500207000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-420 \\xfa134c4c491cccf953a7768fe942db20234765ab44df157781e6f60e05076c0af9d89c3c5cf16bcff18751f04d1247fcd4d1afd3a9f5d62bbd4671b382a3259e 1 0 \\x000000010000000000800003b48e504dc0e47b3bba11298708741d8b41d2a94da6b0fa8e5f3057ec0f05f164eeaef8293625d2b95975c7c094d86ca329a5710b5db576af6eedb333f26fb80fdbb163c8c99e846efb0cd88e55a33d276e442a27111364adb0bfb7a5eb9557e4ff3166b68e4ff19f71fe85a04c51aff2dc5fb2d744b36a6fca79e7f980d38771010001 \\x2508735219f6e6f13976a5683a940a004a1861e2eb03e66141e3c25413ab5eb9732cc76aba197212e40cd2d34ebd6a4efd648e7a5787aae7e295a76fd02cd905 1651655907000000 1652260707000000 1715332707000000 1809940707000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-421 \\xfa4b3180c4565700be2cfeaa68eb5eeff1ec05fe70a3ccdc1708a984cc6bd74dde8ed63858e8f185c1c7f177f8c5d5f84a5b8f8b74c09f84ae475ec706582060 1 0 \\x000000010000000000800003a41ee50ff4ac56eb446ccce9e0f2188baa7e3234576a8a0b6854582e925fc52360f56af6a6115040dc27dbe10633302fc1c63601fe22a755f3bdad4bd08281eff0e096d39098ef50f7724858c69050342ea9dfbf73b97c8f944e01c29bbcaf9d2a493ea158d643c9247a7a9125f028bc5117fc8d3e27bf7a8a47e9923ea84e4d010001 \\xece054072f0b7857bcdc8ea0ae507d9b5dec7bef3676cc548630525b8d5d423469dbffce0b38513c9846f763b8d381acd8a69002198740374f6d755f4e1ece02 1652864907000000 1653469707000000 1716541707000000 1811149707000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-422 \\xfb8361b479b6a5883e276dd8446c325dc780cd3b458f1611f5e984c997cb86766f29962d31a15ef7e304f3d499cfc946dd736f89ef8d37ab3daedff5e486276f 1 0 \\x000000010000000000800003ef04cfab9bd14575bf540a3fb7ebbdefe7373af8354312175e2fe589852cd612520d99c7efe0216ced953f2b7cad6dbcae98c400306d66183c285b57dd02170c89bf0798f87d6e4d47990ff6c75ab8151d0f313aa7eb5d5931b2a335ca02f47e64296f96b91ceb8cd6224dc33079b20feb1dffbe0d951b11b0970d9f6ffc259b010001 \\xcd3065fb59fce9f8af2013c623c721472e1a2e30eb5d82d2fd564769c8ce54dcfdf45713a811eeb70dd7edbcc61b60f145e365254cb90bef8abcd07abb52bf01 1666768407000000 1667373207000000 1730445207000000 1825053207000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-423 \\xfccbee203a96da3fd875f2ebe46a1c4389590556a4e69ccac39f63835fd371459d3374bf2663cf863d6b507d5da43caf0cf3a69f0db6b8ee2f673e9b84480828 1 0 \\x000000010000000000800003adac992cf9e68952f02993be8f9c0cfc3fba22b582033503a5a8a8c4bc80f2b36af840882ab3ebfb650925e4d53fbd8d7a4651e0c2a2616c7313f376ecd26e91c94771b6cc9c937c2e05cf095946a286ab0ab17cf8885f7ee84abd73d46552ed8fcf5cfc71d68421e06a50e649e6bd6d355cceec28c29099ee34ea9509ee5779010001 \\x33b499ec6459710ae761188db64d17879cf62410f52dc38b63bd619c341a82a2571c7c8df278fde9d48d015e1e4f03427c903e336e448b1e15feddb04bc9ac03 1642588407000000 1643193207000000 1706265207000000 1800873207000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-424 \\xfe276e4add494fa4c9a490cd1b8d1fc88641547dc52ff9c9c66d17cef07b836645c262f48df3f8d33e146dc9475f13719c23abfba527f103f1ffe5ff5450e333 1 0 \\x000000010000000000800003acaf8a1d540e4d0710dced5347b93e5c50e5e4b2d78fb2317f86a9cdf63b64f489c14670db3ac4661a15606c50d76e4599415bbbaa51770e91a07956a857ec71fee2dc3cefcb02b2695cf8d91a3e4dd508fa1324a4b12b562d8617f418932fb9f450760397ee9d9d4222757bc93cbf20a2836f234a625f16a9c823f428673e5b010001 \\xa747db57c0d4eec99391faa364e23bce7d005635ae51905e54dab14f5ddf185eacfacb706aa42b4ff482d0bd93f326a60d98b498447682e96372aa27cab24304 1664954907000000 1665559707000000 1728631707000000 1823239707000000 4 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;
-\\xc224b524084bc7ec63376db8b4899f2ec3b0482bb6f8890560b236cdc4e167bc 1 \\x8ff396e353930af5c419a356bac9e48feda8764c688f65fd13107b10b270f2dd16aa44a6876cfb02542834ffd6d98da9066c23ad69c1645f8388d441cffc4674 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\xa42c95cbe4589410d07454e975c526f62721b8d9b7e6184c027a8b9dfd522578cda79ae6d90b306b07ec4d2c50c4604b50bfcdfba507bfe2f0da9d45d84a788c 1638356927000000 1638357825000000 1638357825000000 3 98000000 \\x864b23a89d412fde2af83cf9bb078a655b52aa34299a13c7ef391ade35e1c89f \\x36e1584ea836c7f6fb49a20f07f13b9d25fc069dada9669c8572ed096c63799c \\x2dff75327b84f774b7819d4654c9c64c96e5c6f4784c7fdcc14495156e06c7d0409e5594a7b3484b3087e23becf6be92508d6d59ebadbddd35173b947c8be70f \\x70e9063063f4dc2e3532a458ab590fa6c322362e45c3d19736b28f770d79af0c \\x00000000000000002f20da7bfc7f00004f20da7bfc7f00001020da7bfc7f00004f20da7bfc7f00000000000000000000000000000000000000cf64f701113b71
-\\xc224b524084bc7ec63376db8b4899f2ec3b0482bb6f8890560b236cdc4e167bc 2 \\xa915f2d530da9b250dee47e6375c4a95dd9f722600da4fe78b1a7c796271f9f213c2e1a8707084bb732b3e32f0e59ac16b40e5600d861af32370812c10fbb03e \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\xa42c95cbe4589410d07454e975c526f62721b8d9b7e6184c027a8b9dfd522578cda79ae6d90b306b07ec4d2c50c4604b50bfcdfba507bfe2f0da9d45d84a788c 1638356935000000 1638357833000000 1638357833000000 6 99000000 \\x1e0c2ac6166a810df10d007612059e812beb4865acd20d14b8fb337dc4eaef00 \\x36e1584ea836c7f6fb49a20f07f13b9d25fc069dada9669c8572ed096c63799c \\xaa022ffb061f9e3c3b6f4272422b450c5872238b036b91c2b1615dc28da996babe3c263913f59a7a15ce4b102309781f4dad5a3bba86364a6742f0e1a2b7210f \\x70e9063063f4dc2e3532a458ab590fa6c322362e45c3d19736b28f770d79af0c \\x00000000000000002f20da7bfc7f00004f20da7bfc7f00001020da7bfc7f00004f20da7bfc7f00000000000000000000000000000000000000cf64f701113b71
-\\xc224b524084bc7ec63376db8b4899f2ec3b0482bb6f8890560b236cdc4e167bc 3 \\x9b46047240a728295adef55198dec4167e56abaeb0d6bd2652bf269028d617062691ade7c485292e82ed684208916cd2d657dfc6ac1ac4a5bd997d4daa9a1530 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\xa42c95cbe4589410d07454e975c526f62721b8d9b7e6184c027a8b9dfd522578cda79ae6d90b306b07ec4d2c50c4604b50bfcdfba507bfe2f0da9d45d84a788c 1638356943000000 1638357840000000 1638357840000000 2 99000000 \\x4cd9aa99d5383b0d249f0c82424ea26490fa945aa7bf35a6552402c9fc635c73 \\x36e1584ea836c7f6fb49a20f07f13b9d25fc069dada9669c8572ed096c63799c \\x2adb5f3069c939c45c0c9560543f63259540c9d8e694cf7424a0c2dd1fa86cc399c196bbc86fb76ee5dc4fede7ab899cc861a6ada9fc46a600ba3cf76f542900 \\x70e9063063f4dc2e3532a458ab590fa6c322362e45c3d19736b28f770d79af0c \\x00000000000000002f20da7bfc7f00004f20da7bfc7f00001020da7bfc7f00004f20da7bfc7f00000000000000000000000000000000000000cf64f701113b71
-\.
-
-
---
--- Data for Name: deposits; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposits (deposit_serial_id, shard, 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_serial_id, tiny, done, extension_blocked, extension_details_serial_id) FROM stdin;
-1 676795002 1 4 0 1638356925000000 1638356927000000 1638357825000000 1638357825000000 \\x36e1584ea836c7f6fb49a20f07f13b9d25fc069dada9669c8572ed096c63799c \\x8ff396e353930af5c419a356bac9e48feda8764c688f65fd13107b10b270f2dd16aa44a6876cfb02542834ffd6d98da9066c23ad69c1645f8388d441cffc4674 \\x782d66d05eeb8156ace439bcea6943c212fe06aeb1a528f71b62f299a4f9afe427c225675f19087c43a82a7dcb3b3feaafbe5111bef858eb5bd7fb654b1bf70a \\x0849796f95f39370b7eaa8c0d2fe2327 2 f f f \N
-2 676795002 2 7 0 1638356933000000 1638356935000000 1638357833000000 1638357833000000 \\x36e1584ea836c7f6fb49a20f07f13b9d25fc069dada9669c8572ed096c63799c \\xa915f2d530da9b250dee47e6375c4a95dd9f722600da4fe78b1a7c796271f9f213c2e1a8707084bb732b3e32f0e59ac16b40e5600d861af32370812c10fbb03e \\xcf9283a6e88cdf5480f5b22a6c22720371f1fe575f6ff1f1477501064dc699b3b34ee0d55ffbca4f09ab51df39424897619fb4b9659de0fa0cedf5834658fb0a \\x0849796f95f39370b7eaa8c0d2fe2327 2 f f f \N
-3 676795002 3 3 0 1638356940000000 1638356943000000 1638357840000000 1638357840000000 \\x36e1584ea836c7f6fb49a20f07f13b9d25fc069dada9669c8572ed096c63799c \\x9b46047240a728295adef55198dec4167e56abaeb0d6bd2652bf269028d617062691ade7c485292e82ed684208916cd2d657dfc6ac1ac4a5bd997d4daa9a1530 \\x393358c58a375567de85e2f496bd60553ad297c93ad96a53dca91cc8c0a7982db47dc6e41cd2de364799387e304a2a4ff3b5f6e81d2a387d55b45b90ec0c350c \\x0849796f95f39370b7eaa8c0d2fe2327 2 f f f \N
-\.
-
-
---
--- 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 2021-12-01 12:08:28.114454+01
-2 auth 0001_initial 2021-12-01 12:08:28.219049+01
-3 app 0001_initial 2021-12-01 12:08:28.289405+01
-4 app 0002_auto_20211103_1517 2021-12-01 12:08:28.291863+01
-5 app 0003_auto_20211103_1518 2021-12-01 12:08:28.294599+01
-6 app 0004_auto_20211103_1519 2021-12-01 12:08:28.29681+01
-7 app 0005_auto_20211103_1519 2021-12-01 12:08:28.29883+01
-8 app 0006_auto_20211103_1520 2021-12-01 12:08:28.301082+01
-9 app 0007_auto_20211103_1520 2021-12-01 12:08:28.304051+01
-10 contenttypes 0002_remove_content_type_name 2021-12-01 12:08:28.315131+01
-11 auth 0002_alter_permission_name_max_length 2021-12-01 12:08:28.322694+01
-12 auth 0003_alter_user_email_max_length 2021-12-01 12:08:28.32838+01
-13 auth 0004_alter_user_username_opts 2021-12-01 12:08:28.333899+01
-14 auth 0005_alter_user_last_login_null 2021-12-01 12:08:28.33956+01
-15 auth 0006_require_contenttypes_0002 2021-12-01 12:08:28.34173+01
-16 auth 0007_alter_validators_add_error_messages 2021-12-01 12:08:28.347167+01
-17 auth 0008_alter_user_username_max_length 2021-12-01 12:08:28.35759+01
-18 auth 0009_alter_user_last_name_max_length 2021-12-01 12:08:28.363555+01
-19 auth 0010_alter_group_name_max_length 2021-12-01 12:08:28.370757+01
-20 auth 0011_update_proxy_permissions 2021-12-01 12:08:28.378008+01
-21 auth 0012_alter_user_first_name_max_length 2021-12-01 12:08:28.383754+01
-22 sessions 0001_initial 2021-12-01 12:08:28.402962+01
-\.
-
-
---
--- 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 \\x8256a7d9b2d88222b0a712440b18497a44fe0415ad273f0af8f8cbda1ddbd9c1 \\x13bcca62575c0fb2e41ca366031ae84da7fee7cbc266eeb24efc64e9d47a6a35376c4af44f5e4916ca27ff356fa3b8918a9e6ba10c54c8a66fc85cf8bb272000 1652871507000000 1660129107000000 1662548307000000
-2 \\x6a7c9f52129ebc445f3ebea3eb3ca9fce6c1b89c7d755b05ae29db3909b2ee11 \\x9f5394c955b7aa653d1e8438447136f2dd6e819f182c6b8a7191c62baf4e2d0859796a55c4d8e91d4a574b02e652ff7ffd43eb8f5e053752cafc621d5b259506 1645614207000000 1652871807000000 1655291007000000
-3 \\x70e9063063f4dc2e3532a458ab590fa6c322362e45c3d19736b28f770d79af0c \\xa96df026c9d79a0556d6ed540e8cd4465ff397bef464c3d644f401b3f3c27f4ae4c04a21463d16f75d1275404447c02778884e4370086400c3eca5e4f6d19107 1638356907000000 1645614507000000 1648033707000000
-4 \\x7cca75492be957360b96eb8bc06b45fbb395845edd482dab5e72aa84c64615a4 \\x667ac2faf237c1ec5c18013184af23aa59593f6395b949c32b8b4ae17c984c795f59afe87e4b80b9b5605f45d19deb171b0ce1630868ec808937ba277edfb000 1660128807000000 1667386407000000 1669805607000000
-5 \\xff2a8f708a9c59bea4f2b4b9458682804452ed63005234c01a3cf995299e8e86 \\x65cbaa87d6229e799b3e49a5058899745bc3a224dc0a496f6c3fa5d3b6e8bb62ca7348315f29d6d14f9b77236cb26dc6017f6a8654e7e8a500c7087115857206 1667386107000000 1674643707000000 1677062907000000
-\.
-
-
---
--- Data for Name: extension_details; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.extension_details (extension_details_serial_id, extension_options) FROM stdin;
-\.
-
-
---
--- Data for Name: known_coins; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.known_coins (known_coin_id, coin_pub, age_hash, denominations_serial, denom_sig) FROM stdin;
-1 \\x864b23a89d412fde2af83cf9bb078a655b52aa34299a13c7ef391ade35e1c89f \N 224 \\x0000000100000000b412ac0632df5a1940cc43e3e56f6c2ba2de98ab9404b0b10f87ac51b74aeeb625624138b07cb86fc0d2e6d4b827aba0909e2d096e9e46d18d57508fb4741a8f2e66b6524c80c21751e77376b6975aa9a90b8d8cfcfb0f72aca70aa77bd43fb633cc415c80555dd1a4a9fbbedd8affa6ae12dad7c0bb326719b67467315073a8
-2 \\x1e0c2ac6166a810df10d007612059e812beb4865acd20d14b8fb337dc4eaef00 \N 155 \\x0000000100000000aa0ea95a18c4f52cceb7fdc0dc2233d0a0ac6cf3d92b1356037c865c49207ef8405769926999095a25a1d211803f20995dc3a1c18c29341f6cf91de63942068278007dd00b5d46101402810bb7ff23efce865301f3d1f01866c2d62c3e2b25c634a4df60ccdf2b7fe947d5c8959704eb58e5f2cefce0b1418b13af600f6767d2
-3 \\x4cd9aa99d5383b0d249f0c82424ea26490fa945aa7bf35a6552402c9fc635c73 \N 158 \\x0000000100000000af79a3fc715f12fadf87207e01714aeec8e97471d49a5f98189551ba9b677c208829175e0c687e69d4a1a6e10b498f588dccf7c771b463e26d7164a48da01b4f3e76ba8b36ffbd84fff43dd5c81e59d5883def770c55eb4c7a3bf9021766f6e67358be70f7839aada93784e537baded5d1309b0de54db38e8b428a9584bae1a9
-\.
-
-
---
--- 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 \\xa42c95cbe4589410d07454e975c526f62721b8d9b7e6184c027a8b9dfd522578cda79ae6d90b306b07ec4d2c50c4604b50bfcdfba507bfe2f0da9d45d84a788c \\x0849796f95f39370b7eaa8c0d2fe2327 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 2021.335-00P4MHRW2TJJ6 \\x7b22616d6f756e74223a22544553544b55444f533a34222c2273756d6d617279223a2268656c6c6f20776f726c64222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f746878222c22726566756e645f646561646c696e65223a7b22745f6d73223a313633383335373832353030307d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f6d73223a313633383335373832353030307d2c2270726f6475637473223a5b5d2c22685f77697265223a224d475039424a5a3442324131314d334d414b4d514248393659524b4a33453653505a4b31474b303246413553565a414a344e5743563957545756434750433342305a50345442324752484734504d355a535158544131585a574252444e37413556313537483330222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032312e3333352d303050344d48525732544a4a36222c2274696d657374616d70223a7b22745f6d73223a313633383335363932353030307d2c227061795f646561646c696e65223a7b22745f6d73223a313633383336303532353030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a2252384a42413930383946335952525351445057423932435a35563156304a3142505657384a314230503856435648373143595930227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a223656474e474b4e383656335a445954394d383747465739564b4d4a5a52314d584e504d5044373435454250474a56333346364530222c226e6f6e6365223a223739424638314b5a5a32365144304757415a4b4a344b543852335051484632364b42594b4b463748303257504147355345325147227d \\x8ff396e353930af5c419a356bac9e48feda8764c688f65fd13107b10b270f2dd16aa44a6876cfb02542834ffd6d98da9066c23ad69c1645f8388d441cffc4674 1638356925000000 1638360525000000 1638357825000000 t f taler://fulfillment-success/thx \\x29095e9e1c56b99221b0435a57b0ff07
-2 1 2021.335-G18ZR5P051Z0P \\x7b22616d6f756e74223a22544553544b55444f533a37222c2273756d6d617279223a226f7264657220746861742077696c6c20626520726566756e646564222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f746878222c22726566756e645f646561646c696e65223a7b22745f6d73223a313633383335373833333030307d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f6d73223a313633383335373833333030307d2c2270726f6475637473223a5b5d2c22685f77697265223a224d475039424a5a3442324131314d334d414b4d514248393659524b4a33453653505a4b31474b303246413553565a414a344e5743563957545756434750433342305a50345442324752484734504d355a535158544131585a574252444e37413556313537483330222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032312e3333352d4731385a5235503035315a3050222c2274696d657374616d70223a7b22745f6d73223a313633383335363933333030307d2c227061795f646561646c696e65223a7b22745f6d73223a313633383336303533333030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a2252384a42413930383946335952525351445057423932435a35563156304a3142505657384a314230503856435648373143595930227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a223656474e474b4e383656335a445954394d383747465739564b4d4a5a52314d584e504d5044373435454250474a56333346364530222c226e6f6e6365223a2246564d4a3336543541395136484b5a474a385752544a39484b41345947393437483554545a45504d5a30375a413932354b4d5647227d \\xa915f2d530da9b250dee47e6375c4a95dd9f722600da4fe78b1a7c796271f9f213c2e1a8707084bb732b3e32f0e59ac16b40e5600d861af32370812c10fbb03e 1638356933000000 1638360533000000 1638357833000000 t f taler://fulfillment-success/thx \\xe6700b8912c9d69c229b10c290a774a4
-3 1 2021.335-03A8KA76X5258 \\x7b22616d6f756e74223a22544553544b55444f533a33222c2273756d6d617279223a227061796d656e7420616674657220726566756e64222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f746878222c22726566756e645f646561646c696e65223a7b22745f6d73223a313633383335373834303030307d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f6d73223a313633383335373834303030307d2c2270726f6475637473223a5b5d2c22685f77697265223a224d475039424a5a3442324131314d334d414b4d514248393659524b4a33453653505a4b31474b303246413553565a414a344e5743563957545756434750433342305a50345442324752484734504d355a535158544131585a574252444e37413556313537483330222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032312e3333352d303341384b4137365835323538222c2274696d657374616d70223a7b22745f6d73223a313633383335363934303030307d2c227061795f646561646c696e65223a7b22745f6d73223a313633383336303534303030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a2252384a42413930383946335952525351445057423932435a35563156304a3142505657384a314230503856435648373143595930227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a223656474e474b4e383656335a445954394d383747465739564b4d4a5a52314d584e504d5044373435454250474a56333346364530222c226e6f6e6365223a2230413544384e3554305358324b4257344b3346444a59485752534d47385647354a57475353423453364154354139305948313930227d \\x9b46047240a728295adef55198dec4167e56abaeb0d6bd2652bf269028d617062691ade7c485292e82ed684208916cd2d657dfc6ac1ac4a5bd997d4daa9a1530 1638356940000000 1638360540000000 1638357840000000 t f taler://fulfillment-success/thx \\xd75efc2f0d8ae3092342d1545462dabd
-\.
-
-
---
--- 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 1638356927000000 \\x864b23a89d412fde2af83cf9bb078a655b52aa34299a13c7ef391ade35e1c89f http://localhost:8081/ 4 0 0 2000000 0 4000000 0 1000000 3 \\x2dff75327b84f774b7819d4654c9c64c96e5c6f4784c7fdcc14495156e06c7d0409e5594a7b3484b3087e23becf6be92508d6d59ebadbddd35173b947c8be70f 1
-2 2 1638356935000000 \\x1e0c2ac6166a810df10d007612059e812beb4865acd20d14b8fb337dc4eaef00 http://localhost:8081/ 7 0 0 1000000 0 1000000 0 1000000 3 \\xaa022ffb061f9e3c3b6f4272422b450c5872238b036b91c2b1615dc28da996babe3c263913f59a7a15ce4b102309781f4dad5a3bba86364a6742f0e1a2b7210f 1
-3 3 1638356943000000 \\x4cd9aa99d5383b0d249f0c82424ea26490fa945aa7bf35a6552402c9fc635c73 http://localhost:8081/ 3 0 0 1000000 0 1000000 0 1000000 3 \\x2adb5f3069c939c45c0c9560543f63259540c9d8e694cf7424a0c2dd1fa86cc399c196bbc86fb76ee5dc4fede7ab899cc861a6ada9fc46a600ba3cf76f542900 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 \\xc224b524084bc7ec63376db8b4899f2ec3b0482bb6f8890560b236cdc4e167bc \\x8256a7d9b2d88222b0a712440b18497a44fe0415ad273f0af8f8cbda1ddbd9c1 1652871507000000 1660129107000000 1662548307000000 \\x13bcca62575c0fb2e41ca366031ae84da7fee7cbc266eeb24efc64e9d47a6a35376c4af44f5e4916ca27ff356fa3b8918a9e6ba10c54c8a66fc85cf8bb272000
-2 \\xc224b524084bc7ec63376db8b4899f2ec3b0482bb6f8890560b236cdc4e167bc \\x6a7c9f52129ebc445f3ebea3eb3ca9fce6c1b89c7d755b05ae29db3909b2ee11 1645614207000000 1652871807000000 1655291007000000 \\x9f5394c955b7aa653d1e8438447136f2dd6e819f182c6b8a7191c62baf4e2d0859796a55c4d8e91d4a574b02e652ff7ffd43eb8f5e053752cafc621d5b259506
-3 \\xc224b524084bc7ec63376db8b4899f2ec3b0482bb6f8890560b236cdc4e167bc \\x70e9063063f4dc2e3532a458ab590fa6c322362e45c3d19736b28f770d79af0c 1638356907000000 1645614507000000 1648033707000000 \\xa96df026c9d79a0556d6ed540e8cd4465ff397bef464c3d644f401b3f3c27f4ae4c04a21463d16f75d1275404447c02778884e4370086400c3eca5e4f6d19107
-4 \\xc224b524084bc7ec63376db8b4899f2ec3b0482bb6f8890560b236cdc4e167bc \\x7cca75492be957360b96eb8bc06b45fbb395845edd482dab5e72aa84c64615a4 1660128807000000 1667386407000000 1669805607000000 \\x667ac2faf237c1ec5c18013184af23aa59593f6395b949c32b8b4ae17c984c795f59afe87e4b80b9b5605f45d19deb171b0ce1630868ec808937ba277edfb000
-5 \\xc224b524084bc7ec63376db8b4899f2ec3b0482bb6f8890560b236cdc4e167bc \\xff2a8f708a9c59bea4f2b4b9458682804452ed63005234c01a3cf995299e8e86 1667386107000000 1674643707000000 1677062907000000 \\x65cbaa87d6229e799b3e49a5058899745bc3a224dc0a496f6c3fa5d3b6e8bb62ca7348315f29d6d14f9b77236cb26dc6017f6a8654e7e8a500c7087115857206
-\.
-
-
---
--- 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, master_sig) FROM stdin;
-1 \\xc224b524084bc7ec63376db8b4899f2ec3b0482bb6f8890560b236cdc4e167bc \\xf9099467bd884e86871559a62a7f23b6e876bf084a30371891b5129ce4440d3cbe27afe387d39b2ce8d9625abd388517c81bfc8da9f2e0f8c9471bff65a802b2 1609459200000000 1640995200000000 0 1000000 0 1000000 \\x0d82feaa94d63ddd13346840135e4a74893bb825ac9838a99a3861024eef918e5af74401e3cddc7c8202d6f84be76f5256454d4af258d1bd9978d3a9499f1501
-\.
-
-
---
--- Data for Name: merchant_instances; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_instances (merchant_serial, merchant_pub, 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, auth_hash, auth_salt) FROM stdin;
-1 \\x36e1584ea836c7f6fb49a20f07f13b9d25fc069dada9669c8572ed096c63799c default default \\x7b7d \\x7b7d 1 0 1 0 1 3600000000 3600000000 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\x0000000000000000000000000000000000000000000000000000000000000000
-\.
-
-
---
--- 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) 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;
-\\xb723a3a86b8a93bc6c3d1495b7160064b1b3a09e3b618cc17e9f3dc24904b976 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 1638356927000000 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 \\x4fa01ccab8d3a0cfbc8d27cb988dac3a272072feba6fed11c6168231fe420f5f9a487cc49ee2fda2251eb460f42c0602a729327c235e4e70e61f6ba384a0fb0d 3
-\.
-
-
---
--- 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 1638356936000000 \\x1e0c2ac6166a810df10d007612059e812beb4865acd20d14b8fb337dc4eaef00 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, execution_time, exchange_sig, credit_amount_val, credit_amount_frac) 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: prewire; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.prewire (prewire_uuid, type, finished, failed, buf) FROM stdin;
-\.
-
-
---
--- Data for Name: recoup; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup (recoup_uuid, known_coin_id, coin_sig, coin_blind, amount_val, amount_frac, "timestamp", reserve_out_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: recoup_refresh; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup_refresh (recoup_refresh_uuid, known_coin_id, coin_sig, coin_blind, amount_val, amount_frac, "timestamp", rrc_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: refresh_commitments; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_commitments (melt_serial_id, rc, old_known_coin_id, old_coin_sig, amount_with_fee_val, amount_with_fee_frac, noreveal_index) FROM stdin;
-1 \\x9a7473637436a219f834f9d5c6fea8805576f4cc9f4d2c0ba7ce4655b3c134d0491d1e4ce0ed732c3ba4e0b708165c08dd561f9c84ca44dc75e4fdd7645b2402 1 \\x6580ccaa66f5bbc327426e4a6e13c8b9f59bd9ee94b49a33ee4eb0b7a0b3f1238b01bb9fb924b83ad80f15afda29cd31b94cba06fe17f902bbe0713f62cf5001 4 0 2
-2 \\x471ff0e881d4b16132adbbfdd817ccd9e0348a328bd2b94ce43bc9d0439f6c23211d1dfce1553e751cd3375261dfca9ec45abb1c46b09103abae1785db2d501c 2 \\x4c45e1529f3dc739b3fed7e06911fa0b1b0308a31c50d9923b1a87050cca7d2dd88ba280ad48279562a95102e60fd484dcd8cf2d98912925c0d4bc9954138f01 3 0 0
-3 \\x1f19283b63be41e38ad6a021b9a5382fe5fd2d8c10dd3fb584e4f30bc5e91af57a7d6c79d8167b48d09cffbc6467afec06e3bf42d709eb2c061aec51001501b1 2 \\xea573d029b9ecd56715daa8b3fcb59f535fc2df9b346969b4456fe1dad9511528a1dc4989c0ef171ad9904cd89df5a2edbdbec405ccfeb9456f54538c6453105 5 98000000 2
-4 \\xa2d1f43ac067bd1e9d31adfb6fd9b599dbeded3525b15701da7559fdaf0aa9d2db4adac05d9c208605b08797eca0f1281552f0c2835dcf03442758cb720a57d6 3 \\xf512f631514aadfea3ad4fcd0835a57a598dba30f78812a6eef53a783f501cf593a2c96ec2ffcc71985ab43c1bb5959aa6cd8ed149babfa7d145b7a7a302a909 1 99000000 1
-\.
-
-
---
--- Data for Name: refresh_revealed_coins; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_revealed_coins (rrc_serial, melt_serial_id, freshcoin_index, link_sig, denominations_serial, coin_ev, h_coin_ev, ev_sig) FROM stdin;
-1 1 0 \\xf2880e36ccfdccee81c4e9d2c8662b92879979796884fefd978583a2473d64ae89a9a80e9552c87a3cb8def91df4ea4b62244620d406880864511a093e3ea00c 335 \\x22d45c9e7e88b0a9a7e4b1cbfe0e965a33c4afa675eef8b3c2a09ba7aa10b61354b69f5e2719a5dec68c199000ca2d4125bb730a5eca70c2b55cf38c1aa5664b0009dacda85b8c12563f421b27750d8e421df3f64eb0ed3857448b921422f080f9824e45327263ba5add1e1437043f7692e245f1387431dbabfe15e12d38e698 \\x119e28ddbe6ba1b3eca8b7e45b69368f6f3b99c7ee0279e9da6ae12ccd35f099daebb90df0ccf848779676952e872ca17339008882c334f6026169e517753ad1 \\x0000000100000001072e12ac1dfd9a6442ba6f74388490db3951bee0294cb905016f42b41e6dc0667d6629195c7adcf3d66b00f2f911f65c3f90874897c8696b1df9aa58f116a9897580aa533784038fdaa2ba9cc8bc30c130b98b4316050fac85532e82aef56d3369a0d464adeb2a3c09243283eefef0fa9463a216162831ad4f77138b41f5fd70
-2 1 1 \\x6a84f7273824f30d522b74e8651658ea2f5dd550137df73cfad688ca0e190569085a9a1b1658f52ec6c3252e56cc45e4d11e4b08d1bb31adfcfc692466201007 256 \\x81ea9a4b889c3410d6796eaed4cdcbcc0f842432a0a5b57b2f17ed90b9678aaaedefdda08f60b88b59c20aeabc8341863c19a4b9f0cf9edda9d4115410b746350b04fb9d3a77920d2e64c55a07bd873ded9dc63b5e88bcacebbcad11e730f1b140c242367d59ef6a46f82a8703b2efb2159775547dc8655f1e6c9e8ab912bd05 \\x5dcc9e9d43e96f63bd755e1b94afe5d2244c4a629c3a0756e74939c2177119bc194930ce86b62c8f4979e01794a62d6b1e2a26dea107ebde0ee9d3690e7dd84d \\x0000000100000001a5c9ffc713f14f44587696e327897d8c223f4b74d04ebcb735da5be562d36998030310365555aaf149d8c441c0976d250eb6fe85204799ee1f4d374eeffe1251daaad1bcc8f7e1649668c26f63309530fe7386cd115e3399f8d26b910d3972edcc88ba23ca9ca46cc891f6240d2205feb790b8dc52df43bf7f81474dbd799cf4
-3 1 2 \\x39ec7d6472e4e8613b9a06a8dbbeec6db736b8444e82180d654b02e000c4c20fde1665fca526424290220a14838feec76fcc81c4dd7cf9c7538131ac4e96bd0f 368 \\x7c7a7f8af35e8361ece8de5b5646b623b405b4aa2344f4736f56af8fb4682c22b26067984c7f0a49a16d85741348fc64c995bd2ff7dbdccbfb6061e0b9ba60e2aa513aa05114de3221d9e9085f06e7c82948f2b7710c5816c980fa8d056e2cff1b85440161ff4e97e5d64d7fc49a969ed8d0c5d609ce46de1e0ed2511fba1cc1 \\xbcfac3266f012deca044930c0dba8a5a59930328add12db33f9703c509fae32f65ad0ed927bc09e2e5a6c863c852799df42a5d55639d85a2ae65654e78c9e1df \\x0000000100000001051f998561da7ac6f09910568282a816058c51e848c5d2577a4e7aed5a7140ad1a09a798cb6848463b21ebea04369f38d2fa4083d9db78be68892d2e3f86179ed82e8e1e7284506687bfce2b53ca9937acd3fd02feded0e9bc9e3758abff8ba1522235e43f42f0df5d77f2438341c50b2bd3d782aab6cf4c48690e5c8a665ca6
-4 1 3 \\x16c5b6be20259eaa35e152b45ac96999963565d34eb91c3d733a35fe821cbe1f53daeb42d9b7e704130db54b9f347af72cb96a563c6eb27f5580fec1ae32a405 368 \\x92da4d62df0f75264c92d1b0331d13b22d90548b80e7905ed1b2b9210c3331f0271acde5ed328e1ce4e94053a2e1a136fe4d7c7514264a78977e6e92cbc37f889c0fd1f11fa699e327cc02e2e5f921ea5b8f0ff3058837b06b5afba6f7c440e2aacd9c56350ec42be6494aeb3513b7f0eb9f1ed26de12c6b26272da9a7fff257 \\x808b02c34052abdc8bdc0e5b3580ce85accf78e19710222530f7cb74b716352d653e4a49ce71542738d99e06ed934796bdb63153d63b52bb22e5da790cedf1dc \\x0000000100000001a1bf96507f97ee166194ab9a7abd1fc2faf31089b5d709843e944f81e58a1ac195e60000fb1ef9a8faca28871f6979fdd4ef62bae8eb7dcf29131f5abd9c4656bad401d0d106e0b75fb0e733212adf542c5c1da30e03a5f7c26a769bf2db8e3a57feb13431a3781a1a75a7707b7e8476871cc01a9c5e1b53fa50284af2b07ccd
-5 1 4 \\x5ba35ee7cd244f217ffdbcb1d9366ae81a11ba36ccb7b55a6e68c7023174c8ed4282fe9df36e3def0480fc96eb2670df0e2824e074db2c75fd55d76696926c09 368 \\x4a652976276314eb30bdd898704d957598a3b09e711c40c07e0c1f2a4deda1de16b6c781940289904fdac0365350b684e2fa22d87bdf005cfbd7e732d919d91821367a96b203ae43380eb24d4f7ac04154eccb76c219bfed8edfd433f0962375eea3fc09614afc6d540a748c1c15985ec9126f6ec6d579d5b110481a7b1fb397 \\x1693f1bd009b716c9d4d6936e65f19cbdf79993f8171ba886af6b422d9f7af948a979fd10e8af6d3b715a6897bdf30148d07333da2481e520282c18b7ae5eece \\x00000001000000015255d1e7193298ddb1957e7a4a835854756516691ab13f9bba1af6cb90643945fd9124f9ec70fd561b2a08c5941e923160b158acd13a8114b9f495ffd4dba0e1197cd31422958c0ef18f674b9f52a3c3d938061903cc7f9408af39fbfa0f0e4326a6d34d555901bae99b06c3ad3d6a82d7cdb3b9c07a8b1e6fc33fce9316ee32
-6 1 5 \\xa889c7fbbc5875092af25a0da92cc990e8545ef09a39a36fe65c8f8184c848021bf5f83b0197c6fe306a61ff8743a2cb51e62f9129eac1248890bab654eb4c06 368 \\x0ce4b3045b5e07efa58f62d9f723d553c0387323bb02d1a249855b4802f82b4781593eaa7ece06db3e8309ea16f09fec14e471a52716463cb723097bb22b60b6be2c531333b15e2e240354b95147aa0e9dcdf37a68388b1e0ff106622066316abb18c2cf1bdb8f56b82bc1e325e3f62bac792f987005cbe9aabd29ccb45218ce \\xd3ad734214a32762e10085646e0e198b5d7cfb981880d6677310d52fbba0948d779cd164df16e88a5a78b42f4fe7f22a5aa8748b6c066af3acf34b8089c135f7 \\x000000010000000162ddb284d57211a5ae9a92e6b3b9519bb9690985f1c42fbcb447ada3d519eeeae3245de54acdae0c25dc9695f4f128f7c3d55f217d7aeb79e16458f850738e4920ad3eaa58bb644dc0e222f3a9fc001db203a7542ab730e3b23e760e6c696838a23c7d8fa56fb1e9aaface379a91ad6976375921d0bf39b9f6d07b89044904c8
-7 1 6 \\xc8cacac1621f9fdcf3b357905600c03d512be10b819292d18474594aa048d62ea6c65aac9b6119163b538633f6f62f57597267c94e574570c2b3823834e0f909 368 \\x2ca2c7e9132242a7e8996480a64f064c17dc1a6e1263793c73908187573a0f29ec633fffea16bb2d18cc58a808923aff6bc1366e368169adc68d22940aa0f0b775c682326cce3a41cfc40af52e5951ea82fead60eb70ef3f1b6c93ee83a55729b1dec3574c9e907e13b43986194319f676a2dff31e9f88539094e0ae13f40c46 \\x4d636d0cde1eafdbd9b42cfe7bafba82deb359848882bc87f755a8f8837b58ff8703e414ce8cd1cc4d45952937b289fba68bb153bec14961f6af48d8813a2540 \\x000000010000000148dd0ae4df05554ce54f1505230eddd822e7e1b12db719c4f8a510cf22a848fe222d917cdde1f045c85850f44f27a103ef2dadc8b9235bee2596e09c8e32de90bc45e77a89ad3947a39bf83d4eecacf08067d60bd9a0d41d42e9b12a7881d446452eb033ea101d94bdb6efd558047f4ca1d8e2f327c0d1e57c9a1333295256d1
-8 1 7 \\x472fc2006c549046d2793e35afd5fea71a829a2574efb6878794e2507d20cad2d83c721f267a3532b03c2f8bd4ca5259be30d4c49e5f665e9efad4db3bc9fb00 368 \\x3a8b2e76358c1ddf19d59240c564724b84b5514d7169ad2c2083809f28fb7a4274a42b270f4fd18fa7ace54cd9b49716857f942a7eaa462ab64e9176fd88a7da567146d8a87c00f9c048559e4971b3a7522349981bef774a07efed7ba866b6620789757f5988732b4b88338fa367b755528c2aa1776ac5c213a4d952a515c3d0 \\x2a1f021e5261a149d96ff8a40f13a005ee5167389c7c9ccfbe105eec31363f29faf6684ad7b48457887dea4da39f35fefd40a11261eb3df842c5a13b6bc2c18e \\x000000010000000174f8635e95b0c9be1037af54b57752bc6bd2db4ab7d235d4ede6d58b0d522adc03f39253fe80a8871c529021bf7cb8f5a88efb1f4b8d94b705665b208551ab28f5740bc6da17b62e16a325ecad52507110f1176fd35f299aea2a9cb27d91ffa5653029f05f9378cd25e2e7c68fa3fe38cbcdaa0fac68c75cdaace852b5a0a950
-9 1 8 \\x67dca13b1d951a83c86ff22f0686d2bd7c5747342538757ca9942a64c1af3fbe1c6173705cdfb45bfd22de3a1dcd60425694eb2aa81364d3fc88d2d9ae9a9507 368 \\x5c56a05add63d00acaa706596284e383f7485e5ff70662043859a8b92d9c9b720c6773b3f8ed81072d963bacbd253ded39ed9cc9afe09d0409f853c007083d27f42935021a1615374f2ace7f1dfd1c7f4dad67b8813a23bebff8d0ddab0c5cbb69599d7d687172f8bd87240a1bff4d56a29b30e002f9e1e5121f19c752cedfdc \\xe46086a38dd0ff9c9264a10cfb141bb6547a985dfea30098895888c0080f8ce8094bb3054eec8fb1a3df4544a057838c759459cd861b3a4aa1b0bf46742078c7 \\x00000001000000017815d242a4ad1b7e37589e704b1be350df2b6b12da1623aa86a4f7f17fb190695eb5864803e033e6bdac8267ebaf235f5c47009b4179b02b2261aaff27945249c30baff37bd6d0605c93daead8ac23d22815c0c3eaf9dd5c371e92816b4fb069266302db6c048cf019b309b782eb0bbbf8d2fa5680c1f658bafbdfa82abbffd6
-10 1 9 \\x6a95de9e3a6a1ead84930136a18576ca7308d750d05aa5410cba3c24834d9b9715548d3ba1dcedbb35a590cdf90a50cc82845675d8e38ddc75ebe5e5e9a2e009 368 \\x9b1e2cf20b351b97688e33563e0b3a37176d06d5da232c8755356bdedf932c8d069f713bb8c71b926368782022a3902c082ee1ee459c8a3c75829bc23d1edbdec75d935806c0c6ed04fe1dd04ecc0927848036c62f5bc47cec6c2f74fea0b5e8e193ea679f7a1a792b19941066e7f2d8c410566700ba1742cbe1a39b5e248e07 \\xf1555cf64696c0719182e722d86acbeee29acaf2b468d4519bc5ef64b4d8ebf120625131844f544a9ddd7be7909b0c3991123abd738cf0f79411eeeee773ab37 \\x0000000100000001af0cb80880ed43e61dec435a917bf5b5193515c173c71b3d39b257cc6a43319f78dfd41903356f2b4134849f81358f2b65e341c0c1810c18a64a5d59c212b41bc9fc4ec108f0b0a9d80153edf5239d0eca2a58cc9fe2c4c34b07e892009a947263d53fc7aebce3f85af42a842103404f19b937850760bbfd4c8570fa375d163f
-11 1 10 \\xc171f023d6da60d7ee43ff0f55093b8744d0c354bc3092d378e78ad3dec520b60781e2d5d9cb657a536dbc371226d4189b9ee50609ef4a37b51aa02911c8470a 116 \\x02e0bfc900b766f21dfd270a16fc61e2baa4c42eba54070e23d862b069b306857352e56a8427d73993bfef9b0b876a942750ed9d614e8ba2a2a9c1ea756e11bda7f2f6d13922f6a4bc3a44fe0b1707146d252a10846f1c7f00110460c717bc15e81117e4279e5a91e53103f64483bcec882ae4f4bf0d9ebefaee3ae9270746c5 \\xeec2a4de607073ad153c325a189961eb8eb62ffc88ae42861b35403408f679e3c048a954657dda3e095286f3f4c2ea6e42df2e5e1263f77a583f7c6474085129 \\x000000010000000181452f2fbea8d882d5581a1e6823b964db62719dfb8287eaa8e8fa4d8587fa495d2e22407cdb30f75c2bd52ea4f320a82d97ef9f0c7925a0242d1ca19834c3985f383a6754b4586a7e33fce12975b38add99bc1d58905929ed93aefcd2d27797e129550a0645b640958497728be3e0d30d59c03fba4da9809549c32bcae56011
-12 1 11 \\x13450564c3b6a6db3913704b2cd7487f9bc7e196bf9693ca4630f64e953eb6477c9a9b13e7d37f530deb7d7ef2454f37b7ab6a513d730c2a5441321f6209c801 116 \\xb03892d1026507aacfdfb65eabb098c0275a15a41d0d46ce47eadab0f5a50d201263872fd560eb5d74d31ddb6d49dce7cd481a7cc93236d3b52059200c36cc38833958ef4895131494fdd8b8f34f03033b07c35b94b27481b9cb5b7a1cd144fed837543b10394122ea94a5f76b04b98ac8be78fc6ed19559d1e313d5ea6020d7 \\x3aff9c2c07ef0e67a4b312c598cd5734ae729a0f1d510a3d4f2d076bf18734ccb6c0982b5027d53c78dd1df8d0e6645c79bac4d7a03443bfb944c5b0a9c0d2d7 \\x00000001000000016d1fafcc1da5ef8a3f8a406be2d56dc9a1f7819c94cb17181e5daa3bda503168e624bb7ae19e8d07bf080f03557022b724256f03b50e377718a6ffa2bdba20832f1633b074a437bea53734dd2e5a8f84000a01e65b039c612669977425f2fddc743c781334cfd34c18d160a639755bedb772c9462e039b13df8f219d7a7e9944
-13 2 0 \\x1e24b8b2832d32e3d1974bddc12428e9f673c47a0cd874524d481c747f970f8a808b7499db70dbdf51d234876e03d3aeefd39db47ce7ccf3cb60c3ceb2012202 335 \\x5a684737443fcec485783bd173e5c547f77a204a687cfc10bd30f7a912921fefc4180b0a77d6cbfb835025344b147e3abb33f5da76c050982916ff30dc7f74755514f4ca494e28c43a412a598433d0cee87b27780a89fe78972e885d285c613cd5b02f543df03269310024089715b8f3018e51dca84fc24d3c9c8832eac47dc1 \\x447722b5eff26598f8785d4124d53a06c5ea79881b6b15e61bcebd6057c0d6439af3a70c568d9b60e9f1d05f93faa129fff473e07a94271ce962c10ca91af50f \\x0000000100000001c4eda265b07774d492d43842de13f60c7c3f4d6368127193e80e912de3d7cb2880d68246920d1f6dbabefdd415e9628f1f73e2be67d1f5558e46a071208cb819cec7e1cda7703a5e033b4a887a86517fe95ae869b3163f36c51b04e8b56822728981830c98a2b023f8c36a4c7b88d47880b9ae98578e347cc1805eeb0acd83c0
-14 2 1 \\x72e6079e52cb0a069ac54fd9e3f122473407783a0fa0c09d6f8b38e96e804b867c1c0d839b63b17790e357f6f6f53817731bc7149a1d0d21ab9f48817498180d 368 \\x10cb6be18f3028be2c78335419329fded3f5e8f881e3568528500dcd0d5af6335d17288fb5c749e86041bfc349277f3769dd2de751baa8fa554ae977f665e5a032b97d3f4d9bacbed512c594f82b56b0036da0784e77f4b30590e029b4230c54cd3790e5ff9da16c8663a7a23f2866bca87f6e7bf9b82f68f3e81a484312dd8a \\xf2c4a8911fb7513dfe3948522146d17db7fcac64f7139657a34b93a7cee931840804ee2dcac5695674b12db8f8b202ef1a73cecc23e5d6b8259cf5750f1214c2 \\x0000000100000001145c0add159e714da4665ec1b955460692582f6a96ab07f1afd4ec4f5695da5cefdb1643adbc236aab79b513e8ca280caa05a3970ca37377755da4bede493a6f556734193d8dede76397897aa9db5ccadd90e21a96ee5b7cdbc0035d992db3b4d9b1c45982ebda5f7afbdf593834a1680864d55e9f1354741ddd4a6aab307d2c
-15 2 2 \\xa4a0f606f834a3cfcf86c4c9ada2ed756d99ecd9052c728f167706ef5a426d6004824632cc57197f46f285bd7d5cb8599969b1a2089453d2d80e9c6824c9a50e 368 \\x08c9fc60f6702d9e613be742c4e6cd842d14015e1a9c170542b7dfc5cc3ffef2770c08425ad6119191d9d7e84401e13a117d56f85f22ea15ea0dd966cce88e8a5083046a97f41c2c94d89cc56af348d1bb19410a1f5777b7277538870e34dc74cadcbdf0af034c4b5d6aa1bf01dfe22e3c6cfbc05dbc3a29aad348c0a8b03d68 \\x3816d9a5f0f942d392ce2457c8738d5d418863c7ee7b7e141458530cb2c482e260f107eb945ae6d0be19067b6a5ccff7bd855cffcec8becc0a97236d2baca602 \\x00000001000000017b110cae2180efd15749cf32aa8b1e4ba771e5f5c7caa288e128a8d7a4ae1a738b7ee11b4e69933db71a1ca7bc3db142e56ef0190fa1d32819f76a223acb35a33d7ff420b005115bafaa0c99230c7fee36829844d54caef6ba7077981a1f9b8eae44564ecfe13f5de625e401f4598e6e822176f8759fe3f0ef45be6a98e05f9a
-16 2 3 \\x22d141334b2f1fda2082adfcd3d3ac9c7df4d08b9792fe8a645cdd001264bc1ada3ddb722d08a2489ea0c687d296d33ed6bd6a480aa221e3858acac94cf23602 368 \\x99d3f3b0a0388fb0eb251cb6dd6120ae975b671cf66ca8cc6bed8f0414aaf617abbb81be4d4f5541ad2df61e7a6e5a3a8d31c106a7ffdccfbff5a3e69667498d2280b665c2b45581bbb804d35e9c3aa92d2ffad2de1827e4edeb55c601133ce6ab6ddeb33780f40197f2e1b138062ab837dd9aa0a5280744422aa3a9244c05af \\x8fe8ab0c2ec82032c1153a6b87cbaa726e983cbcb0395fd5a6e351a5db9b399617a1b91131585388dc6f8337f57677071946f3846c8ee37226620091e2e78b0b \\x00000001000000015274737f5cd05c853476b616a6fb06f5f522e0206c2dcdfda1f749602efd3f1451c72a11b095e4aa9c4da2747a9097f654404f86753d8ac2b19e074389932283a93da0a85f5a0fa3b66bfa87e91b3039c658392b74ebaf84196cb08f7d2f39a67835d5fdf75ef4a545cad6036784e810b0f5e13d3aa1d65764457d2213ee302d
-17 2 4 \\xaaf2015d137c0954e9a84e1b392b9cb16697e1a20650dfec2b4f6af001db29f41a43d7bff9755e45b3408adcc7ffc233d6d5e6525353622167fd39ffb388b80e 368 \\x6072b76bfc5be103687e1b9904aca7b9dbc69836953be86f79956f549bd538f0502bc12c0d68c1c26402233151fe53f9e890677c0dc58af8e54c3a10e24af25d64e02f6785cfedda71f5270b5c5adbecd12a3a6b2abb14888cb3845d4304b07361f59f20fa7d33557359fd5eecd904a31d19487bc638d71e6c1d55f8bc48812e \\x07cef859cb4ea8fa9ca7a560d17786b479ff17f20494c726a8dbee55422312963f85ec70980948c3de09804fea4a659f0e9a62f4e66eef6f5d473d1013a2a43e \\x00000001000000012fe678b29961e5eb64d12fb25bd8c4177b3a7ffbd8a9059ecf8f133850e5bddd2841a92b8aa65519d8622fd078747f2c9a16fbd2ef7a8bf3f2ae3b2a2a7af4981948fac8b3cda0e242db41b807deaa33accc482380c3c35d610243d1c6fceace01738d54193df6142b208de81db9f912b79f8b09d5a3e8d2d602f7a26850d425
-18 2 5 \\x331366087f20b7ca86478be6a0a24ecb8092b06cd429e6b521119b09e1401ab95e90352182099cc56abaed51d3c0bacc377af5a5bec968115fab61872c1abb06 368 \\x3103ab13372bca29a2fd6680b7d49e9245e9310a3515c008e2cd6a4efcec0a2447fa112e56f264fc6458313d8812d80f85a1bf8441e2740628dc590011df6ef6f5ffffdf12d665e32b39b9d6fe2e21b2f98ff23ec3ee89c6b19e4f78ef8632a37bcdea490db060055fbdf4355822ce6667bf34d6f4b4ed9a3e2c3e272301433f \\xad3533251720d002e890a0efe35d5b615043a80e83b104a492bd9be45401680f62b4c9bc6bf9cc276f857fb67a8b33c462d226b568b24696d7b8e9bd9d860d4d \\x0000000100000001c719ae714cd99f1fed7899807f8deccba06c5632a8f74d10185942ffba9e14bbbbec89b3484d75bfade2b1d04dc0030db4ec84e29c85a32fcdfba042675bfbb6f7e54dc4e78e57b5464c7219df56806caad2b24b1b367e4bbeaab12f6c27953ab2b98064d93cbffe11b5f456bfecc68cdf5d24eeb42869233310bcfcc9f0620e
-19 2 6 \\x8e4937eaa627b53d80385cc34344e490722a2274033305c0659fb4b10d6717d74e1db3ef25a90fd9421bf09034a3b2c14e95d4633742495f1b6d90cede31020e 368 \\x7c43447716eebf7bf627a4020f30114e52f18aa40d42f6acd5e3266bdcbe9152c10b2e1d79da8bd281c1b0ea2eecfaf22b4440ec740790fb09b9ce38381dc11be6fa0adb97c31edf376055f7cd0ee08ad1963d08f520549c2502cd51a390205b68da1af6e33c2ec05b3dc16e36b8f5256d30b91b42facdc78cdbac64f3dfce87 \\x91a12d728807b48bfd9fa71fe8e7a643f5c42d340e659322796dff76e96e17e1acd6e408131214cf879ca38cefaa7f951c52dfd7655c1387b876f42412d4f1f5 \\x0000000100000001512114400f55a5160627a4f996a6185b9490e10eb4862dd2877c9cce720c0473452f2425f992ce1df08ca05d0c958cc76bb3d7aab93d99de49f933c76a5b2cc4ae43e031dfc71ae18c4afe9481f701c58b9d870f92e35896d345c2014b4500e407ae9cabf811e66499196f95a1b1414c4799f024c230b5304530345c3d708ebc
-20 2 7 \\x3f1ec798fc9124b722e41cbd663dd15524bb946f09ffd58bf4ea9dbe2970d94725b665d63b788e40693e09986591151094d3ef419c32d23f08f53d2e2de21704 368 \\x72b2112c7927dc31333d48a20fbd349383d6e890e1ea442823e8823868a11023b69d530ad5c67dcb9b5e30ffa9d4d9943ac9fed38edb289cb8d3e0140b140764cb15e355a1c83904066e295f2ef0d4daa32d74e46520a98e59ff63d2cbc73653e2c0fc0cf9cfe0a4a272d712833be7bc6e72e475d726317cc330b9b5cdd79d7b \\x1ee3f357606fb436483355a09a0b89bb8b22b2b543ff28dca5e5df074c21c4db8ab6d5527eded843c1ada0a8b2a9e5347b9bfb927dbb799ded1050039e3c320f \\x000000010000000108bbaa39c06c984f4d0b093f6f89b1801142a00756f88c5d779b73af12842389f88890b48d232a93f88d8a7bdb05bbd378c9ea802cd62542d0c588b17f6a70580474a7eb01354f3a68a1e5099f0857f4cf189c26d90bc8e363e699eab1a0c1bf655c86bcecefafafe6c7f6593f79a77a9a31ba172219b64b072d74ebe3e0311c
-21 2 8 \\x41443776765d3d47cc9e68aa4543f54fe77de681ffd435527ae8e8c868e7e1bd756eeb0391479afece8f2e2c86209a5a084135bb2cb98d475236fb4ae00da503 368 \\x73c2cea698199c0f3af83cb1dc80d7b6f1ca14b040df10a71ba5afba26e0cc68455ba249d184f7e59714188869edc01d48ec386c340f51be41b74d8e7d1c3751f2f5e6cf457a7c7aede5f77fd2f9ecef7f3d900c4e5953f8aa83aad26c7a12e00405b3e1bdaa5aa185292c070ea3b20e953af3c4bb33e9078f724a6c8187056b \\xbcd3fa1d22e830ad7f8b0bf4c1e9aed37b7f30166a508b48234dde147ec53b2404c487c5802bf98def93e44d34493d0c271536c02690b2c44ba2d4c9d8fd5599 \\x0000000100000001a070f2055f79fbb9f2dec9b181750357e4cb653ce2cb5d5e2c4ece819564607e551e064c3a8ba9947c688ebab77e54740fdbdb6d258dcfe40fc181bfe8285ca544673d84dbb4e1961fa88e7f46e2848acca8ce376cf56aa71f31b2074ce608f53a2d3960c7b265cc057b8032e2b5579c33477c91a7b8e2ea96d9e422240fa6fd
-22 2 9 \\x8e7742465943390a9b8890928cdbd4d46928d5182d236c0eb557528df31c8fbdefabff0ee77d3d79bcaf518cdbac5189b11bace7d7ad3724971272a6b88f5708 116 \\x38dc7b948a8a72666bae63ea5fefc4fe11aac9d090c34b5b216b0011103b58a273fdb683a00398955486c8ba93143bb491ef176b21e2151cca2c00b22ec4272e46d63341a35c7da478b3a038e7d5a8a181ebf1251ac633e10a94de96a2e48fa6b8b4037eef640032dbf5a2cb889f9c50a97074ee109e1144250a9ff1b5ba0fde \\xcdcdb71b1756e4d353a545983733b76fdf71b18adfbeae2e610b8bf7a869faecca9625c86ce06073beccaeaf602f5209fc70dc64f1d427fab27703f0b43be947 \\x000000010000000148a78e6a08037a53573203960724a642f339d849503d9780f69255ff4bde62c34a9e9417f9288f21bbcb5c934f869e5f7325585fc1431e1fe6bbd0da8afd0fa1746635964ddeec5caa8531ffb9711669eaacf79c6ffc0268c9bf6fe295cb7ff182569f438fa1a5a41527fe313b33e4bbb476a7f34cdeec435ce64bd3f9d466d7
-23 2 10 \\x5ce15fb349895a1ed1039ec45f100bd31aac314460cffcafe987270a14fa923b59ecc1e0254ea80817bc0eebba04191c22773150175915a76054915a826a8102 116 \\xae644c109ead8f0dfdaa9f074467cbb3fc350b4db5b88c32212ddccb84ffd023043a8feb37240f5a4df39c3803dcc94c573b8e03bf31b0addcf232e48461ce5fc7e9a47117fe61da58bc74413e0645fae00c751fc9e8f8911561baa999ecb90e92190793e86aaa00044cfe6cf645457e2c1be6aa03b7d4fd3d1499fa5c65b10c \\x9911794d0f400c6733514d23ea84677740f3f8677ae0edb7aec08562fc8c06b3503066a348465484f9b082c26895e7a90786a4e41930a469da400163590a2431 \\x00000001000000012ef4c544a4cfa86f3aa9abc145ae8ecaee409b53db4cf6fe8d13559acc0fc6907d31d19ecf3dd62fda037b2941edd47fea08397028e9714dffb5f219f0cea4b7257d1c21385856ca41891e7ba97a6407a50e4816338eb80e93b6bb98f5424531ce4cd0f907e069d6c305f4fd0fb3d44123a4482054e258a5e172f747090c303d
-24 2 11 \\x0c2c23d286690a25ec3812c3512f3798f7d5eb8ef163290a2134159cfc340b1cf8b13eda7c4fd2f7177c5105f8dce99ff27872a98713706bcb25f6daa819990d 116 \\x2f44e015a8f285c87c84770e9325d53cd1a1c9fce13d1773e5d4f62cfc0185626008a580d72dc136ec0736c1f817749bfddc86d8d2c8d623b5f844918338dae1044867da3e1aa21880298f787be706a2cc4f983f2f09a63be2e2775770a9660a415a65d04df1593e6f1696e0000478834123527e39df0cad589ab3f000b7239f \\x5c593b82a1b32ff7cbff1255be2f9d57afe176cd24c657a515d538c8ef145b42dac34b9048c67dd84d8694bdca5b554b65d7c50a6857789c47a71019c01cf29d \\x00000001000000013176bea3ae84456d7eb267792e044160a226894c628f8e55f3841e7b85c153f61c2cead0075f8e21ac458432eb00de247429c61b7b7e16427c24c26be2c1678e998729ea2fae2c3393a3005a8976292d6c8d7564b5be34526aa7059177d561e7f612405bcc870d10cd5ae3c01c1796612fe63431329c6b89cc56f61921cdc19b
-25 3 0 \\x73cda8e8d3f40b3168489655605f2544f2b696a78b5f1c70870eec9c0e4d6bdec5213b0df209fb6527f12cda0ed236f21dd28f3d7383b556fbf81d55d4512705 158 \\xa0cc856fb42b56d5cd63137cdb74da2d20d6d4d23a0c5fcf3011cf835d8fd9e16836fefb411c2c4216c6732aba55c6562902d9417a081a88a9f8a115060f1edf6ac4730c4508b496f938bee03b94214fa0278917b04d8a0bfbbda49770037a73d76b9cc3a8837552a70dc9526d0a87bfe84e5ac5ac2240d3ce16ef4790e4ad6a \\x88c40ea454dcb235cd8020f1702249cdb4971b39d0417bd19258a0b0ab7e60da1764e01ac5f9295a1d9f3f835e0f6169679679f01d0fb98ab4fdd831da2ebd49 \\x000000010000000153345c46802e5117259acc126b20d73be4164378d52913177ddf2bb47a98b3dc72515a5b6f7f86e946635c1015cc4d7c83abbb905bf23087cf7f8d98ac917a772df348b43a91faa6b4a8886d3335ae8880b81f0bc3a23f52b5b9a068d22fd4f1db1003236fecc16af74075355419a8e43d64320e3ceeb9117b290f453172a132
-26 3 1 \\xcdb3417b4663613bf81c8decc65419face9fb04a82b16f1febbc61abf6f50b1b68f62a140cf3fff7f9fc93fa99219c9e2b168f0d9f25996a573fe7b79e162601 368 \\x8eac62b94b33fb4542ca03103129b3c9b6ac1c3ad901fee2447300addd2239157f04bb06738c6a88e35ff0c2996d030503a844e050b3a724a59091a89f8b081e3d71ec988c0e52946e4ba00fa039e2aca7571d444761023bcea951bb1795521cd84773aaced5dcde9822c8a6aee20ae0ee53eaf39c65075e036f29dbc29dee3e \\x688959a0e11e02e47cc91de511a885e4b4bbedbe14b8e456d52673802db6686150dd82e997a92e611dbd3b81396504ea799c4ced174dce862019875443c0bc6d \\x0000000100000001348583964ede31c2348aaba0e888706a8ee4cf4eb0f5bc8c1915ee49395a01e0c1acc70062524f3fb8e982dac3374ed936bb5af2acd59c1f33aad9beecba355923fcf146d14c078ef0a2e58ac10cc7b8bd1b9d62c04ccc4e962b554aacce54058af5767a4cf52594bde80d916a9ed7cbfac745db70be220601551a9431cfd69b
-27 3 2 \\xc1bedbc4ac24e402fd0b27f729cb4ac228f207f1d4b3489889ac1d7fb59fddf0c4cf40ba6795523ae07eb121c8c62fa81b2db9770fa79a9cb14250623e34e508 368 \\x56d0c0bda416cb4c1800fd1cd7d87e2be70f33b4389e8b3eb0ae9bb015ab6b759868c126cdb4d3b910eb00c8c05651dbbbcd87a896c94d17dfb6fb71ad05e0175153c145f3d3617051955e71e3b987aeaa3dcb921257f25cb3cb4706741ad366df8871b579eb5f2468941b9a51ab471acb717081d3e0f8b908d33dfdd55970a2 \\x31ba652f114aafda4b26abb723bd24c11a498935e51b5b026a6563e004c4627a00637ed14386ee51d53267896f3fb70a977b1050311bc4c8464d246c64ca3c14 \\x00000001000000018f22688533eb19c0110df5f3188a4f13ab7e1f02e5465ff1f3ac3ff1bc5b0b0637f44c88643b9b16a8eb2a9d18f8b8ac697a22c0db87494c36fd49bfe58f78d0566e7386df4fd9ccbfeed034474e2acfeeb41a96a3520475efd57d09f4cf55f106df3abb7c2e03bc2359f104681d42482e687d03a1a2bfe790add16176c16f51
-28 3 3 \\x2064c5acccf2ad408c11c03d7e9a2c6b544575d20f8ae87e83adbd57ef05d99784aa66a3fb27157d93046d08c64c3f9796955a4c8f84e40faef0c75b38a5d806 368 \\x472b8b4884de004c5aff5e6fd5e97ca5f94661069544f274b559582c40dd810d7d11d6266e80b14fc0ca485b0f699844074d45a4a08608097a5b44da33b2318031c5e698f64848e8f98a76544c26d2a618f9343a03053f554661932c9eda89eacde66ba7f80c0e3e9a8f57525ced7e51a56fbadb6d06ca2567cc8d3292c599eb \\x9e30207cd3972b7f4043db2437557c496e3db549a07dde94f7ff06d6874e7fd88f93a2d927cce6f358925e6a33dae3532800fd437c63fd63451b7db5ff8c3a4c \\x00000001000000017a6858b98b47f929a749a693423c117076a88ba1155b12e6ec834572b6ed15adcf172cbf88ffb847c2e913b481a06d797a4ab6b5c4a5442f8c60374b5516b3429f0de1892d9c3bf13751ea10746a91384fd71701a7f2dfd60e1ff91a8683c0ef52420c3dff9a99e1dcd7fcc2a7001a8d10cafe3a62d3952483b209ef32bfe698
-29 3 4 \\xc8d6dcc2aa1be1708e341525aece77e9bf06945cc2c967d64bbbd0a3641d78f706e7f2eab34beab1df31629787e459c4089e14bb2b84d8bac2f6960c0ddc5307 368 \\x9070661732864b8492c9c0f822207aa0ad3b0d88c7dc6765512d2fea23c08b67b9b432e04a2583056d25fe81c83bcece1a77c0b4045c166ba48e9259b3f56e358d9191b90a4738e2fc2fc01f6c821b39fce44e09c2b1031f9db7199db49b5f64cc630f5d34d270a509cdbeee551e893c23ff65c2a28c7ff714d0f583f60fdefc \\x3f39164ca6c10f66c948936999de33afc7be60eaa18d71ce4f0ea573ce75dbbef5fb355ebb2ef757bda8b663ab7af625d505bfd02b91f093e5e7f782a3b3ea06 \\x00000001000000018a6e922a0db444a8bbbc0e8e2f0126b63834273a00ea67a44851773bfb01f4cc0f1508bab78d4e04d3e13c38542e4e4c168375343e85ccfe29fa9aa17a03fc05f8db5d82f03e9eebe8b88d9cf75075f7004b997abb32a5f3b999192544e5ddbd6e10f50fe7b8153b612ef9a8f4093751387969f803577814656e895414a58549
-30 3 5 \\x91aea62c2619238334c3c3e6fb3f57437269cc21ee84b520e93221b22a8398b583f93566059ca7af098603230dec84be28aa20960b7a8f42c3cf42c8968a9801 368 \\x173eb10970d7ec4cdbb3881c95dd78fd9efb873646701eff0afcbcf507a584976641de9cd1a2675d1cf0b758bbb0498485bdba7ec482806aa88c92892121b4873aa660224c35533e62722af842d009f39db5605f3d452ed70db057266caf60b1b700194eb31ff5b71499b2980c0bcf175339e6305f947ea390de535b475f9e2b \\x6695aff03ea32ae662d4f89282fe5cfdea2294c112bb22465520f6a0dca785ba384dc37c44b5e91b60e280897eea60818f3b7f50134ccedbfbd6ffde21b10234 \\x00000001000000011a10216359360fce86a5e22155fde0d223c157b240be2123e3e6e354989c4a7c33ff028e3d324ec2ad82cd720c28bde0ab1f489fd977d8e7312c05baf23482f5bc2b3511f3919ad48503e59720162f3834489c6b65fcab6655ad99c5782406d6b69ebc59aba8da53fbc18a5f568c7779521f9082e9f97ce20520621653ca44dd
-31 3 6 \\x4889f17bb59ea63aba001ac219887e45f0d70813037d23c7bb1f621b447a021356a0a5274b8153f9a691203abbff421df376055a6c59c93355836826417e2c0b 368 \\x481b30a0fb216e2a031e0c308fa74b28c11e73e6768db8faddbd4c3cd99c535703407860ebafeb720157a109a9baaa50dbcd9beacdc891eb8cc74c3ff21d326de52d82341ca4e0cd72f99a16c1a12b3ce9df048c328a2002aace3a9e695e08ecfc9df910b35b66dd6c8204c77ab6ea72197f3e686f4a6675fcac69999fb31969 \\xf063eeb4027764635c6b1c9b0a45603b9b8f73ad75c770b7989bdeb5412a91c2bba926ab7c1db8b437cab94f4442a2910bf3d4e4de3ddd62e24eaf9667ac056d \\x00000001000000012c69e4d49d1fa331bb8c1cb9f69cad2d905699968d0df6361edff2ad80e9e64fd8edcc2581f2fa844a3985e41bf3f811ffc79abdb04a307fad039fba076685e76b2b72fb43a6da14c55783956876cf5af5a9afa3dbbbaac48cab835c3d9ed1ad3ac54fcbd5aec04696c0979e5191cdd273abefd6b8b7570f7ec31a60a5f2c156
-32 3 7 \\x87c66c3c5d243b06bd481fbe376e7ea289f2e06d04b2a33796f2fd6c90cd6a6fa76b9515819e922279ec092497bbe8ac1dcd818403fce79b71a75820a49af30e 368 \\x4de3240031d802a03af0aa27304bf3b1e2461e64d8563009841c029dff459836696c21ac046acf3856b5c4857cc957711541d95c92ea1cbe6bd1dd4e6a37452d68d1ccaf33f70dd68d9f0f1de766cdf8423a4f5965fbc98c992c64b5e2ece77f2d644facbbf4f0f00c66ce082ac58acd723304733bafb42ebbc967f7da456ee3 \\x0502368db7994f04bb9dd256a94091be7965d86406e682364d38746525642ba4c62a66bc7f0376ea7365c3cef018675d7804ed848f7e2dea4e556b505c4605aa \\x000000010000000105a185181e68a198c81d6acae03d28fd37476cc74fec349e8a7faddc210b9a6b670204dd2613f8c838e5335a68cc4716086fa459f3e998b5a47fe044f10454ebc356f012d5edb832c8897dc6910f98d753e66ce6c06372c0b45ed1167565bc17f8e5976c9e1bd55249b510672182af5ee5072f419b5998a0e923dab1a177f89c
-33 3 8 \\x52837899b278a47c5002bde7bc5a25835cd6f00c688774843ebe562806eeeb117abf6bb22218075b39fe1a7c2822890ffcfdd325af4e404b837dabe868c9010d 368 \\x59a31158c66ec3c048a58f5b912f69aec7634225ca70be04f9074128d2c28cd8d7cd60eb1544e5948abfee03e0ec4d1ad13a29185f0f44bb276249129ca64d4bc4b6f944a6a08c4c26dfc425a2cd4a17f2fac1c4cc1275677813fd96b53501f0de836cb5fe64ccea2802a66b3bd418cf81e1753f2bffe5f5da206b18fc4afa32 \\x75a38c08a0d37722a2ed5cc6cbc37ead03fa13608386be053f6d0b49cfe6aa3d5ac1d1d52d2b8bd4e36a2af9c760b62dcf05be1f74542d2e30bc97dbdf29408d \\x00000001000000017ed1944eb8b503852729da97f8ed8cf510d06ebd76b9393d5c8ec641c21536fa9e95cfcb5479eda5135ff3409aaa0f125a8b978add31d934b699dcc957f8bde954b4cdd22314bd54bbec8fd106ed08472555ec49099cd0a97ac1fafe790f8f9810f4d78a451fb0cfb6428d19b3439d49cb61d47d953fb2cf4f29609375effb07
-34 3 9 \\xbad9663081a83947392112907cba16391795904951c898209f5878789c994b57ee1be4be7cf2a88729f8f48b061d302e67b1e9901e330d54dab93513b37a500e 116 \\x0b6fc9ab470a820975f818c4ca95f485afa6342a33b4be4fa9a6f42ca1cdf7cc6939b296e66b95ef9ad61f3c2ebcf4adbc532aec47fc5ea1a5aede984ca946607abb481d074e3e3defaa7526b3b2b0dd57327b1f52c94c5494bb07579f355541b44795054a656b17f5f01e3411fc3de07b9b8de18891aad91aca7f92c5b88c28 \\xbea9a3f6f81fea6d664801598d8d02f1e4ac23391fd4a8b179a8e7ac078e4eb3dd0f1f7f739fecc64492a1b9e8111d39cb203bf7fde41e8323c95f67cdbd436e \\x00000001000000016df7ff1d4868a827550dd6da36cb1f898473a8b367f31a2cc2fc12a27da52b012907e8bb0178240fbecfc7b9cff636278bce871dfea6520175afebcab0037838e1d9eba4b6390738c278dcf273e62f850d0910ee56c7ccc642b4c2c35104adeae66f376bcb8518257ea73746649f21a702181721f95883529b0e08285cbf7bfe
-35 3 10 \\x46725747e590257f3a9ab75523595af7d8406135a126f3182986e66848e4667137f88033adbba406e80fe459d2062509e4a86ced93e72566ee2dd3a4b5ef1409 116 \\x1485e75249e5eaed5b92dbfe676b2891a5486f6721ef4153e02df46e94650033a66e2e556ae2d701bca013b81a93becb0c028317d9529f6f69d317ca8d59e99f73a9971ee258bbfb4cf86d204723ab9fe313e9eb868cb7ba4b62da2b502f39a0259a7a18b70d61f084bb70b23a73c96552ba3d91fad9fa1234d7eed640f4e6b0 \\xd1ea7f176080b41683cd1e850ea43c977d2c667cedbea462c48d811d555c201f6e9f4c5ac475224bf3411789a176d6a064a09c71cd7ff47b557472643bff8463 \\x000000010000000127456570c96586ca2f731d9c6cb6fbfb4bfc50a913f7fbf2f1c9b28630ebfda20ddadc73a165f3fff89bd6a4a9d8629eba91527fcb160fbce5a115514ca5fa2021689bfc116752624e1bab0b6dedf189f8be3b56a85cadd33beae9bc5376e8815c3e6f622b440112918718d83660a28619558ac5b17129ebced61e5dd5ae86e3
-36 3 11 \\xd45f3711c80967b80220753cf2c0c824b36653c02885fa71a584b60dd95cc858260793e6fb02aa87c765e0bf46f216cbc25f448cb6e4adb845aa200adcc10a02 116 \\xa7c8c7280349a41e812e99505f7deb379214bceae532572a2fe3265556557a209638f88f7fa0dd71f1fa02bdfd962fefecef4c8ad6015597dd5a6f05a22a50d072ae9d7128d5cd40854c18291cbd8c4da8b6903e0ac450100d357e3195292287148e3ce9d28d3b8c2a7269d63c3cc3be9fb8f424da947d5c716d02de20e34038 \\x2b66e1c254edfd71f821a00ca6d7d367c4aae3d0969dcbb0c7ccb9af5a2b13df53c1e83011369f4a3717b64613851975f8a0c1f3c4b07b5287bbe9f378b6d613 \\x00000001000000015152cf44ada7d3474772d205d4dc0de35090feadabe2658c6e7549255d8c5543e2566027424fc45454a0e9df9767735116263832694ba34203a9a462437147e4804d82449ce76fbd041d574bbfd2598ca31212b43edf1e9f757443e9d35d5090125d4c940ab31ca0df8cea4fe0b03feb9901da414b03057cef56c54698663614
-37 4 0 \\x4ad307933fc055001d3183c3225b54e2c3220a2161547248b3a82876d8fa67166d625ae8da82302431c3411e3f8681e6b72efd16fe810a0e29c933e4573cc50e 256 \\xb9ce2120c1c282e85dcc286b74c7bf9658c371752147e861700786e3b16cc7b527db9a3fa7ce265363d1e3d10eab0757f8b71daebbfb62050911375f0089ec30d4e38bcad19e98738ed00df88d264ed7cd2e72a8ad41f2bf999790f5b6b048a1e3f3e9befc2f8670fd154445dd8410c43b52ab0566e78fadc1f1059ce3f3baf3 \\x18b7c7491cdcede798cf5ea10f0b7d9c1de89bb5e4f49526787cd3351e4c9a358dcb76836530887cfdcf77c28b76f536132e567a2a41833b18ff5aec4e56ce7b \\x0000000100000001229992831aa309a3c22fa278db27008d62792b59da694e36cfec61998f15cb472d55dae21b0716c3fff089315e4bbfd186e68744b4c8bb71acd1551c9d69ef578f42c7e326fe6d85dbebacacc6d3d28192f4f46279c7afec4ef870c7aece968b88980d058616d6aaf65bb8da36c58cc0d7086fe1398a439188a197e0e4d584b9
-38 4 1 \\x54c5f2743fd6620092a0f05149009ffe426fbd94e71de3357d04a4a73e5e8b5d097531ebe17f79d0f5ff73471b45f0761715724784703b86e311e60d4c16d70f 368 \\x8057b750ef210ae4719c6da535e8ce31439a613a117518031dffc47529af491c7a8ffe645b7c5bbb35112f2ada0643dfaef8a68a211e2952f7e454d783643c6c96ecc88cbf8e8411810060f1c4218c6739a80ea32bf8754ee1b1a66f7b4d43959d78d2221bfae4ff7552ffb12a1499aee5aa412344b093ecbc30f63801a38c9e \\xbb080fae4333cc1330bf84a29407f3b46b9e34600b0224c0fc4450f301ceb86ecd3e54477dd7b323baa1ba2747fc81c89dbb070f42083b1cb6d2eeda931469eb \\x000000010000000143d6586a0488740784580dd173167ce73520303ea5a073dbbbb39ab15fc0401256b3e3117bfe5d002a687d8dfdb500258fec6caeaaee8f91585e008e5acdf5c050afefab8c05025dabe981a85ab6a67e78f14acb89ccdffec5c948d9bec1b399e8f480619c1f8a085a75d1289a10f2b6054c5cb8aaecd651791e54e4ec888c59
-39 4 2 \\xfd40c6fd442a4292de28f32a9a75042c6797a2566befccf973fbf21c3c0f62585caa04b96449a9a6d863b29fb755d7a2cf6704bc44b4bd60f048e8742edc5705 368 \\x5663f04abcdca391d988c165beacbe7ea4db5e8013bce23b23bdad5870bdf209a80de70f169559d43b4df53572efc99c09a775a99842fd9acb0ad711bc850ca26d4b091662f171390e7e18124e8f85131de9005ff92335820c9ef60f625e45bc16a551ce1d9b4981b6f366bbdfa92ba1f6fce1bee69169d0990ddfaae6e8d6c6 \\x9786b16f65e87de608a6176f8393b9b341d66cac58331d03f2286de4bd707d220876118cfb2d2354962fb1f19e4a103dfb44f76563f1155bab3b2a83a61a89b8 \\x000000010000000130b44c8a72db21e962667ea4f98646c09ef7d9e01d8a40a70dfd971147ba21a35ebba41923fbdd44eb27e732937636b5270a3d9b096d4655d2229d23d8afdc807e52f00a2639d7b3ae6e5a7d65e0fcc160e760f9a245d324785cd2fec69fd77dcab1342cb334f46ee8d0f712be3b7a2f8f590d00d297a7b263e31c4160d7b921
-40 4 3 \\x415dc60fe2bc63910d390dc02760bf7f0450e2fe1a7526e52df09afc3ec67e9307208651e0f3e71f98ff144f8383be5539c63a5dc0f63ff959d6ae692709750b 368 \\xa5c88fa9b13d9821bce30de5893423b73d184c277d02446acf85a732b4a12210759dda08a2dc2af539b991e3994865b2bc918a6b1d8022004c762f55d83b632f3752aafd4519cfcf16a7c32e614ea453957fbd92d7883484924d8de1af689d541ad9f2c825d34de003b57bca26b45e503ae9d07d66fbfce26f41f15da23b69d7 \\x207839c760683ca09dd7c9f95f05940b88c04df84d47d191da18635edb849a424e2d65e33934ce908047dea79b896505221f8989d587cae4f4f7113c94bd706c \\x00000001000000012dac93a92a518ab172c1b9f00a8c1951bd65badaff07ddd13fb902e378a9a876e09fcc8f75e2cd800abfa0bc463a787f638d379cd52dd77209b3b93be6c253a64babd525b44fc663db2756f249c99cb4aace39c9972a8c9da90b303c3e449d4084835fc720f2f7d9b4b746115115f913010113b5a6d975bbf009f1c81380b4c1
-41 4 4 \\x7c445a9e30fd488b98ea7a10ed64e464e5c4f66bcf4cac8636f0c65dbd140a89d759bea2fe54c6c6ddd19454f84f9ed6bb5951adf10c4fcf96bc2752ac1e1206 368 \\x712cccda4a9d974bdd3842ad154d999fc75ac963b5554b367da0f9da3cb6bf96f8b525e9eeb953c602a6202b3a5e61a541820703aa42fa7d6319fb79159be50a1161d470c23211cb0037a00bbda728597bbe6a44a94be901e21abe1faa341307406f138d4c1c2ddecbc8de2b770f5c4c1b40466726dc9947fbad0d54d3642d0b \\x57a455af80669f5dc7dd12087e983424bb64e55d9bd2ad41f53845539e9d8e59c8fa34fea69091d55b3aef4ae0b3921e1f4b576d4373f4a3a25c0d72a3dd33f3 \\x0000000100000001ac5b1602977f1ab84cb34d19c1ecab89af9531920de56fefc0b650fe636e669913634842c1f4d4ff573d980ed28787fb11d5c2ff62c1391c02f5661726feb7f8321300406669c5c5defa2272e413ca5f71287ebed5b625c8dd5f94d4bcd4a0e3a8ae95789c807f4121707cb2a79ca625f07a7071cf3725ae7d3834fd2fb6ecbd
-42 4 5 \\x73341c0d1541e833c933a368d13218704e259363f28487041ab467d293d3c251d70c88deb9b811f20ebe6068d9c760d40239ff9ed58620e6a48831c7ea51020b 368 \\x632670130851a27688eda0f3513c42cf548a6ee6b790c7238da4cecbe613930875393479dde805df19569b33f3b5311620941dd01fc96ae173bab2a4c458555849633c6ea73133ecdc8f655a2ffb584ba974d516bbea92579397b8fbc06b3a6d528e852ec117600ab796f6fd53c623ec52a2a786382263a74650372f116d9ee9 \\x70e6254cc347501d1e5d249b2d17bdc3aabede74895226a251d3502219c8e18cedb24a54a9b601ff5de3fa9112efc35214e1864d968b98937756ca0d1ae317d5 \\x00000001000000011eca3d5159ba9297c7a10070679fb2fbfd9e7bdfe2e3e8319564167a0c5dcd57e9b8f387499097f87c808dc3d7766337b162ed42f4b2d5fc739421f2ace3d1d4d4ce0e2e76f5c973417c9e1dd92f56147862978667315eed7109724dcdc1939c197060cb31c33cc4b6dd21b553aa03f44e5c05d8025bc00315c937a352a1700e
-43 4 6 \\x4a647e759bdffa43149fbab112e70dee5f7f42270e64c217faa2bc0c10429b3e5d34c967d1f60e71a0e7971f6fdc910adcfcb6cf68564adb0824c8ca8030af03 368 \\xc8e5b06c9a3d60c936efa3d1f1757326fe5fac0ad04cbf1a9e8d499ecec9e6eb073bcd5e0b2c7a46dd477fb68d1a2d523fb898a7986e3411d4c5f72d18bb8e2e04a39ec0d5810134279badbd07646e417846714fc4306dc85b951f2b45d2787c8ab9f82de5bbadeff5a886509cf6d80d31ceef883c40c69b097539e5fffd927d \\x0df319b51cc19742b218f869540aebb662e47c88ce17606892c3f1365292292a7e7876632fefe964f1fedeb5a88ecfd2383069952521e2742083884960185b91 \\x000000010000000124d6885cb724790600003ca90424b3233ef6966c811c618ece3f452f40163312ea8f47895e59e4a5a8595304910625c5f61cbb702ac1a9544ebe706d472b4b65eca90010024052237fe22f187d1508ca3a23e78ca01902d0281d5d7a7d6c38b8c1ffd687d23d91bf3026e84c79e8c641c9a24abd7a2d9a0498c5a90fa9c7cc00
-44 4 7 \\x5b5dc2887e1df7c2ce2d9c12b18016cee0d6ee1e4d10b4c8f411e15c3d1ce5ec1ce8bfd060284fbc1015d0c591806ebbdf7e1cf40e4d9b8d9f2387e7cbac5e07 368 \\xa82d3a5310a55d77e59a74bbd625bedaf6d1594a3b4ce40b1136d0375f4e49639533b1639ec016cd6967386acc6b0ce57c65fc7aaa45adb2547ee6217178f1993ea4298553f4f0fdc32546411faa1c666fec660c72235e045c213d189323b18e00f27a44cbe8b5dcc476b4707fce58a937d1d0e49dd58c451603dbf2b6bc082f \\xd160fad51615e4240680efdb092e8f727737b918883a18cb543147a56521260fd933fa85312fa32e570158e930674e1e56ad30e1a8d37a5a57208fd58d851fd5 \\x00000001000000013f0cceb3df7a7e5ce48fce92f0e087a2437cd2688df819b96580fea9e43b1904c85338694ef1bb0c03ad8b3a93476989c8da10e71948c7abe9b54f7e42eab82859cbefcb5a4558d95a9ceff382eff159e7200ffb4d2d21d73e7ef464c532797c3490cc551deae3a6ca626a606d1669defe25323cc251a090b3ea4ddbee5f2e70
-45 4 8 \\x54a5dcfc6fc9427df4c29e29bb5db53351f57de5d44386470a7e88a6d25c1512b99ecbde1fce80d639d6aae417f91ae19d21b0e5f9b46c0af2ccdf0a12c37f0c 368 \\x27de0f254c2fdcc94723f3bfedfa21be1e9fda6a0b2b1c256f6b1e2dcd5c17fb27c33d913f377a837adc9c7446084a48fafc496dcca06c9d6f6df60df3ecf5e9d03bfce6884517257699a071dc6af59bb24bf1f91c4d65d9b18a3c1b9078d49491915abb72814de328083458a232bd0fbca5112c5adbfd6cc9248404913aba6d \\x92c0b7d9cfed74ea115b1748c301a7226ca2f22f95783d58b49ebd4422b0161381a67bfdf4e188f7ce167b58fff419b76a93bf447e8df056fa6956af7b8bc330 \\x00000001000000018ba36c89ed7643772b945817dbcc903197eb787588708a0e482bb4a070aea093ae6ce85eaf3e9e7a0907aef2670492e29025d9fc5dd75496a4f1076807aa81ab771809a1f749b566b2a790c571d1970567f551e08e7717ef9cea78880d580b13878177f6ac163a4b66e7487fc0511bf329a3b7d7e2cfc4ce2d1c86266b353f10
-46 4 9 \\xfcf71eab6d90d9970c3a5191439a7468ef52088442abf1c7e7424d048fe191de8ce7c744df2bca1796e5a08e85e60c536f7ee266f2fb8b42cb3fc92033c63b02 116 \\x22c2bd48c64e5984ccc8de64aa2dfaaacb9ff8ffc821b3a31cc3f2eccebd9f0b61dc5061ff65cadfdc5bcc7464806cfc6dde46818d2577284c2230756458d212eae4b9512cecaeeed5adeba09e63d74d87adcc42471d9a213bbc1b4ffe9f0db3a018b629986e7ca1cd79ceabd6fe00a81976900d5bc3324d2865d1b35e74087e \\x564f6710643d6f310616ae3458b2374750e679ba625c4a89c18bcfdb629ce7059415b41e7c34b91040fc5f97e845e9975f6ecb0963622b323eef8a537a1df843 \\x00000001000000013a6bdc98da59bb8e804a5f2d85afb9ca887ddc4502671c6ca3d00fa41779daf7f361f088af0ef55c8ec5daa11d461a02c815413cd8585d034deca820492fc64352886c4afbac77fe05d850b44df4da78cf4cedc060e57a4d06d3a5f7bca1b39ba8775c7eae140cc2dc0d6dcd35c63464c48ebfc5ddd817fd9c4b9f79a5c3d660
-47 4 10 \\xa3191d6aefc19052c80ff793da212dd50e5ba36196e5790639e56e94787bac78c740e0039c94ca256f2e7ef2553be06e58ce00e2871d54adb0690728ddcbc70d 116 \\xade610a4153524d17680849e9be079ec254927ada0f32f126c33deef246b0fe7d580aaa84730c195c59481dcbce94ef23065a044c38275710a8d54b275ce8b829ed0cf92909d3710ed71dd93acafe7d905ee992c1b3104ef4f9f56a186fb2320e71b23ca9daddee89dd7bae79b1d5b7f66e909677bf4ea589b9cb18f8fe79c4e \\xf963e76f485176f2ad40e580340c62a644ed7254c4beca681901d07f78b24d86c877214a781b0acf68be867d09988f88b486bd94954b8c47d69a759dda6a72b6 \\x00000001000000011677f6f0ed66fdb0143d3337fd7231e7d4c06e6c084aa7f56dcce39c17a1d9ad2a94e8c5f2498ef81720b1313e44127e25cf15c272c366f8fd8b05f661066032614bb7c42afe425662226f11fdff6b13678341e85f8b47ab2678c0d896f3c0dc7655bb0e56da7f19290f835a458559a8cff6d8d5923103dd796db9a9af8e3b98
-48 4 11 \\xadf8459054deae049c12be1d85aed596418b6742bcdcb161744bcd52be5b2f41fbe098ab3384e5ab0902a12589f9a2fea5bfad621c3b71182633ca366d135308 116 \\x19d390e61cb1c44e141f293a502b902b54b8faab793c93d700b46b360917979ffa9db71452a5ac5b5077ccb8c72165f901355a431ee9d0c48d5b82c875e183a8e0778d4e9443110a8be0a6faf7d869647e2ddd4fbc3478de0d890db98350adcb01c7f1b78ebcf54d92e9405804bf8612c1037213686d319c4c7d57c93bd02ce7 \\x1c7e0165ebc2d8998b857ef69e103ef9090d640a9d80bf0012a7acda9280c24d6fdfd0ba6b761c12bab652073b21578788a93dedc9ca968345a510cb11055d49 \\x00000001000000010e0c5761213737846f3cb7e325294db727e0c55aa1748e4d468f203f5c68856a10824c172070c61eb1d0fbc2b1f9ca4bbce0dc91e2053c2a411fbcecbd7e02ddeda8b880da581cea4e06f3107cb28a2389c67e0422afffdf0c943773984c967976f0624840ff501d134346853ef47f9dab35b05bd0b9a883006d49727817e54a
-\.
-
-
---
--- Data for Name: refresh_transfer_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_transfer_keys (rtc_serial, melt_serial_id, transfer_pub, transfer_privs) FROM stdin;
-1 1 \\xa469a8bf92b19151212f4910b0276bb45e4b0c53d19105c7b7fc6e3609278d5b \\xef2b081d2af6c0191bd00320594842f9f00328612cb02bccc814967263be67a0e1903934ea514eb87a62a7d794ee6c83efdfb372841b3ceefc87f4a68362b8f3
-2 2 \\xa2c6e3d1b1f77ec1a7b65b2d0c64e683ac314162616d5cb3c3ed0d90617cde2e \\x6c309237aadd40da73d53bb2cef016e71dd9f958db29db3eb5152a55e3c13dc4a703f52a7b17bfe12e8eb29c8fed9bf0b9a8c3e5e0a95a6de08613ae827e0e68
-3 3 \\x5e4284a97f5a2bce08e3cc642608eaf631b4159b817a689f5f701bc145c3ca63 \\xe1d5ac953c93d658102deb1e6d9899a1b84b6d5e3f85d0b53df330dfcc9279f522256282a50193f44119eb7ca8db107de84a97e6ea60617ed5e97c934680fd86
-4 4 \\xb40e94ca1b823496b3124e6efbd3756395ee75c6254286a12e430f82f694bd0f \\xb740d841faacc3bde747769d1c018b1e3c0c1da81f7c4d0d8033fde5e402346fe7f6b1344eca87b5239712025ccdc8fa0d9f8865feecc630f5b775e8c3f7d9dc
-\.
-
-
---
--- Data for Name: refunds; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refunds (refund_serial_id, deposit_serial_id, merchant_sig, rtransaction_id, amount_with_fee_val, amount_with_fee_frac) FROM stdin;
-1 2 \\xd3d7e30b2407d1065669bff040e485fde1588b0f1e77a9b7024ed39222c4c0c00a7239f461114d91ff8a6e1a819a93e15c38de518e8a74b295a0e85ebfdd680a 1 6 0
-\.
-
-
---
--- Data for Name: reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves (reserve_uuid, reserve_pub, current_balance_val, current_balance_frac, expiration_date, gc_date) FROM stdin;
-1 \\x4265b55ed43900b7b0f72d6c35c1530c92acaa04632ced0472d67363cba95226 0 1000000 1640776121000000 1859108925000000
-2 \\x00355cdf2246de2b154c861fb2ea1ee2e25c9ca526825db13d073f1de8131562 0 1000000 1640776130000000 1859108932000000
-\.
-
-
---
--- Data for Name: reserves_close; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_close (close_uuid, reserve_uuid, execution_date, wtid, wire_target_serial_id, amount_val, amount_frac, closing_fee_val, closing_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: reserves_in; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_in (reserve_in_serial_id, reserve_uuid, wire_reference, credit_val, credit_frac, wire_source_serial_id, exchange_account_section, execution_date) FROM stdin;
-1 1 2 10 0 1 exchange-account-1 1638356921000000
-2 2 4 18 0 3 exchange-account-1 1638356930000000
-\.
-
-
---
--- Data for Name: reserves_out; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_out (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 \\x69df10b3fbae5dde7f5ba6cdf2db1288323ed99df825c54e2b00ab905eb8c71560a1478b06d466eeb09c977b5f563fff59b2159dcda8f2fad974f72c122e9533 224 \\x000000010000000141bd7c40f0b3b6990b2b8eca7133971e139b60789826d8f4d5c1f6070477d1b9202e3acedbb9afdc72b0368a64293b539b1668cf42fa45bdaff7495388d4bae79e519e594f0d20b67e9bac3f209caefab8f2baeae8af3c3f0fdd4f401fb6c6388ea5a0dfbaa821dd05faf1f9a0e93935cb4299a2d027ed42eb80f2615ce90b92 1 \\x254c5200300321296b49d32c556d2f459cdbd5276e7a65b8f63633ca4c16f8d5d82a02ef7e3b16cdd449a7677f6afe6c1a47c57fb97d07e053c2e0dfc5b08703 1638356924000000 8 5000000
-2 \\xd45febfdaa13c775b9923d0c8afdf6173526aebff86b654b2578140914c81971f316497437638f96bb7a5e8aebd0c4b2f7ab07a4ebb01e5b975186897fb11ee5 256 \\x000000010000000122f6abb75300c79ca54084de5a72dd4d2aee6e24c1cdeb6cc7e5bcb9455dbf9d4cb35319bdd4493fc706e445d8111f3c5de8cc2d17c0c62b5e7348f17b36870b52fd2492e352e5a2287019f3309095da2682e6b0feee9227a6afba0d58ba85c2833dfe2d58db7aeaf7f7f305d0dca30932ec02fae7837370cc6e6226b8b06842 1 \\xa92902d2e611cba5897553a4c3f6ad0bffc67f4886ae4bd12e1513ee25c2f7cdd5bbaa814f8d4ce4f10ce10c0e3db2f697a4d3ba3f54c55af1ab0000f62f6900 1638356924000000 1 2000000
-3 \\xbca25d1901d4288db08a6a90330669b34895ffc5b5ec258def040d49ba5a674f56564e593a6c7161c1ea6d052fa3a538f02cefa56be20b43034b269f7b029a0e 368 \\x0000000100000001bad811a8e6984128b0fa76cbac00d3956c654ce8e7065cd797e529570b848a7a68ad51d27f65d853a300c22e4c7c4a790afe57216d2e542a7a17ad6693c9603e989dad891cba4765c24d5f45d100b419baeeed03c1db67438b2afe203506b18c090b61cb7eac0a1ebd5e82af32e08145f58852fa63ca9995963d8006cb83a8bf 1 \\x72c1ed535fd33e91f8bbe9b70eec93f8a58cb0f64604346842bb57331f7700286d59e0577ed66fae37ada79df35d631750a193b396e4996e091587c1a28aca0e 1638356924000000 0 11000000
-4 \\x1d3c1382ef4be136aeea371531ef3609933a59628a96b5aab5898551d7e90e150bf430dbef6547f34b6fe9c43cc8613f36765f08ada3eda2e42a2e32e796ed5e 368 \\x000000010000000162b76b36b691741450089999b7b1d26f4a1f824282e86628537ac60e99ac5a929660399f67758b10bbb17e35fec22bb68b482a4193795409d4406348fbf621e457f1d830a51b00373db9ebe72b7450cf1340e2ab87cb82c745972cf48083f84bbb0f8b980b613b5aa7b1824dd9d5b2b1ff970574f6201a891059c29ad37330ee 1 \\x6772024dee19ed9af82cafc9b27c76508891c599e76e73e04c1235c9731346d31838d6db8cef1d3dca49ffe7b142d4e7f6e65ec13d516a76e79965038eb79d09 1638356924000000 0 11000000
-5 \\x695af2745ec91d7dce905b48bb9b3a39a85309b2663b122c1f51f3b9c7a3f4a1ac44037aa417de8dad2cccfdc2d56dfb84d365ab4e298a77c2a3db6ee2adf7d7 368 \\x0000000100000001be4e6d48d8b07b290e9a6c268c4047ff333b3cb17b93777a96f2c56d862b79fc5552e6156b6ab519a5ff8fd575b34d142b26599cc50a48893b12b5fcd2e9e20e764b2318705c0d224bc93896609e9f28755ff5f6ec7e6156eaf8a240dda9a945b904626b115137ce4b8719f61f87031eba863e5063162747c96e4113b15429e1 1 \\xb18b9f3c3933ce569713e5a81748aff4c7abc549b61f010e9ff11dae3e1413961072914d8bfc3972dacbd8d95ce0d69b2207acca7a5816abcc861171067abf06 1638356925000000 0 11000000
-6 \\x9836b9cda16d9825b583ab42c1b5e57292d4b7af7221e6a6536c23b9cdcb5f3fa6e33896c1e2ece49c94c46d3192d6e0ff3d73f5969be49ad736f06106fd2fed 368 \\x00000001000000018afee3ec560103cc124a0dd95cb5916a7a5d93eb465f4b037dae01484a1a17d271fa0887c3eb53f536e2cf8fb41a7493184c0b76fc879788a3785a75ab2d80a23b93de65cffabfb4c3cd1506c927e807feaef147c73c473e27385030dca02daedeccdbb55f74718d944e3933b2bcb482f1f3afb6f4348ac6c2d4f4655c18a25f 1 \\x20f843c20b3262a86d0cc509acf19f2aa2e3f7937b6e82dded8bf7fe847b46a3a9ff2bc03a30a548afe16a342a0e68506adfa7b93bdacfded6226637423f150f 1638356925000000 0 11000000
-7 \\x2e90fd1ce7c0e3207eb966614c3936a76fe14e316ab8763acef90d9ba07f3a9ec3bd8bc0b1b2de3bf5aae6df4d524fee53ae6ac526378f354671b353ca4b52c1 368 \\x0000000100000001a247a5ee312d83347d8376960bb7da929047e5f21f4655a8b2bc78adeb7f13c39b3feb5a7471201fc4d65f69e7433f1a84bf0e15e68a0f83d8a2523e05bebd1083726b57529caff847c4d8529ad01ad23772c195b20321f0363ebe50a1850225fc3756713c50ec4d3ced127ffe5205d139688605afe54f675d3e40f7c247a8c1 1 \\xe33b771581d61cac9d3164f4ddca8d51839795fd1fc43b60bab8be1e1a71b95fcc913979216b720f139b884a9ff98be236c8533bf3665c32f0a92ccc7320a505 1638356925000000 0 11000000
-8 \\x1827265513aa2f495b86bede0d5096d192b19f2e4a3da4dc78e563acb9f7967af6ca898122fc50acad89c81f1a204b72bf0d24519108a7af3416688215189a7b 368 \\x00000001000000010d08ea73b961d6224aff86bb9cc9626603bd28726e501eaabb61830c38d5a89060770535bbaf0eaead6c57d0d51b3f394e508a68de2c87e6782dff23b60e509284c308593eefc485eb9eb7dc8785490b9f4330d03a8817edc620ca53d6b8e5ea26f15ef4652b7bd1aea6e3c9d193347f45f6bedf3ee17670da0d8c1bbed892f9 1 \\x5caff38c0a0e6edd87be5c36d8805fb49b4c553db045846d56d76457ffae7c8920099eb5c8ed917d0eac191ec0b69b44369e138f007c9d923c7e765150632d06 1638356925000000 0 11000000
-9 \\x2e5d03bf792e4da8484d4e777d7fd991d085258658f4db4d090ccd7723d78ddc7fe56c051b3fb01b8494917d8af1c48476c913ea57acedf06903c81c1b777eaf 368 \\x0000000100000001af0e02649bcb0211e4ebba008c934ef967254027e6e8f7e4bed956b8c255785e341623164d2353161643e5b1d1db39ebdb848fafd5d02f5d52106d0512fc17b5014eef2bf836795a52660a227e0e0be439234058be34db1e7495a49370426140efae8eb95dfe00164d8c1469bcfe1c883ed3244024a43d38df94fef45ae5c306 1 \\x37ece730f90ce3ba43d56f72b21d9d9bed62a4c0603b91fcb590fd90dd60c493d48a8a5cfbbd7895c4eba731fdc5e1c93f3b44ee5f06c858d7c9eee89da02e08 1638356925000000 0 11000000
-10 \\xf653bccd0da11484bbf0d69e6156f6750939ac9c1d89f74f802eba3d3dd15e70454afbd35c256309cd9f7673328badbe8e6b530bf5c18b3153a18166d5d0a920 368 \\x00000001000000012ce7291e13b9a8639b5eca99d88877b162fbece208a2f0455668a0b05c1c011645c513039a93fa1551a597a92495125fcefc1de1a8ee3ca459806cfb35170d3ab07cbf518ca103f5dcb679cdc5ebbbcf35043dd5c082a955590b7c3c5e939fe9b5f8896e3bede2f98a30cbcde5f30c95d9cc66888fb59f01aee287c433c8f7dc 1 \\xcf690774a85640d314c6bd3d323cbba84a2d15cb2ea144eb2301bc73815546a2bf63521bb347bee40777d1b03896cafaa6369057f1fa26d72a3828d529b0e902 1638356925000000 0 11000000
-11 \\xfb055395da086d702b40e674e38e959ec6bce7476fc62c766662e6761b9132c67d94072dbf4404ec024ac99159b4c93bfc6291c1369849ebb966f9de570c16b8 116 \\x00000001000000016f1bdedde7d94692b2e7c13c14545489f178d263f9212ec5a5b90562dcb3111dbb8098137de41d5f561efcb5c6c22b7f9fb00eb1f24bcca7239d1082c91a22e1c76fb46e5d978e30d2221b895cef0a11332d6aec85a5bfab31ad1fae6b9ee31a6ce548c1e19cdc732e9081db0c6e967430ee462f40cd8e5b4ff3b5875dfe1cb5 1 \\x130f0b68807f8d686ab4be776ed8ea81380bc384b25e96b2d9e62faf0a8615261364634c7c201c0229cc8f07c153a416036bdcbe523902c327d15118aa330d0e 1638356925000000 0 2000000
-12 \\x7239cff5a5d475359aa8965d8cfd24dbbf4b1c8cbd717082d39c21d377abacfb2debca43224d683ad5da9ab1fb3a027812b74138455d8ce54a554f2684ca43c8 116 \\x000000010000000173ce053f4ae96dcecf0a63f0eb4451a836e1044d583b5e582e0a1cf63ba2dd3381c77a8d5d12a086595876586e211042e32f6e63a520b03df59cf93f38f80e3a1afbed2d53dc08c5ba8939211af384489c64cf2d4c5c8a648227653048fc297be1c9c005c72c33d666594a26f1f75cd7e81c2135e3a13fe1bccf8e6a7512bdc9 1 \\xda606ff1500f20ef95f32bf0395d8b2799c5e13f5baf43d6f6ad89ab8a28215883164d6f9f2b3dc1ab8c099074291b006b681a67705b88160cee18f6d0e0e60c 1638356925000000 0 2000000
-13 \\x219a5bb73a115ef8502f20d6017ea7d6cee5d07344612f4f5b7007e3bd17e7e53d19e1b49efcad245dc2693cb5fd92aa5e1bd844a560e62f340eba57a2457219 155 \\x0000000100000001290e9b8671699f02df36e458cd29633193bc52a5b00f8b2263b1975ae03828c347a5761280d200bdf52f5bb58e9c5f82c1c39e6e43f52cee5673e5be0f7fabee6ffec0d13e5962487573809fbcdd8c5f521b7b9bdc30ab39cf2627b128a1a1b1adfbe596cf7a9d63dc5040cd97bb84f5176df3438ebf37aa27c8649050d9fc88 2 \\xbc7ecc7e1faa3270f6974991b8425b11ab09038617736ca6d153f5abc37745fc5e24c5bef0308bfe43c6ee95aa9e640b074d0124a3311ad009f299a5e30ff701 1638356932000000 10 1000000
-14 \\x63886e618dee31bc7d16b587f05509fa392370ef21936644e33b003f01bfd8289e4944216a304acdd45fbc042ba6a261dbcf7e3c8cb9f50b9e9e3cc1d18bfe8b 158 \\x000000010000000107e643225430e51656297b8e37727574e3080852576dd4e35c7c599470261a7b5e83d22b9b4b2508a6dfa69d9e975cf52839caf6e053e33bf050a9ee88273ffcf7d339ca4b3ed247456c52e9462c06c61f919bc97b4727a7be99b2ad36f617383c75d9b4794d2d44632db26788ee9267ab0b5d65513525b133ece29bcf804671 2 \\x791c46fa51d9c4c9c0f0b59102ba77c09cf2fc766e4b32c3cd0767368e9547d27a0c7efd294f5c775f7422e816bf1155a878c7b8c6a56269a0ad48070ff94e01 1638356932000000 5 1000000
-15 \\x986dec0e0deae1716acb9102d689886db5cb578391c447ad4acc126d98b3392576b477dd5079d2da81497bef6cda2e878922be10eb011ac771d101112383917c 335 \\x00000001000000013a5b5a1568ea43575837257ad546ac74e31d0e1b7ef9faab4919a36f06feac8d837c64c14449e882d8911090aa31bbf50eacada615595622e7c63dceac8001c539a7f42d0666be8dfdcfad39fda7b362cdab15b7fa18ef79aff7e56a6075eccbe2901aaff23a5a5ec9e21968854a95ad5ced84358770723c7aa6f2c718782e69 2 \\xee1f3a17f8fd9ac66e58efc4ce688b70306e5acfa7c7b4937d1b8693cd11feba2019d1ab82c7c900f3e9c49a1a22bd0da3f0103cea26decf18f181b65e365f0a 1638356932000000 2 3000000
-16 \\x0d2e8967a73606b2fd7ff685a5b99c23b2eea6c91377f558565af8699c80acb635be64fcdcc783920669d932339492c0a6249520118b2c5927bdd4d388e7a391 368 \\x00000001000000017f1287445bce80685ed4aa5bdf8ecc7591a1322c31438557666d81e3ae714ec59159525c574671f11f4648da66b60bc1457c48ecda546f5b1b71f203add5afdcc22dfd94ad42fac38494a812c6232ef9a62ca22c4c81e91faf408860c6df1869a5efc3ec289550c5623cf31570f92ea5ecf0dd958f7f3d9ab477ff479f35b1e0 2 \\x566c21fb9948f8f58cb5f0598f1777a8d215ad376083c8d347d2bafa78b8283694072785e6045eb38bc378fd9b29e6720a5581a50f8f4a634e5e2eb76b15fd08 1638356932000000 0 11000000
-17 \\x107759c8b45649dd746a7fe138ffad96b747839cc4f5ea05722308ed29e04ae84f4d0e51b7e2cb14db50405b0dd8e04036e691b32ed3e0f68ad2d00d5e5c62ff 368 \\x000000010000000102acb2c0148a5bf07fa8bccb90020369c5527e586be4daff458d641db4e9930a5fd5dc7cd9ee6ebf92c79d119e3a6ece48a95443d2edd83c3517305c5edd1d930623c6986412ac8be0352bceac279dcd4266f0928cabece3c2c0b71d0b60c5fe7334dd08749cad2e5653ddf3150e08ed2d7b0dfbc27ee6f0867bd5d68ec6ae93 2 \\x5df83d2faf76305436f2333069fa58591461c1f7db3df37e93b178af4e14f36162560b18311369b5a2ee028aae6d06aa6a9a9bb00e0149df08854a31c8fbfe00 1638356932000000 0 11000000
-18 \\x2d83f40f65782dd39926f3bbd1bd41c0cb8b12d52891d0dec23f0e27d040c8f01ec41d1a0ee06175067729b6f51c5af8b8176853c2ad764049cd7cb617409261 368 \\x0000000100000001afb81b4ddff1ca98136ca2d9f26876d8ee52479cf93b5d1bbe3cad6e48796265f356ac3796248205eea75940f8e2cc2e2acd7457c62f69d7427379abf7bb0d6d05efa85fe85dcdde0fdce44acbf7e91162e37459688de1380a40d8110dccccbf167dc5b1104dca8d346c62656295fb8c2c9e7edf0e4c9c5949feb3e66e82b2d0 2 \\xb31b5dd6ad9eba54798a09c5f489fac61fd66619ff3bbfb18a6299664de13c40994aff016b062886026314d9c6aee3e51b5baf7125893513e90f3b97d39b5a0f 1638356932000000 0 11000000
-19 \\x5f3f70f3bc10fa0d39e3a258f469b23625dbc149b1fed3af5090a79ff019ae738a4c1d38165639233b691c5ffdc8c6c3d0ed84951afa284ea223488db0eee4a7 368 \\x0000000100000001027fa9b1e80384500a7cd7d7f5e411b6ac525484192ea1c7ffc5967688d6f855b88e474af767a40e9ea6e7707130afbcb8a049a96934bd27f5308152154b5db09330b84dd4dc792a67fe5a6c8d32f18537870870e4290857f543810a9738d4b434fb33470c751faff39a9f6840ead346e3b8bc47d1c5c2552acb341218203f22 2 \\xfa205e85ee345ab75697fd77516b6c57b52ac21561a9efc1b2e971b9e163449cb21defd4b12c217794452a2c5f7d8378f40e3ff660fd536246d3e4caec914509 1638356932000000 0 11000000
-20 \\xee4d1453919b60c92c099958241c723b307afedd489dffff5df8f552d55e3a453120a1bb8d29866eb58cfe8423518b6fc5fe9ec014cb129e2068616f21d76977 368 \\x00000001000000010536dbc54fb685c2418758646016e8fded0d9ea120cdeee0e10b8c86f274c703412d863cf57a3408cf148cd6aa6b1bfade7e4f54757064e965a7dd5c8f262b880d91d3629046d15ef8bb4c1c75d2e3b48e82a7d1f221659bf262e58c41be54cf877b069a473a27e12798af714240df39aa044ad2dc6c41b053f86e183c42227d 2 \\x695b908bfc3d33ab51a55ea747fef4e4a013226372229d77b37ac69d68cb234d9a809c642a270fe5db5ad44bc8efced322a8dbbc45df49c093130b5542d8ca06 1638356932000000 0 11000000
-21 \\xb98181f7621d3cab43d42832d8812bd41fe209dd0a5d6da958a2a912beec1415dd65602f10940d0649c3a82dca6597923375f35122281fbd3c74ec3e6c19da7d 368 \\x00000001000000013a39925af579fb22ace80950827fc72bd1e3b3003da2e848ea6d0fe6532daada78ec320d57ab90d207b4e12834582f6a869c636276f2581f9924c95abde58980cca8a8c5668be8a6020ca8aa5f7e155574209de499d8b6d179458db3a5c5b410f4f24728507e798883d2e7c5ff740e3dc095951cc18e5e46bcc62eb5bff771fc 2 \\x13d916a5bca336b55b4fd0e13f6cc408b0242dba23f6974c814678c4bec7d5d61070599720d1405dca6abb9899f7faf9e2d02fb2e14c47f215a55d2f039f1407 1638356932000000 0 11000000
-22 \\xc68ed999367719d3eda40c4d544e7e23451982e093f40bdeca2f6cafac47a3dc2688c5a29833ae8971fc31aa988d2216c6e35ebc97acde086adceba63c5b7512 368 \\x00000001000000011ee10deea8a22bcd428d7e1688d35d70caffa2c84918f335541eba8d2b7a3be33aa8517ada86ba9c2e35cf0ed6b06a091e2b9f07afb9c40844b21f25a2d90e9de9c9cb29ca82f7eb8e843a4a8352b7939332a8a9ddf232ab34c4da013f7e392e7ee8d78989b146c7c74b81470ca1166ec0dd2aac32548fb7130024514de41cbb 2 \\xb722918f5050b9d82fa21aee8406bb0f209ad55f1d1eb3023f7e59eec5d6027a099fd58345c501c1b823ae6eb71b8f9c7ff50882c9d313c42239093b8d8d4a03 1638356932000000 0 11000000
-23 \\x34cef93565c9e898b3397322b2650812b27d5224fb04332c88cc62f1ef8f13540d314986c3916ae722f301c2eb13391c06ab8356439fc2976bb003c441555292 368 \\x0000000100000001914c931b2cfc059bffd4c5d1f966b2c9baf3d812c30234c030e98e582715de7f297e7ad3d6b266d6d7b68a8b9c55459ce4eb59b8b10c6b3fc139177d23722e0a3abd4d37cd17d726996b20e651166f786a41775aa496fdba41a9c054984196996034b4a7a50318c16644240f2cff642d60f7d589208c619e15bb6b2cde6bd2af 2 \\x219678ca84967a3dd67e297a354c02f32aebf99b785336f8319ee4e52fa8e65259cc38c1c4afb1f1bdcf0546a67afd0b1d9b7f5d5ea62a6316ed1844bc91c909 1638356932000000 0 11000000
-24 \\x3a7908cb58efaf39ecd45e74fc73b0aa5b32a16462859876b46d111e92a04aaeba38baf5924ceb3601cc147801ef805b031460c0dac510215c409adf9fef065f 116 \\x00000001000000011dd701e9efb125c39da2ccb5186f416f37f32cf82cd70dd8a021fc1ca92f1e936884455df8d7033800759fb2d3ee680995bb8069dafc4f882dbab6fddf8caca4962e83a4e5b4184f03c7985e9e9eb7f9c1e0bcbf3011ec2e4d32b15123e76c2cdff1e20a3e1b72ee97c6d9cf7b8cd72504241713c0b2fbe9dbbdf6654619ce1d 2 \\x5dca4c16463ed30071096d5238540b4ffaf13aa9004eea6339d0b9a3b57461863130ef8d220172cc519e9c9f58776b39a089a35b6cbda36cfd089c3a8b9a8906 1638356932000000 0 2000000
-25 \\x37f65fbcf93b376cd5a68644f9e4ad632d1acd73c0bdb0008f95ca28756291a9d83e571c798a69534976c1b5c3d7afd8c57716d5acc433595cad63e9d48d4f45 116 \\x00000001000000014b35f5faaf4581ca37f401031ac151e6f7b6b8957125703f161fcda10c02c524b539fcdeb476e207058223c29244c09cadac5a73cd0bf82ce8d5320ed4ef9221b9cb5a3c220b46675693d9f332f4ce8bd09693be3db8b2cd20afec0d6b34fc6615202cede3099742c1bf0f1a00fb35ba2831a0cb2602429f03f9f5f5ecd74cd7 2 \\xbc73f16cac7dd63e68cc055c61c85ced9a09b3fe3d2ba6657fcbd037d3b54ae13dce20edede80897d6696e8926db8bf8b58a374d093a78ad2496c40265ab410a 1638356932000000 0 2000000
-26 \\xed5536533cae2500503b66ec52f5b018d5d2e46a261ec6f16ecb64b463171f64396814518b0f1751210689e2cc37793feac66d9b4bbdcebf5bd6e9b6425a1ac4 116 \\x00000001000000018d70325dcf083247d3854fa81b57a1b8bd96bc1e1edaefc5965d01f74c82d2f97117083e557f68eeb01d7f65318dd6cca5bd11e0073229bfb0b8abc99cf4f70944ba6236f3c7a614f6ace9ed9089ea18227bf36b62df21da0b864157aa659048232f6e6906bffb5fbc3a21a5b632d936fae7f1b14e0bc4fa5da65756ab67a540 2 \\xf06b49047026e1f97fcea97eb2c19555e0323991621a79b8932a666251083405c0e57d1159bfd17c8c48543b9c8a9dbac15b6e1e3d75102e5523861697f76b03 1638356932000000 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: 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 \\x0943be92e9d54af5ea96c415b17d5884a429de4c8891bbf908e857023d67a3820b8a5cad2886ddf62710ff84e8b695b45644d51d80403120ac2f3f36b836950b t 1638356914000000
-\.
-
-
---
--- 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, master_sig) FROM stdin;
-1 x-taler-bank 1609459200000000 1640995200000000 0 1000000 0 1000000 \\x0d82feaa94d63ddd13346840135e4a74893bb825ac9838a99a3861024eef918e5af74401e3cddc7c8202d6f84be76f5256454d4af258d1bd9978d3a9499f1501
-\.
-
-
---
--- Data for Name: wire_out; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_out (wireout_uuid, execution_date, wtid_raw, wire_target_serial_id, exchange_account_section, amount_val, amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_targets; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_targets (wire_target_serial_id, h_payto, payto_uri, kyc_ok, external_id) FROM stdin;
-1 \\xbd616f2bb42e5615ef0271a80598b6522cfe417d62b39989331491ad0d17af19044a61ed4a28a3b6eecbdfbcb1be10809f24d4978fda96710c4471e499a665ea payto://x-taler-bank/localhost/testuser-7tgipbkp f \N
-2 \\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660cb3a8ffd7e9e69c646815045edc179e5e7ea1ecd9584550d202ae951ebd572e98 payto://x-taler-bank/localhost/43 f \N
-3 \\x95fb0cf57b815365bf0ac184db2737810b48d77984df203211df809b8dcbf1ba740d183c7c147cb0f258cfaa2eab507f8f817829704d22a1875ef93a43ad0fe4 payto://x-taler-bank/localhost/testuser-db6y8s2c 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 1638356907957128 0 1024 f wirewatch-exchange-account-1
-\.
-
-
---
--- 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: 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', 22, 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: known_coins_known_coin_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.known_coins_known_coin_id_seq', 3, 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: prewire_prewire_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.prewire_prewire_uuid_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: 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', 3, 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: aggregation_tracking aggregation_tracking_aggregation_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_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: 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: 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 deposits_known_coin_id_merchant_pub_h_contract_terms_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_known_coin_id_merchant_pub_h_contract_terms_key UNIQUE (known_coin_id, merchant_pub, h_contract_terms);
-
-
---
--- Name: deposits deposits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_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: known_coins known_coins_known_coin_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_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: 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: prewire prewire_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire
- ADD CONSTRAINT prewire_pkey PRIMARY KEY (prewire_uuid);
-
-
---
--- Name: recoup recoup_recoup_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_recoup_uuid_key UNIQUE (recoup_uuid);
-
-
---
--- Name: recoup_refresh recoup_refresh_recoup_refresh_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_recoup_refresh_uuid_key UNIQUE (recoup_refresh_uuid);
-
-
---
--- Name: recoup_refresh recoup_refresh_rrc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_rrc_serial_key UNIQUE (rrc_serial);
-
-
---
--- Name: refresh_commitments refresh_commitments_melt_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_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_revealed_coins refresh_revealed_coins_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_coin_ev_key UNIQUE (coin_ev);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_h_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_h_coin_ev_key UNIQUE (h_coin_ev);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_pkey PRIMARY KEY (melt_serial_id, freshcoin_index);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_rrc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_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 refresh_transfer_keys_rtc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys
- ADD CONSTRAINT refresh_transfer_keys_rtc_serial_key UNIQUE (rtc_serial);
-
-
---
--- Name: refunds refunds_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_pkey PRIMARY KEY (deposit_serial_id, rtransaction_id);
-
-
---
--- Name: refunds refunds_refund_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_refund_serial_id_key UNIQUE (refund_serial_id);
-
-
---
--- Name: reserves_close reserves_close_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close
- ADD CONSTRAINT reserves_close_pkey PRIMARY KEY (close_uuid);
-
-
---
--- 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_uuid, wire_reference);
-
-
---
--- Name: reserves_in reserves_in_reserve_in_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_reserve_in_serial_id_key UNIQUE (reserve_in_serial_id);
-
-
---
--- Name: reserves_out reserves_out_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_pkey PRIMARY KEY (h_blind_ev);
-
-
---
--- Name: reserves_out reserves_out_reserve_out_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_reserve_out_serial_id_key UNIQUE (reserve_out_serial_id);
-
-
---
--- Name: reserves reserves_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves
- ADD CONSTRAINT reserves_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves reserves_reserve_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves
- ADD CONSTRAINT reserves_reserve_uuid_key UNIQUE (reserve_uuid);
-
-
---
--- 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: 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 wire_out_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out
- ADD CONSTRAINT wire_out_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_targets wire_targets_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets
- ADD CONSTRAINT wire_targets_pkey PRIMARY KEY (h_payto);
-
-
---
--- Name: wire_targets wire_targets_wire_target_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets
- ADD CONSTRAINT wire_targets_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: aggregation_tracking_wtid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX aggregation_tracking_wtid_index ON public.aggregation_tracking USING btree (wtid_raw);
-
-
---
--- Name: INDEX aggregation_tracking_wtid_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.aggregation_tracking_wtid_index IS 'for lookup_transactions';
-
-
---
--- 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_expire_legal_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX denominations_expire_legal_index ON public.denominations USING btree (expire_legal);
-
-
---
--- Name: deposits_coin_pub_merchant_contract_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_coin_pub_merchant_contract_index ON public.deposits USING btree (known_coin_id, merchant_pub, h_contract_terms);
-
-
---
--- Name: INDEX deposits_coin_pub_merchant_contract_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.deposits_coin_pub_merchant_contract_index IS 'for deposits_get_ready';
-
-
---
--- Name: deposits_get_ready_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_get_ready_index ON public.deposits USING btree (shard, done, extension_blocked, tiny, wire_deadline);
-
-
---
--- Name: deposits_iterate_matching_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_iterate_matching_index ON public.deposits USING btree (merchant_pub, wire_target_serial_id, done, extension_blocked, refund_deadline);
-
-
---
--- Name: INDEX deposits_iterate_matching_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.deposits_iterate_matching_index IS 'for deposits_iterate_matching';
-
-
---
--- 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: known_coins_by_denomination; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX known_coins_by_denomination ON public.known_coins USING btree (denominations_serial);
-
-
---
--- Name: known_coins_by_hashed_coin_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX known_coins_by_hashed_coin_pub ON public.known_coins USING hash (coin_pub);
-
-
---
--- Name: known_coins_by_hashed_rc; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX known_coins_by_hashed_rc ON public.refresh_commitments USING hash (rc);
-
-
---
--- 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: 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: prepare_get_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prepare_get_index ON public.prewire USING btree (failed, finished);
-
-
---
--- Name: INDEX prepare_get_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prepare_get_index IS 'for wire_prepare_data_get';
-
-
---
--- Name: prepare_iteration_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prepare_iteration_index ON public.prewire USING btree (finished);
-
-
---
--- Name: INDEX prepare_iteration_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prepare_iteration_index IS 'for gc_prewire';
-
-
---
--- Name: recoup_by_h_blind_ev; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_by_h_blind_ev ON public.recoup USING btree (reserve_out_serial_id);
-
-
---
--- Name: recoup_for_by_reserve; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_for_by_reserve ON public.recoup USING btree (known_coin_id, reserve_out_serial_id);
-
-
---
--- Name: recoup_refresh_by_h_blind_ev; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_by_h_blind_ev ON public.recoup_refresh USING btree (rrc_serial);
-
-
---
--- Name: recoup_refresh_for_by_reserve; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_for_by_reserve ON public.recoup_refresh USING btree (known_coin_id, rrc_serial);
-
-
---
--- Name: refresh_commitments_old_coin_id_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_commitments_old_coin_id_index ON public.refresh_commitments USING btree (old_known_coin_id);
-
-
---
--- Name: refresh_revealed_coins_denominations_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_revealed_coins_denominations_index ON public.refresh_revealed_coins USING btree (denominations_serial);
-
-
---
--- Name: refresh_transfer_keys_coin_tpub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_transfer_keys_coin_tpub ON public.refresh_transfer_keys USING btree (melt_serial_id, transfer_pub);
-
-
---
--- Name: INDEX refresh_transfer_keys_coin_tpub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.refresh_transfer_keys_coin_tpub IS 'for get_link (unsure if this helps or hurts for performance as there should be very few transfer public keys per rc, but at least in theory this helps the ORDER BY clause)';
-
-
---
--- Name: reserves_close_by_uuid; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_by_uuid ON public.reserves_close USING btree (reserve_uuid);
-
-
---
--- Name: reserves_expiration_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_expiration_index ON public.reserves USING btree (expiration_date, current_balance_val, current_balance_frac);
-
-
---
--- Name: INDEX reserves_expiration_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_expiration_index IS 'used in get_expired_reserves';
-
-
---
--- Name: reserves_gc_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_gc_index ON public.reserves USING btree (gc_date);
-
-
---
--- Name: INDEX reserves_gc_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_gc_index IS 'for reserve garbage collection';
-
-
---
--- Name: reserves_in_exchange_account_serial; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_exchange_account_serial ON public.reserves_in USING btree (exchange_account_section, reserve_in_serial_id DESC);
-
-
---
--- Name: reserves_in_execution_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_execution_index ON public.reserves_in USING btree (exchange_account_section, execution_date);
-
-
---
--- Name: reserves_out_execution_date; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_execution_date ON public.reserves_out USING btree (execution_date);
-
-
---
--- Name: reserves_out_for_get_withdraw_info; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_for_get_withdraw_info ON public.reserves_out USING btree (denominations_serial, h_blind_ev);
-
-
---
--- Name: reserves_out_reserve_uuid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_reserve_uuid_index ON public.reserves_out USING btree (reserve_uuid);
-
-
---
--- Name: INDEX reserves_out_reserve_uuid_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_out_reserve_uuid_index IS 'for get_reserves_out';
-
-
---
--- Name: revolving_work_shards_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX revolving_work_shards_index ON public.revolving_work_shards USING btree (job_name, active, last_attempt);
-
-
---
--- Name: wire_fee_gc_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wire_fee_gc_index ON public.wire_fee USING btree (end_date);
-
-
---
--- Name: work_shards_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX work_shards_index ON public.work_shards USING btree (job_name, completed, last_attempt);
-
-
---
--- Name: aggregation_tracking aggregation_tracking_deposit_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_deposit_serial_id_fkey FOREIGN KEY (deposit_serial_id) REFERENCES public.deposits(deposit_serial_id) ON DELETE CASCADE;
-
-
---
--- 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: deposits deposits_extension_details_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_extension_details_serial_id_fkey FOREIGN KEY (extension_details_serial_id) REFERENCES public.extension_details(extension_details_serial_id);
-
-
---
--- Name: deposits deposits_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: deposits deposits_wire_target_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_wire_target_serial_id_fkey FOREIGN KEY (wire_target_serial_id) REFERENCES public.wire_targets(wire_target_serial_id);
-
-
---
--- Name: known_coins known_coins_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_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: recoup recoup_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id);
-
-
---
--- Name: recoup_refresh recoup_refresh_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id);
-
-
---
--- Name: recoup_refresh recoup_refresh_rrc_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_rrc_serial_fkey FOREIGN KEY (rrc_serial) REFERENCES public.refresh_revealed_coins(rrc_serial) ON DELETE CASCADE;
-
-
---
--- Name: recoup recoup_reserve_out_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_reserve_out_serial_id_fkey FOREIGN KEY (reserve_out_serial_id) REFERENCES public.reserves_out(reserve_out_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_commitments refresh_commitments_old_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_old_known_coin_id_fkey FOREIGN KEY (old_known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_melt_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_melt_serial_id_fkey FOREIGN KEY (melt_serial_id) REFERENCES public.refresh_commitments(melt_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_transfer_keys refresh_transfer_keys_melt_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys
- ADD CONSTRAINT refresh_transfer_keys_melt_serial_id_fkey FOREIGN KEY (melt_serial_id) REFERENCES public.refresh_commitments(melt_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refunds refunds_deposit_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_deposit_serial_id_fkey FOREIGN KEY (deposit_serial_id) REFERENCES public.deposits(deposit_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: reserves_close reserves_close_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close
- ADD CONSTRAINT reserves_close_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) ON DELETE CASCADE;
-
-
---
--- Name: reserves_close reserves_close_wire_target_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close
- ADD CONSTRAINT reserves_close_wire_target_serial_id_fkey FOREIGN KEY (wire_target_serial_id) REFERENCES public.wire_targets(wire_target_serial_id);
-
-
---
--- Name: reserves_in reserves_in_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) ON DELETE CASCADE;
-
-
---
--- Name: reserves_in reserves_in_wire_source_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_wire_source_serial_id_fkey FOREIGN KEY (wire_source_serial_id) REFERENCES public.wire_targets(wire_target_serial_id);
-
-
---
--- Name: reserves_out reserves_out_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial);
-
-
---
--- Name: reserves_out reserves_out_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) 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;
-
-
---
--- Name: aggregation_tracking wire_out_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT wire_out_ref FOREIGN KEY (wtid_raw) REFERENCES public.wire_out(wtid_raw) ON DELETE CASCADE DEFERRABLE;
-
-
---
--- Name: wire_out wire_out_wire_target_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out
- ADD CONSTRAINT wire_out_wire_target_serial_id_fkey FOREIGN KEY (wire_target_serial_id) REFERENCES public.wire_targets(wire_target_serial_id);
-
-
---
--- 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
new file mode 100644
index 000000000..cd8c64b8e
--- /dev/null
+++ b/src/auditor/batch.conf
@@ -0,0 +1,183 @@
+[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 = 2XPQZ7B7EERWT7GR0MF30HPFG4TA1J0CWCQ3XBD48PA4K7GVDBK0
+
+[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/accounts/Exchange/taler-wire-gateway/
+
+[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:///batch
+
+[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:///batch
+
+[exchange]
+LOOKAHEAD_SIGN = 32 weeks 1 day
+SIGNKEY_DURATION = 4 weeks
+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:8082/2
+SUGGESTED_EXCHANGE = http://localhost:8081/
+HTTP_PORT = 8082
+MAX_DEBT_BANK = TESTKUDOS:100000.0
+MAX_DEBT = TESTKUDOS:50.0
+DATABASE = postgres:///batch
+
+[auditordb-postgres]
+CONFIG = postgres:///batch
+
+[auditor]
+PUBLIC_KEY = JG9QFRG7R7BH9701420BD6M38NZW21MV9AR3QHYJEAHZ4S26B3HG
+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/batch.sh b/src/auditor/batch.sh
new file mode 100755
index 000000000..bbe1be0ba
--- /dev/null
+++ b/src/auditor/batch.sh
@@ -0,0 +1,235 @@
+#!/bin/bash
+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
+}
+
+# Where do we write the result?
+BASEDB=${1:-"batch"}
+
+# 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
+
+
+echo -n "Testing for taler-fakebank-run"
+taler-fakebank-run -h >/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"
+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"
+
+
+# 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-fakebank-run -c $CONF &> 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
+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
+
+if [ 1 != $OK ]
+then
+ exit_skip "Failed to setup keys"
+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"},"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"
+
+# run wallet CLI
+echo "Ready to run wallet"
+export WALLET_DB
+export EXCHANGE_URL
+export MERCHANT_URL
+export BANK_URL
+unset TALER_WALLET_INSECURE_TRUST_EXCHANGE
+export TALER_WALLET_BATCH_WITHDRAWAL=1
+echo 'taler-wallet-cli --wallet-db=$WALLET_DB -L TRACE advanced bench1 --config-json "{ \"exchange\": \"$EXCHANGE_URL\", \"bank\": \"${BANK_URL}\", \"currency\": \"TESTKUDOS\", \"payto\": \"payto://x-taler-bank/localhost/foo\", \"iterations\": 100000, \"deposits\": 10, \"restartAfter\": 2 }"'
+bash
+
+#taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'runIntegrationTest' \
+# "$(jq -n '
+# {
+# amountToSpend: "TESTKUDOS:4",
+# amountToWithdraw: "TESTKUDOS:10",
+# corebankApiBaseUrl: $BANK_URL,
+# exchangeBaseUrl: $EXCHANGE_URL,
+# merchantBaseUrl: $MERCHANT_URL,
+# }' \
+# --arg MERCHANT_URL "$MERCHANT_URL" \
+# --arg EXCHANGE_URL "$EXCHANGE_URL" \
+# --arg BANK_URL "$BANK_URL"
+# )" &> taler-wallet-cli.log
+
+
+echo "Shutting down services"
+cleanup
+
+# clean up
+echo "Final clean up"
+dropdb $TARGET_DB
+
+rm -rf $DATA_DIR || true
+exit 0
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 e5de0b592..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/
+[libeufin-bankdb-postgres]
+CONFIG = postgresql:///auditor-basedb
-[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
-
-[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/"
+
+[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-account-merchant]
-PAYTO_URI = payto://x-taler-bank/localhost/42
-HONOR_default = YES
-ACTIVE_default = YES
+
+[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
@@ -106,6 +128,7 @@ 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]
@@ -117,6 +140,7 @@ 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
[coin_kudos_1]
@@ -128,6 +152,7 @@ fee_withdraw = TESTKUDOS:0.02
fee_deposit = TESTKUDOS:0.02
fee_refresh = TESTKUDOS:0.03
fee_refund = TESTKUDOS:0.01
+CIPHER = RSA
rsa_keysize = 1024
[coin_kudos_2]
@@ -139,6 +164,7 @@ fee_withdraw = TESTKUDOS:0.03
fee_deposit = TESTKUDOS:0.03
fee_refresh = TESTKUDOS:0.04
fee_refund = TESTKUDOS:0.02
+CIPHER = RSA
rsa_keysize = 1024
[coin_kudos_4]
@@ -150,6 +176,7 @@ fee_withdraw = TESTKUDOS:0.03
fee_deposit = TESTKUDOS:0.03
fee_refresh = TESTKUDOS:0.04
fee_refund = TESTKUDOS:0.02
+CIPHER = RSA
rsa_keysize = 1024
[coin_kudos_5]
@@ -161,6 +188,7 @@ 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
[coin_kudos_8]
@@ -172,6 +200,7 @@ fee_withdraw = TESTKUDOS:0.05
fee_deposit = TESTKUDOS:0.02
fee_refresh = TESTKUDOS:0.03
fee_refund = TESTKUDOS:0.04
+CIPHER = RSA
rsa_keysize = 1024
[coin_kudos_10]
@@ -183,8 +212,5 @@ 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 140c6237e..bbce37cdc 100755
--- a/src/auditor/generate-auditor-basedb.sh
+++ b/src/auditor/generate-auditor-basedb.sh
@@ -1,217 +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
-TARGET_DB=taler-auditor-basedb
-
-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=generate-auditor-basedb-prod.conf
-cp generate-auditor-basedb-template.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 -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
-
# 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`
-
-# 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
-
-# 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-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 \
- 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
+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
-
-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,
}' \
@@ -219,28 +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
-rm $CONF
+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 ef297e7ab..29aa74b27 100755
--- a/src/auditor/generate-revoke-basedb.sh
+++ b/src/auditor/generate-revoke-basedb.sh
@@ -6,257 +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=taler-auditor-revokedb
-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-template.conf $CONF
-
-
-echo -n "Testing for taler-bank-manage"
-taler-bank-manage --help >/dev/null </dev/null || exit_skip " MISSING"
+echo -n "Testing for curl ..."
+curl --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"
-
-
-# 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 &
-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 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 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 \
- 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"
-taler-auditor-offline -c $CONF \
- download sign upload &> taler-auditor-offline.log
+# 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}"
-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"
@@ -269,21 +150,21 @@ 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"
echo "Launching exchange 1 week in the future"
kill -TERM $EXCHANGE_PID
-kill -TERM $DENOM_HELPER_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 &
-DENOM_HELPER_PID=$!
-taler-exchange-httpd $TIMETRAVEL -c $CONF 2> taler-exchange-httpd.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> ${MY_TMP_DIR}/taler-exchange-secmod-cs.log &
+CS_DENOM_HELPER_PID=$!
+taler-exchange-httpd $TIMETRAVEL -c $CONF 2> ${MY_TMP_DIR}/taler-exchange-httpd.log &
export EXCHANGE_PID=$!
# Wait for exchange to be available
@@ -299,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)
@@ -323,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
@@ -369,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 0dea786da..d0e1325ea 100644
--- a/src/auditor/report-lib.c
+++ b/src/auditor/report-lib.c
@@ -62,13 +62,18 @@ 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;
/**
* Results about denominations, cached per-transaction, maps denomination pub hashes
- * to `struct TALER_DenominationKeyValidityPS`.
+ * to `const struct TALER_EXCHANGEDB_DenominationKeyInformation`.
*/
static struct GNUNET_CONTAINER_MultiHashMap *denominations;
@@ -89,13 +94,6 @@ static struct GNUNET_SIGNAL_Context *sig_int;
static struct GNUNET_SIGNAL_Context *sig_term;
-/**
- * Test if the audit should be aborted because the user
- * pressed CTRL-C.
- *
- * @return false to continue the audit, true to terminate
- * cleanly as soon as possible
- */
bool
TALER_ARL_do_abort (void)
{
@@ -103,12 +101,6 @@ TALER_ARL_do_abort (void)
}
-/**
- * Add @a object to the report @a array. Fail hard if this fails.
- *
- * @param array report array to append @a object to
- * @param object object to append, should be check that it is not NULL
- */
void
TALER_ARL_report (json_t *array,
json_t *object)
@@ -127,16 +119,14 @@ TALER_ARL_report (json_t *array,
*
* @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
add_denomination (
void *cls,
const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_EXCHANGEDB_DenominationKeyInformationP *validity)
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue)
{
- const struct TALER_DenominationKeyValidityPS *issue = &validity->properties;
-
(void) cls;
(void) denom_pub;
if (NULL !=
@@ -145,35 +135,26 @@ add_denomination (
return; /* value already known */
#if GNUNET_EXTRA_LOGGING >= 1
{
- struct TALER_Amount value;
-
- TALER_amount_ntoh (&value,
- &issue->value);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Tracking denomination `%s' (%s)\n",
GNUNET_h2s (&issue->denom_hash.hash),
- TALER_amount2s (&value));
- TALER_amount_ntoh (&value,
- &issue->fee_withdraw);
+ TALER_amount2s (&issue->value));
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Withdraw fee is %s\n",
- TALER_amount2s (&value));
+ TALER_amount2s (&issue->fees.withdraw));
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Start time is %s\n",
- GNUNET_TIME_timestamp2s
- (GNUNET_TIME_timestamp_ntoh (issue->start)));
+ GNUNET_TIME_timestamp2s (issue->start));
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Expire deposit time is %s\n",
- GNUNET_TIME_timestamp2s
- (GNUNET_TIME_timestamp_ntoh (issue->expire_deposit)));
+ GNUNET_TIME_timestamp2s (issue->expire_deposit));
}
#endif
{
- struct TALER_DenominationKeyValidityPS *i;
+ struct TALER_EXCHANGEDB_DenominationKeyInformation *i;
- i = GNUNET_new (struct TALER_DenominationKeyValidityPS);
+ i = GNUNET_new (struct TALER_EXCHANGEDB_DenominationKeyInformation);
*i = *issue;
- i->master = TALER_ARL_master_pub;
GNUNET_assert (GNUNET_OK ==
GNUNET_CONTAINER_multihashmap_put (denominations,
&issue->denom_hash.hash,
@@ -183,18 +164,10 @@ add_denomination (
}
-/**
- * Obtain information about a @a denom_pub.
- *
- * @param dh hash of the denomination public key to look up
- * @param[out] issue set to detailed information about @a denom_pub, NULL if not found, must
- * NOT be freed by caller
- * @return transaction status code
- */
enum GNUNET_DB_QueryStatus
TALER_ARL_get_denomination_info_by_hash (
- const struct TALER_DenominationHash *dh,
- const struct TALER_DenominationKeyValidityPS **issue)
+ const struct TALER_DenominationHashP *dh,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation **issue)
{
enum GNUNET_DB_QueryStatus qs;
@@ -207,12 +180,13 @@ TALER_ARL_get_denomination_info_by_hash (
NULL);
if (0 > qs)
{
+ GNUNET_break (0);
*issue = NULL;
return qs;
}
}
{
- const struct TALER_DenominationKeyValidityPS *i;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *i;
i = GNUNET_CONTAINER_multihashmap_get (denominations,
&dh->hash);
@@ -225,13 +199,14 @@ TALER_ARL_get_denomination_info_by_hash (
}
/* maybe database changed since we last iterated, give it one more shot */
{
- struct TALER_EXCHANGEDB_DenominationKeyInformationP issue;
+ struct TALER_EXCHANGEDB_DenominationKeyInformation issue;
qs = TALER_ARL_edb->get_denomination_info (TALER_ARL_edb->cls,
dh,
&issue);
if (qs <= 0)
{
+ GNUNET_break (qs >= 0);
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Denomination %s not found\n",
@@ -243,7 +218,7 @@ TALER_ARL_get_denomination_info_by_hash (
&issue);
}
{
- const struct TALER_DenominationKeyValidityPS *i;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *i;
i = GNUNET_CONTAINER_multihashmap_get (denominations,
&dh->hash);
@@ -262,22 +237,13 @@ TALER_ARL_get_denomination_info_by_hash (
}
-/**
- * Obtain information about a @a denom_pub.
- *
- * @param denom_pub key to look up
- * @param[out] issue set to detailed information about @a denom_pub, NULL if not found, must
- * NOT be freed by caller
- * @param[out] dh set to the hash of @a denom_pub, may be NULL
- * @return transaction status code
- */
enum GNUNET_DB_QueryStatus
TALER_ARL_get_denomination_info (
const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_DenominationKeyValidityPS **issue,
- struct TALER_DenominationHash *dh)
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation **issue,
+ struct TALER_DenominationHashP *dh)
{
- struct TALER_DenominationHash hc;
+ struct TALER_DenominationHashP hc;
if (NULL == dh)
dh = &hc;
@@ -294,11 +260,11 @@ 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
*/
-static int
+static enum GNUNET_GenericReturnValue
transact (TALER_ARL_Analysis analysis,
void *analysis_cls)
{
@@ -369,14 +335,7 @@ transact (TALER_ARL_Analysis analysis,
}
-/**
- * Initialize DB sessions and run the analysis.
- *
- * @param ana analysis to run
- * @param ana_cls closure for @a ana
- * @return #GNUNET_OK on success
- */
-int
+enum GNUNET_GenericReturnValue
TALER_ARL_setup_sessions_and_run (TALER_ARL_Analysis ana,
void *ana_cls)
{
@@ -402,41 +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;
-}
-
-
-/**
- * Perform addition of amounts. If the addition fails, logs
- * a detailed error and calls exit() to terminate the process (!).
- *
- * Do not call this function directly, use #TALER_ARL_amount_add().
- *
- * @param[out] sum where to store @a a1 + @a a2, set to "invalid" on overflow
- * @param a1 first amount to add
- * @param a2 second amount to add
- * @param filename where is the addition called
- * @param functionname name of the function where the addition is called
- * @param line line number of the addition
- */
void
TALER_ARL_amount_add_ (struct TALER_Amount *sum,
const struct TALER_Amount *a1,
@@ -485,19 +409,6 @@ TALER_ARL_amount_add_ (struct TALER_Amount *sum,
}
-/**
- * Perform subtraction of amounts. If the subtraction fails, logs
- * a detailed error and calls exit() to terminate the process (!).
- *
- * Do not call this function directly, use #TALER_ARL_amount_subtract().
- *
- * @param[out] diff where to store (@a a1 - @a a2)
- * @param a1 amount to subtract from
- * @param a2 amount to subtract
- * @param filename where is the addition called
- * @param functionname name of the function where the addition is called
- * @param line line number of the addition
- */
void
TALER_ARL_amount_subtract_ (struct TALER_Amount *diff,
const struct TALER_Amount *a1,
@@ -546,24 +457,6 @@ TALER_ARL_amount_subtract_ (struct TALER_Amount *diff,
}
-/**
- * Perform subtraction of amounts. Negative results should be signalled by the
- * return value (leaving @a diff set to 'invalid'). If the subtraction fails
- * for other reasons (currency mismatch, normalization failure), logs a
- * detailed error and calls exit() to terminate the process (!).
- *
- * Do not call this function directly, use #TALER_ARL_amount_subtract_neg().
- *
- * @param[out] diff where to store (@a a1 - @a a2)
- * @param a1 amount to subtract from
- * @param a2 amount to subtract
- * @param filename where is the addition called
- * @param functionname name of the function where the addition is called
- * @param line line number of the addition
- * @return #TALER_ARL_SR_INVALID_NEGATIVE if the result was negative (and @a diff is now invalid),
- * #TALER_ARL_SR_ZERO if the result was zero,
- * #TALER_ARL_SR_POSITIVE if the result is positive
- */
enum TALER_ARL_SubtractionResult
TALER_ARL_amount_subtract_neg_ (struct TALER_Amount *diff,
const struct TALER_Amount *a1,
@@ -622,13 +515,7 @@ handle_sigint (void)
}
-/**
- * Setup global variables based on configuration.
- *
- * @param c configuration to use
- * @return #GNUNET_OK on success
- */
-int
+enum GNUNET_GenericReturnValue
TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
{
TALER_ARL_cfg = c;
@@ -645,7 +532,19 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
"BASE_URL");
return GNUNET_SYSERR;
}
- if (GNUNET_YES == GNUNET_is_zero (&TALER_ARL_master_pub))
+ 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 */
char *master_public_key_str;
@@ -676,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 */
@@ -683,8 +585,36 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
"Taler auditor running for exchange master public key %s\n",
TALER_B2S (&TALER_ARL_master_pub));
- if (GNUNET_YES == GNUNET_is_zero (&TALER_ARL_auditor_pub))
+ if (GNUNET_is_zero (&TALER_ARL_auditor_pub))
{
+ char *auditor_public_key_str;
+
+ if (GNUNET_OK ==
+ GNUNET_CONFIGURATION_get_value_string (c,
+ "auditor",
+ "PUBLIC_KEY",
+ &auditor_public_key_str))
+ {
+ if (GNUNET_OK !=
+ GNUNET_CRYPTO_eddsa_public_key_from_string (
+ auditor_public_key_str,
+ strlen (auditor_public_key_str),
+ &TALER_ARL_auditor_pub.eddsa_pub))
+ {
+ GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
+ "auditor",
+ "PUBLIC_KEY",
+ "invalid key");
+ GNUNET_free (auditor_public_key_str);
+ return GNUNET_SYSERR;
+ }
+ GNUNET_free (auditor_public_key_str);
+ }
+ }
+
+ if (GNUNET_is_zero (&TALER_ARL_auditor_pub))
+ {
+ /* public key not configured */
/* try loading private key and deriving public key */
char *fn;
@@ -696,6 +626,9 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
{
struct TALER_AuditorPrivateKeyP auditor_priv;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Loading offline private key from `%s' to get auditor public key\n",
+ fn);
if (GNUNET_OK ==
GNUNET_CRYPTO_eddsa_key_from_file (fn,
GNUNET_NO, /* do NOT create it! */
@@ -708,36 +641,12 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
}
}
- if (GNUNET_YES == GNUNET_is_zero (&TALER_ARL_auditor_pub))
+ if (GNUNET_is_zero (&TALER_ARL_auditor_pub))
{
- /* private key not available, try configuration for public key */
- char *auditor_public_key_str;
-
- if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_string (c,
- "auditor",
- "PUBLIC_KEY",
- &auditor_public_key_str))
- {
- GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
- "auditor",
- "PUBLIC_KEY");
- return GNUNET_SYSERR;
- }
- if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_public_key_from_string (
- auditor_public_key_str,
- strlen (auditor_public_key_str),
- &TALER_ARL_auditor_pub.eddsa_pub))
- {
- GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
- "auditor",
- "PUBLIC_KEY",
- "invalid key");
- GNUNET_free (auditor_public_key_str);
- return GNUNET_SYSERR;
- }
- GNUNET_free (auditor_public_key_str);
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_INFO,
+ "auditor",
+ "PUBLIC_KEY/AUDITOR_PRIV_FILE");
+ return GNUNET_SYSERR;
}
if (GNUNET_OK !=
@@ -794,39 +703,18 @@ 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;
}
-/**
- * Generate the report and close connectios to the database.
- *
- * @param report the report to output, may be NULL for no report
- */
void
TALER_ARL_done (json_t *report)
{
@@ -859,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 3f4489763..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;
@@ -101,8 +152,8 @@ TALER_ARL_report (json_t *array,
*/
enum GNUNET_DB_QueryStatus
TALER_ARL_get_denomination_info_by_hash (
- const struct TALER_DenominationHash *dh,
- const struct TALER_DenominationKeyValidityPS **issue);
+ const struct TALER_DenominationHashP *dh,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation **issue);
/**
@@ -117,8 +168,8 @@ TALER_ARL_get_denomination_info_by_hash (
enum GNUNET_DB_QueryStatus
TALER_ARL_get_denomination_info (
const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_DenominationKeyValidityPS **issue,
- struct TALER_DenominationHash *dh);
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation **issue,
+ struct TALER_DenominationHashP *dh);
/**
@@ -276,7 +327,7 @@ TALER_ARL_amount_subtract_neg_ (struct TALER_Amount *diff,
* @param ana_cls closure for @a ana
* @return #GNUNET_OK on success
*/
-int
+enum GNUNET_GenericReturnValue
TALER_ARL_setup_sessions_and_run (TALER_ARL_Analysis ana,
void *ana_cls);
@@ -298,7 +349,7 @@ TALER_ARL_do_abort (void);
* @param c configuration to use
* @return #GNUNET_OK on success
*/
-int
+enum GNUNET_GenericReturnValue
TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c);
diff --git a/src/auditor/revoke-basedb.age b/src/auditor/revoke-basedb.age
deleted file mode 100644
index e9f0306cc..000000000
--- a/src/auditor/revoke-basedb.age
+++ /dev/null
@@ -1 +0,0 @@
-1638367019
diff --git a/src/auditor/test-auditor.conf b/src/auditor/revoke-basedb.conf
index da440c60a..706f97347 100644
--- a/src/auditor/test-auditor.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 ce92ea22e..000000000
--- a/src/auditor/revoke-basedb.mpub
+++ /dev/null
@@ -1 +0,0 @@
-93PR4M9WR54W046A4DWR58V28T2G94DJCWHY0NMBW2S8N6W60AT0
diff --git a/src/auditor/revoke-basedb.sql b/src/auditor/revoke-basedb.sql
deleted file mode 100644
index 207275c80..000000000
--- a/src/auditor/revoke-basedb.sql
+++ /dev/null
@@ -1,8606 +0,0 @@
---
--- PostgreSQL database dump
---
-
--- Dumped from database version 13.4
--- Dumped by pg_dump version 13.4
-
-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.';
-
-
-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: 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
-);
-
-
---
--- 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 'We first create entries in the aggregation_tracking table and then finally the wire_out entry once we know the total amount. Hence the constraint must be deferrable and we cannot use a wireout_uuid here, because we do not have it when these rows are created. Changing the logic to first INSERT a dummy row into wire_out and then UPDATEing that row in the same transaction would theoretically reduce per-deposit storage costs by 5 percent (24/~460 bytes).';
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.aggregation_tracking_aggregation_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.aggregation_tracking_aggregation_serial_id_seq OWNED BY public.aggregation_tracking.aggregation_serial_id;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.auditor_denom_sigs_auditor_denom_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditor_denom_sigs_auditor_denom_serial_seq OWNED BY public.auditor_denom_sigs.auditor_denom_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.auditors_auditor_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditors_auditor_uuid_seq OWNED BY public.auditors.auditor_uuid;
-
-
---
--- 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: 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: -
---
-
-CREATE SEQUENCE public.denomination_revocations_denom_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.denomination_revocations_denom_revocations_serial_id_seq OWNED BY public.denomination_revocations.denom_revocations_serial_id;
-
-
---
--- 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_restrictions 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_restrictions; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.denominations.age_restrictions 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: -
---
-
-CREATE SEQUENCE public.denominations_denominations_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.denominations_denominations_serial_seq OWNED BY public.denominations.denominations_serial;
-
-
---
--- 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,
- 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_serial_id bigint NOT NULL,
- tiny boolean DEFAULT false NOT NULL,
- done boolean DEFAULT false NOT NULL,
- extension_blocked boolean DEFAULT false NOT NULL,
- extension_details_serial_id bigint,
- 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))
-);
-
-
---
--- 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. Should be set based on h_payto and merchant_pub. 64-bit value because we need an *unsigned* 32-bit value.';
-
-
---
--- 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_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.wire_target_serial_id IS 'Identifies the target bank account and KYC status';
-
-
---
--- Name: COLUMN deposits.tiny; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.tiny IS 'Set to TRUE if we decided that the amount is too small to ever trigger a wire transfer by itself (requires real aggregation)';
-
-
---
--- 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_deposit_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.deposits_deposit_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.deposits_deposit_serial_id_seq OWNED BY public.deposits.deposit_serial_id;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.exchange_sign_keys_esk_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.exchange_sign_keys_esk_serial_seq OWNED BY public.exchange_sign_keys.esk_serial;
-
-
---
--- Name: extension_details; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.extension_details (
- extension_details_serial_id bigint NOT NULL,
- extension_options character varying
-);
-
-
---
--- 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_extension_details_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.extension_details_extension_details_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: extension_details_extension_details_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.extension_details_extension_details_serial_id_seq OWNED BY public.extension_details.extension_details_serial_id;
-
-
---
--- Name: known_coins; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.known_coins (
- known_coin_id bigint NOT NULL,
- coin_pub bytea NOT NULL,
- age_hash bytea,
- denominations_serial bigint NOT NULL,
- denom_sig bytea NOT NULL,
- CONSTRAINT known_coins_age_hash_check CHECK ((length(age_hash) = 32)),
- CONSTRAINT known_coins_coin_pub_check CHECK ((length(coin_pub) = 32))
-);
-
-
---
--- 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.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_hash; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.known_coins.age_hash IS 'Optional hash 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: known_coins_known_coin_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.known_coins_known_coin_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.known_coins_known_coin_id_seq OWNED BY public.known_coins.known_coin_id;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_accounts_account_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_accounts_account_serial_seq OWNED BY public.merchant_accounts.account_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_deposits_deposit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_deposits_deposit_serial_seq OWNED BY public.merchant_deposits.deposit_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_exchange_signing_keys_signkey_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_exchange_signing_keys_signkey_serial_seq OWNED BY public.merchant_exchange_signing_keys.signkey_serial;
-
-
---
--- 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,
- 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: -
---
-
-CREATE SEQUENCE public.merchant_exchange_wire_fees_wirefee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_exchange_wire_fees_wirefee_serial_seq OWNED BY public.merchant_exchange_wire_fees.wirefee_serial;
-
-
---
--- Name: merchant_instances; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_instances (
- merchant_serial bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- 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,
- auth_hash bytea,
- auth_salt bytea,
- 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.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: 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: merchant_instances_merchant_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_instances_merchant_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_instances_merchant_serial_seq OWNED BY public.merchant_instances.merchant_serial;
-
-
---
--- 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
-);
-
-
---
--- 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: 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: -
---
-
-CREATE SEQUENCE public.merchant_inventory_product_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_inventory_product_serial_seq OWNED BY public.merchant_inventory.product_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_kyc_kyc_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_kyc_kyc_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_kyc_kyc_serial_id_seq OWNED BY public.merchant_kyc.kyc_serial_id;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_orders_order_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_orders_order_serial_seq OWNED BY public.merchant_orders.order_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_refunds_refund_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_refunds_refund_serial_seq OWNED BY public.merchant_refunds.refund_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_tip_pickups_pickup_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tip_pickups_pickup_serial_seq OWNED BY public.merchant_tip_pickups.pickup_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_tip_reserves_reserve_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tip_reserves_reserve_serial_seq OWNED BY public.merchant_tip_reserves.reserve_serial;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_tips_tip_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tips_tip_serial_seq OWNED BY public.merchant_tips.tip_serial;
-
-
---
--- 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,
- execution_time bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- credit_amount_val bigint NOT NULL,
- credit_amount_frac integer 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.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 exchange';
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.merchant_transfers_credit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_transfers_credit_serial_seq OWNED BY public.merchant_transfers.credit_serial;
-
-
---
--- Name: prewire; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.prewire (
- prewire_uuid bigint NOT NULL,
- type text NOT NULL,
- finished boolean DEFAULT false NOT NULL,
- failed boolean DEFAULT false NOT NULL,
- buf bytea NOT NULL
-);
-
-
---
--- 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_prewire_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.prewire_prewire_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.prewire_prewire_uuid_seq OWNED BY public.prewire.prewire_uuid;
-
-
---
--- Name: recoup; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup (
- recoup_uuid bigint 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,
- "timestamp" bigint NOT NULL,
- reserve_out_serial_id bigint NOT NULL,
- CONSTRAINT recoup_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-
-
---
--- Name: TABLE recoup; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.recoup IS 'Information about recoups that were executed';
-
-
---
--- Name: COLUMN recoup.known_coin_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.known_coin_id IS 'Do not CASCADE ON DROP on the known_coin_id, as we may keep the coin alive!';
-
-
---
--- 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.';
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.recoup_recoup_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.recoup_recoup_uuid_seq OWNED BY public.recoup.recoup_uuid;
-
-
---
--- Name: recoup_refresh; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_refresh (
- recoup_refresh_uuid bigint 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,
- "timestamp" bigint NOT NULL,
- rrc_serial bigint NOT NULL,
- CONSTRAINT recoup_refresh_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_refresh_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-
-
---
--- Name: COLUMN recoup_refresh.known_coin_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.known_coin_id IS 'Do not CASCADE ON DROP on the known_coin_id, as we may keep the coin alive!';
-
-
---
--- Name: COLUMN recoup_refresh.rrc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.rrc_serial IS 'Identifies the h_blind_ev of the recouped coin (as h_coin_ev).';
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.recoup_refresh_recoup_refresh_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.recoup_refresh_recoup_refresh_uuid_seq OWNED BY public.recoup_refresh.recoup_refresh_uuid;
-
-
---
--- Name: refresh_commitments; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_commitments (
- melt_serial_id bigint NOT NULL,
- rc bytea NOT NULL,
- old_known_coin_id bigint 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))
-);
-
-
---
--- 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: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_commitments_melt_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_commitments_melt_serial_id_seq OWNED BY public.refresh_commitments.melt_serial_id;
-
-
---
--- 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,
- 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))
-);
-
-
---
--- 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: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_revealed_coins_rrc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_revealed_coins_rrc_serial_seq OWNED BY public.refresh_revealed_coins.rrc_serial;
-
-
---
--- 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))
-);
-
-
---
--- 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_rtc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_transfer_keys_rtc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_transfer_keys_rtc_serial_seq OWNED BY public.refresh_transfer_keys.rtc_serial;
-
-
---
--- Name: refunds; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refunds (
- refund_serial_id bigint 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_merchant_sig_check CHECK ((length(merchant_sig) = 64))
-);
-
-
---
--- 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 known_coin_id. 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_refund_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refunds_refund_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refunds_refund_serial_id_seq OWNED BY public.refunds.refund_serial_id;
-
-
---
--- 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,
- expiration_date bigint NOT NULL,
- gc_date bigint NOT NULL,
- CONSTRAINT reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- 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.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_uuid bigint NOT NULL,
- execution_date bigint NOT NULL,
- wtid bytea NOT NULL,
- wire_target_serial_id bigint NOT NULL,
- 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_wtid_check CHECK ((length(wtid) = 32))
-);
-
-
---
--- 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_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_close.wire_target_serial_id 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: -
---
-
-CREATE SEQUENCE public.reserves_close_close_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_close_close_uuid_seq OWNED BY public.reserves_close.close_uuid;
-
-
---
--- Name: reserves_in; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_in (
- reserve_in_serial_id bigint NOT NULL,
- reserve_uuid bigint NOT NULL,
- wire_reference bigint NOT NULL,
- credit_val bigint NOT NULL,
- credit_frac integer NOT NULL,
- wire_source_serial_id bigint NOT NULL,
- exchange_account_section text NOT NULL,
- execution_date bigint NOT NULL
-);
-
-
---
--- 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.wire_source_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_in.wire_source_serial_id IS 'Identifies the debited bank account and KYC status';
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_in_reserve_in_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_in_reserve_in_serial_id_seq OWNED BY public.reserves_in.reserve_in_serial_id;
-
-
---
--- Name: reserves_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out (
- reserve_out_serial_id bigint NOT NULL,
- h_blind_ev bytea NOT NULL,
- 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))
-);
-
-
---
--- 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_reserve_out_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_out_reserve_out_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_out_reserve_out_serial_id_seq OWNED BY public.reserves_out.reserve_out_serial_id;
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_reserve_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_reserve_uuid_seq OWNED BY public.reserves.reserve_uuid;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.revolving_work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.revolving_work_shards_shard_serial_id_seq OWNED BY public.revolving_work_shards.shard_serial_id;
-
-
---
--- 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 'remembering which online signing keys have been revoked';
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.signkey_revocations_signkey_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.signkey_revocations_signkey_revocations_serial_id_seq OWNED BY public.signkey_revocations.signkey_revocations_serial_id;
-
-
---
--- 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,
- 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: -
---
-
-CREATE SEQUENCE public.wire_fee_wire_fee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.wire_fee_wire_fee_serial_seq OWNED BY public.wire_fee.wire_fee_serial;
-
-
---
--- 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_serial_id bigint NOT NULL,
- exchange_account_section text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT wire_out_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-);
-
-
---
--- 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_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_out.wire_target_serial_id 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_wireout_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.wire_out_wireout_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.wire_out_wireout_uuid_seq OWNED BY public.wire_out.wireout_uuid;
-
-
---
--- Name: wire_targets; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_targets (
- wire_target_serial_id bigint NOT NULL,
- 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_h_payto_check CHECK ((length(h_payto) = 64))
-);
-
-
---
--- Name: TABLE wire_targets; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_targets IS 'All recipients of money via the exchange';
-
-
---
--- Name: COLUMN wire_targets.h_payto; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_targets.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_wire_target_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.wire_targets_wire_target_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: wire_targets_wire_target_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.wire_targets_wire_target_serial_id_seq OWNED BY public.wire_targets.wire_target_serial_id;
-
-
---
--- 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: -
---
-
-CREATE SEQUENCE public.work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.work_shards_shard_serial_id_seq OWNED BY public.work_shards.shard_serial_id;
-
-
---
--- Name: aggregation_tracking aggregation_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking ALTER COLUMN aggregation_serial_id SET DEFAULT nextval('public.aggregation_tracking_aggregation_serial_id_seq'::regclass);
-
-
---
--- 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_denom_sigs auditor_denom_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs ALTER COLUMN auditor_denom_serial SET DEFAULT nextval('public.auditor_denom_sigs_auditor_denom_serial_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: auditors auditor_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors ALTER COLUMN auditor_uuid SET DEFAULT nextval('public.auditors_auditor_uuid_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: denomination_revocations denom_revocations_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations ALTER COLUMN denom_revocations_serial_id SET DEFAULT nextval('public.denomination_revocations_denom_revocations_serial_id_seq'::regclass);
-
-
---
--- Name: denominations denominations_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations ALTER COLUMN denominations_serial SET DEFAULT nextval('public.denominations_denominations_serial_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: deposits deposit_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits ALTER COLUMN deposit_serial_id SET DEFAULT nextval('public.deposits_deposit_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);
-
-
---
--- Name: exchange_sign_keys esk_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys ALTER COLUMN esk_serial SET DEFAULT nextval('public.exchange_sign_keys_esk_serial_seq'::regclass);
-
-
---
--- Name: extension_details extension_details_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.extension_details ALTER COLUMN extension_details_serial_id SET DEFAULT nextval('public.extension_details_extension_details_serial_id_seq'::regclass);
-
-
---
--- Name: known_coins known_coin_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins ALTER COLUMN known_coin_id SET DEFAULT nextval('public.known_coins_known_coin_id_seq'::regclass);
-
-
---
--- Name: merchant_accounts account_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts ALTER COLUMN account_serial SET DEFAULT nextval('public.merchant_accounts_account_serial_seq'::regclass);
-
-
---
--- Name: merchant_deposits deposit_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits ALTER COLUMN deposit_serial SET DEFAULT nextval('public.merchant_deposits_deposit_serial_seq'::regclass);
-
-
---
--- Name: merchant_exchange_signing_keys signkey_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys ALTER COLUMN signkey_serial SET DEFAULT nextval('public.merchant_exchange_signing_keys_signkey_serial_seq'::regclass);
-
-
---
--- Name: merchant_exchange_wire_fees wirefee_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees ALTER COLUMN wirefee_serial SET DEFAULT nextval('public.merchant_exchange_wire_fees_wirefee_serial_seq'::regclass);
-
-
---
--- Name: merchant_instances merchant_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances ALTER COLUMN merchant_serial SET DEFAULT nextval('public.merchant_instances_merchant_serial_seq'::regclass);
-
-
---
--- Name: merchant_inventory product_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory ALTER COLUMN product_serial SET DEFAULT nextval('public.merchant_inventory_product_serial_seq'::regclass);
-
-
---
--- Name: merchant_kyc kyc_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_kyc ALTER COLUMN kyc_serial_id SET DEFAULT nextval('public.merchant_kyc_kyc_serial_id_seq'::regclass);
-
-
---
--- Name: merchant_orders order_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders ALTER COLUMN order_serial SET DEFAULT nextval('public.merchant_orders_order_serial_seq'::regclass);
-
-
---
--- Name: merchant_refunds refund_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds ALTER COLUMN refund_serial SET DEFAULT nextval('public.merchant_refunds_refund_serial_seq'::regclass);
-
-
---
--- Name: merchant_tip_pickups pickup_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups ALTER COLUMN pickup_serial SET DEFAULT nextval('public.merchant_tip_pickups_pickup_serial_seq'::regclass);
-
-
---
--- Name: merchant_tip_reserves reserve_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves ALTER COLUMN reserve_serial SET DEFAULT nextval('public.merchant_tip_reserves_reserve_serial_seq'::regclass);
-
-
---
--- Name: merchant_tips tip_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips ALTER COLUMN tip_serial SET DEFAULT nextval('public.merchant_tips_tip_serial_seq'::regclass);
-
-
---
--- Name: merchant_transfers credit_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers ALTER COLUMN credit_serial SET DEFAULT nextval('public.merchant_transfers_credit_serial_seq'::regclass);
-
-
---
--- Name: prewire prewire_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire ALTER COLUMN prewire_uuid SET DEFAULT nextval('public.prewire_prewire_uuid_seq'::regclass);
-
-
---
--- Name: recoup recoup_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup ALTER COLUMN recoup_uuid SET DEFAULT nextval('public.recoup_recoup_uuid_seq'::regclass);
-
-
---
--- Name: recoup_refresh recoup_refresh_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh ALTER COLUMN recoup_refresh_uuid SET DEFAULT nextval('public.recoup_refresh_recoup_refresh_uuid_seq'::regclass);
-
-
---
--- Name: refresh_commitments melt_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments ALTER COLUMN melt_serial_id SET DEFAULT nextval('public.refresh_commitments_melt_serial_id_seq'::regclass);
-
-
---
--- Name: refresh_revealed_coins rrc_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins ALTER COLUMN rrc_serial SET DEFAULT nextval('public.refresh_revealed_coins_rrc_serial_seq'::regclass);
-
-
---
--- Name: refresh_transfer_keys rtc_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys ALTER COLUMN rtc_serial SET DEFAULT nextval('public.refresh_transfer_keys_rtc_serial_seq'::regclass);
-
-
---
--- Name: refunds refund_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds ALTER COLUMN refund_serial_id SET DEFAULT nextval('public.refunds_refund_serial_id_seq'::regclass);
-
-
---
--- Name: reserves reserve_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves ALTER COLUMN reserve_uuid SET DEFAULT nextval('public.reserves_reserve_uuid_seq'::regclass);
-
-
---
--- Name: reserves_close close_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close ALTER COLUMN close_uuid SET DEFAULT nextval('public.reserves_close_close_uuid_seq'::regclass);
-
-
---
--- Name: reserves_in reserve_in_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in ALTER COLUMN reserve_in_serial_id SET DEFAULT nextval('public.reserves_in_reserve_in_serial_id_seq'::regclass);
-
-
---
--- Name: reserves_out reserve_out_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out ALTER COLUMN reserve_out_serial_id SET DEFAULT nextval('public.reserves_out_reserve_out_serial_id_seq'::regclass);
-
-
---
--- Name: revolving_work_shards shard_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards ALTER COLUMN shard_serial_id SET DEFAULT nextval('public.revolving_work_shards_shard_serial_id_seq'::regclass);
-
-
---
--- Name: signkey_revocations signkey_revocations_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations ALTER COLUMN signkey_revocations_serial_id SET DEFAULT nextval('public.signkey_revocations_signkey_revocations_serial_id_seq'::regclass);
-
-
---
--- Name: wire_fee wire_fee_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee ALTER COLUMN wire_fee_serial SET DEFAULT nextval('public.wire_fee_wire_fee_serial_seq'::regclass);
-
-
---
--- Name: wire_out wireout_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out ALTER COLUMN wireout_uuid SET DEFAULT nextval('public.wire_out_wireout_uuid_seq'::regclass);
-
-
---
--- Name: wire_targets wire_target_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets ALTER COLUMN wire_target_serial_id SET DEFAULT nextval('public.wire_targets_wire_target_serial_id_seq'::regclass);
-
-
---
--- Name: work_shards shard_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards ALTER COLUMN shard_serial_id SET DEFAULT nextval('public.work_shards_shard_serial_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 2021-12-01 14:55:39.517187+01 dold {} {}
-merchant-0001 2021-12-01 14:55:40.300946+01 dold {} {}
-merchant-0002 2021-12-01 14:55:40.787261+01 dold {} {}
-merchant-0003 2021-12-01 14:55:40.809705+01 dold {} {}
-auditor-0001 2021-12-01 14:55:40.859325+01 dold {} {}
-\.
-
-
---
--- Data for Name: aggregation_tracking; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.aggregation_tracking (aggregation_serial_id, deposit_serial_id, 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 2021-12-01 14:55:51.004131+01 f baf59f77-f9a5-4bd4-aa67-3f91cff15fb8 12 1
-2 TESTKUDOS:8 JKWQ51N493CNDSCS0KVXZVTNFE6XDS3WFQ095XMVR4VRS1ZCFZJ0 2021-12-01 14:55:55.047101+01 f f7fd8a6a-ec64-4d40-ac5a-2444c33211b2 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;
-3d015ae3-e8cf-4029-b564-379d3d2fa616 TESTKUDOS:8 t t f JKWQ51N493CNDSCS0KVXZVTNFE6XDS3WFQ095XMVR4VRS1ZCFZJ0 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 45 \\xf066a31fc812d18c7614205f5ddcfdb3ece1018d9432f5e818290c163a2051e735e53bdf757eab36c4122334583acb2a37690d35b7fe85144a4859eab3dbda0d
-2 1 269 \\x530aa936d055e56c6830cd6eb9f1fe48f5628693baf4e50337d7cc6ac760b9f657a9f478490a7587f6dff604efaf62c3480ce2aae88368a105b37e79f33fa801
-3 1 329 \\x4ce84fa7805310a60839f31bc2f347026f43415c85400ab95289b9dab53f9cd728c24f3a23c8b9ac8aa8bd2bb6414f96d7372c36e46c6f581445c9ec0e697407
-4 1 334 \\x3c82622e870205ff004ce0572bd065568e93e131e0c50ac9bc8e5edb4a5a51b7c58c587ab059876e76f6ad358254aeeab64e0ebb90df60352d9e0d42b2285a07
-5 1 376 \\x73eb54bd69c0f711c0569d650c6a51e5270fde1b4eeb48575ec85de59a7ed9bffbd31a61e0b54361b6f3566995763ed8ba01df0dec0f4cd46fb45e23b7e02906
-6 1 60 \\xe6d8fa46eecebb00771292bad3aca1263c70e19b61715a60f8f795f9830d8988bae04b09c9fde9b64bc3aa77410d73a37aa607c2bb056f98258c5b789573a70b
-7 1 122 \\xe5a627ba3d18279760019e06bc6ae7dae37eda5fa119dd748fb29e9e00ec6c36ce234e6cec79c15c841b4e759c03f0895528e738b2bfc0dc29bc35b1ad63ff0a
-8 1 318 \\x327ec0a036cd3af79c76ec72914c439c4cb3d1cad467cde15b4c0e588725b90c46c670cb39bc6978b5c6b8d835533101bbe37900c341d091319db1593d41fb00
-9 1 309 \\xfb97a4469cf8d6587c58d4221bf3457d36d1f10662940d6dce23ea6e22b6c5c986df8f9736e82a5a79ee9dbbdc631642dc1d2cc2121e1e0051b4d1ff39d19f07
-10 1 96 \\x5d7669aa9dfd18c7bc11972343391d540e20fed09ba346856e3c2a9a34072a06fd41c34c9a863b4a2d238851bbd7b23f24bf6f12a7663e5cd3a519708b669100
-11 1 281 \\x7376e463abc76c75c065c70f5804610aeaf7aa18168f7b9973806ee833e3bf605a8d20527f1d009a2b019c79aa431fe35045e924903c241cc2d9e3716142cf0b
-12 1 37 \\xe925f348bd493a9bf94affe27226eb99a768f6b35ad4349c65d875a4c8cb26b71ee04d2df86a66ba46d072056fba8d9547c3a77689f722f0902927a6fb7d8809
-13 1 164 \\xa00177126fca70c345c13b2daefea194e1670cec95a726de125daada01a73390011d4b4164cee5a8a243f47955ea961229c792a36ef4a477cd875cf714645b03
-14 1 109 \\xd862eb80353a50e2d19c6e5b402b515567466afaf3645273c197c6c7a00b2fe10d79a14939e5206652bd7867779602aa7a6cf75d3880d2039f9562573f124d09
-15 1 383 \\x8833eacfbdf16cda92e25b533356cbaca942d708164ed4ff0faa4bacc66e45f9e31b075a0bcac265dfaaf6f0b489e88de085018961b62518bcbcee1920e0990e
-16 1 114 \\x6dde51e6ed450a677b2b50a8e06c6f8363f8cc76dd1adcb6f5c05470e31eb1f3400e7268115a896e74d750b42ad105c96b64566a89fb75ebed16d129063aca03
-17 1 338 \\x891fc5f799f459db848c7db7efd85273914534225bc35086a38c5fcd9a3e73b817c4eda33acda2651b1a4b89dea0acc66ac2d59dfdee884b9e0e0f89723ba20e
-18 1 35 \\xcc78793012aa737b4e5bb370a6be8be27147b4c7681aaf1bef8cde491abe235a538ce17ec7fb8d9fac43711811abe1dab8954e31fba27f13a04ece157325a609
-19 1 44 \\x12642b17ed7b86c96679ebe8dae3afe4acff7be670808e222e7854218b984ece43d859305cea4814f58ae57b49eeef80c8ac9221d17063128af6cec0006e4402
-20 1 181 \\xca4eb28d8871034b23d6e8cf1a0c69e5445cefeee688e2cf39af944ecacae369a4c4b58b77d18c21053ff76c28ffa49d41c6a289861bee4cc10882c6181f740a
-21 1 391 \\x83881c68a3335bea3e0c26a6561b253a42815f33d3ca458429fe48d295cc0e9ffdd891d0ecaca37c8fe7ef5b0bbceedaaee7621c86765abcb49abc38eb753a05
-22 1 282 \\x2843dee1c4630540d80a651c9e040a0b2cb89e568bcbf491b9a4b5a772d8a6b1b6dc885579ab186a5301ae316ac3751fd195cf6e26d98aac811258892e1aa302
-23 1 343 \\xab579eaa72346e954f54ff93217210ccf50b6ec4dcd4989d3705767bb58b8a743ae16c06d3cbd99a28812c4632a538468c53aa1fad94c9dd153fe7ddb797230f
-24 1 214 \\xeef7c4cb9952eb0c634c56f86fcc802607d6b019d231aebbb97ed2656d263453cd09a5f52938b3e2c6b0054b86a65312c1070a4858f9609a602b270378c4e009
-25 1 235 \\xf46bfb3e2a1bf36ca5338a51e5f1e82b23fb52a31915b205a39a83964d1160cd37078aefd9d6de6e7c37a603d7b9ffdbccb9571f2fc28ea7f9330c4d390dad00
-26 1 371 \\x2c306c759df50d92be76bd79d885b32ceadd5513eb8da5504afe7b5f59f7fedb766b98ce7e20f5f32c39b35768ddf37cde9943e4dfacd28a93713196492ee10b
-27 1 397 \\x1b4b5ada16c28dd83d1904245b815e4908eb5d91ebeb36dbe159f99dc7645bce01301e8c62ace3ccad1160fff9849721832406d966d247f0e873c57d9a5ce60b
-28 1 265 \\x54a487a3f03e1fdd708bb59f16eb4a9e09c8fe4bb1913efbcaa7668dcd5c5a99d9a7d4b4f0d91543c840615b34fb8bc4d1cd4f82b5b8330d7c9b2a3662039101
-29 1 150 \\x2e77f5e90f40f8bc6e746edc943a85a8da4e1080918f4e0a982f9f37aff226ec8c90b1fed7c8d104e30b15e6b1336fded49d740864c2a6f723e955ec8dd2d404
-30 1 132 \\x175c59d3f78333c83d8f04218957d9aa9418bd7f170be0a69d167f123ae4a9dde958c5d6217c1f347982185a2814c06febe450f15ae78c0d408e143db65b0200
-31 1 243 \\x7f3853e4db5a7cfeff8bfc560e1be35b228292f85edd24524c5dfd993eaa53e5bb8d0a657b21daaaeffb2ef9bc925ca35d3043cee8103f764d44acc925d1b007
-32 1 420 \\x3e3d555d364df4b018340f45442b042c03716be64ede327ecc2613416b0f8410c919d18c80db1df558df7daa456384e8b9fa8f2dbe6b8bf0803fba8acc421d0f
-33 1 332 \\xcb8fd60421267d2f69bfc01f45fd3ebb9af81fbb58620bf1b9e827444dd404e401ffdaecae3f342f8eaf4fa500b1812cdc65676b8f462420558c2911ceedaf03
-34 1 307 \\x35676bec9d7bfb2538325eca201d1111894699a7ff463cf57bffb93f7ccb1b9598bcbe43fb8818edb1ab23b986ed605eff4204d2b2ba70f2103bb3ca6bc0480a
-35 1 59 \\x7eb99d9717703c723575503214eb06dc2bcc7c6c0ba9571e5b2fea7befd3e8f522bc3f980935efae06b62949de481e046080d673b46668de0450e1e1cd1e190d
-36 1 219 \\x18bc4c67627119f490607f792190a40fc36c942c9b39ac8b75b80f12419c0e8c25a154b252e1ebbdbb32cea68082bcd283e65739928e2c98481975687edf5a09
-37 1 97 \\x403590dd70e42c358786250c8cf527e07631e22f3e0cbeb1bde9f6926c48abcc493f1398f9008652bed443f0c0b59f49289a4a78d44c37a534d267642ba04609
-38 1 313 \\x43453d33ddab50014f2cb1cbe43338bf14b3708d7f9ee00000a7c7836a5122f1ccd39810b560a23444e0cea2f3462feda3c43dc87ed45d0a9dfcbc9d8495c108
-39 1 153 \\x3fea177201b9e4ecc88c3b826b9177c3cbe927a99e6245e66be02a35fd939bf414e6a2f4e3272ed6f46faaf1ea37ae676551e2e32174c2d20f367291de7c4f01
-40 1 239 \\x99ccae69a2f7d37002c7cb6c5c8130dbdedf7047adb1bfc6d870e15ac9cec6b26f7242277f1474125cbaa23885333343a7060daae97002c39b49a66877e2e904
-41 1 87 \\x67af508936ea877ff72a94f89a87555552c2484a1c5441f2fe6087294fcecf3ed7fc30d1a205d6f168047afc50cddf78d4d949c20771ee943b6c15155327040b
-42 1 88 \\x608b943bc7aa5d47febc59f09c97c7dd47438264df9a85cc4f836d29a9481657f87f33af8bd6665f1fa43ce96b63d2116d95b9db90f3bd3bfddf10aac1d3ec04
-43 1 196 \\x3b325f213b85b7a81b65f2f8ccb0d37e32d3772e26c80c75f9e01774d7029a6f619dcd8eeadb192a7ccfc17dab9d606f973253c1d58eda807cfc39c6fd353006
-44 1 149 \\xa4c5622b4a50982a17fd83673c9c1bca788fcc4a2ea6b937379a0ef43515f3c84c52397132478acb50a9855a5d2cb454ee029864a5934468a125ebdabff7a609
-45 1 105 \\xfd545011650eca22e015087a6c1f926455b8b557dd5a1b3a613d6eb67871306c1ae67434258f1758ec878b19e6757c5818fd3171d17ddcbdf038db94293aa700
-46 1 29 \\xcdd1bc200800f7fb9ef763f9ac7066c0ebc8f73e7cdf3e7fe235c6e4ad8e299eb2ad95c82f0b1b8081caedd912cabcd90893c79149eb49d89057f242f7699d0c
-47 1 48 \\xca35480525a6a09dcb53fca97dfce9629c4fffda043af95f0790a9e1eb849c7bed00fc95448ac7209482793c5bd0ba911ffb81f28be0296b0e7325f1cfe1930f
-48 1 302 \\xc14fdc0e21efcb01855364e5bcb9d9a5200d99f09542abd6d1a299180de91f36748593929a6bbb0578cd0ebc273907e3059a19ae2806f12b1e1ab10cca27ec0a
-49 1 274 \\x4326e43c8a78aa6923d59b756664cad18757aaac5b66226b2ac8d4a26ad457672260565695474f1dc3bebbc10a8dfb6e99235f3400193b6cf9a359b759a23b0e
-50 1 366 \\x517105569264794498727fcca9d4cc11532c0dcc5553f53e8acd42b3aed5ac1e80d8d56a4c8be4df97f4f3c2f99767eb7fc52dc0209873d7c540282534ce9a00
-51 1 285 \\x3e91e9bd02cd66d67a9f29a3702bdb9699ab5cba4ed1bf30cbed030f2afac63cdde03aa5e9f80f4ecc19eb533624ae87f01b5877fbc8f556a7814617c49fb80a
-52 1 404 \\xb47eb6310f3f9be129aa3d34df83d01eeef889eb12a9eb70e3cd44d64a26c92e7c102245cf661bf279145094c3ef1f58fe9f3b38dbd591c27b7f4a34c9bfc40a
-53 1 179 \\xb3f176f2a9801995b30e13f27971f3276df09c3342e8c351e7c8cce730c7e0046adda6736a70944b832f96e79d9f708c799781f8fab1076989fb75d24c1b9006
-54 1 220 \\xd510ea952c95ca3d21355fc6e78f0cfde9e58843283a2df920dd3ad855e4babfc23819b1ca29a7b60426787b53ec50619542f8318268fe4a8f058fdbc6c44509
-55 1 244 \\xea9779aeb86dbdfd05dc31feb9ee9aaea308ed920222a21b50e04aba5e847b007fb958b32767a51f2fa47ddd233afc1b917258f7de16f2568a41c73c3a013d05
-56 1 423 \\x3ea01ec72989c545fab3fac1273071e74ab569ccff6575e88603daadd8d545ecc9899af8c7d913584c7d5f4706be4b0d04deaacc1aef75b23a6821b59bd6a602
-57 1 1 \\x0db501c41e7cdab21cb0088c8eb4577e194eb940d8631416ee128f50853ff153a2c79609449956c68b896ec2523e578348104b561a29e52b686196dc6526c806
-58 1 102 \\x6ab1990473bd222b103793e2efa55e850045b5763a1df4bbf25f0ee8d04366fdd219433a7ac10a878bfd9ab3fc713262425cce2c3698720d9c7feccf7037710c
-59 1 28 \\x2c3311cbea6cc092cfd25920722ac3d27b1ba5d640e1fe3744acc6a70fedbda125157d46e1cf024b55ff856489dd278367fa9ba287b1c7605352abbbc2004f0c
-60 1 280 \\xc2451402f9f6b2c37acc498d34328c9e0aff105b29248fc76ed2bbef394e2b0838463b7880321ad7c2e69aeaef1b815c26a397664a190fb79cb20b9690598009
-61 1 192 \\xabc7ff4acbf9cbfd730a567aa9405e25a2ca87e27c27f046dfb134b8cc5760eb39daf2fbde408b088d72ef05f1cc77bd0a2da0f26638cc6bee054fe7fcb11b05
-62 1 89 \\x4babc00a63e09489f387ad09cb92c7b8d581689ce4bda24781a6e4a23bc2880fab70d92c3aaa8c9b74a655fc8b895772e035c69e1d6910ec0bba1075ddf4610b
-63 1 77 \\x72498cd449a2181a1649da651f65db2fd5165634b5ec2535242654973c229bbc68d831fa3e15589a671c40aa8799800243aa4b681fe6fc84e4da318af2a97900
-64 1 299 \\xdf08b80d9aaccfdbcc72ce4fc63b61ed8983119a4fa986de5355542100638d28d52ee0e67ebaddd6b2a684dc0bb8b95dd1434c597990267317844ddd60866c0a
-65 1 336 \\x790ddf5275db415c207234b6d9a1aaf02d60881853dc74f4c4e401e0ea633d1e31274b4b69880e7d588bac481e22d980a25f60b479aeff17a8680f4983ea7709
-66 1 306 \\xeac95a28751ddb9eed1d2afcee9b14100fe0455052a6f126770d158d11409728c2cd76c9457860dc9154957223413d037410a0f7d1d6a902e0fd0653405e3303
-67 1 387 \\x8b5d81cc753286bc49da234f697f9d71ec3a77720cd674af17c1253c58d082818d7781a21ac4090d0aa6a5a5d176a3658afdb5f3f5c18640c85faa219f5a0609
-68 1 76 \\xaaf8b7dda662fb18a8f8adf95e11860a3ee6daa59724f9925e2830a49647a7e27c0f24bdd87a075a158167480b73ee1d3f38a29da3708fbc77bd60646f363b05
-69 1 312 \\x8616492b3cedbcb1ae45a7df030f26e1b4a67c27d8b1fe6d02336e79ea6a4e90cfba06b7bc291a3b3633e0416882b88695db0b159cc6b3e7b79f4e5ceaeb700c
-70 1 193 \\x520dd618661b16928fb77292a1fdf4a29419cb52701b46b456383e6e5a1ef02764a18a716e0ecd96b7f7920ed8f788e30b3b32777cf04ba201c52b92b78b030d
-71 1 290 \\xf13c00fc58ae5580dcc9c79672fc10797485411d0b14106c1c3b80f056a1baf4c223e6a75a9d83af4b0bd722ef950f4a53352fd38a3b1fb2c7f74fc2286d110f
-72 1 9 \\x6a51a94cf396fa16e9d1a9df9c46732044032fe53b6531c75a611b35c94851a5402b6c20c93a8ae5d2fe775893e5c937bd74cb87abc5a398cf379c5e867ec601
-73 1 4 \\x996e87697bbe95aea1d8ea28fd42af4f4831dc8a39fa5a0dd7a606ad29930d21a12be294df631e6723570f402ab7cda6c7a79f39c6b3b1eb6edb449566dffb05
-74 1 394 \\xd9172718dcf4a95fa62ba8a2b5d06922367df38bd3ad8f1de23c703040a594ba524fb2cc8a76d835f0e478630061909a870a968d9fa5f353df5104b28187d10a
-75 1 184 \\xb018eca93e18fcf891cbdfbf2a6429b2c8ec5c673d1b9745feec9801c6fa7428fb69e22b5d2b252955c2dd1ddb79ca42f677be53c7ce87d07319aa8d101b3209
-76 1 325 \\x2719d634128a97c2e10985848242150e3b3f5a8fccfd08198baa0789e97d588afdf475bd0955eaf9328b67c5a08693a8e5de32e905426c3cb2401c743ff8a604
-77 1 6 \\x2e4ab6606795e0572b7de96d23852106e77c95497f6c904579709d216432ceeb20a9cb4d6c4f90b420675789579bdd77034891aaf43e78d60bc98f57bf49300c
-78 1 100 \\xfe393a417fd2d39a9bfcafc9a1f623f7607e5628496211fe1b3bcecc7911601bf67d639dcccd10ec893f5e0ea889ccbeb84eceffa15bd645b2bee1abe5dd580b
-79 1 273 \\xe1b27ad2cc88796db3a728fcec74cf27e5254192aa7a1a124e5f60cd281ac1a83379d4e1b75be41b3d877b8506e1bc622ed1e77a88bd4e7e298e74aeb24b4301
-80 1 148 \\x7d45ef90a0a91f78653173f60f9d739a1184a1a4bab22899ef36424e59098a016b8f0bee11beb49a92fb87885b4951fe43eec819a145d1e760f20eadc0dace05
-81 1 66 \\x39bfd6c711ffef73da70e37e43981c0cd31ab4fed4331d205a2b5332311c689d397b8d695ebde451941136c1980edd03717e97af35886bc9830426418791000a
-82 1 195 \\x493ec3d7552ead71678455784cb0be433b70dac7ef13811c0f63461dc1b00e17140dd0c93cc3dee5d106d651fa7b7d8fb6b32bb2462dcfba28656960c18e9c0d
-83 1 365 \\x4cf4f357b124ea37fae9f00819d7c5ea1d3bc2dcc34605925331db737de0dd43b1f9be12f5c6b3e62e2f94df4e48d4164b3da22ef5e325013a12ef3e5af04906
-84 1 46 \\x075ae32527616ce8ded51d7a0e941a40050b29fd7c6bf78f8f45cb3b9eedaae44394080dfdebf1f216953dfda27222c2965676db0d1dad57252dbb80b1d3f00b
-85 1 95 \\x2485a2c906216c0172caab0146120ab0a972f8f6c1e2e6769e3863da9afaf2b5bfbf2b5ebcc40d26491e9adb96d9df6c694850f887fb47b13348467bfbaead0f
-86 1 293 \\x03b64cbfba2038bd6a46a0afa7e0d2533bc933d1a9cce9e832c3d07a957d02400aac26104434be708d6747d0e010e4dea02a7d71177761cc995996cec8a0870c
-87 1 399 \\x40903f40696f0eecf86f2126638c5601e2ae8dca6204857404c7bc9a049d84ed91be78341a725cb46929071b79ceef6fc7cd15f407afeec09201426d4766c605
-88 1 144 \\xd09be4e83b6b44e4bc8ee7b4f42320e50947e9c632f5ddde51d692a16f80273020c5b2da9d709ae8c27997e9e0730c06e42c74f7dc293978f895cb6797273d02
-89 1 422 \\xe0ab50485b841e2a9428ecabf1f0102bb743f0c0bc2db237aabea8790578fe3fc4afd260cb381a3c129f403d7ac95d6056c2357cb001266e11ad592d790f720c
-90 1 252 \\xbbf0d2aabbafb4957ce077aac132e2c397ef1ab11d68bc2e7f040e9601930d70db001b922af0c2a517d81812b5a902fc006ce4b113947051c2f1c81fd9c18d0d
-91 1 10 \\x8ad066ae073fd9d8d5c907761585f1717be2363ec63b3a8bc9308c9c3d3de0da5c0e7f0faa3d6b67138142cac3109520cc000723bdcd096c914425befba0a60c
-92 1 233 \\xaae4ff8673938b7674037dd5adbca3c0ebd97828ef46fb220b206704813ecb8a6d5420f0b03b457c9a221b8a8402f27dd1208bc1854c3dd3e7e1075aad8e6c0e
-93 1 416 \\xe5c0a094bf68c14561f8e8c943d64baa8d5de733921d32d1db11b31cd3f66143daf10b578d3cbed0e6f5122cafca2b3ed493c0adfca1c8ae28b5f1d8fa73eb09
-94 1 221 \\x350d367520bfa454d4c16123143042671aaab1c9f068b96fd61a85dad2531c8a59788e324e719db33feeb7d127ad770f2caa7e7a4bd4a37a38dfa7c9c2ccbe02
-95 1 328 \\x1050b650ea8a9d081af69846f8de3ffc417679c88de4d89deb63751be2159ce51e479f248a7d648316e1092dfaa7dba6a86383da2d65626cb7646d20b1483d0e
-96 1 226 \\x69a0132f5ddc3ed3caf538d2c36e291a48801e1885a34b274591766842a506af8f5758bac0aa2b68a1c04acef4be11cef271ba821fe14017cbb984f2e848a401
-97 1 183 \\xc7beff8cb5b10217b031991c906282bdfe8819c52ebafde863e884d2ddd7d47f7b6bd3d736dd8772083e0faf0c42ecb2726475f0ab0587eb8b209a5cec0d6608
-98 1 266 \\xf7a243e9adc1f585c94b4c1ee28dada561d15490691805a5d082ddd9358718bf607662925d832bb1dc679ff31622636d911ccc8cf5fda21a13223ffd4b8ca909
-99 1 351 \\xca5f13496c412327e516ed193515e904ef723f5e2a4737cb53a238358b502d33c208cf029d398b949e61985603c95af993097f9c28c9635c51ebec73ac75380f
-100 1 372 \\xc97a89db4a28b312be82795352ae27cf9f02d52bc6131d500702e49877b477634056deebdf10107f6027559c2037efb6e47dc9d1c56cd24bd3596adef6deb502
-101 1 65 \\xf88fbd438982873feb097246d6eb9daad1a4f38a46a39c744c44551560d27b17e40a9392eb20286349c1f373c0865ffe1a5b68bad1d7949dd9003a136157d80c
-102 1 79 \\xcedbf7be48c8f581e813a9ef24e1a7fb6ad1cf20aa481ed7d2e6a6c127edd51929a6ef03d71e3ee6fd64691079ea2aae1ccf58ef9fa214d9fafc01f3fa9b530f
-103 1 14 \\xf43fc80b131b1cdfe7fcd42a9d5fa4699e1bc7fba1b7bc86d3c5b21da92e6d644fdc5b678245300f9aa815fecb04cf34f80ee9bc77bee0d08b6c91656ea4df0e
-104 1 254 \\xeeca2db53cf74ac5af3345c3aa0e0c31e6acee862a0d034e9fba681177ee53a8f01416cb8a47152f0a4c09f696882da8674db39c23e0392943d0c04dc2bbfc0e
-105 1 216 \\x77e14ab3688491c1bd4f1f09b07bca72b36c8716212f8fcfc86383d4fd652c89f2e09e9d55e07fd7cefdab390d945aa1e036553c855bce13f6653fb2c9ed040b
-106 1 127 \\x0ddb2d365cabc9b04297abed9a53d32ae5df95ff79d48fb16d28d4ea2907738416a9d2cf4e555e0e8a26b2a790b55be51f94aba53d908035ffb3193a934f3a0d
-107 1 38 \\x148e17d81fd268d6751ff297bc273ac70d446ceabb8b086f8fa011ae88d2dd82ed18eacb3121911d1bbc817a2035393276d8f02b302c1a008dfbe5f1d4bea702
-108 1 154 \\x6c7e4ed839190b8d7b44732468ca3958b77842ebfbac5857816609654d3eda0090983cdb7ba22cf6d9810b0b84a0b96f0b283b9cb393df796852d939b7cb4306
-109 1 176 \\x65b1940f05e41e34d6b6dc96639effc7b3d80ff2568a366265c4aa388b0a2450b5b95d912e692beb4128334c6dcb563dc4a5086e41e883a3f93946b3e7bcaf01
-110 1 51 \\x2b17fd72e010be8889605082e6fef0d86442e0d9a7fc751fa1b623083e72b5eba978bbce9e44ed20a9ffad65a7ecd8c37b9cf0e6cca6c3168a5dde8745fe8705
-111 1 256 \\x0ea56d16b86c9f72ec6c26d61246f5adef858b50639b4b99d52d2af12f2b02782447666b11ac6edd2dbebac81ec6c77cbf8e06c623d4d4a7e32a871ecc65fd0e
-112 1 91 \\x80ef1f05e07cbf16dd8787529869ec0d55ef59458694b797234298eb16676f5fde78715ff8107371c3e07a314fff71c3643289fde883caa82fa78813caea6107
-113 1 337 \\x8ac287fdd5e1014374617781a8b1c01f3dac0d9711433221217fe8bc1ec7e788a2c058b6dbd26b516e9af56df0826e62c30d47da3f0de45c68cb4d02ef753c09
-114 1 99 \\xc3a4d4262d64234fdc9ceda2330422abd9789861444ed907de06740c2672f5828f103707802aa3c6e2320405831ac56acf134761b1e3176ebf7dc02ee4fe8a0c
-115 1 180 \\x46d2449355ad7725abcdd0232b6acfb6da23a8fdee8007d467148e8edad769277d4c94953eae37508f8bc88aa538acd956de6a2aba17d29f217cd1468c615e0e
-116 1 23 \\x413cc4547dc6289cd7928018672d6d9422a45087b90b8cf1ecdfc1c02b39cdc956bb7583224aefb67bc9bf8795e652e3b396f94613856c5c023e7ba659cb1309
-117 1 47 \\xd0efc4a87ec64bd4b4ffe7c29a6eb2fed49097b11681234923120919661bdd96f7bc3efed1092acb3b9bbb784b9cc0101c2a17ec5d85faa4105d6a4facdd9f09
-118 1 231 \\x33caa132187aa4610866002d67a0b7091694e42092c7e92af306e8ff97af17c01d95dbda8526ebbacda51cdaa1829890239f008d6363733b84b9bbc297697f0d
-119 1 136 \\x0e79fa17a996c234d8a603a2b8b0fbfca80d6c99e147a16397db77a48947fc0851f73c7303a546bad28c02b74e4d94da53a34865e8fff2ed4b0b93a422373504
-120 1 22 \\xd54b9e577cd509985d0ba1de069e878aa62bd5edcc9f08e8528e91b66250da20febd3f01f06ef57af6d621a62063b09fb6a918600a3883ec57580f1d204a7f03
-121 1 238 \\x269148d4b16999f28097ee6d385320fd12eea8a778a010678567107d8cd766750bb8f206fb94a242be2d5c16cc62267dee990205afe6bb1acd58512e862fc402
-122 1 146 \\x78e600f343bb9edaca806d13757c907dca2a542afe764e48874b550c4991e71e03a667243a00dcdc9a29abe47395efb2cd9b84214d92ae0f5604b1b0ba997e04
-123 1 409 \\xbf0d0e60cb05e3ffe0da7212803f31b64e3227e856ae09c1be13a1e576bb92a673f55bb97d089dc075605f00d7808ccd523a89e806a52d27b76fc95ddaf0da01
-124 1 210 \\xf5635f98e610ea78c2077719b6718ec31ebef1d610c57b86aae93e5566ad81ecad4f21933b8a639db0b126fbbe941a5d6aff717b595f804337d5eef732f9bd0b
-125 1 140 \\xa72e746bb0ec45444b4bb23ecc034007c9023a3ec25f88e523d71a691af860c90514cf9b357a773ed4604aceac79f79eb1742be5513eadc0decec12721e3b20a
-126 1 403 \\xc77fad22775682e9b2f5a3f566a57b8ea048a027018f9afbca12dc5c8e15e49956cc0cb30e4d046dce5a5eeb47af7eb21200cda3d4ac237d9070b3e03371420a
-127 1 169 \\xf4e3f5f145a67720e9d6e275c27e4562a6361893af263c30e19ca614c6dd77c5eac299658489b8a141ec87ec53cfe4aeaef7bf5686d6e09208b3e7a7a015680e
-128 1 327 \\x9b318efdd839af15533ccf09f527426ef36508f989440c57af127bd90fcb4c4c6ea6c7c33fb37a04fd61f6acdb9fd59d2589989845fe8093c5d69874ec1e020d
-129 1 245 \\xdeb797e8d033dc7331d6f1f113c9dbd77ee20387c89e9dd64715719d9af224ccab790c9a2810997d61cf7adfb34a0c9f441404d938ba4b74a284cc3fdb62ba04
-130 1 75 \\x79a398a0adddb56067c2e5a2dfabed3dcd6a32ac68de195e4858ba2c5b8a9d3f0d8df3871be75a6a4efc51934bbbac48a62595bd84b487ed0e4cce9fae91df00
-131 1 384 \\x36478e32108dba90ff861e5ce0715847fbd90af6f7d0fb103bd43e4aa02051a71842aabcaf3448b65f9bb8df608daf17fa3531b4dd5903d9318bcb619f6d1906
-132 1 323 \\xe8bf7b109f00c1597a9ab0366f291d2f1d4c8b0548d1218fb6d5ba19f1a2a7f7f173dd932d451b80400ac573d207bb044d1a6a3171d587f0e80c02a004760009
-133 1 225 \\x5b95285b10f8194a48c0cb67c3226763ac9a3e4e6c9d60231abe13e8343b08dd00856ee9549b1e2eae51d3943dd8bad6dbfddd11b4c13a47a70bd21c6738170c
-134 1 103 \\xe3483e0e420ea325e0e3e261589cca8a5f3702bc8a1f9e5b0e32cfbc11a0f181c33c35c80841b11dd5bea35d536056c7b07490e628d0c4f3f764c67b3f9add0b
-135 1 30 \\x59a0b2a20096bdfad5f538987ae1be424804dff965dfb615886ee7eb3c216014e71fc6d49a11aa6622aef4d5078d02dc9fd339bcd1cd98c1c2146b27331d0807
-136 1 340 \\x4c61a662e34bf25c47f77b4033ed03149cf146f2bcba8340de58d33486e62eeb8dba5a738f0434be340a74d73444f7a865a43f515d64d4b38730d3620e8a4105
-137 1 173 \\x953de3719446cd1778201af61a75d562b7f197627e5d514fa379880ed59462581de6d3e70012f3632aa60a0d46e220fca4a9f57016a19e9e601cb753bc142907
-138 1 200 \\x19765517b1fbd66d1ca2192eb03bf86e110b257493253ad0fc49cda7148f20cc24cd9b4a0d6dab0c51557a3d185cb76c81f202f54fe3fdc6f617db841069160f
-139 1 206 \\x78c4c14f114d8b4681d45670a460a13406fe62b39097e4b6cbd5d31d1ff8f598a50c5b522a02358f9137fae7a59f0a64d886176cffba1e90f4b7a48b972a8d0e
-140 1 16 \\x20d7083dcc521066aaf6e58c3f472da272a2e5dcfebea94639ca8a23c98b5dedf7d7d8efba261c6f5c1907fc6c9cd7c5d5d69b78381e020f5e3ff8fb3e49c909
-141 1 157 \\xcd7d9cf98eb51113bda1a4091633b86bc939b9a3d145be429900f4da6af48f91cc6cc8dc30a816b95b5b9e80db7700d57a716a46e0dd3fe5ff1db678fce07404
-142 1 373 \\x2b064e0482fce42c07862f2dd161a8ac15b23083850fed5b8e46129c8a81a1502bdff17e7f619895ab8f2c5e7651491c3a2215a667d015cbd9c6e7c50e51370b
-143 1 408 \\x51cadfaa60c6204b0dad9ec4d9c017c0b4e11389e74dfaf841565fd7cc3a28f4c30aa02364975612681f94262840d00bb7648b7c1844738b4ad208e328494b0d
-144 1 119 \\xfee5e55dccbe3bfef6e65016d76db069daee57ea117acf09e757fe4c549b3b3b40c5eb0e7d97e66c69f8b85fd7bf89b9c755ef6ed5d0d09829f0b855041cda04
-145 1 189 \\xabe0d22a3a2d5dbc3360f4c8958a10208e450d3ed43c8288d113656923300167f3f64f49955d5e0ef74afd5b53b822d29c20aadcb3215e9ce09b344f918dc70d
-146 1 314 \\x9fdfd72043b53469dd56031f4f720a6a30fc33b67cfe23c4a2fe0859d93f0aa2239385d6654e817f51ca46693f3fa4c0590672f77edbda4f61d209c7e12f4606
-147 1 320 \\x726e7866b3fb527636b88a262e2a1c774c824bbf73c20b4ee02d3992cc7bf344af1e6813ff9acf660af1174ce41595fdd85a318f938e7223d84b8d99c9a01a0b
-148 1 94 \\x5e3592690304d34a416c16243e0d9b53d540e4eab3508f84a5c89a2ea07d41a33803d23d041e5261f84fd8407a5a328cc77abb2d29c8e8412021b925b480290d
-149 1 115 \\xbe4c0d1d4a022e303f70a64902fe29efaf9ce9e67f0aa8f9a2d3cde1c4aafc5dd16af7c5cd19132e7deacf096b2a4da88849a8a3f67ba492a3a7fef04e469e08
-150 1 128 \\x797bf52b121e6db498f4551d616f24030dae06cbac0e807f38d8b056b0e6ae881c2e98f7e12adc45f8062bcd61289564f8beede7cc12640b9c6b1701af759905
-151 1 388 \\xf752ac1c3ee8f80d062db27d0d895db2937f987c2a07123739261249e35f5dd84237ca3c7eaf30a15ec5d66a26c7170c5326f8be6dc155df1c2fbdd703a0b605
-152 1 259 \\x66fd9d26228e83da82fe12cc328efa5de5205f7ed46a922503a75ef07584ad750d17e877657766fa6880898e9a26d5e08eb0eedf2f75dc08b63cd35fea995a07
-153 1 142 \\xc9e2f7e7e0a296b8effe7bfb7eb167c58767d86838914d2a6df6c80fc27548b86e500be4d52574cc98b07afb2b3ed6eeb42bb51208a903cf5e68a29ff022350d
-154 1 236 \\x41a821539c425a7e33c6aff86bca357fe65e7c213f3e28888abf8f38aae81bc9030dfa7bd90fa30d45241f7587b1e8f68cfeea9de4d9119f06ac941be230fa0e
-155 1 116 \\x67bb4c7451045f6d0e1cdbedf4b632458b5311e2dd3f6f70cdd78f6f9f9a04dc8a856d43509b0ec2087ef3b5c3ef8f38bcbd0de7d4ae0d83fc78ee2e744fad01
-156 1 417 \\xe35708d2f2046c2392d1c0105db5b0dac076f58221754d9a41e2c7de8e8190d2de79f123ffaf413ad0523f51b6a1d5a6947450cd733b3d5d55500122c87d600e
-157 1 232 \\x70634f4a473e187f22cb92167b217399dc6c948bd7e2b6ec5f72ef63b3c4b70fb8c7362a56765cf7dd80258fb13186b0c22060e36faffc17e3604893bb2e0108
-158 1 13 \\x03789180d1987fa0eb7df7cdc7b84415e81664f88debb855b8dcefe7a45f691c150c6e4927bbaa320dc96849b62d2d40a3f81414f44acf0803c790df41fca202
-159 1 55 \\xed0e7e227f1d6f3dfdaf4f20c84a7aca58cbfb6f9dbd53487623db84bdebc69fa82dcb2250fca08fd2e8573d788ec4404971c02f8a01e1d5d96c1f450c654c03
-160 1 160 \\x8e49ab643e8de04dc7279747d99fc974ecd6c041878e6a989830bd55845acb47c8cfca794a12f6d16849e2e1ba5e94acbb6380226c70da422f92a3f3c671dd05
-161 1 137 \\x4b26e8b76e71fabb5bfd2c8fb505d3d93d1dd2cc2f00b974330bc6cb7a8ba41254aabc1f84d1710c048c34e2ba85013bd5adf4bea5149eda16fb644f69ec3a08
-162 1 396 \\xc26e180985ba4d56c8f816e239b29d7c9a5769d538e6dd208805e8cad233e30ad58b22195f4febf516264d4b7c005c215b9143b3bb49ca439cfd1780141d2506
-163 1 315 \\x61a801ea1f011dc5e417804cd0b6f2c83275495c164ad6f39d8d9aba11c16dad48505d6b8be6235c971d5b54512b0798e8ef982437d033617798d2ccb8dc0103
-164 1 68 \\x0da6a05ed8c7cd6cec38982d516c2948149bbab714facb6135c361e94803bae6dacdbe190a19b1e7d881ad630140add3972e4caaa3a915be6c1cc3cd5302c10d
-165 1 3 \\x3493543bc5cb14fc5d22d8ecd94213a535dbcff5f4c78b427d110332f3943079c695295e2b54be4e4bad3f8ce304f854cd92c8cd19c3bf87b0b950357f547b06
-166 1 411 \\x3b08dfc84af97c7d4c44d5489e77941f490f2c09a84c9413a3f9a9edf88b1ef06fcaf0f9aa33f073c16f0890c5050ba6c4a87b926055b3e5392037aeacee8a01
-167 1 175 \\x75742be71077ddb572bc33a63824497bf04b00ca011069d2494c79478951b3b4088cde0eb60de13fd1f1abb51411700a0887b330cb09d5141c1ee1e7c7d17908
-168 1 246 \\x60d397e47ad861d64472b2781ba363371a6469c045c25e2bf2e6dc197006b5946635936f7ae16786f9c6e131e8ca46b92ddd6440fef035ae75c79c7af4bc2d02
-169 1 43 \\xd16241e7c4157cac6e672c8dd30380ed4b71da7d57dbceaab4484dc051cee73289e4fc361b6476b76a359f51e851e0fd020516e4c7fb7f4edb59b481fb9f5200
-170 1 279 \\x035572e8d9eccd1b1d47f3f0e05ae1793cbd189229b297c66aac919a68f31c2d59529172ac86997ed0394f10934dea42e0ec8f85a4edbbb9b1157970031dbb0c
-171 1 141 \\xa22950aaccedd7febc2a7fa93201ae0cd2cfad9df2e7d389fc445fb8a745191df9ad3fe40612574495fd319d237ab71674d9b564997cb777b3fefbd022666204
-172 1 208 \\xe4ee9c2931ea26266c4ca9df232cb9b1799f034e231875d5f8c02e030997c8825964897639679ebee832f111971a905aad82d0609d8b482638a9f6a395a54306
-173 1 118 \\x286d8314dd09482e77332afec7cde5d8a53f4096b0ce34519b1e8ce2b6f576d2e0144880df55eb1dde8d193ff9e1e1cc9d813ad5d3ae6fe5eb073447de7c0606
-174 1 419 \\x9eeb2f317246552ccbe68eb5acdf453564e7e7d05f4e18f81d40bfb4d7949c2c90674987d5b59ac6e8e703feb48b4d066339b387bf2a238647e060de208fe808
-175 1 27 \\xfa3574d3c3188bd8200a440e96d9851514362578f89545d10c22a6e1b2c6c80468817ed52a8fed4b849a7144448a0394094e68efec61f6553cc8e806b13c7d04
-176 1 229 \\xa1a765e7df252e93edc6b91919f697d254d780d334d952b3218dacf734c06fa6a721edf9eabd95dd4746446a9030d5adef422c7d9b056d3369f238e81733e001
-177 1 203 \\x80ce3e19385d5fcac590e4ce300db6996d976ea5c9509a89cbf94ced0a372de6d92d1f7a813fa03a906a91183b15c71f9eb8181f56daf7113361c6d1b9cf1e06
-178 1 126 \\xe20e0e7df43476ebe9bbf65d72f4878fdaa71b809869ae775fa67f620eec29a5b88d16477e052c325373b3750a500afe212e3a542411c2a72a98621e7a003a00
-179 1 158 \\x7b3b19bc8f4b93858e8b19e969da4510ce6f00d3661b1af5e644b3a7b723fcb04ed15ab357b401a994c12bb204a73318feadaa934b242e4ec85c709d965b1905
-180 1 230 \\x46c014456c90393a021674b1905ccb1675660689d25e571240eee8f7715a429a68fcc27a55aca54ab57898a1c12ab2fb0f28be588fbe8fb27f7ef06025e21600
-181 1 251 \\x7be23f1e43c36d0746dfd7eba0dc430ebee593ec7b6ecf6e1adeace0becf8ca468e58dafbca1826396b615e3b452fb02c7da4e1adf298723706e569224ebbf09
-182 1 344 \\xd95e59e13560dd1b51862875b13520ac0963b16ca12b603bcd1b6cf1e72425cc3e1918cbc0892de5fbf0b48bb4f7fc9825d8203600d61baf3b5e53bffb22d704
-183 1 12 \\x4f91fac75181825eff9c22fa722c286194fd02c297eb516ea8dcc74fa5fd9484008a47a067a4ec66a45f09c7146048f147348127618fe06f57fef6ffec3d8e0e
-184 1 185 \\xd07b3851f7a3b8fc9bdaa1d12cbbddc9c009f5a62d5e4837bfa9a32eaf48f9475ccb49a3bb94ef7101b6652f6c6a8ba45d6a1eb2fd437e4e839bde0796a4e600
-185 1 8 \\xa8930aebbca7d87a12c52a46d70731d9405eaf2d52bd4916949fb846e69b1403784b7574938477bcd3e73823a4b71ffe495a91367a25e7ce7948687e8fa8e606
-186 1 201 \\x601b9c7679b6cbe0fd8d1ee40db0fc5f4821bc703ddfedeff659eaf09a02c7f2ea2b75c775311d51023b9459cb891e349b8110b11050af37e622e7ac7d25440c
-187 1 162 \\x834d7b96bccfad18d93057abefc21218e42496aac853ac17d3ff4055f4fea15e02f8ed4c1a982083af46af387ecdd6b773f6718fabcf882d2554ce1fcb6e3c07
-188 1 289 \\x465864b48f0379826f7f6e7ec072a341310d446471dab1856808ef27f3a12fc2b3c8f3352320e00ba3ed0c46b5c84e28e8a929beb45485ec906a2f21fd034401
-189 1 194 \\x6e2c52be3d576d954299ab7d47276f69f91830788c994c0d2dca550fe9b44cee09bbe5bc678a9d4e2585d13adf51386f5562a2245e943780819aa2b31988370f
-190 1 424 \\xfcf76ef5333e6053d1a6042a25bc30bd90a01099d24f97e6e6fc8748dc5c57b965d91823cc5b0010f37486da189215bc1852d0c97c3824bfc5c5920c68419109
-191 1 335 \\x74b53036f87bae1e04ab4342281dc8136e7d23559c3ea531e93cd70512f563894f1794fbe76fb72742480cc99e30d2c9e72981a20009b936f56a148737c9de00
-192 1 291 \\xda0ffc53e079a529b22cbb554ecba65e555f28c9531d2bb6d7f6c8bc83e7108ecc651a9f5c2c29168ee7f8a9019dfca7109bdd41bbf36865b3636c2509dcf504
-193 1 228 \\x044aeb7a7041ceeb787c62dc829915e8ae4e65f4bbf503bf5f709c07d44da7d5734f6ea90a84b728c9bc71e0432087c1270d55cff9f731dddb4ea6fcd49e4f0c
-194 1 133 \\x7f8f550e51b3ce47b08f3e2b1057f01c06902bcd726459928ac9ad5b27fd0202177b26883d80c4070bf02bd06e7362ff3b20b974646181548b9b85c2de81fd0d
-195 1 123 \\xdb7cabe76f11af7b0ab360b7e378d11d804fee443d946ac9d9a514b292e65099100a9f0dd1e8544575e0e28edd6f06312bc1017ed83e9e10384c0954a666700f
-196 1 347 \\x3aac91c176dc389aa6312e505030e1f9d88c87abf50716258da9ec9ef74d924adceca7c7470ed20fd255716669ec75865e1265d7286bfd8ccafea698a540580b
-197 1 11 \\xf0cc3acbba70349fc357b14608d59f2e95fbdd15b04ab5f66565cf13df6c32f9338469d7aab41cd960e85b88a54bb5c8f21caf1a4a86b0537a457646475c3003
-198 1 295 \\xd25131f8cbfd3be8e065d230a7b10eac19ece0a1158328efefc7b853f694ccd2d6545318fb67c9e307fe4af80e2405776888572c78999bf185298ee99cb4b90e
-199 1 360 \\xf558f66bc18f3843459c06b6594b96b57536589aabfd4b7f0ab925dabff8ec16ed2c75f17a8c4237f84d1707c787cba2ea6065d3071314ad63f00828944ddb0d
-200 1 414 \\x1f4fdbad76137f581104619cadb6212ed82c2d4d13446a97e0b0bcd9334c62ad3ae661bd7019e6fc29bd93e762c3dc19952c454d8692af6c8b245cf7e2921907
-201 1 186 \\x84aaeff3c6c5cd040eefed16b61a21837c858d438068ec7cf0c5177aae8b073be5aba24e994c3756c06e50e3337d835be61504b6ff09768e314e2ce77d127708
-202 1 159 \\xf8dab4822e1fda0b1c3e7044a08e2efe4d07a07dee68b487dbbcdecebe321da8c772f994d58d14d99406c7443160a1b4f04e0e6ec2eea9ff348f3d241013ed03
-203 1 298 \\xbf916eca555b749ee854d54f53c50ab59570a2e1d9a3efb3b17d8f60d5817c8a3c9f4d167824271a6234ddfe93ef55ab26f269b5afe2cc4aca91b705a8956306
-204 1 19 \\x903b9aac25ddbea29da3cfac42f513a0a37c37e0c33dc541996904455e43184c1b03e3d9b5e5a03ba203b68e19a24886532f2c3d65ab6ae49e32e8357f2cb70f
-205 1 271 \\x6b675249fd32f9a4a0ae57c41979aedd3339e9c29451240ff09f9f5f6d2ae2bfcb7d8e72c7f39f41a3627c5159b4d91a62335525400f99d5368159c8e958ea0d
-206 1 34 \\x4e51e1c759481e2187112ea834720a1597a90ad167ed2a2681a8a28be2cb9fa43b07d47e461512a0e64bbbaa2e1d182c320b48b7c99a482e7e5d938674cf920c
-207 1 401 \\x52174b01a6c63d246702be0a3c7561022645543c6848e571c474f4171428dc41d4893465b952a4119b86165be928101e62b5f7218596bb583c1a687cf716700c
-208 1 57 \\xcd0f2777310bf4891a6e38b125d054fc41d8dc00f79a7c2cf901eb3002b51fe0612f2e8517f7b6d55290d046d0c2447c210735e1efe11bbe67c48138c3821808
-209 1 209 \\x1b9926ce0e6e52aeb6122f98da010d00abb214eab36f381cba3b7d7371c0db7675606bbf6042c844dc80509ba5ce9a2ef08dd02b8db73521e5f13039730a8c0a
-210 1 188 \\x2a82749afb386b28e10f6e54692d9892cf865a4580360e6a3851438e423f00db4df6994bca61bd530c09fd4e7fd5c8647f61528a80e6580c155854f83f91fa0f
-211 1 80 \\x8d89eb9df3edb7e29afd6b9acb6df8ea77f27e7890a5ee2e6ac50d199b06323b4f42daff121e5710a867bf93e02e5304c5efe3660f40923ad0674e100af17901
-212 1 86 \\x2c992ae5be9fe5a961540bd2dde2101784397a85b52eb079887a4932ea3e47fc3f63435497ceba183e3666567f5691e529a2df48c0a748a561096bde07e93409
-213 1 258 \\xb902ffe3b196c58d58889964647a46aa7b9a18708f984d0df16bf0b039abe0bc16b52e5aa14eb46004a1ef665ff5ec2574c6a29a70d3c99d6047f5c00d187801
-214 1 275 \\xa09fbf0ac2da59890ca958fcd955c3ff4d5fddde17a2661164bbab8548cb9f6be3f44c44847c8daf30d372b65cef4e0f7e3c9d8d52cb016ecb0f9467a3b0bd02
-215 1 255 \\xcd3efea22f41fa37723a6d146929083cb12bf0503c9c5c397734c9289e97bb70c62140c3fecaf4239d931e1235d2009b3ff97cdb4e0048020f3738dca5ce5707
-216 1 63 \\x1d42885a150a86d1c1e3684dd85b6fd1e47b7a023fa7d9faa370a4c7ef126f3aefd3ed2b8d6269dff0e2f25e7e3b022ab17e5777e99e8a06b6ca6ba50ab1760b
-217 1 163 \\x69f537f9d9f7c52486d169ffda3771ce00b40cb5a7ee35524d5c02ad79b43ae6e7890a2e3eb2a32747f130e0d88646ce034474b84d818df895971789e7330905
-218 1 178 \\x104d81ea943498baa9ce2a4d7f5b1445a04c1361abe4fab0782e3bb32644130788e2ca2d8088e20dfd6db396eea3d751a875ddb345ded177feaeff0e2a72b704
-219 1 375 \\x2162961202112757cbdc6aefb4eb6ceb84512f485954611a2f0faf6bb30a8c00d28d837fc8afc33303af81f3154e5bff6fb94dc6fec76f48432c75732d052a09
-220 1 53 \\xb59d8524cccdbadac872d6bb727ad3a6f0b16a1ebba73ec2f33b249920e6353338bdc1f5e8fc069be378efef43df1a4d8b5a7a5d461ae4f8607f11ef0e4b1a01
-221 1 104 \\xcff7af1c9c4c2b5a1f4aa7ec4cb3c54675aa3771af1a5318f23766ad7014da1ca3b58f815f302086a724c6077e5668221fcfcee657d0838faf4d19e583fa6d04
-222 1 108 \\xa356b786566d995cd8548fe571f38ab9a72c66d08a5addee89f41e37c3c9fdab0e236f67ae39ce3695d7ca5d6b707cd11bb17151992b8959efa239ff44c0fb06
-223 1 5 \\xee78f1134a687f03113eeaa6d8cdae9c37e7e696656f1ee5d226b33a68e80a1598215ae88a21ade01d2791595d22b53a74c7602da0a58f6b7057ffe7cc61d90e
-224 1 370 \\x239e21b9225de0e0fd801c1f67facca30afa473e8f7ccdc6b29aeca233a06ca5fde262f2bfe8fe35c680ef1ba178236e3b2661b2a8255d8181ddbece30c22007
-225 1 284 \\xae7d1fd55f4a88a36a897ff5e9746b9e65f530995a703fe48738ec3070db728138320cabacce12d93ec5ba82ec056124b5d45e712e3baeb015c997f568e3ec00
-226 1 82 \\x65fca4f1eb132ff5a71fe8090a78e90b08077f667b343861f830e62eb328310d397f27cad7e50999d45542e21b07d01e35bc7cfa068e1891a5d11a49c2758906
-227 1 211 \\xf7573708dbc71c6834783824e987198b4c4be9f0e9330375938810c7e340c6996ee9741aafc60d7f0373c6af5e03b0272bb61b3107ca1f22312e033aa848270b
-228 1 386 \\xced2683d47dbba9996ea631c75c27c541d0820a7200187c120940446d464e96737cbce172b8ed38e58f9af7ad3b7241dd5ab08d5849b71bab4e72d49ebb6e509
-229 1 31 \\x0a3cfa40eacf30b940402b642bac3ed1af4d9895a21270f9af1705224434218ba7d3683f362465f9b34c0a3ebcc86bd7c56c6f9128a3b5145ae304bab7ccb701
-230 1 390 \\x96175efb63fc347cce6f0b84f6b8ceb44a1157ad4003ee5eb1e310a47f32b09631852031d7706b643627b22bdfff5de0422827cd00d6e917ae65dd4086059708
-231 1 398 \\x46299728d52eb8c58f03d3667e28551486fd676039858e297f015cf339082b81052b6e41d77fe4dcac569fd89973e8ac53820c32feea6d54d6d2f99794f51105
-232 1 333 \\xa050fc24f9618cc2d1757611598d1a01ee3e968df07759c4c9f3a11c7d4aee9de1039b369832389b9fd67a7f4d0dc6d33581fa3f58b22957ebefe24b0c9da209
-233 1 272 \\x318157ba7594e19353899da2c69fd051bd6989184e66bee95c58262a92452bb98feddb5d9bf3e3f2e3b50a2aab62d8de019757730d64db8e4a9804bc8178220d
-234 1 171 \\xcd9c4fcfdb41ce17159dd1db86efecea79693aa4381188d8da4c2c8b83457bdfdc384b5da991ab9258f09b73971b6529efd4003988815406f97ee7b7d624f50a
-235 1 395 \\xc560ea1c250c8602469c41612698d257bd3b0f1e7de8bb61c04576285d46a52ff143c1c1a16972192cf366b135ac9135cbb9fde6bd8314574302932799515105
-236 1 54 \\xa4f61cb100ca1d10e577f0b40175bce4cc484a94dd3c80aa18b9cb4213dc4a3af35273c7386f213a4137257b26b69e590db9c05a202ce0b316c419bd06f2fe06
-237 1 21 \\x89ef372286a58cb3fb9e6b8daef283ebe397f10196ce01c6b164e25ae027bec3dd89003d5d06e33aaa93dc5f4c341b8f23b24117b792a789d3052463904e9303
-238 1 2 \\x154749924b90b3684fd1494f78d1bcd2fdac242750dc662da07ed80e15612ba28258009545adc0abad7e660aa7afe20e16b281689bc175cd719a6fda1ffeba08
-239 1 106 \\x5645a428e30fac23797e8b382a4a5a31ef4beafa350847c24bb65e58ee3a5666415e96bfb5f4b2e13a90cbea9427bc0e2ce790246c85e9637ce18daf4fb61506
-240 1 71 \\xc35eba635455706af074e66093e9366a2c3ee68f32729551e1a97a0c6aa252e4d33bdf9317015f7374f10f0988ddefa683a263308cd0780c83f4c93e903c2f0a
-241 1 354 \\x0dd28d3352e8d26ac247c657396eb730d2b3ffbb33afb8cc98e358dca3b631a6e4ff2c57ff936750e18dab9ba0f9be384fb69c575aa596c3bea4e93190dbab09
-242 1 147 \\xd2f86c2946641811d6cf26dc9eda3a987cd676bf37b856a70941712be429df8b24351f8fac04a4d7a5b6713b4d0c03921d264b39f2022f2cfbe2d4f6def19e05
-243 1 174 \\xe74805086a6eeca9b5080627b91e0edbbcfd6000f954f60f2373ca60c62d63d5e8257624c37f384b5c597621df305c46ca5320b4989e78346e9eab370852820c
-244 1 267 \\x0e22b803d48805a37f12e1d4d22b079197caded8d14f31c1d9b299d65e6bbc60aa710b1064233cd1ecf060ca7326b94c9c7d9a352c374293bd1acd6b6dbaae07
-245 1 111 \\x179592daf01a5b20828be86304e7f4d08aa5b243cc03b9189fd2374af88af98e5a12d9526e1f8458df6f138c3d10a188d7b2e55d994031b2e482675daf7d7d09
-246 1 393 \\x9dd6d29862e540eafa370093389223dc500585475dd6c614b1946380eb1c86d58b1dfa2f16d8e050a20f912c27736258ae368848dde400de1d4066ab20939702
-247 1 234 \\xc3ea18c1271010777a3617d0a3f3b707a4b02886e0947261ac131cc3d94cd074f5ed9e8f7af22f46acbab7d2db686bcf044d5219e41176f30bfa35a1e0666d09
-248 1 294 \\xbc501ff2b5c75958dd3459aef2d872ae3a6107c9f19a83d69426f4614a23a417a5fdc19eea618ce89f1f3a079176a509dc79adfbda37c3493a76b4858389710d
-249 1 198 \\xe146b2bb345a370894709c625744d319b94b2bd4415f87922999bc933d53060d5e7afbf19acea4df4e3310af20f3f52ac972c0d9926c5b41ae1c70b7f8e3be0f
-250 1 270 \\x4c24775d8b8624ef6faca7daff66c7bf536e2a21d00c473d759d22cb619cee8a5e05262260d1ff682cd43dae09fc1ca12b57a501ee651ef19e0f0931eabb5f0c
-251 1 357 \\x30007346d87cc586e50ad0f9649e40cc4e7986062e28f7675a9a79825ab20df5e5ff75465b99c51eaaf4fbecf1d4edd7ef274b8c69a207e3a629014552496b07
-252 1 217 \\xc9bf579a9a55990259e4bcea8f9dc6adf9547370afce68ec0adaa5ad822423ea3e35cc45cd2a6c0bea2501d7e0e5abe56f9cfdbf7809b1db466bfdfe64d74109
-253 1 402 \\x717a0d9de718e22f733f47ccddf24276cb5f51babae44f3dd2e7e79807055b62b96e1719c4181f48d9da1f07230de5c6477f238ccf54bf2f50ee49a2d9f3920d
-254 1 218 \\xe474c67ab625830250efedd1391f9a5f363f49424d43bddd260e32dd83ccdcc751c7de7b607f0bccebae97ea0d2369977855f91d79711db91b8d891734b96309
-255 1 125 \\x1b00aaf7ef4c934e00d5709c19376e2a327217d68d87b6bccf57029495d96f8910419e13dba03f3526061611834fe9732586afc8388c8ce8934588ce6f05d10f
-256 1 222 \\xb77af7f3ef43c3fb6768d5911f11f1552c565f5c402183a0636640ab4ce94a616f90eab8bbf03face17fc7b17d364e4e78b05da9ab7a1ac0acfc08d0c6d9470a
-257 1 212 \\x377f50bed5ef61f3b60b07faf84531b177a5657c5d65901468892edd7e0f3cf6664bc14fde8e3a2d4c9e20459cdd1b1cd74d221bded0c8338241a80882e86507
-258 1 26 \\x9f9fe999112d54a4cb65e1c98dc3f551365545d6760b2bc182b07a59070f891340be99b03d99b714b70fd5c7cad23d744b4be6d19945b3dfb68e797060327e07
-259 1 377 \\x01611f2043d2f2f914c99fdbc03e15b9ce109bb9967a18dd775f575ea01de83b1ef3a5f4037aac7c100bf05786840c39aee028ef611f20fcd211eb719190dd0c
-260 1 278 \\x4de7f8f05b764f176dd86e261d81d0ad1137650bce84823e3f01fdf59dc9c4a40798c62f2148833efbef18df7693ad4c126b8af79482a923d3ff14e0f3a8e504
-261 1 322 \\x56c37f414199034b79fdae6dce894d5c4c8d7a56a554dfc980d3c53a756d8e9075e9a2df42c393f857245b338a21d300d055ba70e1bbb8b08455994112f67709
-262 1 84 \\x4ea1d0c5fd957702cabebb4fc229474095090aa15b3c3d49091fcb42dc47c73e577211f6364d084a81f691be7d82e509c5376fe2d54a4491007549287b18c508
-263 1 41 \\x0be3072cc7327115bfa0cba6b0f7ac46928e5a8ee143acad96accc5ab6aaa14a11c1e9f98c34c3cc71af5da489ee570075178a9358f1edcdc23fd297a165270b
-264 1 15 \\x3e5356fdbe95f0148de66dc1b5e5407d27b96625efb551da12fb4b54e8a1bdeb0660bf75e50eb059e2c756279ed822b534b243215c70507409fd78904dcc600e
-265 1 326 \\x7c8f0adf44346899005a06c771b64adcc365dfeedb4dcc392733e9f9b8c4e28224906fd1cd908ac6ef7a9f9693a5992b20bc88b16349916c2756c10896ee0404
-266 1 358 \\xc1cd4aa4cad500d601034da03c55ea9367884676db41f5acb892aa53e2543530b92425cd73fb6142215a32f591e98209a675bfa69a4961c37eb49970d0c4d60a
-267 1 39 \\x59200ff01ff2fff77af746b0bbaacb8b78181b3d9b9eedc84391b1389a8ef2023bce06ceff149bc615a88de36b672e3ccc8c042173ffd3433de08ad7dcbaf109
-268 1 355 \\x0098f6e7f2c3e4cb32bda74b37e1af7a10112a7e6143925a7f58a0add28c9188cfa5f5de00b10dd6675cff2e1963d41c1e9760a2dafc8b9206c9870aed8b900a
-269 1 139 \\xb98788e3bd5a233debd065ebf9de0302325c69b99502fda44df0d97eb159947850905f2210182c6f60e120391af2e15934bef14ac7bf9d09d46347c8b56d7509
-270 1 362 \\xdf1b49a0fdbde4fe65f8f116ed3a5241390d488ec34f3da115a3f9c0ebc26b2bd4e70941b3ba0eae437ccdeca18d8bd497b4772079d37a2a62ae46f4018fae05
-271 1 7 \\x175a7086636e2272d76f9ee386971bd6e81b68921a37987d145fc24fcea03e262da0bfcee8a2899511055e90b5ef43db1b5105f2d2664ad91dffc1078540750c
-272 1 156 \\xd8dbb57a9352798bef3fa5ce93de7becac9cdf3a3e5d776a26ae24ea6c9bda00105637b2e785302ef37f39f8c4c46006d33e71d675e94fca3767850cbf312405
-273 1 58 \\xe9d12ece13c449ccf10c0d2771c461c99c50f9febce1510951826f7b438c2811e555aa6b066c22315e0be61a48f5d3fa782964dd73065fafd2c1a64a95e7be03
-274 1 385 \\x7d1f58419cd1429449f9fa11f845338f5a3cc277e695a5004319766039225e938eecbd748d7928911f16b816a3603dd2ef1175568953e9d7f479808af160cb02
-275 1 85 \\x5fed9a91f6b6540517a5316a82df424476485561bbe9767c6c4369907d8431fc97ffe69d6a9a884f9ae85b00854f21925cf5c431c857ceff1dc363e157e5e104
-276 1 107 \\xdf3c764cdc8e363d89053a87f8b241bc4cb67dc62a7e941bb79dc08fd871774c93abfecff42d810bdd26a203842b47bd8f0002b19a65b3a7ea6252196dcb5d0a
-277 1 204 \\xf549a8e7cfe1f6188ae4887663eb7bf6eebf12134ec1387552014aef337501f044e175e9e7ef4f2d055ca52066f4e8f8850ba046c987b6eabf3adc279cfec207
-278 1 130 \\x0e127afe123e0466c3f0a216f0f004fdafc18245e662c3a9ee01deb4d11bed953932f542cef245a9c9a44310e7c54c7e43aae547c836deb3d4b2d4a781e1ba03
-279 1 227 \\xa43e8e7ef776c219221843f8ff9613dc5fb667d2afe79e0fc1eefedd654f97fe98a54f9c5ebc73a07ad9b1d31ea3f105cae381b799b6d8111ac4534ade5edb0e
-280 1 155 \\x7c1a8741dc9cdb3a161bebfcada7de2f68506c0f49f3a7eb04e26d63a4ab7fb3c697bf112774d25564630dcdf03dd81649f66aa411608f23cc859c03b1d44c0c
-281 1 331 \\xbc268930da44bfd8062764e5d5891e410cde499bdcd8872ad0489e7a7fa61f5e22168ce659e1dc927f45798c49aae91901506fed3f47a9febe2daae430972a07
-282 1 78 \\xe128fb74f95e52dae7d8c47ec7620bc426eb2e5da73b56618815cddce31a907e5e8b3ecb9dba1cb1896be20a5ec91fc4dceaa337ebddf0e845273a9b3e1a3400
-283 1 25 \\x25b9865a766db7143066ece2f4a771106d3f9b945456600a4eded38dc2d79bf7e4bae3ca29695bb10566c14ce5868d818eb49f3679929aba35f6a74821674b09
-284 1 52 \\xb30768d0d6bb2076fe5263ad5a99f0f4540aed204414ca8f9d3fb9bf866b30e9a830c22f4d1d0c9460f7297656ec36ade98436b7dbd46cbfe4cdf97335c87708
-285 1 263 \\x5183ecc45a3fadef0a19037c7800ee3f8f2a7fb5738b73e58a37325ac97a2cad1605fd878917929a733ce7efaafd33117bc50815510d1824dbf08b31cd20af01
-286 1 253 \\x7410acae4327e805e4e97208f7b019e5e9ecb4284b1b3da86bddf5b8528824d0f688d547371390557ef3a3afe5922970143d90b9887f0d56767bd5c97c6b0102
-287 1 197 \\xc5191f20212d3d99b3aecbb79a5be561d42f5f907b897087016f95c3f639dfd191214203cef2033a10c82ca91fbf163a6104e03c1687214147b0680976f12503
-288 1 350 \\x3ee8877ec9cc39f8e3d2e653a21ae2c60b515f2518f63fed0d99ff83d9c53eb789caaf0c7fe99f1306bc43de146a206f7cc09a4875d3f7445973045ef58f4507
-289 1 288 \\xa0864a1de9186c6be5cbb6ebd7c245db7f4afe4c8207e8b2282d4bfa7f2667e582d7924fa1e89e7ac5b2cfb3b8b25c86e856210f04727afc7554e95b8e728100
-290 1 177 \\x10fae9a469386e1165e29386fb0bd20da9338c44b20105867f05962240d0563c375055d77fa01e8bcd59bee5e687ae0ef454c46ce1eb254425281c5ac7b37601
-291 1 207 \\x158bc15a54c99e9515ddbb4bc09f964f8c5c76a83bc58cc8829c92c85d2ccd7dd3a40cf943371a68fcdfd0d46ffdd699efe5869865f72572d86287861b8e960a
-292 1 69 \\x2551634b0fc10ddd585f468da7ac63ab38638fb5690678a68714f9a16fe21533d3f7fe4d62923f476534d2d829c0ed7872129140d07a32d1bede4bb120b1940b
-293 1 81 \\xce513ee6b762c6bbd139247ba2dc11d79264b19a5a491b157c9a0884ced41e7e02eee6863d93805e5b3b76782219936518b913c5b739756004d20e7952272008
-294 1 170 \\x4a289e736549de21743251bd3c86e52d87881c74cd993ab2f9c9422695c00042dd1f67ec5ccd4ac8ccc42621b9701884948b8e4ee57572e1a525885a7e035e0a
-295 1 213 \\x7ea4d7d606a13ec7ad765af3e0bf4c62b2c1899f02d0dc31e675b1f1583e073c33336da2b8206eb140db9d0ea257247df9004987a62388ca5edce24b93769603
-296 1 276 \\xcf2a59f1c0c19a99ac94d6cbe34093e3ebf0ef9fd2142bc9d992fc20a04ec53188c2c72564df487fae8d509b044e66fa16a5266489ceaa633bd7c0883ae2ad02
-297 1 381 \\xc1c7505efdce9042f302331ed2c4b25daa3b1141c7629551a404716cdec46b434ffc91f13bb2ed53dcb4c0013963cfe61a2eff84c1a308d7014ee7f66be36d04
-298 1 308 \\xe0865eb8fb8ae6f14ddf0469bf4977a20eb0f74bfab91f3fac6ae361b609221f53bfb034273a181640d903a65b6b5eb09f48d35c7e46e08836a9f2ddbdef8d0e
-299 1 98 \\x59ecd1692cb73c993c7d57836a372130db5a4ac8a1c71ddb2804dfa7e9161ae4f21c14a1a399ae8d18b4818564e98f6373573529bd3ed96d07fd934707bcf500
-300 1 415 \\xbdd6f15b183fc35efc9ada6152a9fcdb8ed35922c5d5c5414f2adf7edc4e0fd07b4816d032031349f3a9fbe775bc94be693424c6580475d842b387c051e57c0d
-301 1 42 \\x9b20ed31d28c98ee07fe4245a9636d3d1d951a0c9de10c3a703612ff204cad194cc52ba3cdafeb3c5c4b2e93e650ba36e21c6ff4dd34da78f75cabffcb6d740d
-302 1 40 \\xb6eb410ab45211ef8feb76ef005e40f3d85ff1f9c36c5c74bedd09815cf4e7a9f2107fa6528f8bbf33f6e3b9c2669d71164d8f5bc700199c935844f673ec400a
-303 1 61 \\xdd0ada426938b4cd9c3f475a5d585ccdd8eb90508755a625fd01b3a2a526661252d336c68787c908b51b64950246c2ff9d78f34bdcd4748bbabf94673501d70c
-304 1 129 \\x1fcdbfd1513c00b3aeeb8b4a249fdb1e61cee8a4810fb22540e5be9c605ff4cc6e95301f9d3e19a37eb0b6e449b58f83a433e3aef59ac57d07c11dc5581c3b0b
-305 1 117 \\x8982437ed6928e4a90de0e90cdb931de6ff4314dac5efc0061f2a09d75dfd8cea9c3fd78a846d0230fa500201aa52a1513a1ded89123aa185d543e27ee3c2506
-306 1 190 \\x9e36451431fa4bafd0229b395263fd48552c555e9810d76b87c3e2ad161f71ceb8f390f10458bbffef4aa5ff3731c5cc41c4b741afbd656cffb8be328db6cc0d
-307 1 374 \\xe89c927ebaf8c5ec5ee1494545c1a6935298d051ef30038533b891aa75650d336e54e1c29bbde1bbb89610b9263161e3a6854ac5d5d9e2a89485bfcdfb91a307
-308 1 152 \\x34871a9179de116c4d8d4bf3bdbfcdd29c091c6ddbe5e37c53778188d5f8a94e8d0405db01606db3e11592575b6bb539e63174295ff7f8ad64217edb63a6fe02
-309 1 304 \\xe721c659ad95d1fd5d7a37f64ac1ac85858999fd971b74ebe42dfcf0cc3e6aa97a10c5ace08efc478efdca0bb8c04fd494dd951584d248aa0cd2931ee97dfd04
-310 1 250 \\xd3f9dff34ac042b069492ad38cb42b599cb868ab06e4385589cf64f4e56b7d6f95e609caa66f2c9935e32304d8b48f5405d5a59890f3baad7cffd5351bb8550b
-311 1 349 \\xbead1b568f8ba1cabbfcede17f198cf70daf937f19759de7f4954f3277f9b50ec58643fceb6767b82a4136c75a288bf33ed3b418822d055d0dbcb4a3a61ae200
-312 1 286 \\x3847697ab6d863b3bc50a3e6b1f0fd9091e2cf73a292d57af0e261e03697fd26129cbe088ce8c2741b83382b11ab0c5ca14ccdeb3a1dc37d85a6e128b3149205
-313 1 283 \\xcc292822dbdc34a9dd426e7d8bb5f25d7298906e38681727d8508f06240c8a7e6bc2dfe00bd80a838a810bdedaca80ab5fd4d3c1e44ce8c9220758f8fafbd40e
-314 1 56 \\xff101710b2475896bc0b500043455aa6535b0b11e1999d77e65cb0d77ed56e0a3cd41c90e9690a5e50eab1667619e1cea4f245d804da2ab624835f9a9726d704
-315 1 73 \\x3ef643c6edc6d2757afb1bf20bb9c1e27722b9c2333d3561e2c7aee8fcad9d0acbac5a22490c4d845458b6604e99c6b60410dadb9fdc11414662e63c29b4400d
-316 1 166 \\x30c8a97e7b3f529c4885eba9e6b74fae941828856606f6b6e2f67ade3c44d20f8eef5d8b2b837ad6d4bd2859375fdfd29b33ccefa9ad2e85577c29d64b8ce507
-317 1 248 \\x1b640bc73799251f84438420285739391963d5d6df684a5ca08b1b87a35a25621778a4b4479935149d0871bb700808de61156f212ae0b48f9ddfc3292d56ff0b
-318 1 382 \\xc01ab50e167be35d8b83c27125258c0a14a70ec63c48bc018c6736878e53292a6e2053e429314bab08dcae392dd8128861a9147b8ec3a4669ca3bfcafd547e0a
-319 1 24 \\x880bf2deaadc5a3785d2dd7e936f4c66c97388968495ea33256cf59ad0d4874f4601b6f848ad06e501145d29559fac061bf6536f17d897442730cf308bdfee0f
-320 1 50 \\x263b663faa7b7a0ce04651e75fe84f2475d3942df87a4cd03daf011616ce4fbc9178643817899351d70a6648844a88d4caaf4b1f030adfaf37c7c68b41e03d06
-321 1 356 \\xc35a70f031d46d3f27cff1e50089b7522a01dab8c44cc3afaea88587808eab53ba741acd651c36d23f4ac6c777fcd276d82f0cff14809549c294f0fa2e034d0e
-322 1 17 \\x5cc5d78a21372a8a14420ed14881fedd8ddf7e48065cdcc464d9f4807f3fc8fbc444fa7c9a619dc67cb8e4ab3d7bb89cbaa904027f2c6df0c1a456bbc528860a
-323 1 330 \\xca1869b2d1a64959653dfaffc7833e2316f3028e199c97cefa1a226f30bdfdf288c3c0ef029bda5ce98959e0161d368c968b8cebbd620ce909e61c0cb6a39c06
-324 1 310 \\x059a88b70cf7ce61abe661b5b13fb3b1b4979ae220120dac06e3da4c53bd541d4508586a245b13ccbfba95404c411a586743f2acb5110da30a7bc0295d84a90b
-325 1 311 \\x9f8ded531c4b6f4bbd0eaf4435242337dd4049227bd623ae3971416d48754af96745f0cec908cdc856a4b1f7fa38a81b13bfef323caa37b16f298bf474550a07
-326 1 224 \\x0e2c4094d30d45c9319ea726d655771c2c271fd889bfd5e4950fc0aa33dcacdf8e02eb2336df95e185915170040065b14f431bc611d16e33bb1972afc908340d
-327 1 380 \\xc5aa914f28bbf212dabaf1b3e3087f460b3eea20bd9abb64b5293ff3e4dcad5cdca51667640583875fed604fd4b19cf56ec0697e2d725ddb454ef202ed8a9d08
-328 1 172 \\xaffba580a8e92c4140d8f371e6935aba8eab032f1d17347c5e7df8e630a3108bd3cb8ed757c176de232acb5453e9db17727f048680b5782b1ccb3d21e4347a0e
-329 1 262 \\x2c948384f8a9fe011821f364ab977e87f79af4eb5e174f2c29aa6e09ba1db93403cedcdd6759fc9fba6e86ba93bcbdd9f0cc6ed0868bd1c66f3e9a2b6477770d
-330 1 339 \\xce9f848de9e94f9a5503bfce20f6199940052436591c36e7d7a5a06782c8c2be49062d51326d9bc695b3cc896cfb914d74068459f376d549074831d0e6657f04
-331 1 300 \\xf8f8de3a43c9bdf6905d6f277e6bd26f904c55eaaa25b92e19ded3ba78f7a7b5f338614faa81ce97abfb7523a18e30a2925d833016dcd752a7739c9ae90f6a08
-332 1 249 \\x5f957e801791235a44db780b419cb6c6df9964a92ef421821a13eda1ff16f0fbf0758903740478008d7fb66be9dce8ad1d3b0e5d10f3f26ca5dca914248f3d0d
-333 1 277 \\x64121bca38abd1b1901a73c2ffc936f4030389a05c3ccc44e6fb1f456ec73a8da1e3c1410d7ebf0c91ded7f518a93310a8398f8888a81b694616a9673e8f9c00
-334 1 247 \\x99e19b3e11f3bc94940029c0a4aad57ad1cf7bf9a5b2c08331c7f587b1f217024874edaec9c4993ec74c958bf8c42c07e4e52e3c8afd4fbd3364f0b26afbb30d
-335 1 378 \\x6353a92ce0762a574e43125960f3c219ac8476ebe32efb648be7e40399e61abf0d498efe990dade32367ba0d6c8829575f2a95faf362c85821116069795c7508
-336 1 319 \\x5b2b42f051f1e03cae432c4c0295edfa93d405782821f1776fe05859131983ebe06a9e4f0a271aff4b480cd3f70d10b5be8a948c5b2dc7ea1e3eabf1f9e50e07
-337 1 341 \\x89d11fce831514b88fc1b5cff01ce39fc251555f8696879fe88f0fa7daa12cd74a6c7c9775e1f4e4d5a433366fc7dfeadd02c6fab0f5bc2b0a2e5cb496ca7602
-338 1 367 \\x17e36ec7bca9580f5f5522208edbcd6a0c73dce8c8977e68b364387f3e8e399b0225baec81a3a669799daee70f88579c919531fc16b1da19113b49d546f37d06
-339 1 205 \\x646b23a81755c149a427cb1a6daafff270f9ba1f3c3c74e5b78bd12ad66f7d3566d1304f8f7edf210a3f95ee474f82987eda82f355414a5d42ca5317bc1b5207
-340 1 161 \\xa3961043cb743b77fb9078101f3abccd381c14e024152b3034f86b5569750652e420f8f483b5a7bbb2072540c757113675668933df04230f1f14432ef4cf120c
-341 1 305 \\x508a4b66c8ad846fad63e6ded8a562280fc59069b2b4a180773076a6c24d934406bad6dd4aa85cf8d1da067f22a2e85e97ea74eb879a13d3dbb03d6d1a05f204
-342 1 83 \\xf61d84a17d82a67132e89c209f4883270415946593de9470be6c24957967f276911f8f2a0fef2cbd3e3f158b33936ae61fa2393d048c65a6288822493fbc0600
-343 1 151 \\x3e2878867d386577f7abea1b02160e27ae684382b514dbb9bb1ac69581111db84dc79ae50c6d92b0b3ca8d73ac2df166ced4b5c136e10caffb2dec46a53c360e
-344 1 64 \\x75dda22a1d0e14ee32f9047ecc40ec55aed0edfd7b1b9ad0716b584ad5c4419632ceb64e4e3bfa4cb5a0cba2c7c3fc82cb0461b29973782c338c7065181c750a
-345 1 342 \\xdcd290ebe9e1e7d728f2aae4be7a7195586e5cb7010854665381de0b725054baffef677a5b345f0aa1b13b8fadba79ed573dd4e25b40b48cfa1709056b798603
-346 1 90 \\x5e60954aad35f7a3af2041c4aab3c8c5374c91575199493717d3a848105ff1e6e7eb17ab71ada9fa714bbc1eb7cbf6ef5237dd9a506c5d8532768cd4ae79cc00
-347 1 345 \\x58179aec5eab3645714319a4f6bc4279dffe3a54050c22ebc3bf662729ac045fae9cd437ff1e2dccad9c446aac1432eea2f1a412527fa80d5a73296661aa7a03
-348 1 413 \\x5c4ddddb665d334fed1fce412b2dd96b70ba625b6bb971fdd51e022fe9904d3ec86357283676318902e2b9473e007696fea7cc9e79a950bc3eaa587e3a472300
-349 1 138 \\xdd033b3559501a26cca48ec2c90b42366a51284adc0184b1b8c7a2b16fad45de2e53afba2936556d257cb93a53a740f49351ba85e65fa16e1fba2ee1abe9bd07
-350 1 405 \\x7eaf92bfcb72dcc5d943b9ddde647ccffb717196e71ef5937cfd551d3e6e07ce5a7920409d4e1397565cec25499055834a0eb9cbcf0f0cf7fb35b860cc028f06
-351 1 112 \\xa7e414c580e9dc77049235f5e68968eae37f60ee3437fc06e339d828152065ae9b889aef9a90053b9e8dcf55664ea3cb1862e12ee4621d62a58eb9906bd8a00a
-352 1 70 \\x7ef0554283eda237f4f5e16130d52d73cb56208760e0ecf114f65af8f7181546626f32dd2f590898574d15d39b559613916854725b8ef96a4fa9ed04fe5e6405
-353 1 363 \\x1f35bcfdc68ed1e4b0eecb167be1da986c40bc2d0727b7b23b4084a952ec7db98f7e2738c2f0f8b0389a9d7ffdf6a16d94e0bbaf06edfdc35dc3a379f8180704
-354 1 101 \\x5a4c4dc200a00dfe6a8ed7072fd3a7b9026740616887066ec861ce34c1fa67aa97c70716ff269d5150be9bbd54d8e7e9443d4063b8272aa91eb4536a00c8fe0d
-355 1 240 \\x727fc2294090d9419b2b2898f4ed7a380dccd6052346c4641e867e32965339f55b412ad3261bf7545fdb9cb7d72df8655b9679e433675accd474fe79acf6700a
-356 1 287 \\x79f048d8df6aaa415d03c24d7ce289eb30c3878d7485ab59a7fe9e6f62725868d2c0555672bbecc28d5fefe7a8a324c3434a8e8520c1e4243fb6c23cbf1f3a01
-357 1 292 \\x211a8e3b9e25fe2b0a196c409c478899675ba8f86b8240a8521231ac4481bc7a232a7d63ac5336e9f0a84f7514b5b2cc173b4780848635dfa9932208fc747c06
-358 1 74 \\x20c747c67d405d9c4ae6dc5ce1f55bbd184e83aac5de0f1a302903d16cd95a8f3ce5d2cf43502a2d0b02d347230b09a3ed9481b1759f0a406572974af7c2110b
-359 1 379 \\x02d18b6e94853f07a9c2bbc35c7ee74f2f7ffd04616cd805f57b4ad035131771979e3e0a1bc6a6849741c01943745d7bec297335215fd27c1a2b323271a53e0d
-360 1 135 \\xe3f835c28736509aa6e5c6d074e9f69ff09203e15902631cdafc0c8f349658a2a0439d41b6cc26ea5c41f7c19189d1d2b7bfe753f081638eaf61e96247208907
-361 1 268 \\x5c961347cc785b7e9fa4f27992c8acf6f3f67ace583408fad2451a5cf98e8c9c6664c72b583b83d276f279a3fa548d79244f12d1a9d7f31df4623183fca6bb0e
-362 1 392 \\x6d0f6f7a889cc178942d09b4e4071877695e5b05c9fee9776ca6b374d7c52bc76579e753b6efc4307cf3003f404ad04db1bc4fc4d6c6a099851215f1b8dee301
-363 1 346 \\xa834f646d8f5b492af2c1c279256d116e8b3bd0087970e41e662d8e8d28e26c88405c14820110703a3bfe49e20831c41ca9dd24bfcd0fc9bcac1bf6695302c0e
-364 1 389 \\x47c188f16fef15ff6f7c1d359607e42d64717b366e22aaf2ec26da610c7acc83e0138345b79b903c0296316cfa6e20e0923ec99c71cb589a91cb44d0ffe65903
-365 1 18 \\x6e360adfe5b9eb33d6ac2a9357e4e74e8e0d69847e2343a7bbeade6469d6e22ffaac57f28286d5f2f25510f4680cd38ef9a983bd79a7a975ddaa2119cdd2f309
-366 1 353 \\x10da70ced6262199cd40fb558ea676346af7e76d660e987c443ade0b49553fa7c38b0b820c80896199c9ee67c4a6ec2a5264c3d9b69b42378548e5319dbf5a0a
-367 1 131 \\x7328935fea7e8d70e39cf5cbbc2b2353ce2d77e727e451ee2763d16dab8d9c48277e52856c57a0010eb683525edbe625bb1ae6e7a9e3e0969991b8af1ec9c803
-368 1 120 \\x12330ac296e44638838b0acb00604964652206bf59197ec3a26f15d5785b380ca74399037abe403cac1b513b1696062018ac0c4dc331b75b71ed26470d06030b
-369 1 400 \\x8a9075b5310d24c7b5551239cdadb31bba0580e5f8f886d054b8678194a316a6f6aea311eef85096f81f5a6630868274739ae0f3dfa71ab79a4998f4d7acd004
-370 1 260 \\xf0b8331aa7ad6830504535aacbb833f98f9773f41b6035651f656e055019b2c92f294554372f02f95057c9f9d9b7d6f4a43a618033a8164c715d61901f95da02
-371 1 143 \\x33337792dfcec5256d2ab25ade466eab57a317d01078cd380d6276ba3716cb6e539f56fd415534c211be8ec048732820bb8bb17083362b262e64da8231bc1a0b
-372 1 348 \\x66528e0d33be3677117797b1467bf0559d3ca3d5a12a59bcd8e494f1889d21190c0aca7d3b216166dbcaaba093ab43f3ee74acce5ca8d0f6d4a4d924300e080d
-373 1 36 \\x4895bdba53b7374da5c7455b30f96c0b7db0b0cc2c8f79cb1323a44d6e8030c83071a686d0234a1ef40e842381b53af7da5ac04609109c7c3826c0439386d603
-374 1 168 \\x770c01859709684850f4c45bfa92031c7b9e0a4b7a4bb7b79d2b9f3af063d8db18611544568f46d6daba6e92cdc75854e38ee8c7f02c6c8a74d34acfc190d80e
-375 1 418 \\x1d39f884ff60df3ee1119d1e12a289c3876f5b1e52ae0d67ef160c1707b4cd5631275347a1e672b4898634bcea682e9910da5ccd12ba7d93bc9b4377234f1408
-376 1 187 \\x6c25839743d983963df550352914bb8669ffe5ce99306883dfc3c7ce68f450bd5884f91611cc65f4cb1250ca5667499cb2e23b13e9dea862a61d17db6cd5350a
-377 1 368 \\xce6f84623ae2a382f9d71368f3fa32e10ae0abd7719073c9584ac48054d5940f205577291be2103699b496940a23f7630a2ebd094907e9378affdf5b0eb05407
-378 1 324 \\x23d05bb3a7c6ed718ce505f0605289869c98366b19fd48756ad14440be05bb50b89577021d3fead9c4ffd2fa8289f7e89310d0b6a287f946a7ab41a86f4d2302
-379 1 303 \\xcbbaf123b127c4cb934cd8455191811f102ed7347c29148fe8d9445916ed9b1a1f2c5045ae14942bf4385dd2b982eb0cea460a9370145261bdce0599500ffb0c
-380 1 361 \\xb31a636fdafe7c8feb8f5c1797c67053f71f7c7e708644c99da5a3c45bd3d1871d9c1ba419a0110ad39ea49ebe65eef7d32fd83cc19a047cbfb735f6a618580c
-381 1 237 \\x8661dde7307026072e004a33a9b5aa19a25423068df2ab1233b45bc69caca30f49b6d7654bc33f7eb8245423e5aff42db5d7428b4c46b145dfa7c154e9fb9e0b
-382 1 317 \\xfa0cedb44fed4afe1c6206137fad72a6aaf64edeaefa2f7696a1033bec4550a8522652a1e214619506195d6442aa861c3bc4962191c881fa078e48e1cff30800
-383 1 352 \\x3a731c88079e34eb3a64c111a107fb52229e7c482207c51536b2b2c4cc033d2d20f975e61f6ac5f5b8fa1876204bd58230ae0fbd3ac3e6c0ccff5f608837a109
-384 1 257 \\x1e46f9496e1910cb0217b608ca117e6b92186d5feb1dbdada4ed3745ff49f21bca3b5933bede1fa0aa0f2ee024b93643bfdf084ebab1e1c4501438a9acfaf003
-385 1 410 \\x59f9196376ec1ef946cee44defc1cafedc00a8168a3853eeff0b8b4642720c727cbe693dc09046dabdd6495fc20c58cee56794b4b608d45030581a1525929503
-386 1 316 \\x464e469c936414f16e812de9421c5192ae6b141f53768ab696eb54223910398f3d23676b32594ae6066e368c5f32bb94182c0ab30e2edf7b8c2108a341e2a407
-387 1 20 \\xc25d71f3657a27a086b78359d6e3aee2ccc844b7d72ccaf25da97e75b1d7611c376ec1a814a299741b79cde54a3543582d8f16190e79febe894d826568b1d805
-388 1 223 \\x5d983ecb0cb9490d326acb64dc7471a260581af8cf4e076e6d06e79dd4a034374a79fb7fad84ee82df83c43e2e2e7708375311e902676aa731c3e4f69ac2030c
-389 1 72 \\xc4e18b0d9ea83ba03e8aa5dde295734433c9297d26a1604349c7c168dbc11e5c14757f992cec83a461fe095cb61efa979db590c4c8e5b9e71a8962823e2e0408
-390 1 167 \\x0fbfb024ccfb06ade3195ea7020eae9accfd276804800f170bd36df8f0bed137e82bad874d8ae0818116942fab9f1bd8be6168d0c1a3898b1722de9e80614f00
-391 1 121 \\x888cb0afdccc296646a05667b4af8dc78693f87113e01e1b20ae72a8bf0029c46776feb01211ca25fc9529aa67d2c0a19524b65be09f67575dd96843fad83501
-392 1 199 \\x78f5e5cf9bcfd96e058a809265a7a8397d3c8597f0200983b203b36f15a35cde0548ffbcaf4274641c065476c324ca05956c015b172590eab181d8db003db609
-393 1 421 \\xbdc3243d5b06f176f505e5cda157fe941c796eac774f5c97c0314c8ed6fa4b957bc47f257e409a38416ff500eec8f5419e7187f6c7a6ee39e117f987eadddf06
-394 1 67 \\xd62e3cca27f6610858132cc90cb25bf6398cdb687619edfc59ce1caf801d2ff95d2b50458c181cb46a27708ec40b5ad4647e7fa4ba4144fa1d491335aa3ca70d
-395 1 407 \\x58cae00a41ae051b444b83ad44807574b2321eee373c304e6f3c2c9947c0a115335134a726ef04cb2b224ad4597739d171594ba0c6171947a54cf5301a1c120c
-396 1 33 \\x4fa097aac72e66e7152499dc757417c6734b56fa7a052af9b3225d8ce46b1c6e84c981f1c08ae1c6b0fb0efe999b066804e14b2b0932dba6d0df4f206d97db0a
-397 1 261 \\xc57a2e8502b2564d60d5d3c5f2d2902b3cc3654a061f2b2ad7982bc1362c7e23ab5f6ac95d955d9ffd3eef232064549711b0b20819a945d96554fb4417470f07
-398 1 296 \\xdf7ff7775af92992afcfe9692d6c877c6ebb92b12aa158d1a27e0f9b05e6a9f6e6269b80ba4c6dc38d3956f713066889255ab18685ecf69210142435348af80e
-399 1 301 \\x8d2cbf8bff48d77d0d471f0256519ca710335efc484fcd8d48a025232f09372ae0b26c106d7fd0a47efe27ed9f1f5673fa12bfe38cc85c2d38271f03318d6300
-400 1 321 \\x4d51d446f473e14275e477acc55a6265b17c1a4b12bb3f288175217642a2b92ddbca7d9ecb4cfa871e27eb374c9997f1485e47f1ec55a531c013955eb9c9ff0a
-401 1 49 \\x024a2ebfa5642d3043d267ffadc5b4cde09c9104e4f6364c8697a7b458278ffa609fb303aa1b6e6771f66184f0ff82d0a6a3ae96635ffd630711036dc8f90509
-402 1 369 \\xb7a368dfae0d3db033e950d254cf2a0114a0f26b8d5118db25523c624a4fe4f8f12b92452a8f7a1725533715c298444e90703ab68fdeaea8892aebf2536d4b04
-403 1 191 \\x77385192804ec26396e7d4a36a514fd753fb36dc8998a639efcdc8cbb429e8be8288fad5f9b9c564dc50adb17e4b8587dc25b21bf2bae98b219696047a6b4a0d
-404 1 215 \\x8f7606348545fc3a9d31d34a0f75c563f9ade07f8835b48fe6fb7348fac7e63d825289da24cb1eabd68616f07f07fc04ad96e4754dc820053b037ad22c73770f
-405 1 113 \\xdf710fe04e529b0e6ab58290a7e7b7827d25b219dabefd46bb370dd0ed5507124412d2b29c24f329339b17945e131b27fdafdb734d28b594b40d6c8465c5d60c
-406 1 412 \\xbad930c676f2ca2a1a0872083fffd0054eef8034fb21491337f7f2a20e6f3c05dd433993135c70b4bdd5be4c3ad63e6a2fb6e05eead19fd52d76475882218b0a
-407 1 241 \\x4b4a7952823f2b543ec9d87e46046f8416614a99b095e39a97127458b93a77708e160e3ca8208da68392bfdb69babed3cc35ccf1a03d54312c338fd389c91d08
-408 1 32 \\xbe1b79e5c541c8ec12bd5ed8286a56cec84d433974144854f992d73dba52be0a95947e860830a02984f32a35e014a2e2cbb5d4aa154d1d4e074ad7920adc3b0a
-409 1 264 \\x6df83cb7d384fd745c35035668d59382e4fb3b1469d5d1eb2443b2a3c45ace71c5532532d72618570a34b83c923d5ef22099508fe79b6ce7c7ba19f23f2bb107
-410 1 242 \\x3ef9e17d6535e2979a89c7f0ca88c928149085e0cc226bb1732c756443b6070dee0507efd7effc5828e8c6dac4c499f87cc85a66a0c8f4849e85bfc65f08bd0f
-411 1 145 \\xff5ea3eb749aea27e582edc66a033de8b3f149283b824366186d413f38c7febeb43d8ce0d98598497767e48adc2a90418c501a188a92110ae5e09c0c655fda0e
-412 1 124 \\x36fc2e28137b930d192d92421c285966a0d9ec991cab970987a6404dabca97998500b7674cb4f2f27fd1b3846e3ad35b45821de05c702fc78840032275f6d00b
-413 1 364 \\x78f99cfd84867ea0ff43efef48433c4bdd1337ef935ed4f6194d3da31908aadb584e392276ed405810813e6b17e28c4ae51c3335f9951e20adcf876aee577e0a
-414 1 182 \\xafcee604b345790296b3c5b12dd42bce328981295aa7705574f934faeee5a21565e7cb162e946c2af241b800e00e653130051904bee914230cf96a38d5f8700d
-415 1 62 \\xaa3a7ffcd7af86d8d5d5e01aa44fbd906101e337c2ddd8159af3a6a2e63c7a3826f2e2f5dee14f6c8bf42c648098cec5e26b0c9e34c10ea1a8090ea3420d1807
-416 1 406 \\x13596ed5360cfd68c8cf04ab6a210b1cf46e4bd8097eef5f078ddf7a6ec7930d3ed7994cbf41dc90f1b99f7f78e2d711c9e0f20831a722713271f00513873503
-417 1 165 \\x239f0ba1997db8e5300f882593196d78f49cf10f4df733cdbb91dc499156989f238be1ae955129002b4b01fb45a30bdbe8ca5cb18a0bc1ad0e188f3f090bea0e
-418 1 110 \\x2001554e9f5b9026bff99ef3316eca9cb9af519f2755fb5fbce4f508d9b42377e2c2c5636a409f0fff73e988e020e2d0fc28fac581f331bc0a96a2445d0dd206
-419 1 202 \\xa9df4fc3f6c687ac80cfcf592470b47d9427a20617b89aa068a12a36ff95ff3670aa42a97a0a495f2a6ed9fd8037556a40c39e65533816edcd82b41a53fc3d0d
-420 1 134 \\x6b638cd1d3a937f5bca1cbcafc4a9fb446fb48929368a8abd61a6a309deb6d4287e98e76fa04debe6adde4bb483f0bc0e16a5d3110e0b0a98a48a29a26c75706
-421 1 359 \\xdc1d2e84fd686c7ab362abdd78ab96386133d8927474133df1bc94e09e90d619cc8be61a48bcd1385b9b1e386ef590970cec4a2423a9d8e3504fc92161fa840b
-422 1 92 \\xb74fc1fe3ebbee2677f3e79f734840ee0b6e5601948f1845bb081e3cea2ff1fe3b255370bc4ff49ff9e0a7d6e172cde416b189cd797f10554a156fc7eb792b0e
-423 1 93 \\x615ed7fc0254297454b8ca96e839d1a8bc0c825e3a39826283ba86cb874c6cc9afc965efa499d05e6a2dc4a02778616207c612a959acfcb608d40537df56fa0f
-424 1 297 \\xd3176bf5300ed1f51d5b94bd8dae296fcd8571f0de8a8058a0ff06e20350679c77a0fc9b8cbd7fcccb3d5608fbe01b6b9ea3858a29897ee90a85e7e02f83ea08
-\.
-
-
---
--- 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;
-\\x48ed82513cc149c010ca237982a36246850491b26723e0568be0b28a9b8602b4 1638366941000000 1645624541000000 1648043741000000 \\x7381fdf0de425ba7c87466c78b506c9f453784258154f22784ba2f4159d1d267 \\xa0d298ebc68805af02cb0f994d48b4c7cf88c9356a9ce46ccd55bee9053fc558462f46d171acb343b405e45d7429ab1a3fcfeef76f4269cfda2a88b656059a0e
-\.
-
-
---
--- Data for Name: auditor_exchanges; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_exchanges (master_pub, exchange_url) FROM stdin;
-\\x48ed82513cc149c010ca237982a36246850491b26723e0568be0b28a9b8602b4 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 \\x576f2a47a31d4e2ce025ad523688fd4b3b519501ed2679fdb11a7ff6771c20e0 TESTKUDOS Auditor http://localhost:8083/ t 1638366947000000
-\.
-
-
---
--- 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$p8IvxGXlI3Db1VVTyG7Vyq$2KEQt1stbDu1X3D79yecHZjnbUOEeHfZ+vwBtcUulqY= \N f Bank f t 2021-12-01 14:55:41.623585+01
-3 pbkdf2_sha256$260000$yF1NiR4UTNIGjkfvG1UDuw$towB/2xL507PX5ghmSpfrXutJL0n5/8E22/8OUXPBmU= \N f blog f t 2021-12-01 14:55:41.857362+01
-4 pbkdf2_sha256$260000$5R90jy6hupR5cSPfMrKqNL$EWpTMoaNUGDvI0WegMUAZZTY/dowVh2BcBO4pNxypF4= \N f Tor f t 2021-12-01 14:55:41.978251+01
-5 pbkdf2_sha256$260000$MtJImAJeww98TPE2xhIzpY$m/CMXm56Ce2Y5M/TEzhV6Cl4WIt9+eV0dYWC1po0hWQ= \N f GNUnet f t 2021-12-01 14:55:42.097013+01
-6 pbkdf2_sha256$260000$qjxl7r3wmzhRqSrh3ACxXZ$wc0OeNX4KMNZyIs8O/H+tvvZw9M+22KrfGrFjKx6Om0= \N f Taler f t 2021-12-01 14:55:42.215284+01
-7 pbkdf2_sha256$260000$qZG0Px533rLBAARDMM2FxE$/SIsjDFZoDoRol1SjIBXwLlIlme1/buF8rcWergFlWg= \N f FSF f t 2021-12-01 14:55:42.333893+01
-8 pbkdf2_sha256$260000$L7tS5iidAArRrdm27XbRuI$Ydd/Fsa3PcPyXupJ13qZFRLaLAjDlt4xF2nM5YYvXm4= \N f Tutorial f t 2021-12-01 14:55:42.451999+01
-9 pbkdf2_sha256$260000$PMTplYqYRP5wkOB4ydaSeM$3+9PRHbh0PdNUUEUbX7Eq96c926u8ydW7aH2xkpSouI= \N f Survey f t 2021-12-01 14:55:42.570292+01
-10 pbkdf2_sha256$260000$qXqwLgJfIib4ZcV3kDnUxp$eocv9iVMjEDqv4CquggoNyNsrzhury2Hl7YcxQzePYE= \N f 42 f t 2021-12-01 14:55:42.996536+01
-11 pbkdf2_sha256$260000$g1Yz4ZYzXZRbR0nQJJWpBi$585+1ZlMuEWE2zGo3g7H1SunHmLLGf8jcgkjM4VpA3M= \N f 43 f t 2021-12-01 14:55:43.409847+01
-2 pbkdf2_sha256$260000$rFDsOrNuVuyUpskCM1QazZ$Li+E83r3dEP1ndBw0HVCyDj1soHaGR90MBcyFPizIG0= \N f Exchange f t 2021-12-01 14:55:41.739521+01
-12 pbkdf2_sha256$260000$AUcLX5ofTYdzstRx8D4O6t$K2pRyhaleeD4FBiyFLVFzn5CM4AWTB2y0kLo6pDWNXA= \N f testuser-kusufpjk f t 2021-12-01 14:55:50.894182+01
-\.
-
-
---
--- 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: denomination_revocations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.denomination_revocations (denom_revocations_serial_id, denominations_serial, master_sig) FROM stdin;
-1 92 \\x5c3f2f70de52a95881e5c4ebed1b6c20bd74473c25a1a595d89e0e1924e40184d688b2e0c2d1e96fee291fdbf03600864c44749709105748a2658776bd2d5305
-2 364 \\xd64c7af36d9a35591c0d3dc714867abee7a5756f168819c1d188edceb215edaa13c48ef5cdb8e80f87dd1fa0ac9546026d8b5083b0e1c95e7a9f3fcb4a3cde02
-\.
-
-
---
--- Data for Name: denominations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.denominations (denominations_serial, denom_pub_hash, denom_type, age_restrictions, 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 \\x008cbcc9c5a4925fed43da4392462d7cec0069a2a94ff61d6c8063356407cd8afc1bd9bc7b2c649f4e81863a9d1e01a12c41c09217dee36ccc8bb6bd32db8923 1 0 \\x000000010000000000800003960cb41dc694644dc0ee6fe64e4ea917bfaa131d6325694d366ad52448d82d10e6c80dea631768534720411770f19eb2a22dfbd77c83c4760db5f6cbf4f18f4d94f9c05a4d083618a720b43d56efd6b7b63b5d7134378e79c30f8ed76b4355ba0321dea88efabccd424f980a183447251fe8c04c9a261f73733ac958864932db010001 \\xdca5b1be97fb9a555a2a8aa318297b9b84cbbb2f4a25ad73b0be52e1e4ff29de2ed344b34f8e9244a571a7bc0181f31d5e4bc81a509adab092310420314d6005 1665569441000000 1666174241000000 1729246241000000 1823854241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-2 \\x0028b6af29af75fd4d44e981b0ab522189ddeca047cbd282bab7d4b748962fd54541065a3d0d62eef10f761f7f16a6a34bf3c6c662e28a88090aad3969c106a3 1 0 \\x000000010000000000800003e141f513ecd08b032cfdc2983e099276e5e8ec829df5acef61b2cbc600fe39dc9ae6e679cc54459ddbd9b1b38b7c537240e4705f07c5cb14c6a95ff440c97b7e9cec6eab81432286b2b2a040462e4186e48f486260b48977336e8914d638026bba30da28868db34b0579c125765b4155bed260faaa39d5e9ed74969ccdaea679010001 \\x6395b4825e2ee70263fe7167cca5513d5c75476d97cd0b31a820f0918c43c83dc627cd24409586f6c16b6d5b56d41f599c6560a97df00d193f63ed11d32e9301 1652270441000000 1652875241000000 1715947241000000 1810555241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-3 \\x060815dff10c515d55b8845d38eb0eed8de522615a905c15970ec9784e2cd370b02bce72bb3b66b1c692cb5975ac64d02497b3800adfdb4791a68962dfb430fc 1 0 \\x000000010000000000800003c04e2b8e8461d1b432748990830d4318940af7844431267fef9f249852efafb8b2562071f0eabf83d2e18fde4a63bb32c6942129e256ca9ffdc98978a4c7e9b08af4c5a515297d615155381a0dd247ddeeaea6c1092d1776b4377c7d98df55f52fd1a775c0940f80b0d09172b535ae4aa6a30473e682b711e10aecb8878cb98f010001 \\x5a02a7fea4ac1455afe92227344a565706db1f26b3d2bd107b79caa8b6562db1bd4c1a48a7fdfde2c448439e2eba6bd53f656e06fa9994eb4acb7bfa5f569308 1657710941000000 1658315741000000 1721387741000000 1815995741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-4 \\x0ca4aa776849c4f6c506b34dd5490dcc39fcebca41b1b19aff2ccc8e1e11a1af1c3f0f80f6e88ab50fc1bffbc8b603b2d55e406ded3f730645f6bad140fc0478 1 0 \\x000000010000000000800003b053a1e714ade9a7eb088ec79c18aa06587e5f985babf2d2148e79aad969d46abcc7e5aa9810920d6c98db68482f8ef3d805f75c99b6b7888f7ffb9ad63d99ddfa381b380457e425704b28e83334a5c991ea2b47bbff939ec26ed8feaed3f1b55581895bbdfdc7794cdde1c78987e8530ddfab15d164829f1c1e071c54f11c15010001 \\xcc9c13bda710ba7702d4964ac7b5de6503f3a69f16cc37e330a72f54e51867b88ca0a98e65272cf52a8838716317e2455644b291d90d4b3d8b5032f89452cc04 1664360441000000 1664965241000000 1728037241000000 1822645241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-5 \\x0cf8a5da00817a93fda79e90dff92d5d652a423f08d5f19ebdeb7b455558348854fb0e912f1bc48d11efbd077a509dfd6b79d2e46b748b8b1ddebc520d83c9de 1 0 \\x000000010000000000800003d9acfd05f3d3bc3ea25ad57b5d80eed8334fd440b85e1b99f57f7dd574e208e9cea66ce0162a71d622c23396cfbbd22cdd1abafc98ce8ee1587a8f7134ffbc10218b7f984375b97d67a041fd1f4f007c8a7eec34c570f7c7310cac0566308bf50263676c31eb84c3a2dbde92b17b051a920f81c6bf546a7aaadc8f39176d7c5f010001 \\x6a80924ca82bc097ddee4c0c5821d02223b76e344120b9fa511b778b4001e0efc424170af4d331950835bec214bd05498011b603d00c0b32609a04f5a5f2a900 1653479441000000 1654084241000000 1717156241000000 1811764241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-6 \\x0e68813a589837f2338ed9b0c8b25131c9e64d3ac86e2c88401699ee2a5811995d138cb5d80a36399f3da600f801cb7f2a1e5a3c46da382e3452d3e7e8556d6a 1 0 \\x000000010000000000800003b5b04be30743ac2b853a592fb4eaf45da64f05b2638b1e856f2a47eba564c1e29a8005527b0606e273e42efa9f30c96fb1d49f4974241bac59ea5599bc55f4fa43a5a98bfdd5e6f6c926253e978bdf072dbf11fbe6a69af9f3d9a36f5ddd94e139177bd0bb824969450d8d139268c4b3eb8ab02df60f79af27c28e61d99db6e3010001 \\x15aa10007b350f5f53d1c1be96eb9bac7c285733995cc0e79914153096df33a671df6898f29def2958655fe6ebaf0d8a79c855ee3bfba7fb3cb7b4c35ae02e0f 1664360441000000 1664965241000000 1728037241000000 1822645241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-7 \\x158c52802f9a182dfcfa305ff9424857856608a4a3b7949439ddc8c3cae4e931cec831f8cb897d877210f7c01c2a712f55511472a5d612b2e9552867f186216e 1 0 \\x000000010000000000800003c1885b4f7a5fa6ae8dc3d8038956ea09a2ea999ccab206a35e34be8ce06daa2b490c8df103b6c50ed384d3ae8872cbf2467c991e41339ea0e2c33f8d72f037f012580b90930d4ba25d432ed36d3e8457f3021dd0d1a498ade519f32f8fe14515b51b1e2ddb7bcd6232da16656aa92cd32f5232dff47b7395ed47f7a30a1d879f010001 \\x48284e90142a31d159b8a1c98c80c6ba6a91573ffd883de3f6c26a1ab1473fef155073cbe7f407b1f3d541b9c6d238afb2d2ca162e9bab1d3e7ef5db26234709 1649852441000000 1650457241000000 1713529241000000 1808137241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-8 \\x1864804f8da104c6fd3172d66370aaed23127702cef92f3241af429c344f99c26b1622176f1ae63cf2d1a64394fc7d3431383da2aeb67fa4274ecbfd36108889 1 0 \\x000000010000000000800003ca878d485022bd843d8c447fa0201cba02138307a20cde1a3b408528777ca3e15a2f1fa2dd7697112d60721da6514e76d6f9396b09aec27f2fd519b2211d5071fd8144d31518a81532ad7215e194c7737c4ac5ac16dc99a69224a5c6f548eaffc371ea2b2203b3c61be2d463326747b6f31fa77d73eba72082624d8c610d80b3010001 \\x2a1442dc377e0dadb37345d5e4e93d4dc1d1e50b82ea68c615eda9d5fa49b6e273d630d8414b7e811f47e51f7d598aabef434f2b70c08d34456671471baaa808 1655897441000000 1656502241000000 1719574241000000 1814182241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-9 \\x22f4b06fac57f442f204e897a5b27b5328491d25608907651c753ea9aa44b0baa65314fb46ebd457a5350c114011280970ef76af28c461ea581477a341988933 1 0 \\x000000010000000000800003cd814385afdbc2095f30897c6faa76b5aeb2d1e7e174ebd1b874c9c01617f9e3b0a4a98b29b0f30035b9117df783e34de3223b02840efb962f998a1a227bdbdafa7c7cd5baa9da84e29aef0556ce39df6a79ab8e4222f829af6503571177d6a41b68f61f7663f31ba0eb621a1c12b0edc4b47d14f2088b35f818e6450fc58de3010001 \\xd2999153faca4168b9e7a13909f49b33b9abe5a46012b3095ac16a49f0441d92f0fbd92cebb8da123b3493fa62ae769b618ab76442639b686ac5bf7f6b9fd201 1664964941000000 1665569741000000 1728641741000000 1823249741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-10 \\x25a818f7e3fd43a29870bb2afd4e4f38e73c9f742d76e80654f77386f9af9349994f92e3323ecadb3740010e2c77e9e57925af2af6dc9f856770c2cb14966ece 1 0 \\x000000010000000000800003bbf003282dc6c0e9f8712bcf34b24dfb44339ae8c48a734799f2d1881ac17646e744af9831b8c77e9ed1348a31663f82d86328ab4f0a7de611f4a2e7ae0448177ad40c06984d09e21b483be7f005f4622ddfa2bcd06cc7eb50b261230c5cf31b89b59e406f834360ab2bab8e1c23f88699013ee561c99931a0ebf44bc0e451c3010001 \\x6d18633c34e23a77ad822bbed1d88a3935723742e84ab75619abdfe43a5ea07e89988f19cb59f54f3a62f147c3e2d02dd69020ce7fb4f61ad99dc5123ddaf20e 1663151441000000 1663756241000000 1726828241000000 1821436241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-11 \\x2b244f36fb40aa1d05caa06a14468b3748d102711b850e6de7d27558409448d5318b70bb87ded1eb2361ca4513e10e33fdc0054d5de1bd1e3afd3c528916a80e 1 0 \\x000000010000000000800003b8cd2f498b452fecc223a26a75dd42a9ae924e373283b67c811812de4d5ee2269be49e3ba220aa5c24a8bfb10717762333956dd82755609f8ff06246417fd42bbb37aa83dbb39c513e88e438123af729f23035c9ec7af637897e9e9a76f571ecc4024496b868a2f1ac100afd0c64edac4fa449a16bbcef89ab502527ae642dfb010001 \\x147ac8f69f06c610b7c7f7b5e4e7cd4d920637c6d83fa1f290a4c95b93b19fe96e9ea77dbbeabd0a568ffb39ccc4a468b6eee6808256d7acb4600bb3b4f15703 1655292941000000 1655897741000000 1718969741000000 1813577741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-12 \\x2b58974c5cfe40d5b3fe67da01ab7bd5a35672c7385eb37d58a1e50afb03eca8a0d581aa801c9a42f29d8f78b55f0a13a0b8330dd5e8f2dda4cd5b42fcd98d70 1 0 \\x000000010000000000800003c493d4fb070eb8b38b7a492cae15f9aeff0da5170c3c4488a859b7d03cd235c8447a610b04210c92aa3dd7da6efdf510b1bbb7873ef6554f42dfef31b5aa7ae117e964f54af99b32aec19f229d5641098d801d32baf10602d728691ea571f5482d8bc3d7db90a15e52bdc97436fbcd641ba5b24f33cf417a04e948ba7783123b010001 \\xd637b6460f29c42e4b7932d60f9e010d913991e1820093602e4fa510c2b4389cd20cff41ab620ec7db1792083a6b0ab536a7d5ef1130332cba774af26a9ee30c 1656501941000000 1657106741000000 1720178741000000 1814786741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-13 \\x2cc0a7ebbf1283573f1276dc51060232509746871f430e4ad8d15a77cdd5e1ea049006076da5e20d767f062fb66d3f53d958c9f741fda39354a6e29fa851734e 1 0 \\x000000010000000000800003d7f4253c3aa856dbf85a72ae4e2151f106bcaebd02276e949a12d3d3ee0aec3f3790c8c3b1600cadd76d0e311b89e297d4aaad6d41610e73a1cfa27c7cc1ac53f83503ec09ad62d2ea0b13878167b2489ffdce755e2f2c6e13cb1e16b755b90cc2d3a95e491b4e9cc9c604b09319ebac0573999ce1c99c3b5a081e0f17bcf8b9010001 \\xfc078657d1b265359d7af983682c30e96ff50eb4a8f3ca3739ef904d1d1af43f56b8fcf3248a2848faf264318bcfa3a2b1abbfbd59c29585e88d5a4e795d9e04 1658315441000000 1658920241000000 1721992241000000 1816600241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-14 \\x2d707885494de727120df12599e68d211ad1573e92a40bb1b34d35e931681301b1faaf33612a652ec14891b9d7a4d25c6be3f69ce9f43441c7a4f619da46f43c 1 0 \\x000000010000000000800003ac6896c2e714e60795e19e88586f3858af62140e6e27ff90ea14cd17add2fb614a6f4d13fd49cc2554b13a3308a14dc6ad80aa54d1a47c62e47a4c79748940e5eab3a76841a5eeacbbc6d106348d139607b34afc1567dff2ac6a7f8cd472f52a8193b7098056bae5a52a0995883a6d4f1a8f1c079f1f824cf6af652b052924f9010001 \\xa04ccd78a0bb8918a65cf4fbb4fc9cdb7b24b6790365a7f2a885a4afee47463ec3579ab2ae0efdea4570eac10af008ecfab60d8106aed6d2979609d6b313c50c 1662546941000000 1663151741000000 1726223741000000 1820831741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-15 \\x3348c1b38092acd120ba4246bb378f969a1322a1542363daaddeabf5c9c72009e73a359d5b0d362facac9d4eb4f803fa7fea66c0559e5e6b8c88ec5bcb625c6b 1 0 \\x000000010000000000800003aa094b7eeef18ab5d77b90a1f530065f0a04ea452c88967756946d1582f432a3220e8236e24ad941073a044171d44ae809eaf4b3ce1f8201017132357cfcdbc09e2422af64dcfc702d2e87e44c22553a861984d59a590b833dcf7f104fb7703fd39b05b1718ca50ed2c2a5b150f793d79b9b7608a16860a3fdb860122a246cd1010001 \\x6940ff7e5cd8dc0b9f7313191511bb26833b406ea2e9fbfb1925490d10218e76b00bc4df6e2ea7b87317d457ae3387e9d3b5f7c98f7709ee8806b8901e630a06 1650456941000000 1651061741000000 1714133741000000 1808741741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-16 \\x355052a2634e183b1cac1cad421b3596e509dcfe5c6b6c3a4ec51231d96e3a35a35c94b35a78497404cf4c0bd678c6bc705f40b785cb5e41b6bb98fe25daa3c2 1 0 \\x000000010000000000800003e3d8491a92800d7de96389482fc1b91a13ef70b1e85c415c09d522c6b33aa9f78e0359e41394c6c84b0f9f7ebb43c6a22806c79968ee1891ee730e52481e04a48f1320f547224281dfafc118e1354d985a15fcdfd1242b40f942dfa5949a4279c189a2f598d30a68daa0e03fafafff37139cb9906bb618fe582b55f5c1732a3d010001 \\x4bdb5e5e8b714b440b3b67225b8dc8facf60dad8e818936d6acdc68a0ae462a4b346bf7af5f47b2610834ada16e1a9ee391b12d8f84c387cd8ec7dcb6922c70d 1659524441000000 1660129241000000 1723201241000000 1817809241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-17 \\x3a3867177bfc3b2ccbb5923183e5fbebe0bde8643542e1415f604303ebe928bdfde33ef3cdd0f4c821bec2982b775bf3b9e0e83be4562e092790c5698b149a26 1 0 \\x000000010000000000800003eccbba620fb1a4dc321a421ba19bf97b036dc0f7fc894a9797b758238dadbe550781f230f8e008f1995b22ba37744837eb7274c8f077479ff29db6dd8c0f01d3e92935fbf1c42c0cfac17a11fd45cfa539a854cb66f8a8870a13c790a4f6082ca90192ab5f73b75f901a0f4ba0c7e5c581dcdf63f54ec3befb580b0b0fbf7285010001 \\xc96af5302a0b98e43c8469ff824103febad36ffbe43366e66e9362abb7c57a9dc481d065fc32cc273624d35832e967ad8fd58c668a0ccd3c71dd62c9d4fc2900 1645620941000000 1646225741000000 1709297741000000 1803905741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-18 \\x3be0e0587e5a2315f379be20bfb71e7c2902f8658b3638f50daf6ead8a79b4613a25f58297633ecf68973d6a4ef59774dadf4def277c349f7b3bb5163c257a03 1 0 \\x000000010000000000800003cbe0e6188f63267863b583ac144f7d5fff150c922c201c9d69f79920a22531b2d7540ca918363cb43d088ede89f5fcda74e080bb59c0d0310c105f78350cd42e5a9cd0c5f6858c759dec6a208f09d41c6329f2b72d99e9a2c3e9ea6754ce5be5be082b395a9a4fdaa3894edbb6f31b8d24b16d599907376c14847ecdb4767973010001 \\x31671c8a0100ecc30fbb99d8ec402b1d60460926b006f61c018e98e081a3ba2a50ade5c4ca154f27a50c84ec739bd6c5cac1674697b8b3a6dc5619bf39325f06 1642598441000000 1643203241000000 1706275241000000 1800883241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-19 \\x3eb87cf47936920f014a294d6c82648cfa444db72360a558a8c5d91fa79aed81cf747f8a5551176526379944ed0badd69f3aafaf4c0f8b2f127bd33502f9b618 1 0 \\x000000010000000000800003a12aa908fa29f53f08612d3b83ab904a678eace544b298100dcd73c1dd498f42513b36a802affd61ec23ebe625b911b7d381ab14f410c9750c4199ae8859963a9d852f8b325e8f44da1a510648d1efd1380250921d752bfc35852a91f4a66e8048cce2492024343260275d6fd17be54dca85a816592b0f92d54e7f641a016339010001 \\x0e9c2fa29c824ec4f703d82ca2c9175eb93480763845dd73b2fdc305b66b9013fed09f247c5f63df57fd0cb27035d032b4a31a0c1975a13391d893d37af3a708 1654688441000000 1655293241000000 1718365241000000 1812973241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-20 \\x3e88a864e4b434cc826dc9bcc4cb7738a3b71011d9e68f4ef2a3c27c45319e159d5ca106f3bd6c69944987e825e3abbe63ad35c38cf096183ad3822a4f47cbf8 1 0 \\x000000010000000000800003a3fbf86a6a91fca287172f9a909c288856fadfddfd1612f28835eac4962e8ca6ab6eb72f59edded3dadc683a3df04645384a79e8fad3189126ff3b0687e22fa2b157e2c9287199437fc884c8593d13d51bcabf44397ea8d7811550b900cb4b0255a3e668b60a9a25f4c7f66ef65ff8060ab7cf2552726898f70cdc7112b610fd010001 \\xd58d6b5fdd6a785f24271aaced7b39a6d987d810cce878d2c6d0ab9136b2774f09f693f0c05c625acce138a4f690034e9d825b004b4401a24307dfefecf0dc00 1640784941000000 1641389741000000 1704461741000000 1799069741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-21 \\x453cfbd45720cff7741a38f395ce6507dd4da39adc6339d63c0e038ed682739d648461a535108f6ed205822cb48a3316d5fd2731744abb42dec72251433879b6 1 0 \\x000000010000000000800003b7e57fb7cef55d6ea450ff084f5471fe104035fb54fb53fa2c22837204b13cd1b7707f6ffcecbfb369f6d77de6a424fbbc87b429cfa7546ed82bd8a22c507756707ae71c7b5956ca66134ec602731ca6b595194946ad13ec0a36ea77e488d401d9d32fb303065d200700017f165aa88842b5a589aa547699f4dd55939459f6df010001 \\x2e883ea27e2a5a110d16bd5a374e2cf45b58652c6620f2f95e62d7fa6e65849a524ccdd4160afe6698f33d517e9666f8aff880593b6b5abcabb51f8ddf4ecd04 1652270441000000 1652875241000000 1715947241000000 1810555241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-22 \\x492c2e712aad7397ee91bf027969a9aefcab74f4f1d3d7e23feef1740c207eda78f3efe86e4dac623168ad78261bf0b482d87b1dd93eb188c35a04c6d6e97268 1 0 \\x000000010000000000800003e0b660ca4c39afba0e78c567b598d922ec7e1a71bdb5bbbec58d0c91c7fd8e4a50daf46073c45f4219ce85dc1b57a992b91d56b86b3c0ec036013fac5471b991fe4b450713d8eef6ea92e545bcfaef027e6f2254aa4954a18d2fe8404380aa06f45082e218232e64cebe81df4919993e5b31c129b27a2dbc93651d2458387df5010001 \\x6c945b12bc15f8f11ddfa256b256d34bec9b9fb6abd473f0f5cecf75a351ef7ab74f1007f8a07dd1ffe020d91afc2fe1d3d809a5e8c8f76794e91cdc91d4c106 1661337941000000 1661942741000000 1725014741000000 1819622741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-23 \\x4ae0cd81466eb66bd9048d2d828fd27be9cfe576467b347894a74ac210edf9484dbd0cb03fc904133f3b71fb77393f3fb889d62c822fa3d80c13e519fc4644cb 1 0 \\x000000010000000000800003eda4b921eabe106d7edf2413dac25c1113602a6fd9695a37072adb90c3313da18b06f186c780793cb6266ebb91a88a212c5c86f461e4831c318549e3b6b297a50f633611825d0e99ed7aeac41f465dcc21c8434535e1e1b555ac06dbece223259a6acadcd9221a77fa1153f3d2fa9e1fc1bb2be1a6a3df32d1146dd51ed7c495010001 \\x0dc4ddd1371a5c97b735b3b772b5e2fea09a46f44d72b70f563c104d2cc239fffea462ea2cfb4ef439eba681546c757b9fac242c870abcce1811417f818f2b0c 1661337941000000 1661942741000000 1725014741000000 1819622741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-24 \\x4d285a82f4b607bb9b4d2dcf0e8e2c65a922755f4638db2075677744726b389903848e97682f655ce18bb5d84809d3aa6ce5a142e2f4047014ae6f9230c6261d 1 0 \\x000000010000000000800003ca6dd5cbc15814c184db7d5c5ad251428cb27c4d672438698be8230c7a71fba1309053a5086547e0588ce9b9b74b5eafd1dc7a30706dd5a57f60fcf61a28d34d79d48414eb00bd4d9de3fc6369245569456031b4e9deb74770ec604b8658cf3b1d9136fa9d4292a3b3accf3428d367ff08076612b6fc7f8f6595d2bff5f51d9f010001 \\x5fc953f71cd1d04517327edefc1acba4d31501fee77548a06e62ebf561258a2fcc3796b7fa94af354272d26ade8ef719dbd09071c363715c00ea365f281d5703 1646225441000000 1646830241000000 1709902241000000 1804510241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-25 \\x55fcbf861a8ecffcc132cf0de5f1985f158538e317bc2f1b611557c6ba2c605ec69ea2af3cb9519b1b5164c2e6fc8a29a92cc0e4270ec27034478d8b526b6527 1 0 \\x000000010000000000800003e19e32d927ad863c6c4b5c3edf4958a13cdc4f2370ab35a1182be7936a195a2f52b18bd599dd8d95a50c68915fab6ef0cff3f1a786e24f96c1f88fc29698b3d51f834b3340f153fb90c009237630087023d493ab4abbee516533326b70857d20bca240b69d10ff9dcc0cae69e5fc433f052637ed21d51066193085d77b274a0d010001 \\x38a5ac330f838506b0481163b0a86c584527122767d41bdde672c0048a553f9e48d3cf20026b328a0bbfbef3e345919649383d60db2123ead36bc9b384ba5c0e 1648643441000000 1649248241000000 1712320241000000 1806928241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-26 \\x59c484a4dd917abc013f52a72ebfbdc0e1dc5b3ab19f7b0236c2ae7f136c679f3bf641ccd3725704aa502c2ddff40c254d62945d6e678971014017cb719bd073 1 0 \\x00000001000000000080000396e9eb80564d7eb6e6f8339df16d98b36647d02d7ca4f202edb1b4a212a46f51d534c40396ee06610601476085594be9dadcaef436d916022d8a37ccbfc08c079b43313e056829d01b162f94e4c73d0f4347511ede188d6f6fe1da847833ad69dae2665ae47b777429de4a86f7e412af30a5bc586aeaa14da5758458a2405599010001 \\x13c6187404265caca59a9d232c1f3d415bbb4d48390b6ed35fbaf9fd1f8358cc01b3ccb82ac780f85a8cdf60cc1776139df1a5fe866f30f5a6a802e4ed3a7704 1650456941000000 1651061741000000 1714133741000000 1808741741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-27 \\x5bf8a23a6eb3692483f6f62c050b0c3c0a527f95842336cfb8a564f88cad293d154d3f1c955fa8409d40d97cdb58ba0402dfc334fe50a6f9c7a2673223098e4d 1 0 \\x000000010000000000800003c24d2e06d34700ee5ee004547b42a26ca98de696b728d74e94a8aa2da0f5b7820b18d3d37503941599b9db99972886a37c6509c12126c4316a4e11c6d3ad4bb74d4ae0a2d5b1901f611d92649311b30fc90fcddbd9c997b2e0dfcd328297d8454496e6bf71f72a10f31d3f1d3769890f6dbaac336b5adba3971632364f5a338f010001 \\x58b2f43132a0836e3288664347e1380f151b90d63739cc92f598939aa86d0fc9d5481e351aef27481337b7c45ee34f4cc7f3c47f71c30527af750ce274257f0d 1657106441000000 1657711241000000 1720783241000000 1815391241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-28 \\x5ce8c60eec96946da0f599b2035ac2e6de4022a64a4c646dead1298e3d5e7e88b751ce6e8c5dd958cef37284a414e6666b163d3f995969fb14a3bf0ab81dbd95 1 0 \\x000000010000000000800003b134e593a0d1815e3a290a03887ca7202e3eb15fe401725784a24feabe09d03daf8e3a26af561737acd6554c5cd13a16c9bdf0dc9ff5ae8c46204c57a1e1cd74a038eb9b43c5b54d271375f5ad719478be3b96349ad57868e3ae913e339fcd854df19ee051297e56b2ebf49469ddc0aa34fafce5ed64d37fbf021521e5e4f101010001 \\xbd937ca74bdb60ef91a0c7d0fcf9296d2a698548e9f41c5c28f7a096064167f8348ccd94dc91d767d41676507fd6b63afcf46ff4a6e9616bdf5a833f4e189808 1665569441000000 1666174241000000 1729246241000000 1823854241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-29 \\x6938027d964285ffbb11d7e508d548b4f7639bc0cc09f11d54dcd11927fb8076ac64b12e831603163f2e807aeca1fca639b075aacf4b13e63c0d2fd1e75c2c48 1 0 \\x000000010000000000800003c93c0f6b391c602b63f6f27f9e3776c701ed6ca2779824ae47bd27cbe2722b4e715ed8d021d3389a429a40f3786ffc39b99ab1331632d8b7c34848bf0a3dc39d99760f91656b465e6aafb7734ab9275f1d3f5cb5b906e384bf78f0bfbb76c3078f445c1416692429c906f67a33c12073992c76235de49ecc93754dc9767df151010001 \\xdd87df2a164ba6dc8babdd59bcb181b793b105cae95f052eaff3d46c196879d278a017cd3737fdf0a6ee1bda7dfd144ca11d3eb9b13980d8b5b557392da94b03 1666778441000000 1667383241000000 1730455241000000 1825063241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-30 \\x6c7c3c2be597fbc9d1a89502bd898b59f6cb57f38b20056cb348fe9e74bf6209f63404b08d46904371b2b0ae0c70807c59b71263c1bd2dbcdf14bf4149bf6525 1 0 \\x000000010000000000800003b967d59e5c86a78451782cff026b59e8c5d43c8f424460b6fb9c10f1942a0ea13c101c3b402dd119f3d615b7ee078ff640fe0eb279926f116db1f62978bf63cc4fa43a4129578dea467851e6cb1f4458e356296b05e9864200f786f94cdef47d9f906cb50b14caa26c3a59ee794e1b9127dd7a5bc1f0c8b9d56e7aec46158a47010001 \\x5640b16cdd600f69ea53de9cd25cd550a75c01afaa9fde0b05398a8d00140ac5baa6d4164168c3b6b9cd5274783fd9053a07e901ee6847e5b15c8f8f699b1c0d 1660128941000000 1660733741000000 1723805741000000 1818413741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-31 \\x6c08ab47d6da166031e8543c8da4e2d1d0eadf4f185723097037b948b2f020dd5cbb6a51a0b34d72b6b6652e922ca51f8227942cbf6cf50310ed045df0750f97 1 0 \\x000000010000000000800003ca2c43c5206e166ec390da34ff7dde0010e128ea714cf5d1ec358dbb13c7703847c9b7470bd07b41f4a117486917c78ba52ece4d6d6e7c61400d4950e22e22b815c968cef6e27729fc11b26d3e5c062ec119b4e4c3ef182eb33e15f2ffbde5e81a6953275b5ab01661cf23a14ba5f460c0e7f453a8be767124637455f429476f010001 \\x4e23c53039c4632a93da168d6164d7fb75547b7d60378a16d6b3f6165bb799df20c2a1203153c26a5191d5c1bc3e5d1c20e8a5859c63a13c5acd5527f26c250d 1652874941000000 1653479741000000 1716551741000000 1811159741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-32 \\x6e448fdf0cc77359cf07cb7beb7519cd351cc611cdbfb508e638945d1874747f6885a228c590b9734c6076b9d8341df23aedd1af30c7e8f5db34d476939eae2d 1 0 \\x000000010000000000800003e753f17b95b29e75e22ac7226273cf17b0c1a08510724d95e166dde43ce998b7d3132bafdf6f15c80c4655dc6a7ee8c1bbd18a39eca9c52110db2ee82a2af323fbd0a7b14397e8dfa94151c4a760e5b48f71730c299bb3245a0fc26e9edf309f36873e5e82c770d772b393232c769fc0f465f1bed9d348893c9c4e9b0e8b7293010001 \\x8310e74a27b589f463b655ae3dca708abce551507f206b21ba695486598f73e17ed87fbece01f4a3fa4e7ca040051a93d5a863362a8a17b0c4f72ce2434bd70f 1639575941000000 1640180741000000 1703252741000000 1797860741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-33 \\x74ec4db899f9a3ad49fb07efff1856f8ac2fc0735cdd4f95430646afa30a6603bc25e138ec2d9b7ba6e0f79daac95f861f9a564aefd1eeeadc28202db1c20b7d 1 0 \\x000000010000000000800003cb8983afe1a838badcd0fe84d886f57c20e32d1e40a0a6a684a960b64542b310ff38546c23c31a89c3ea790fdba8d063cbfb4a86d97651281695f9eee9560581af59b14cfa21eaec6c74c9b0f6149100bb1cae638afbecb824a45589f046a3ba056677c103fde11cecd0ab4b51fbdd3db1f485470b026451e4e8bec0c8705b1f010001 \\x863dd1cd86c3e7328b13b193199e7dea729b1e9fc359d8db29313f374dd35b01afdc631bd5527b1b856af0265bb760bab3526f711ac2cbf3081327ecc412a901 1640180441000000 1640785241000000 1703857241000000 1798465241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-34 \\x743cec993f470178225a4f1a34fca846c3de1ef848b77b8c18eba54686fcb1821a24548017c121dd3d8d8db3fb876584cd23b719148ddf395e27acb4dd091a78 1 0 \\x000000010000000000800003c80c06f75c29e20e0541039772f49a9646ba0b9721348350491a573494a0cb90ed386200f00ba589db8afe3ac97c6ff75c875091918a7f3d0fc3eb18957f58d3bf1962f0923ec045050847937598136e5a291afecf8b28c912eee98f917a736f96cd318a3883ce3de5fca42636995880538bd1173f375b3666084ec081846319010001 \\xc4da47eed5c7e42513c600f243d560da41cd3053fea8d6975404a85885d11000a3ed5592f6de9186404ab93b91f346507c1e35ee9c61fb8ce75c0c403f1ad30d 1654688441000000 1655293241000000 1718365241000000 1812973241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-35 \\x762cf36460d5a5c8e3318051f46e8c51c584d77860bdb1becb40a8b457b76e6878b29fd64056f130301ded15c6d27cad4bcc4e494d7c9fada701d4e15773552f 1 0 \\x000000010000000000800003b3c07c9dbb246d629d5175dbcbd57dd1f1c5369fe173b1c9a1b3a9a0df785176b8d4b46f519206fc9533ef509590d5c0593c778206978adef671a64dc8706b31e4145fc8af474b603aac78546b261fe7f97175cf4e7a874011fc8494fe166fbd8a2d685c00dbd62b00f395f10f6638858062323781f06a45abc8bb7205c7cea5010001 \\x4ae6b77e56a2f1dcd222a8d971751e01e39cc50eb344ed21dea51f5b9d343d9055d816df807def884234a6cdc97f1d4e504419c569d3fa82a8f6273959150002 1668591941000000 1669196741000000 1732268741000000 1826876741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-36 \\x77e0d0939c7a488af03ef8127203b312eee755e90383e4bd45356153f1d8200f24a37e3b0315fe9f2f1dde2a89d668050fa791e8cd7b11ca4b850e9f60c87059 1 0 \\x000000010000000000800003c061573f2e6e5d5197a18d3aed75e82e47dd6c7df39fd6cc4d823e5ec70480069c316b1c40841840136cca95f5f196cb3bc79ee9bda5bb505238a78629811afc4df022f6935ee941ce00ade826727bdeebda831de90ba6df9d511ce82a7f418604001b0c1cbea7f47f06576b4d15cfcafa7ce5ccd61347ffc53f620d60e37fd7010001 \\xc47aa90dce4677f67c5d8c8fcece183e325efd947e4ad85562e961a998686911605de5610bc0073f938563c50149b11f5526a573f48feb25fe3d64270d1c5101 1641993941000000 1642598741000000 1705670741000000 1800278741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-37 \\x7adccff69113f344e2eb53b32bdece9b53818ee7d123e2a7f37c15b2fdbebbf5a8ec1d4b146480589763b33f850d786b6c5a17a8ba47d06f9259081cf8aa61f6 1 0 \\x000000010000000000800003fc4f41a679f34621374d045d982b7534169005aedf5068b1d034c0eb343c1af1f83b606afe10d863e8daa7ded10b146bff3f7dd0f24096b2fea7725f504b894890df715b069d334f7ab249f968334914fa56ed3718e6866431d4490fe23b30c23f8e8d1494133f20959fa73c2a00c59f1046816d0e143ece0bd4748e83b97d7b010001 \\xae7dc72b050620e76357c927c829d41db70a653dbc49180032b5bdd8a07b09d8698c43f968927f9076db5211d723abbc783a9ec670e29c0ce120f57a35b30702 1669196441000000 1669801241000000 1732873241000000 1827481241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-38 \\x7d206f16f106085347a449c63e6bc71842090a6384b3eae506cedf91db7bb6971ce881157b7fdfc0460d66ed832b1ae9ddf2aa4bd4fb057a60eddf5b4af1838b 1 0 \\x000000010000000000800003d61c1fe72d11e1889044d71c87f0abdeb937ed16e02ca19ddf1e8a0de20a9f3beb9f989a985f511942bae6a921469d4d79e2030f8b3b509e306a032c08e940ac3036a4dbfef1298895f16329306528f5f810712e83574b1a3d54fe14fc42cc75fa245316d2ca1b07ffa3902ba5b4ab78fd2b2a459363671fc219fc39084e5613010001 \\xdce82a42ed0f6a5981c1ba2a9ec3894abeb8c92fa216050f4750724edb412db4616815ab6cdec554196e2e3c18d8905d3ffa30e5d456b7f5a85473ae737bc805 1661942441000000 1662547241000000 1725619241000000 1820227241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-39 \\x7dec919415e7f6730fd2b2ebe61f38dd1d026176486feea65320f0d9efb8d2457e86668456875fb18a1d643fb86b40ee840dbcdd006be40d824ca44fa2a00236 1 0 \\x000000010000000000800003c6a5398d67b49a30c32f4473dacb94af3255171c7d15af2516ff367f0c15a2bb996f126d8f8b2f7ac96929821ecf3f98de71eb79c2245364238ef57b895fcd992655ac5b4aeab502646bde7caa9c36e1c908c59096cfd2b647b74cbbe9d0cf0fb34e5c00264a4ca0c6688e8baeeec64a11a5396c5e77df3d9ad64782d08695d5010001 \\x50b0a67135d6c4f73ceb501b5f4225ac7886f57727556f92de7c5dc18cb0083785d03c255b6bc443357950829031148fbc8cdb6980a886848776f17f8ebfe800 1649852441000000 1650457241000000 1713529241000000 1808137241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-40 \\x7e84c4be615df09e1219535ed04a1f4b0a4a43a6d6948ed884b867553b010e7a984f27019ac617fd4d0973fcfa20aee28f83453ab12fbf4458303d78833f11cb 1 0 \\x000000010000000000800003e3d855987aa741ec0f137764328eddcd5f881aace4113f276eb3539c37b387b02efc18dee54b8928a14b30e9b2e38b08cb6faf55b52e23490d39e44a5db626f60934e637f15206be7d0a525719351e98b360759a3837f398414c3fcac0a62cfb2be7645fe7cb62a69a735e8903678dd82eaa311e0f340ad30a30c3e4e5d63a0d010001 \\xa6e4ffb2866f5a3ad71f456f03d00db1e0272602e70daeb56a3c531c5cd387867796b1c17811c993adb6dff8d49118ea46e5a275b9c681d9d80a14255ab78b08 1647434441000000 1648039241000000 1711111241000000 1805719241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-41 \\x82a8810e909a1a2d3d402ed8bf4bdbdf8d4b506ec293d078b3d8080bb27ba641cb1299615d93450e94b1c83e6b44429b88042d73959d641f2238161421a6b08c 1 0 \\x000000010000000000800003c8bfab8dcfe955857be5c70df88a17b33b4b9c99b89ddee91d3ccae78a345ccc6487db6d8403d68a149eba698e4c916b486aad5b703a41cdb4dac2f4db3ecfcd51a7412f40a46d1a10c24038cee373e19008d0c34961dc9e059c60c3ade22f2d036fa8b9121fae64d16c6f43f693f501b26221c999b687c4352837923e6cabeb010001 \\x61cfd17fb69474457af84cfbb2e3f5a0b947bbe21ce3f7bc7243fe1357fb89dda67bc29d438191d424d542494332696e1e242b58ee9e45d9d92b6339363a1a03 1650456941000000 1651061741000000 1714133741000000 1808741741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-42 \\x84c8175599e70870f7bc0c8660f88b6ec6e5018889a57602b2e54f28af5499ebaf7848fecc94952d93b852a03f04c5324144c5b3f0f0588f6a5a44582ab31cbf 1 0 \\x000000010000000000800003d18b1a2de9c6071ba6a9ecbd97096209f1d108d437935d59949f49109f344a80cdc1028a4ab2e8e18cf1e620bdf0a796be146147e42530db00ee6b5c490c44938861406cbcf6f7a1097d850cca72c0b2c6be2666d5b1be2b80d3c0dd795353b0f0381be6bc3b9752aa4f3dad19e2b651bbaeb99eca690a4acdb9597ba8820af9010001 \\xc936e0e8de0df0b939eb7e05e4dbd6cb9747f21b38783ebb20df3ea1ff765b72552a5324f9e096662f1c58e302355858fdc85df2c0e08c5b68e1139233c9d800 1647434441000000 1648039241000000 1711111241000000 1805719241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-43 \\x8648bcd680f742a967333c682e83630ca25f69bad1ea513c5e08130006eb74b1b7ecc551b6d033757f09aa56c390821a7bebdfa273702cef28ecd5d2acc57784 1 0 \\x000000010000000000800003b181b90ecdcc4c4bb8613a3784616e916b38665dbe38de69220a5ac1850e7c031bc518b2ffa89adaab797b57c53bb6f840dcbe89d7bf6f1fd399e3666e007f012927202006d9bdccafdacf72d5d39f6b2fd5128249da3503b79d3ef568a643ab005ad3a44b11f65d19ad091c78ab6d8917abed104f9f0d2a22f5f85f3516f05b010001 \\x31f39216476e7f6fde6cc7bef58324366dcd36915b2fac8143ae33f2195b8a5e3c399f011afcf1d556494ae69b61f2c0a8f26174d52c714b8bb97fbcb1363506 1657106441000000 1657711241000000 1720783241000000 1815391241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-44 \\x89f4827e986f50832b7ad1470859d12c5a08944d4988a7a08d1a34aa6532e3955ddf84a50cda8be4ed0e09fe9278ff9377c058710c0f5869c3bc039ff70b876c 1 0 \\x000000010000000000800003da2473e71e6dd094174b3f33d956082f02eca9943effe92c706e3812831e73ea431d94b8c9df571d3926fb7692e2237d37b8da0b08f1f589cb991c3449c1dee40fe9de9b84a22a67805fd91e9b8f4d0e5af267709bef5aced2fc0fba0f1591a4f68ccf728f865bfbd9d27fd4cd4e6c686becfee568dc588fa1a7ed1ac8290f49010001 \\x8bdab262bd0e22f27d3285e016b77f7dc2da270a60fd2b333bc7af7401b9d225501bec82112a7a84d373b6fec9746dbe455f047d8fb9c351f12dbe57b6b21b09 1668591941000000 1669196741000000 1732268741000000 1826876741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-45 \\x8a98a94ee1a6d0681c20b365fc5c26da75c22747c60fc8acbb7a64729503a1596f81ac6715ac5f49e5849fed68da3edd983a05d48b74e47fcf5d351bd9255cc4 1 0 \\x000000010000000000800003b8cc76c9774633763b6df10e364531b1863eccac02a9e59472fe8b13e493b93723f0d6244684daaf9628191abf9236e7fcf2f65cc79d6275fced1e9fde606d516e01abca4145838f55cb4be0b655929e91db1742991a1236509a8b64805b56a3e0d165e045194a46b3c536de0c2a96c18548adb3237766d7868470ea81d1fb4f010001 \\xbf296b5fd9dda3f431ed33de55d38056bee2517983e93bef05ad783c63f1dfb0a932b40964ae5c3242511d14608b693f1f3bf1999f30ea9549b6b68de5b8100b 1669800941000000 1670405741000000 1733477741000000 1828085741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-46 \\x92047d45c8ce22628feb77925d6133a55f7e8488c89634692b8ea0068cfc2a368c3fc2ca0e9ea364e227efda13aff7f910ee98fe7ff6dcdb7be49108708a17b8 1 0 \\x000000010000000000800003e30b3987cd8ac3efafdc36349d2bdd5208c685fa904384a9b76449550e87a158cf78ff6d2977945d39cac0bb233fed351571724f75a65cdec9a014d9dbdcfb6b972011fc0b3cd036bf05385da9537e54efe3910275dbb60a1720e5314f1aa323e6fc63a3321c186adcace9b3cccdceb078cdd49259c0b8dff4b8ba0efa9c63e1010001 \\xb767abb1560b481a35a1fbc8aa529e7f6351aa9a9abcb1c3ff74d19bccd38200de47669f72a8465cab7039e696896e8eece2b8951a63940cb95f830fb30c9f09 1663755941000000 1664360741000000 1727432741000000 1822040741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-47 \\x925cb1685dcaf286f33fb8196f46470d89e4544a5eff4c0578c78bab9608a45cc322c894932023c234343cf520fc19f25dbfde539d9c789931bc3128a091f020 1 0 \\x0000000100000000008000039a44fbd9161dc8dd422f0b44d4cb9dcc41475c8de46428106b69405b92b2fc044d84b3fef4991d6a182148ed3211839ab6cd61a9e63971b5915dfbcddadaf1868f2e5db12420a13dc8634aabffe0451674c0600a0187abb7c32180993214ebfccd48cdcb48f8b5b4c34bf966a196e140b30be13168706bb88afc95dc6802a069010001 \\xc4a3e0a4c678feec3f6adbb962582016da07f0b52354a609adc7b207c528290ba5f57f0d5b3a3a5c5ef84f339db67ef47c754944e9a8877312e6d18aba1b0102 1661337941000000 1661942741000000 1725014741000000 1819622741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-48 \\x96302c24a60c2de740c6c1d6beb7919636024e7c32322fae9eee711de281bae0c61dcc0b0a66c1ea68c416084be0027395291a87e60a017f1640a4e0ee065f25 1 0 \\x000000010000000000800003c73a33bf7b9857f588386691d1fe34c1678986f803f41060bcae1be6857eb163dad4170d8476566859f8c2ff08bb57486d6cc116450458c6e9f50af91e9afe5081e6421d5faa8b5ada5b4ae533d188aa05cb29e719d006e48bea79b6a616cd95cfdc7c5ec859e6b087864cf1e4aadbed4eefffd054718e4aee775f4311879fa7010001 \\xb933fc22cd9d453c0de25e447ff63838f465a5ddc8791cf688a6dbdcc32bfd397a0c9bba3da9e14b5cc0e9920591349940b7a21e5bf46e8d0e43ed0527d08b00 1666778441000000 1667383241000000 1730455241000000 1825063241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-49 \\x969ca7d14d0a765155605dfb43dfdd95aa9cdae7996f02ca29a0f62017bcddca28509394763d46df5b97b887d0a6aeeb10f27eb5590d2d14a8ea38e324638aa5 1 0 \\x000000010000000000800003abd1aec87afb80631494b521d5d7c5e618a66442fa1f871cc16e6cc4f4c4cad06817d7b43bd86524078d832f5de38fe4f426b498b569676923de8d0cb23b68d9653861a2715de240a720a50fb2920f0e30b2b03023a9a1dfbec0fc8f2959f16f7fef91db11ba12b97b67e11d7ba25d28a5af3d2852c8605cd7c8c88ab0f933c1010001 \\x8f73a227b383c89240e4b7f3b029200c0387296df021c3bf946944ded2b2079b28c54ff3a5b6e479e0d3a8ec9944c865909c427e3878fa44e175d513fd7c3609 1639575941000000 1640180741000000 1703252741000000 1797860741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-50 \\x971809a45288a05c224e3cfbdc16823ecc8ffd2aba0e64be4073da79398e59d625ba59e11a68e41534d296cf748af41ea7091c4c0cac58832dd0b59a37552281 1 0 \\x000000010000000000800003a5416f74e43fd08c76a69face3e6db7bf01dd2d2523fca7090759494c895bbf41d27f5744b29a3c44a9aa5fab87b4e640e0f2847812a7460ade05d8a5c031de25caa9e1918a869743177e66f90b83f98524d8534c5a3b9b9794d7f43d065e5fc34ade22cb9367ecfebaac060e64af3dfafc09ecdc2dfeba5cb767bdcbc734c3b010001 \\xf8d33a7e171f77bded0c65ca15f0669e4d6e9dd247a5e01148ce0f57d0854792ab887ee4007e335cb4bd165a3d4bf4a32dff15e2817c4b2a7a2e345d6001fb06 1646225441000000 1646830241000000 1709902241000000 1804510241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-51 \\x9778a0be73687e60842f76fa663282d11c9d021b5b46690f4bc49c38b1c991ccbaeffd99965b2197dc22ff3c20318c541ae0659896cb6cecb8078158889912ad 1 0 \\x000000010000000000800003a722981dc88fca9abe3d37b8c5bf7f0e97a434148824be9383ba95e0d74de402ff066fd7eddbe86e57c727e32ecda7ae59e461893ea4ce3b3c589c52329e148ecfb9b537712ccbe40e5a924d08846803dc69b217e889ac409de1d4b9dbece42faae66cbc3ae543ff79f636de150e00438b086ff497e4dddccb2f0127e654f071010001 \\xb17fad8adeceb98123e56eaf384a5ceecd1ea73e7315f98b0dbc80972b1186322aad64a2a076f624762233c26860376efafd4034cf1dc4d3ce7786027b7a1c06 1661942441000000 1662547241000000 1725619241000000 1820227241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-52 \\x9f941ce81d4681f1b7d4fcc43074ff84dcd6410138de5be5eb1ccf5e04cf91de01df88ae561048bb36293b08adcfb7bd6fb2eb09b80fa9cf45fc51b32791947a 1 0 \\x000000010000000000800003cfa23da329342448bef8efc9424d71a5c7af9dae9ab1152f9709580195866748bbdf0fcc1a516014556bca0e7e997bb65898526b5fc7cfeabdb0bdc97f7ae412407fd5b48bf7bd272ab8d339cc57bcb807b2a92d2885e841b0bb7f2ec4ebb095e3096253ab8c8cf08fbf5b150bac5a6a6d0f3a4ac8ebb515e6774f4c979e6d75010001 \\xa1cc08e7311a14539c718052b3060ca56c5426de6ac7d08dd01d0130062eb395ca28b3076457eb1fdd2521d3121d768eb1d9b66b93cf5b70ad0326d2ae562b08 1648643441000000 1649248241000000 1712320241000000 1806928241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-53 \\xa234f1ae7efd9d0c155bcb8fbe8ada74927e1093857d010276e91ce05c44d58e6a5a85583cd4a506caec3ae57f98631446ff11dcd863a844fd2c48b7e95ac79f 1 0 \\x000000010000000000800003ec898c88c72df1d1f7b307fe0a00d6d351581fecd68b71253ece4c1180a09385feef4ba31691b352a7034df0d881e9955f842e062edc60777f572eb4173ba8ae49a514b9281f16d80d84bbfc2415139233ec14864aaf601e16ebdb82b3706e43d4fb602bf531fe2f2d7c9b9f5aa508f3cbc388242ceb9cdf6f491c72b019e32b010001 \\x612e730c693834487324fd9f8ab5fd4b2cd186d034cec23dedeb7c5938ed675ba2874a41fe698a8fbe6f897c798e8004bb8e580638ac778ee8762a4d3e31ff05 1653479441000000 1654084241000000 1717156241000000 1811764241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-54 \\xa7e8ab3770cf49f3e3d4611eab4803d8cfeeecc3ea38f649605cff7e1b59fd896282240cc2d7d6173d09c9e6b09934c5cd0f5d29f19691781f9eace489498018 1 0 \\x000000010000000000800003dbc180103bcbab830057f9c63e2740c7079e92de21856781524b5b2b5bd118e2e4449058b47d724228d68d4cda473761668703f9ec711fa94c2e73fcfe594ce6360a080ed27f059206c1d657e4385315bb946f08fdc354f536f58ca6fb0807d0e3e9568c04b28d3069fc25d70ddbc8cf063630e1708fa6dd1976819c30236e0d010001 \\x03794386aad01b7ea15f5b3c9ac4c7a2bcdab697e1d6a364994e3346e4cfbfd5ebb71763d4c6a723b3cb440cb476b25ba9b9abc99164177793596c806b021a05 1652270441000000 1652875241000000 1715947241000000 1810555241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-55 \\xa9941504b144a6180a4458fa9b8f2f64f9f1ec2932f1a3e642fbf7b32cab7c3a79e3035b73d59ca935534bc7ebf4af5a90969aa0716d626245598f4a28341bae 1 0 \\x000000010000000000800003f566b40f6dae7e5e35c28d352bd4d8f54b4f30511c9c4a965321c27c7ef869c76626786de4fd19838cd065878766410e4db0c9b73d842d8f0dec2a66994cba6465c69b38cffb3438afddfadd1d0421e0072fffdbe1b69510a28f3963082aae5ee3996e924688816574f5134a595e96f509101c4e9c2a2e012bb873fb3a970d73010001 \\x6d043b029a8c3eb7e1c01e5a0784ac9f9bf794fa59ba27456bc657fb4e08e5503abf6c81a11d4c1f104f240c7b5fbc31fe84f2a52f57d5e79c435f7f41a96e0a 1658315441000000 1658920241000000 1721992241000000 1816600241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-56 \\xac0ca3a8118d4dd37625ab327ebb705faa6bc437116599d59705d4229c53074a3a9cfcfc0fd7bd056bb5fe98b917ca4b503cf9346911f29a5e87c63b597e6e2d 1 0 \\x000000010000000000800003c0312c16c61976db3cf7b3ef5d08b0c2d6a16c7fa3a0a445fa3447d46d2f4db0eff99a4e6e5b0fc081a3da3a593585b26c3280d59b89c2df08e9738a876eda5758d32785d10a61ecedadb39d52d414bc0e2f3adcaec57b1d6a495af799f7ff049739ae943a1af4cc8b1ea3d02944f345a0e6654cba4ed62e688e06677960ef61010001 \\xf08a6955c37a4feed1f865920b9dcc9019201efa7d23bcdd58fd0e109ff624ea38e0dc591a97a69723eef5a1494c30156d30cc4282c34ba42c661d41ded20905 1646225441000000 1646830241000000 1709902241000000 1804510241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-57 \\xae1052ac88a4f29460df2f7eed5430a02fac27e4dcff51a9e644bb6578ed6ded040b8067c06b244c884bb4cf3d9f8cccb510c88818b69b01863a03c89fefb2ad 1 0 \\x000000010000000000800003c18eef244744d33f6a03598cb4ab8befde8171c9c99f5614090e0045cd2bba79bddec7da32b5fb2b78aeb6b209359a43590916489aaaf62f0c2ced8258d15229669cbc033946a7bfedaa57fb8e65688dac5156513b94a9a61c72bbcc6e275f721eac035a2ca2633f9031149b164ea1157a7326c95f94ca54b6e0dcaa5d6816c9010001 \\xe565ba412a0190ff6fa584a7e30ace5438c4ff7d4f42f005a670e2d8166489f99de30627dbb47d6b8a08d9fb048f9c6dda9d57d99172493572b12b0a4edcc80d 1654688441000000 1655293241000000 1718365241000000 1812973241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-58 \\xae788b576d29800b4e5e649cb1268eedd93fb42b42b68ad6098734ff5ff334eb735959fed87a45e9cf586549e21e4b2e776fd76c9a64e47a9b29d81d51da3d9f 1 0 \\x000000010000000000800003f11796ec4610703084141cec9e7cf9466e93aff2b91d534a04136ff296d1b7bfbce1b00d7114326d0e65385d8870e32d41b60a9633904d55ec23178b9917d4753156b0870f7f6133a67a9223cf10d4059a766aa66f2b81968acfbcb1e4859fb44b213fb723095b781b95688b92d3da8aba2efc8b7c71b4d1352ed8c8a2cd0169010001 \\xf7fb2e6f562cb2bc89695238d3b4709ba2f028b4e68b722983d4302df8c1b10a562a7352d977c81e97e4bb7b7c9b6c05c257351d3736cde02ca1e9150e415c05 1649247941000000 1649852741000000 1712924741000000 1807532741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-59 \\xb15ccbd9ec772093d8717c1190ef314c1f2551bba9939bf4c78f5da6881ffcb1783e80341b2c9690fea18510a1a98909773ff965eb212ac2f34513d411292c24 1 0 \\x000000010000000000800003b7a13e9f7b16e826a02e6c615fd933ce182738412084f39efc56018fb1a684eaa7f908079b467d2185709f8f0945a884b54160c1c1931c9313cf95fa6d898db1c5d11d0f3203b031ef016741ef1a40ff025dcdea45875dadd20782cc6cad7cf05122f50d93718cc6be64d9a56935efa80916e89c028c05c0c4c1130fc4369c8d010001 \\xa4c94350d3baad307f3a8fa53bc193e00463274abe31fb3f9c3aa94fe791cf42713f64dea039ade82c962cacb471425fa33abac1863ead3c10c0ff5120da4006 1667382941000000 1667987741000000 1731059741000000 1825667741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-60 \\xb29cc975856835a2e24a9a2404f65bba118eb17c1be07adb6df5357c22c5980725dadc4da0c4428b1cccbc8f6a21dfec59654e4445eb897ae35e159d45315f22 1 0 \\x000000010000000000800003d9a99991a7830c63e24324ed6bae521fe941be767bbe1fce01233cc93d8bd550eec5e3dffc2b7f99945c8dd2ee33b6d85e30a1e7da640d7fd699946bb48109897b6ab4112aee5aaf265ed156a808974deabc4c100296c70445f010d0d6a0159fb79cdca5a631836d708b12ae409734216b2054d28395a7c01b7a9f14de34d8b1010001 \\x275d440d9b5c947670a4e4c8965cd2f78d3b67a0aa5f7eb5ec5311b16ba364ee12a22f5d0445e5abc2f30ef55bcb9d9f712a3474f5312274096ccfa85cc2b205 1669800941000000 1670405741000000 1733477741000000 1828085741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-61 \\xb2a43a8110ae9584e124e655370867793be1758bd776b5b9b38f23b857c24c5c0ccac641c592490aab1cd42c01eed30faa0753963a5cec5bbafd655ec9ba261e 1 0 \\x000000010000000000800003cdb07061f4dc5aff066cb644d6452c52f9bfa7990b2bb973bbf1e86603b4addb6e6e91cf522a4cbb32b13ed3e460570642ba8ab65e875c69da80d064c94271dbf6cf0ab850e0c35f1358aff848dc547b61473b08f35c25c69cba797a9638f19416d01b18706a31c682317781f50fde08411d43326613e15654612839f3208347010001 \\xe2bffc314f37949938ad7004cd27b6b10574301c89b9c744e445e3e70d32b01781f0e6808084daa4c60f9ff1d19c2be5bda9145dba79473d3b6476c878b36e0e 1647434441000000 1648039241000000 1711111241000000 1805719241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-62 \\xb3942fe3daafdd7eabc4b1f9f0a4d1d3ca83a69e27cb809a54dcbcb24c3f01fb92eaa70da6353bb3c868aa3f2027b587ec268ed9c0a7c7e81a24e3de9908f4f7 1 0 \\x000000010000000000800003aa8d4755f56093a1a49a21d3a9d46542fa7de3ba273a731fe13d9f946e905f5ee5c367c04cb21d92013b144c860bccf5812552231916a625dd18d5990d6e7a9efbc3b19863f6a39efc5fe0e4fcc0380d63d5c2216054e36b29d430918b8a2eb4bb06931cba1ff0983520c14567740a226b411cc5112e71156b529d83d60118dd010001 \\x63793b5153cf6f5848cf206457e10ab9840b67e7aa42018cb7018edd4dcb025ffb9da1058fbe3fb4431cbd00f1c00f71ec5af2968c850e49e616ccb8f34a680f 1638971441000000 1639576241000000 1702648241000000 1797256241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-63 \\xb8c82d783e3f21a3ea60b5226872b69102654171429885a519bb65a4950883f9fff81db616e5606caacbcfce39ac38c657960adac9fa01d72b7ae0b1f9e09ca3 1 0 \\x000000010000000000800003c3997c356bed6f8781ae6620f8cafce11d5e23e92e76e532ad4f5e46ef17a78e132452403569ac5d71571d2469d512f86bc594f3b9840670920b9836c6782f2d577a2ce6778eebf61433ed99b9fcec72c9d10a99daa4d8fdd85c9bec989930a92d47d7ad4720d89fc41d1ea9112fbd494a6001eb9a8de9d62217dfb274da2811010001 \\xb8b69bc2109190719e87f59b37a7326b314ecc44a1cb2122bd6ce7b6edd0cf9c7c0135c226b2d5a0d8327171d1e779888be7194a09405b608887dcf14f680909 1654083941000000 1654688741000000 1717760741000000 1812368741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-64 \\xb83cd9d7b8cfd7b78de8fdf82b2b1c82e1b7e46999f59b07e497123867988069243af04f36e9cb031ce6f706924ae8a486db759303053249b7d5503e03089007 1 0 \\x000000010000000000800003daf83fcb37974eead58568ede1f992b78ec857ba05dc8eb75019669600d68677ef76b771ad567e9fd224695487ac7bf045288062a897033eda69697255741dad35484e68a667b69ab409b74d347ff35f298f6166d91fc2eff8aaf11a0dc2e770ef2988bfec19014f3f740f32c87dfede3b25f699cfa7549f0b64f59302ec07e9010001 \\xfe856f40cf563dfee122827fff3d71adebed6c8c82bf46cc72731ece0b673c98d3a709c40543e98880aa3593d26d45ce25c90e23cfab4b8ccfd22e3c1d348500 1644411941000000 1645016741000000 1708088741000000 1802696741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-65 \\xb9c0b4cbf345aa83e9eb295a200080beec96d047b238d5c478a65fe7eca92a4ef69c3ebbec2f05bbc6c5b2456a23b0307e6561b65ef05ce1f22c262821ebb34b 1 0 \\x000000010000000000800003d0e66d80fea717f4e1da1bbb862a378eb7fd1b934e9f194035f82ea21b09ea9977691f9b0f6bd8769abbf401144019bef6af2da3ea873b70a182a63c6230a549d7226f6663f6fdec919cea9c3ee9457e8bb57939eadcb6571c9ee028f458902402697a4194b8c1f5c5715212c493466e02f776fa15cba1391792d50c470eda63010001 \\x11ad56f01f019349edab7462a111d9ebbd7b7b6d1ba0e6f471009506226966178d1c15b3a353514ae199a1b7d5b5e3f6d9bb1efc241d34163f6088e3c3400f0f 1662546941000000 1663151741000000 1726223741000000 1820831741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-66 \\xb94418207c5af9a742dbc451a07e66cc9d0202a01bb78e61974bd7812385a6022794d87f41f5ecb946853dd16801431b9a711e679b88a97b968fc1f66a854b5a 1 0 \\x000000010000000000800003c14be6d00da2bfaba48fd12bbeaffdf321009d9ad309720b3dcde4218769dc7a4e375e9f218fac9cd7f8e864f14fc240c6d7bea1c9f58295bf26bca95c8955227fd3e4789bc9c010c10a289f61f8bc89c2e3ec66550ee006ac18248970165a4c51ccd641b427d2cd8a8a6367b1f14b0fc8b7a0622006c8724881596db552f241010001 \\x64dcfadd5df49500bada833ea42c5eee4158ed7cc6712ef64f0416cd0afb562bac250078eb621933dbf02d20abb199450fd7e6b6e20f5812749358d15336540c 1663755941000000 1664360741000000 1727432741000000 1822040741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-67 \\xba1c6a80427d53a0bd80f0db9fa40349f7f1efd7ad1cb50eb7af8a57525f542647dacb822007f89304d166c5f4d733df032432c78a5963a7a6e00363a97ee746 1 0 \\x000000010000000000800003a80cff348915f8cd2a57b44e640636143d62ea571c41077efdb6bd2c296838424f11d3255afedb60321e79a0f71ceb8854039f9fcf3e952f8ada796664bf08439d49ab263348d3053c456acbe88884718331e14eeb59db82101401cab4024b59fd80c5a260f4f85816068c86de74353e20e646bdb5ef5a7db271bd8c7b39b483010001 \\x5cf0c3c498a52958a6ec438401d1b19a2a0dae5d2a218d9a5a160b1dcff8fdbe7c0ab3c0624ecab6d719616435464cf894368be1f6765aee3291c45451a63201 1640180441000000 1640785241000000 1703857241000000 1798465241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-68 \\xbcc87d6df3dc5a814c9f71094a0469f05f33911e1b67fea3ad24034bcb1770e0886a02305bfc29d853c11c7db46cc885b07067445fec06fa31a30b2451a8b774 1 0 \\x000000010000000000800003cf69afd89f1401e54eea9b7663c30e0f685f74f39cff1d4648833eb5b409bafdd94c18fca1aa8e86c4a8818352e09b37070cd3f691ab1b153815c02952578f7e9fe1051faa2cfc4321d472d4c5b5ac0c8f84198d834625417d997c2e2b8dc458e88f20f06187c5b7372ca9232ff2e0d9795483d307faf6bddc7d925726537cb9010001 \\xbd0fe3656ff362801d7c37ffe5d57e41ec8a50ae6584726a41c058ba688b351fadb19b7e3510e5699dc64803df74195acbe35e4df14da9a116f1b95100d5b606 1657710941000000 1658315741000000 1721387741000000 1815995741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-69 \\xc0e4ddf0453337c6ce13ccdc8c64d1a711bf02ff0125dcf301d456849f4cc36a4a651d7d579cfb2c5318dae219c94bbb0d7d186db5664c9c3dba668501dae03d 1 0 \\x000000010000000000800003bd9714b307e25318dc1da6c15057c274722d878bd28d7d7c5326d8648f91d3c1c8a7cd5a33591137f7f215b57c44acefd058d8420d4568bec5b363fd5786741d28ab655f32dbcc4bfaf6617059adb67578f827da76ae3de4fc7314f238ff4ebf053945fe15ca7be050fad89d093a82eb180e9fbca10f87899a9ba1384bd85663010001 \\x0abfee46ec7a650d137472d5f48c18fd95e625d49f29e079b827592097830dcc67652572517fefc708fc99b2582e71c969992512eacced81624fa50dbebc5d0e 1648038941000000 1648643741000000 1711715741000000 1806323741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-70 \\xc380c9065694ae2b47013913fb30c6ff5a31752b59cd9b9a8679f937aeea7008ceb8eabb6a4859aeae80cfc69f0e0d288797ea261471347ceaf73bc6b7ab0e2f 1 0 \\x000000010000000000800003d521c2ecde98f8d27c213a3d64e720f0e9c54f9232e32c0cfc96ce5843839c3e68f8889a053d7570ec3fddc98b1d0b3666c39521671b06a7d915f46a7cce96566eb1683ce8b77132aef53a8fcca4c11f9b661ae3f1ee86b6a8350e190d6a139f7ba9887ea48ee5ef4d4ed9c8ca95383c7aa1f3a90a8a5300d78d29a50f2fb895010001 \\xe0e12ac22a673ba040d99858aa9140a27d6d1aed89b9c0e2220d45a4bf385041b507f36bccb93fee836cc8328d1831b2dc12db20aa7d9bc5a84df560bab94d0c 1643807441000000 1644412241000000 1707484241000000 1802092241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-71 \\xc4e4697a3c6ea6c22ac553b2387f4868d049f2222f9e0a88f9b07fce58c436ec134e137091fa1db5b09ae381f82936ed20121dea87335c90892f3c162b8840c2 1 0 \\x000000010000000000800003e6215bc302fd576bc33cbf2f8bdfdca548530e18a854969290c13060e21fa1ba50e7e000e0afab0c5a78eaa6b5173e82e281ced481be98f526e43c4f90fbf0d526404c5faf6548869497997980d1e48c733358c4660a44ee9f8dba3b274ff90f82fa215ac33bd483b681fb409b3e3ba8e07a1287bc4863ad4ea3ca0cf170aefb010001 \\xcc484a6fb4f0d53b4b0c871c8a1b86301eeb224d79664d4f6abd9b1c8353174c5c2726c396bffd8323900daf98504d522820da026e27407113a1b74da868a004 1652270441000000 1652875241000000 1715947241000000 1810555241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-72 \\xc7a84b73b1e5b2fcbc119f91b8401754422ae8f54283bd849858019a278857e4fe38ca0d5ab793266193bb659af74faee50fe23665d041551cc7132c2f65cc75 1 0 \\x000000010000000000800003954fba3d3c0e6afe49da4e499398d3a7ccb6c901b0deac3fdb8a7a29968bffd24c2f5b305d2816e58a3c4fbe765945613805861df94c149bcc619ca779461bfac8c792bee277ea9f23b0f989de7d00a5a1aa2d9d500ed08d98bed0f088628cac1c3f2bc4759b51d3c528deef6d2285403636615b54f4861b55f8185b1b5656fd010001 \\xca68cb275b3505d7396e9bc7f09a8dfd7e9ff0fc9067f03193d1195f7daada024bbe9f5ccd9d054dd6757dd0cb79e052a88d158f3fb804a0fab60cb3e029b702 1640784941000000 1641389741000000 1704461741000000 1799069741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-73 \\xc730d11371e461ea1afba582ab3eb7cd27a0b101e83b2e6b30216b982fa48d7d1e55bf41cbff54b1825136c10925e9e16ad35711fe74de27caf1c691e5fe2ae2 1 0 \\x000000010000000000800003bb6e661900a10a92c9b22578af981de13dfffa58660c650b771e4ac6ce06802b5cc45550c9f6fc2fbc6af3cc0a94bcec7bb796d5176613214d9b5f1864e379c09a115586e55628310a6bb41f8e19d0805bcecd9765b3fcd3c229776fc5a5936a116a0d6e1755e9dedde537297bdbe8080ccb096198028f34ba7e5a8e7935dd41010001 \\x1bdbd158d50e21ce6c6e1f0ea0b22b2d2b6c86c9cb27077e12c0e0e521cc3922294ca71c8fdea719409280b61dceada9808e671ecb67363c798fd021bb8df800 1646225441000000 1646830241000000 1709902241000000 1804510241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-74 \\xca4487b3984da978213073872d55bad6f2879bad4745b85abf519616ddaceff838b7c025d3bdd8b21f05fc2ebfc1bd4653e0b7832dc24ad59ac139723092927b 1 0 \\x000000010000000000800003da89188ef110b1ee2d0b76a521e17f60e91d62094c9d1d7ea0c7678943f1885d057b284023f81e214561420898b8809ed69ad79448c96f1570923e2532810691cb678a6a14096ede7d317ea91d244c6db19e449fcd58e4ba5ce6a0e99bacdf1fa158ecfdc7d4698b2b1847dee0c5ba19620998fe74f55832ed6c9b89ecffe37d010001 \\xe0231390004381d18f433242010b27d96709563f1f1871bfafb70ff89df8446502301385bab4eab1323ae60627500c33e18579bc749196be330209dc32d4710d 1643202941000000 1643807741000000 1706879741000000 1801487741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-75 \\xcd246dceb090b8c22a547c6ec5a7eac9fd72679a311b8d7023cd7f5f87460b09c2e6941359fd1059c704a281f01d99ce0dc6fa958223bda71debdaab588383cf 1 0 \\x000000010000000000800003e72da8b937602451fcc6e80160dcf764fed47937063d873d7d072ef0486de67a19a6f16691e4f988de5fa7deb8e14927aa846e5f518a4b81ca8ae0f02167997caf9863b5048cac185a15e29202b8800b8d9ece343fd701cecea88f9b609396abdb972954039da19e96a416c202ffeb65382135149546cd1f21cba75b4e8beced010001 \\xa2fde9728a35ab1ff7a2be65d6f47e59fbdeefdf901e2d212f206efcf403d34ee63818466fe7ab8eca1a06b0c0750fbb113fd058cc95771dbdd45cc26d05d304 1660128941000000 1660733741000000 1723805741000000 1818413741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-76 \\xcec0faa2fa0c7ba85e442e5b4bd42b7f64c30ecf96efa3af0edc464d718d86be69958f47861cc639f28440252ecd67cb2c7adc6e7b273aef7b09a4ba2b454cfc 1 0 \\x000000010000000000800003c4e4959caeac760a3036929628a728345e9db5e7104e8fcb35417c86f0f127d13568b5378351bfb2909354d1d4a716c7ee86ba38ea20f96089a0bafaa33f64c550e9a55c37e5f5bee43a9d6db5a38702f2ff05e11f24b313f4abd7bcbc0b33aaaa6af21c115b03fad2dcfe72a949746dfc2559a59772f3dd4ac3f394cde82219010001 \\xaf50194318877a76a37b95655e3b8d08ae2931f3f6ec27f14e46691698c3544da5a430fad8ce8c476c33597a3a8e752d3353d1a0c45242d33b3f411daf8b0c0d 1664964941000000 1665569741000000 1728641741000000 1823249741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-77 \\xcff0efb91aa741deee49ffd5fd990ff38a16e26f176df684b4861f218e497702f5b9fdca357aaf8f70af93b69c144fd6b24f8d2278cff1d35565ce1c4eec7091 1 0 \\x000000010000000000800003f2184d6795e8cbc406ce321f99bf4596b40c6fb9abc32d7fd16788e9b6714474631f04b7b0dabeaa975bd758118d0210d46626eeca706333e1b7d8b0786ad26dd0ca59201ddbd4b60c13f2900d1fd98bc7dd3c6f2bab609ed792b85e7e5e12402e13913d576a58de913a5cba7899c86f6d2eaebdd9751af40a752f6189fecd57010001 \\x70a79e20e7117999f13340a20c7b327d41214b96064fb5df2cb7da98534b2b9c16ca6b95849027ea1f94fc73035f71e0df41e59093ae32ff63a74b5a4fcc300e 1665569441000000 1666174241000000 1729246241000000 1823854241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-78 \\xd01084de3210284f6aaa2925067a79776e91e47dd22f420b2a8fa9e6387fe6c34d0533aa8e28620fa67f8624ba7330af964440a66b9850ab66923cb34580f611 1 0 \\x000000010000000000800003bbf909b58f4c4f2d6addd8a89aff9bacc3b169007653023cb06ac4320e979d34a26e07fa7daabce601d370d35cd50943530cd3f8a13158ce40c572e1916bfc064890b80e599704396ec1e6946038032445121e2f0d572446a5742ea45cd8945c4ffb3a3dfb1a8103030191cbe457d10a43cb0acb0f25c31ff890225d9bf49829010001 \\x7788bdfb29ac30fa6fb3c61f4f6b5bc76341df375f9163bbcf7019cb6c781dd584dfcc62ce5ce067a86c3c67aa71bfd01f8104a1f1619ab242d1c871dfbed404 1648643441000000 1649248241000000 1712320241000000 1806928241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-79 \\xd1e829693d38de055198491bd474e14533c442e77fc5d3f9fe80699110f98fc874d991a0e7261c2619d369d96f156716ee2304911af9db9fc9ec9d8fdd045c02 1 0 \\x000000010000000000800003ba5a106cf67700875abeaec9be2a20a9bc74178ff6715a30f89d073b01729de1667ad2b0d36fcf844e4de231867bf9eb582db13e0e06a50636967d5e68d9eea0571f1d0fa301d90339adfd1b7318922465c01db351c2e86ce50ce51b2222ad692fce6fb15575d64ad5406ed95d84079fbf7b9594808e00c6bc1d5c0304b0854b010001 \\x9ba8f589e253d94c832c6e9f6e108e9fdd950ab7bc0ce21c2b6621b97ec4e48cf3a1b37afdc8b4bfa435d2e4c9438cee894e99304432879067dffc324106180c 1662546941000000 1663151741000000 1726223741000000 1820831741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-80 \\xd26ca175812822a5f55ce9ea27aff45e0b86d8efe74ff688651d8dafc96e8fc7445dbc64c1a1af2671d83a84efac1bd5df32c5af17357637eebe7f82ff985923 1 0 \\x000000010000000000800003f0b2c1be391209d37b7cf075db500082bd8cb747eebe79ca7c79913034ba90074a412148dc8e57e77e18083928d55b601343925c77b4c1d0686fb78cae9b89cd6154e6f64a20a9ac1a6cc0d154819721ace8ac4765b3d708f283be2b1b344db0e4bffef2bf1607c411788aeb45a9e070e69845c5b0e5e4a25f397090b9dab1c3010001 \\x031b204b55ba72b1f21f4258ef5141845f2cec036bd0142abdc13d7f87970d5f5993aa03952210aa78fd265789537098f7dc72a0bb24d68f2e9583160c103403 1654083941000000 1654688741000000 1717760741000000 1812368741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-81 \\xd4f40b76aa7c355e7c823084a18ce8054b048e54ff0d2d3650810a6445f16b4130a4139ba7ef753dcc00d787831666e314ea2a3debed52edcb460bc12750cffe 1 0 \\x000000010000000000800003b680d6e966992bf62ce97c3f88e31771bbea6acd77a8121123ca25197f5c04141d066127dc648fb15be3968c2f5e798916ebe2177061aed72bd601320c04bcccf4ff60af69626ea95f61aafd20bcc11bc95bcd6996e3cd153a1e2d1a9e6612f59dd20632a9de670f07b551d128a4c6f6ff14e221bd13e0074cd822f5e928ed05010001 \\xbfa8731a1577c22564051e57bf756402d3ee44759b54d3fe098a0c0e22be18260bcc0b531af35b7f1afe18c5f26438a49cce230a01820a31b9e2c8cc28d4ec07 1648038941000000 1648643741000000 1711715741000000 1806323741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-82 \\xd9c86355a1bc2657aab2f0db2d55a1142f6dc5cd54dbf067b4f4dab849b1cc6ae0ff63a19df3fcfe68bec62212b2c561930bdc81d649f5122d09bf39706f4ee4 1 0 \\x000000010000000000800003a01539ae822944c6b94276ff3306392ae4d21439d02d0adda53e10f3354666d16193a703ca630754b70afebe6300be7917fbaec8aef8e31a4ee8a1324bf22380a44617cf302d85065a8f48e6eafea877be6b5f9bb334d4bea3b1714904040c5ee33570de4a126239ac76fbb76b6c11d558844fb7a5cc7648e213e202a2f726ab010001 \\xa67ef5aedee70770e5c5c2e6c9d9951c0aebfc26aa76ae5ee084d63c9b8410e491a0f7b13b1d03a4b68ed613835a59850fac988cecc4003438d1353af30cdd06 1652874941000000 1653479741000000 1716551741000000 1811159741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-83 \\xdd441f527b37c9957db1229da8abc0de7114209d16473e8509aab28378c35a77a82f4aa991e82ad3181d971ac9002d001f518d00f31188d728cc8becc7b715f2 1 0 \\x000000010000000000800003b904483a6a9586905eb8201eed60691213268ed148f19dabe7217a5782faf397e6517c7d320ad9419f5b37d36c2f1093d627f31c14842c1d62fb941e2c487068c67769a434e79742050574529025ea554e9bbdabbb1e3963e0408a74a4f79706635b7dfa6c9ec0428ccb9e715caf116a168247680760b82b053e41beb28f67b7010001 \\xbfa329a5ee4a218e57b10415286deab71ddafd52f9a79d79a3917b2903b242331b0306d64c0043f2bf96d2a8482d4ef2b41d62dcd2aee07eba0049fd1806ce04 1644411941000000 1645016741000000 1708088741000000 1802696741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-84 \\xde50e3f4d2330f94498f6ab7111ceb5537af9fbb978476e08913c880e7d8b8fa597fa2147653a6384c6e3a17a012fb058d9744cfa0a55bc799c8cc9a90ece4ac 1 0 \\x000000010000000000800003c7e563a598788ba2f143612a8d7a68d744e7f5ba8918f29ff712b220df8a4a9cd8a34d4900624198ba885b469c1db278ad3359474571a66a2db62e33046c5ad5e8e3a231ec9c20cc4c7a44069848c75431aa48dda0208092c84505e42cbc03b9a353ddb4bf7c26b741a37401c8a600ae3fb6aee2321b189de02a5e61d21cfc8b010001 \\xd9682dacd3f1656bfa469cfd25a116b28ee4b35aa42e6ab55696c5a580db0b2023a513942ff65c900101762d9168c56dcac50b40de23b5a708175fb17ae4b608 1650456941000000 1651061741000000 1714133741000000 1808741741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-85 \\xe1e87e57d5935597391be0763c5938700eb660a684704ef26111ea51f34a98420403b3a06deec4314771726ce46c49976dfadae92f507213cd11fef1b10ad0af 1 0 \\x000000010000000000800003af4de3665fb8485269df71c49473cc1953a26fe58ace90cf2fae309e55610ad7c700ac5b49e9bbbca1cebdd9acd38ecd8c0fa5beadbdffaa2cb48bc63de6ac02b56dbe91bc0085c1108098f75c46ef60f2e2eaed6f0f3e53de5d1ad930da861936bf5f21d430ea11f6e09d1ed5a86a4c48a324364bef1240a59d99234b3eba07010001 \\x1bf3ef71502587759cd7996c5544797597a7713e23ace29d8393630d1503ad3464aff239716e1f8cf4df23ad2743b96866b71d40ae16048fa7bd1109e6866305 1649247941000000 1649852741000000 1712924741000000 1807532741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-86 \\xe354e4d32d40693e33be965ead242aba1c35215f98f44cf30a4db8b1f4ed31aa8916f4a250e8e1a2615707554ffd053108ed7c1e9c8117ca86a628fd6ceaf079 1 0 \\x000000010000000000800003e9411b31e89babe5bf9574aeccaace6c5f627491268a7099773dfda32081efdfd6e41a5158a3f79f8f1b8bdb1eae54ad587227b119a2eab86de1dd739af760e757a63cce49acf0f6fe4f96c625ad4f3b1e2ba90482bc28ab1beb027762666f98670e01733232bedf0cab4d22a23364013b897d3f4c7296d5e151f02c54f78e65010001 \\xe47b7001c907f2086c25c1f10d668a5fdfc57177665dea4f09887d9e5b2c349783bb7ce6b7b452b5895db850ae7953e324fec316964791b3d5dbd5524e95e708 1654083941000000 1654688741000000 1717760741000000 1812368741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-87 \\xe42c66f3f7d610b3aeb7066e95212cba6fd66bcb3c9056d36d8cdf5707776d92722980101298e139217a2c1ea63150325a86c52409f112bce75b8e87c85e7c76 1 0 \\x000000010000000000800003c4b06056d71228a0c3e1e3dc850ed0c53f6c58e4fd48e366bae8288601934ddfb51dd6ff0e0119e500b7b483b6526b099611698e24c619c033ffdd40fa28d08e77b03fa6c5f8f344221cfe1a1f9612e95c9a16346f982394e0f783d05438c8e88a5ee997298e27e60bc64f7e9058577e1d25480963efe2e154a37a919056a7d7010001 \\x0991f7390fa79215ff4390c84e3358246bb4de9fc452f0c3349e605081d5e0265f690f608fb9dad83cb6cde0418cd708dc6639d8969f97ca42d511447e66e907 1666778441000000 1667383241000000 1730455241000000 1825063241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-88 \\xe7fcc17d0aa6fd85925280e7fb3a9a9b3a6a5e20a6e5ff7ac53d20df1c33c99403669daee8ab8f7249439b64cd516449a64860e2a153f1cc53a03768746e1671 1 0 \\x000000010000000000800003b414dbe1225834750f4c11fe0d278dacb3aabbe448a5226cc5ff1ad2252615467823b6f645b1e5a8d8b8e01680bfdf3b1b2ce4799b4ec9ff5676d0913fbb3b7098e914c4c437b31aee0fe15b4894dc63436f9aead5ba8588779ee9253f3e2e7d43a4148a3c105d14e938db45639fa70eabb1a6067bd1dfa3ddd26d68da5f656f010001 \\x9f00b773ae31e90003f60fd9428e764b7d457f6ddd6efe74b22ee6917ebfdf7bcfa2ac13cf3913560e90f58bfbdbe6ad284bf22574d6b0fdd109d2d5878d9001 1666778441000000 1667383241000000 1730455241000000 1825063241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-89 \\xe924a22a0fe1165deac19bf8913001d3832422309c9e2faa707e4a5ebdcf13e21407988166474cc9840a6daa072f18123ed96554d34e1217a54f782f02cbf0b1 1 0 \\x000000010000000000800003be3baa5ef5123269365531253bf3d753b2e40a3e348fd2dae52125e06c75fe6e83e0389e5b47bf6f14d6a27c4a0c69054c691b23449506ca927e6fd7b8300a5dde3b1b8486a6230f73639be252f15d094816c5feb1bb3419e2c40d72d51afdad7a0b41b60095ea1072cf5e6028bab7864e13a6938f2b56a8efb620d1025cfb61010001 \\x5f9eaf2dea7898fa57b325117b7e158847932391db48344e81b4b8d1e740539e041f49a61b062c5241e0bd90cad1cf1b4e4cc4352ad4c55a579d7b8ff726fd05 1665569441000000 1666174241000000 1729246241000000 1823854241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-90 \\xed302eb138dc210d128ccc0cd10f7a511c2edc17b7c84e2bc0e6f421730be21394dd958b16e5096a80811192826628c139e61a3de3a094f5ca3c6ab5dcbe3bcf 1 0 \\x000000010000000000800003a4d681d5021b06bf2590ee5f7f629e7ca10dbfa4c87ff89036f1b709c9711a336e553317e09cdfd53ca3fb1b808ec6d73b62cebf10158d766a8c14fac240123b1593cf8edec16a2649f6204de504ef3919aca28e8364f1896bae08c5dbd9ad4bcf29385c78e0fd3696143deacef0f24db69f1160278b7c3c1c798a798bb0ef4d010001 \\xec8dad43233b87298745c9f5fce5a0759b3e9e51a43249b319fcef24b5b04f88146eca0de47460ff32b21fa222a4665f2b1347cd9c4c1d44caf66a2dc6bed20a 1643807441000000 1644412241000000 1707484241000000 1802092241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-91 \\xf0a008a5992ed6dfcb741acad1463c7ba16d29258840e75b96857250ee95f9a493b48ebe2cb59f17ed8393577708ebeaeb599c0f32e72e15ae45ff2cb6b02522 1 0 \\x000000010000000000800003cde2e68abdf46ae611d5a3dca5f09278570b90c3e3ecbe57691d96345b33a55f34b74c41c275574f4939fa6a80c4b2e1cdf9c1ca49ab273dec6cb2d445eadb83a347554adebd087802b599ad3a8aaeaf8cf78679748c1bcfbc656c75b7a3ce889744af16eeea57b914469ca6ef253fce7a1c4fb83ed9babe209efc878224b5b5010001 \\x11b106946ecb3e454af87bbab4891ef524fef097685a4a2ba0f4f3102377af10ee0218a8d15f9640d9cd294bedbc87a8939a4d6e53b04438783b3efd607cc20c 1661942441000000 1662547241000000 1725619241000000 1820227241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-92 \\xf00cdafd2dc9295c36998ca6b5b2bc23c1219508c8cf5b26f4c2fed44db51d178e8cf88518172df9c60d8ca868c5b401649059fcffe7811d0104962b6411622f 1 0 \\x000000010000000000800003c146c0f2f7753bcaaafa9f17c053bedfda603f0d67eaf31926f65b708c108402b63d6bd15d864530c9da7f110eb9cb13d63ce18d90683b19a46104794c70e553d834ad8d43f0e9dbdfc512e57bdb447fb16a3ab965a489290b066993e7b74563cc3a31aa88cd9731686b2976f182fc873a1292e63dfbece0f1a58475c87a7a5f010001 \\x33cc2911d55fd45555e78fc6aaeac367b52ceaf9ca4031125300ecce9febc775d982dca1bc606001b7a0b8dcf309ba53f694d431ca998ea8231017cc656e1e0a 1638366941000000 1638971741000000 1702043741000000 1796651741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-93 \\xf17491fbf5530f616a4d1c81d65e74762f26593164ad78bf4aebb998e914d34ad78566a9091fd4332395189ed250846cf30e0cd06fbc482f1cb9c2f09fee999c 1 0 \\x000000010000000000800003d5406f3ce52783e48b46b45c1a99c90e2c58ddcef17136034c1565652d36141ca1b55f18ac7540fffba638afabac9adfaab814e7cc5e295e431f321a645bc41b969739d1830f4c7c1a4564aaf1ff6d3a9ab72a8aed0ae4fdd010dc58da9fcd45f9561583122bb1a1553ddec1e040bba59aaa4516a5b96621ef27240b7a12caa7010001 \\x3ae80f20c5f4377897a111b0ff7219133300f510687e940b64ac3646bf5e94a00c2f2244848a0e2ee9f658c299f8f49a0fc56922b44dd947c28c0c29b9834801 1638366941000000 1638971741000000 1702043741000000 1796651741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-94 \\xf2043f2f0927766e0855efaa75f114f284961bff6488c1a1f8aa76a4e9af8116cfc728aa33801dac995a77fa012fb4fb5ba2e587257d902e29e2d6b76584ea79 1 0 \\x000000010000000000800003e6e64d6bfb29cb82fa1d6eb480095b3120e82912dd803cc419b1aeb2ec425acba8074a9dc8531b0e6857622bec3552cf08e34f4488ee28af6fb8c9cf50864138644c748ea11d1c31cf32c6774c2abdd500290a2e2d33979f241028325ee58e3a73949bdc735a008a283d1b1927b01c85fa6763a0893c67a78c41277ad79928ab010001 \\x9cea4fc1caa924cfde634c7009614dd1485b813a7777995d8e6011cc7ef368c8895ceec7f51a2f6c582e3fe609f01bd24d8f2059468acd15b1cb61222957dd07 1658919941000000 1659524741000000 1722596741000000 1817204741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-95 \\xf2b80d94320bdc2687e4091bf9d8faf9ebf39371ee7371b9ec0e9ee02efb818aab80b5d914dfe0a9be98f76580c7bc4c5730a2d086a4c27cc0c8ead9574187a4 1 0 \\x000000010000000000800003b01b87068c6021b0a7c140077270cb3b06666c6f7f78b61f210c328cf09fc4c9571ed40495ed43455ad9795e0aacdfa382273fb033d7f4ebe5405000dc66a96c6f4555e0cc43530d13bb4b707520ec3cc405bbc0f7607405e593395f3ae3767a9a5e131f69d86cbe9e5e7cf646008276ab1ba6252cba33885ebd5aae4218f67b010001 \\x48606dfcd00f8982cad2dde215f7d18f3b294de4107bf4a75f256935876d9a3a21cab25891aa0e068d3b8b03b4fdc746d105795f8c40d5fa4a9a0c1ce22d850b 1663755941000000 1664360741000000 1727432741000000 1822040741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-96 \\xf400ddabc1f6c8902fed4ff16d0084585745ce230d7e754439d6e85313ca433be9b102d170dcde0f44dfd57c4aa5c0e360c95e94f7d11d1d14aa0903ebfb852e 1 0 \\x000000010000000000800003c432efc80ecbc72864980a1e96277c5b4625584b1074ea0b45a1efbe7a08080085995ce3c1608e258f6d79628463d94e8e31ad67add09bd71e222a990d93ca7ec56d623cefe540b5869389a3e5f0e329701dabe91c449d438f19843b09e1a5f2e288c8e4c86994e816690d0f6acc6fd125e1853cd0f0af5bde10eb88587428e5010001 \\xe102ace0c467188d782849b5af9d81ca68301140e3a308a1a7bea1c38a3588df6e310b00cb50b30994f1c66b2849f1a2abbeef7a7692d1948eeec99a11438e04 1669196441000000 1669801241000000 1732873241000000 1827481241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-97 \\xf61438bd52fa65ca9a61b58d6d9b95b91ae0fb6dac27cb485eed940204e892458ba050798daa3892fe9df2f7b5cc0af602eebeef915834db218dfb705bedbf14 1 0 \\x000000010000000000800003cb5b5c5b4f6d773b66763bf6961e54a5bb4908777ded45f1de811a3c66d4ccfdc7da8fe833010546487fec0296d1914629cf7bb347baa8d0479b8ddad7aaadeac3b0927510871f6b20b3de1925fcfba5686981d2300c34bde92297ab6389d6925b06dc035245da382f80809f26e2ae14f349575243f0477af525bdbfd0b63129010001 \\xd34048991e7d6066b2941bd1f38cfd4b7fddc2efd408c6a376faa6ae1b6fb960cba6ca4996c82d7823c84d2930110425db834ff3b1f1ae9079397b4a7b76600a 1667382941000000 1667987741000000 1731059741000000 1825667741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-98 \\xf658378e82a5c5262147eb8c7c31a96de5c876bbc4cb84ad9ce604ff10df45a2d226893f4c85518d7a3e95c9c4d5a1a581a3e923364cede1dec2f965c0480629 1 0 \\x000000010000000000800003c5c345c60ea0b65f5d7299a20d862f58360cecfabfa37810ba00775ba7406cefddcfeae46afcb788028a4595301b006e12e0c43d02a3965cbfeaf61348464a0d802983c8de5bedd9ff01da2cc591fbaf3689c947004711879986d9af207671c4263d760cda57fc88438b5177c1615cbbd50fdf15396e17f0b0ac142667423e23010001 \\x3fcfec13b4ebc625d283f09ffef2824f9537aebfb549a4ad7148a2a2723bf2d61866086c9cfec337de867e6bb226241878ffc70c0940d1a9432ac361a31a730d 1647434441000000 1648039241000000 1711111241000000 1805719241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-99 \\xf7202879f05453ad669aceb9aef81e83efb8747789c3c0c151811cab6d452e1a9f8633fa72c1b2b3a62c5dca092cdaa19089aa5be098a2a25523e21bc898cec1 1 0 \\x000000010000000000800003ed1cf191d211a8253dc9430301c0d16b955e2a7b359d14ff107caf8209ccf56e090ee8466d4e892355c485ef3b64a8d9a36d8e4595cd9391b1cda1177a67cc56a92dd8c80343780f8cb38cb3f254df51efdadd970f03690be8955e596972340147c28572fd347eabb8a5da4e84fbe9764ef49d57969d1c667dabce7a58a609dd010001 \\xa3934e6b97877297767cdeca8bee789530a48e27290de02b7b64560db47920cbc29c6634d5fb44ca5e95edd0b803f04e5dfc1c7c6a13aeb5571025f66f73c10f 1661337941000000 1661942741000000 1725014741000000 1819622741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-100 \\xf9b41b0eb6538d512ef00b57f1cd58e31f54b5072ce421ef38e62b424d4d2c0e9858efea08c44a37178f3ab9683578b124000e9ad6d8e0288db4855e5078a647 1 0 \\x000000010000000000800003bef81332a8c5e42c574ad512e2fc6bc65e8a87ae719f15f421e8c973a99eaedf4646cf41aa29c9d1bca828eb755ca3c332b83bb0cdc7df7df7df52cb7ae6e1173b164f64dc5d3860468d717ab1ba723e770746add73aea1d643f32b107f8ad154795175426d5c016e72865f77608bdb4b40b628c7a41033aa2e8c8f5c0c060fb010001 \\x1278d3ea86d064c75352e01d1a8155b64ff5cd8474b80e8038bd144eda1de765c0d11da2841a34e9db0422d7b12ad246c5176867471d316f4c290924af96d60e 1664360441000000 1664965241000000 1728037241000000 1822645241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-101 \\xff788e23802ad112df916c9888733859e1899544e937fbcf5f41092106cf9b8ccbc15c65ec0a2488411722c28a4e3c6de63b1ebc61d6239badb3bc51406424b2 1 0 \\x000000010000000000800003d25d3a13722979e0d57e2eb9ea69c89da8eb2b7f312cea31bd4e73fe295b0c22a0997d357f6e59a9978c7c8a112231efe9e14d48d133938bba4d1d4bc04fad18c8bf9315b5d777ed9916bf123bd5b3bdb1d2304cc8b1783f0196524a9104bf01025864f341c6e0b26bab55e0a6468ca746239a274c04f95a28ed81aa06a25b23010001 \\x53a605ca780d408a4cb39c4634bb7e3dfaea7a6639beb0b7e5d7928418911ee3b76ce75da51f8142f019e6b205f54e86b1aed8b8d781a13bec97862b4262df05 1643202941000000 1643807741000000 1706879741000000 1801487741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-102 \\x01113e85acdc41a111d0f11f8d294570d19c76e869f0610268f787d47eeaea2a70398664c7890be84530ae22eed2eb3d294f4db3bd77aaea4a3289492c9962e2 1 0 \\x000000010000000000800003d2f74e570704185e82bd97ec1baa8605d182ddc4f3eb0165d19ced09a444ba0c6d2ac3ff4f8d3eb93767d5ade9fba174af4f3dbf8af49d0b26edaeb49326908fb2cc95c313a5ef976dbc22214158c3fe4ddaa94ef73e6ec9ba8224455cb4b14359e723e9d11f15f5de62f02a55e694fede355b52a7a6b37e829900f0a5d7106f010001 \\xeb070ddbe4de9bdf5520e8c8547522a1f8ab43e02a21d884514b7635dafefcbfb9f597a195d2d5aa84e7a4ecf055c961ed72a621684e2bcd4bfa7f2e2ae9f302 1665569441000000 1666174241000000 1729246241000000 1823854241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-103 \\x08bda49481a6b09e1ba1f6daf8b61d15972f44bfd39d5e0f1705548c2c3694b93d526136fa9de8a6365999bfc836aac606a43cba19939ddc04e21758dd870741 1 0 \\x000000010000000000800003dac3b0eacc22982cf570719ddc6f78b74e48c6e43067d376a7ef69c7db9ce1fb4ccc1e60da4f8385c89d8f9beb0cbe99cb25bc0bb35606296fc2f4cf484864959b0e93439505b100c14914643c90fdf21a4bf9c7ca9b2b28ddc28f80f60cf023e4d45d0266078b313d4f72c3fad6cb6e6840c4fe4633870878fab3802fbd4909010001 \\xe260e196b00a0bee15474ca7d5d214767a1041857e4827445945408d1f92b20f15bb87c25a532790fca1780c512b5149b16fe0ed4622bd55215e25bdd5c9960f 1660128941000000 1660733741000000 1723805741000000 1818413741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-104 \\x08f13f225288300113233a19ba708767bd13c835ca3dc9e1d6d94a3d2fde9c4f5d812a8425eeae6f734f71a721e4c131f2e53efb9ce95aae872c108643b2fd6b 1 0 \\x000000010000000000800003d338f6a8af5721926bf58242eb3db7479cae5645a781ae0f7e521e6469aad68e6ad12521173d27c62e724211de10e86c531c3983f4a1a878c3d0f166d961e527f6c6b95b3505690b9a461c38e2f81b86921236fe2faf58fcc1589e78d2aef4eb03acb745dc52fd8204846926944ba76161abc4538bb932b8c4bfa58a12a73c51010001 \\x7d1965a4fe2f69d7efa30b632b8147abcbb38a9c0028c02b7f7bb0e1fcfcf677e5a6d14086d34ce0c3f70445bf1d6088cbc0efe52c44b0e86db98d2baef03d05 1653479441000000 1654084241000000 1717156241000000 1811764241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-105 \\x09d540ec32b4208f561dc2a48cf11298a1e993b8461fa7a8bf576199b28c577a376c981d43c0eb758edacc6a4ee89f55621661bfa51bc09ace43e3fe7978a508 1 0 \\x000000010000000000800003ab0185d96c106c9d2cf427fb5453531410c928183e7201625ba9df937c4a9f840f2aca5798897a71ef82baaaad604d4be3f03524eae4dbcd8333e586c5c5df438b2303ba84eb6fc802fe0b439bf1658af55a19ed63008076f39d6766c6c9ecc294514876d2c98462f8074003d31493b68749449a957aa160baefabf139b64dd1010001 \\x7f90b917197ec7d544f20f552a2cc805211ec71f6ce4c651107a9fa9ce0b055293d7009b22ea32726e90ea2211bd62dbc8c2ab04ca9a3802fffe58153d853f0e 1666778441000000 1667383241000000 1730455241000000 1825063241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-106 \\x09d9ed96d67ff752011e466c728e30622a3788f26e9ad3c67c8a520a6f4d346aa53e721a587ec1921ce4510522e509039b6394245c17a9393f0c9df2ade7d54d 1 0 \\x0000000100000000008000039733b7b7d6ed571c24202cd4bff6dd3c12fc9adfa540753b45635126d689a5f7cf01de098afa94985ffe17b0a8514b3bfeca39abcdeb9ffaa45dcdafebf10b01bbcfe9d195619712ef0900ce9cb9efbc9909c2f849173e33f2a237e5dc80df0f5913db392bf09f2dd074c867492c210e17a8e14bdefb0ac7bc9da441b4a64af9010001 \\xaf0af270d7c26eee89d79876d45db3f86962847d0cf95f1c6d87db1853b66059a1a16a78028949fdb6e24335b37a8e49f2c961d3ba7f9dddf72b94b9a3375604 1652270441000000 1652875241000000 1715947241000000 1810555241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-107 \\x09a90e6510cccbf0b14038b48aa04426fa723f250e605c24339831d60f151ffc83e3ba06efa127058fb41ee6db2235ea7974fc692267047190e63770e4872c27 1 0 \\x000000010000000000800003b81a088828ec0c565f0ef9e4ea36537f17e7a8fdb05677a6ab6977947866056cab3625fb7d8c37dbc90727ab16be86f328d6f5464d94e4e2c5f0ecbe3f8ee9c5b7efe9cbf55286a138568ef8dd10f09679fdb2b77d28684e7ebbc0bf54b46249b6b96756b3d6e53d417174a23196e0ccc584f68f025ec3111ac783bf7aa86017010001 \\x2449f456c2a490094043fda692b94a7d8ed0cc07381877f0b598eeda2afda2119fcaca81449cba5d293dc5da0e725a48734a6091b9c1794394d1e676982c1b01 1649247941000000 1649852741000000 1712924741000000 1807532741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-108 \\x0949f79e2d57813c45989206f919562f5f4d86ef00f79eda1a9077df8d428dfa28df295f3a3d238cb4263efae6bb67bdf92364b7c4d055b27a003ed6d19ed1ce 1 0 \\x000000010000000000800003ce0394fa8a3ce66f93ac6c98cc20fc165406a0409dad38e6787485a18f67d5f1791c48b04f592457e035508b80ce6f60408dd47877ffdee8c1fc7527fc870fc8ddf739337e11e096cb7ce650bfe6cd02474613be02486c397f55e1c34563352139a56ffc55fc9692725a2b518833ecd084e65e61e085886a94a170c3dee1668f010001 \\xc4cddd731473d968691ca43888d87ca0f3a1c5e3aab734ee66b4cfdd18aeb7b25f4f50d9a65ba12781d9be0de8dff41d1db4905fdf89c4fbc7dffd5d5c2ca60d 1653479441000000 1654084241000000 1717156241000000 1811764241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-109 \\x0fa59ad7cb57a12e7f29bc3db3314ab85464e845a5f10278e7114ebbda499b5325b62c9341bc6b0ba0655362ef29f19b16b839211f450a09b3f92254ee1bae30 1 0 \\x000000010000000000800003b2fcf2afeb91028b56c7693a9e59c1787d9a00700b067ad70e5e670c647678977b2e0e2bc2ded25d6b27eea255374e54e452a639eaaffa630d40d5ac26aa6c779fcbd8dceef0d83b26a31c282750bf3e74906b9dcd273a1208501f45c118796ac5ddeac8e4929ac96559d1ed417780b6585e791cbaa4b3a06b4611d26c818261010001 \\xe2c649163f0de50ee0ffb0872901bf5a74b30e98416a8ac024067e65344a0a8a7cc8e626a165dc21d044bb981333cb31776fa261ccbd2d1c9ac89ef70afb3d02 1669196441000000 1669801241000000 1732873241000000 1827481241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-110 \\x14195a9da72feb7ae92995a82b136aaca5314ec7974007f3a000a031c94a72b309952ce3140c32ca3a04f04d92f25922f044cd0e948194afc6872027a3587a54 1 0 \\x000000010000000000800003b076d01d2ad99cc038410d6ab19f57bede5552ee2889a445d0025c198242b14e1789a94da5ce82c8abc86915c50c069ec6f5b2a04de660fd69ab947d55e52efcb1a5c6f00fb98247ff92c168fd342fd30a56b1594d4868e947c43690ceb3cae177c8300e5b3a8175e17adab5067f5a0065b4dfaf090c175ac943597a33db607f010001 \\x8ed0eace7b9843b65901fdfbeea4dd62b738e0215e5eed97347c4f82affcb67c5e0ce92e6f0a2e9433d0bf0aa04ff181afa30dd972b615dfaf0a0b4fb9b1c105 1638366941000000 1638971741000000 1702043741000000 1796651741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-111 \\x17599a64fceae9cee6b38ae957858d30a37760723eadfed136b1b75f62f51d8d5376970829ddc81119d7e5eda18859729d1bc04a3bebd0a6b61b1dd1607ec792 1 0 \\x000000010000000000800003d36b4e006ed09eae2198db81592934f8c27891ad695fdbaf050be1134d0f338945eab684eaefe77d0717870d9b1759a64569aacf9f7f471843b7a42966e5cad087d4b069a25126f09ba64acc81b48dfab15dfa7b2ce7a6faaea56e1f7c4e45a7b2bca0013d1d7ddb9bfe6e4ce3fc0ccb5373cc166257b4467c93252c23a1f601010001 \\x0e76e814e86d2a9061492d3ac9470710fd4d53fdb08f5b85c69c2e4d9f30ee5e00edac4e88d08c4a9631ab6847f0ac4b68a49a8d18fa83dbab9bdf79be65040d 1651665941000000 1652270741000000 1715342741000000 1809950741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-112 \\x18a1196715859d9f8837cb791933d21abfc26509eb41a6515cabf8fae16ec7642b849db9c9dcc1fd83b218d6f4eed807ce6868fec7be2f752c6cc2f24f27d384 1 0 \\x000000010000000000800003a01a06896b121953e4bc2f3a56cf4e796c396fa2a2390f9a664a3a504ee0584dc402ea18b210e12ffe6f9fb218f2963173db87a5b06e1e8a711514a246710ae8050e28603dc1875f4f45dc3a8ad282fd9cca1a45008b17235799ea2b2dcebb2b5d458d0ec2879a63df65e8f0889037eeff04044edca2b2ae5d7fac35132e92ff010001 \\x9f9917db091452a87762bed6b633236944c5c8a1b37fcc67c01a2bf370d94d6ccfcd28cfd282f8d5344f77823de41195d93e6643f7105aa0cd496663fd915704 1643807441000000 1644412241000000 1707484241000000 1802092241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-113 \\x1b3d1300f31af1eccf5d65e6673ad80c8c69235784756c0de283975327207931d1218a364aae656eedd603ea80323dfc69934ac67606e19e2674f09584505893 1 0 \\x000000010000000000800003a566e744a3992147dee487df3ae127b3b2fe2dec1adc7ec6872be38f2fc510c3e7abc2b807e3fa7968b979e787bdc8eda4fee625a2b4a9b632ec4a3a3dc7854fab6738f1d3ec8d98215ab85a2770f83d58d49eee43acf0b3d1c67aa7efcb209dcf01a94049945dd2ef1af90ec2f5adcea08e5cfd314805353c78f60f4bbc4cc7010001 \\xe9d8dc081b5d713c68175e50599de3e1162e58b03370f04a12beae651c978e9827f1da4ec63b2256d14a18e859b7a59b3af2f5771d45cb3e85801fca72cb9a0f 1639575941000000 1640180741000000 1703252741000000 1797860741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-114 \\x1b81f84e5a1884dcf7a6a3134cd5a1caf77c71c4b024138c72ed9d5a29293694d844dcb3fa87234f07bfac43ca79c2f82cabf05beb105e2afb79b7ee15939971 1 0 \\x000000010000000000800003de8a64cccc0738e188bb9166aafebb966e2e2c03bf5d50fde77532912035e59f399c0e371ec50d3e361618f079f13e9973b434901ec7d5faeaa2170b7e3be54a2d2c143b2fd1340c2b3959e7b78aa23f96cccae6fa31253e92d1ded424a43b39dedce3099e9053997cc8b5781a5b1d1f13ee90d1331c6f64b7a0f08cea90bf03010001 \\xb83cd2cde0a52a0f2a3a1bd4eb017c3da845cfec638461edee1d0d549123bc910d3f37fcc28613d2f0551ad1907a13e5bb453b890e0215deb317cf127b239703 1669196441000000 1669801241000000 1732873241000000 1827481241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-115 \\x21ddc9309c59fac74874dbd88de01e7354e47c7ae362bbc766fbb1c5653fd2c487c80b4a159b049f4cb3c4fd846f776c1fc06dbebc925bc6f0d01676a33ff74e 1 0 \\x000000010000000000800003c608179d6c8c4b4bf9d05694b4ecc752b04c5976813c41bb94fb54b1a9b6cb13881dc45fb07c702fed395af909b4182cd34861afffae4725bb9586b11e5b4cf037777b4d434fd09f9cf489afae54fe79a73ef68459a254128faacd32d57b363f76b591b95de8fc76866af866e74db13081b14fe50c7e9bf9907b82349f3f8123010001 \\x3b668e8ad2bb3bf0807304a1fbf513d0e312058bed6dac0f908d0e1688e1708432996b85fb85581445f55f25c19d0ec3cb561538233bb405f2b1e6eeb6c5cf0a 1658919941000000 1659524741000000 1722596741000000 1817204741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-116 \\x224575bc60d9ad60ba9ad7257d307210d5cbef98c46a576f0bc7f7afa4c2c7ffdb8d28166e1a2e7ddd267f2b50bfb9eb54e630e13f0fe083bca75453d05853df 1 0 \\x000000010000000000800003c90d034f340ed3f0f20c051cf12afdc51344eace86cd23a29d6353dee6b78d6888da279a52c9ff372da144c6ae8b5442070233602f8db44cb2ea2a1e0fedfd5e322e0493011c0c7c5dbc5d7c0bfc4cc9e93fd3552adc117f1cc5293a26d458acd425fa2af19402c620aac813b2556cab028c8c84cb12e7e25330a59bcd2ce1e7010001 \\x9ad36b1c1de59de3e2c5d1c224d07d7e3c2be057a98f03d9dbb0a8d4d070023d4813690f85a47ce09ef63069a9714841a04ebed02edf9223a35b380e6486cb09 1658315441000000 1658920241000000 1721992241000000 1816600241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-117 \\x2815770f9a8898eb9cc2c1bd80e1c8ea09232f48304a392113179d0f8a039c42c43b208f81a89c564e246ca35c5065c7ecba411587d0a67e64fab75877f61116 1 0 \\x000000010000000000800003cb140f2e35fa4c8d880c746421a342ba47ce50b543ea0ee2acc5110e40ced4a6fe685f0d6938b5a46f8178e2b3acd16b99bd3fc0b91d86b07c027f76690f885d0e029ec658c1503d8b4877c6d21b6ae5d26b511d2079f8178dead403741ffa148d7efc73fe32bb1a239804e1817bcf574fa63341adecf36c579ca7f9f85170a9010001 \\x0359cf9ae726d4abafacfd095e7632079685220fbe6979d453c6476da52c5b512c87fae116819790647ff47bada37a3e81e5fdd0c25c413cc035a81dddc54a03 1646829941000000 1647434741000000 1710506741000000 1805114741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-118 \\x28053d930ab97281fb69edd5dbe5329b3061a1c8dabf0993ce8f35df1036d37b358b1aaaed69a8537ecc31bef4cee3f0ef398d5f8bfd407018c918ef38bd7e38 1 0 \\x000000010000000000800003a948ce9d2270ff90f7d34f47797b8f8323ea5ea44b150f63cb7bc8dd997c1dc6db2109e8dab1b83a3dcf97f84903dd596e08464613c37f6cae7cc9ea245e2ed995a929f1923821a4b837f6ba0f7695d0c03a91bc1ac761575bb1721a8f903cc45be54f040b52c8b82d9c5bd2699e5a11f4a2a82326e352706847dd7f631ac219010001 \\xe7d353f893b790b59bfec03f749f934f0903e2cc7ea862e9477215f8c4040cc70072323ef736924e4b766b685a51ff51c8323b9156dacfb8307c2a0bf0e56008 1657106441000000 1657711241000000 1720783241000000 1815391241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-119 \\x2c2dd80162fc2b91b06de3dbaede27672580af76bd09f56996470742a474db72ae1d02a32cfe2c2c3152557ef52ec7acf56b035cb154c41c133f9093bdb0efc9 1 0 \\x000000010000000000800003a357ffc2e60e712c4f3940652dac5477f35600044d4f3d5d367ba4ce8b9d02957bc37c730ac52905eb3ac163da69a92f6f1bb79e410e72462cdc6d97e4bff9f5fb85448946f44338ef1e0e5daf5344033ec875d5976564233439a8b4aa238f367a40e21bba295c8fb05d16c531a748d8fd09d1c05b617a875afe927c1e8a43c9010001 \\xd0a4ec14f43e302a9b598a4e1759ebb0b27c0d5c6c61de5560c87b94b942acf5b09fa6f287dec990d3d4bdbdd4ae141b92ce409c1064873588c1a3f58e815f0a 1659524441000000 1660129241000000 1723201241000000 1817809241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-120 \\x2d95c72b73b95a6b6638e9aef95e9e4a02c49577f02383f9b3a2555bd8bf406f0a90989dc2bac74531d1b970b258a94148bdfa7602c8cc574a2b8469b09cbc53 1 0 \\x000000010000000000800003d7913782729a9ed5d844b8da3c63479b29a610e9d4fda04e28b1888de2051f70644df7f39f0bc860493a4e77f1ddbc3bb638b16400829778c97d1586ce02097113a55be62995686cc14dd3d14bc2916735edf6d8bb080034812fcdff965360735e30ca86fb7426f523871dbda2dcf1d9f1806624ca9a4d7764a408ae2cd314e1010001 \\xc7f66164b481137adb6cb763fdd043720c481724df9bea4ed45734ba2bad1f9acf64247fb8ca6476f248ffc2b3e54130581957fc48b92232f332e11121985a00 1642598441000000 1643203241000000 1706275241000000 1800883241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-121 \\x2d31354abfd9afbac806997f1f3d06736ffe80a9687a54f26fef1cdce73ea4b4e0c8394f385edc648357d2dd1faf0dd6b060d43cb00be2edb6c3f2a980ca50dc 1 0 \\x000000010000000000800003c7a3a2a63fb98bd1d8db5062c29a8e3e599003e78abec8e8c414f58a80eb5d9c1bd900d3c8510243ef38ab7615bf0d56b780ee1f780dbf397b462faed734f592421c0e619895122002a1bd9eddd9a18bf4cac53bf0c11a7f21abb292ea7a35c74d7fbf1cbbbd9e38b5acfab68fbe5a073e10ca618b3fe4b5a1451043a9b93a73010001 \\x8a96f29c6efe0bd5ad7b02606f9cd942fea0a704f93c0623482da27f529f491c6afeba99e8f60613558c4850ff349b11b312eb66bda4bab65ff8234cb799db0f 1640784941000000 1641389741000000 1704461741000000 1799069741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-122 \\x2ec954fd1a18b41829c33c920f5c7ad405ca2d5805eddcc83fe403f515d0685fb47b5f846048639c9cd32616f94d8d76259ff7afbac995b5e8ad6d63b8eda757 1 0 \\x000000010000000000800003ce6c39db251c0b99827665d78d7cca2e8d281d090ed8881f2764108d5c847e480a23599285c37ac82dfb9ed32154ecf5acb7d7abfbb40ca3e6c98037c3974e47707c4c7e42165abfa1af91a85ce211216425bdd9025186d47d509390953ec12ac01a2f9d326dd9987f67cabe3aa6be0ea03357b9bdb50225dd2368349509e9f5010001 \\x78d907cd85bdfd1fd6c70fdf56b0ac6850e3587ce08c7629d6af60f63dbb2c11477e55db79028c36a686ebc613e7f39919e638803923b779faa3450367d6d30f 1669800941000000 1670405741000000 1733477741000000 1828085741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-123 \\x2f799eb9d9ea466491892d03ff5aa80e8b5f3da2f67e89fa2e3f8cbab20e85cff4a5bbfda0184fc46e30eb6fe47b9643725c07d898d208938b406f86f3273730 1 0 \\x000000010000000000800003b80534908afa43c040ebc3a5669bb48efaa5eca5292d0e589f10588728aa3b0a7d72bf78c5790a21b9e8c4f4e7485c2dd4ddbb2293d77a804312b59dcab8ddbb5f1b96d9df8f6a8e646079233bd795fdcfd764ebd339cae62f0e2850f879e391713ef91d7a2a20a9550774e1a4f5ba48ba9b45c106c1b4b1e8c26c3933f5c9d3010001 \\xd2824b4bb0c85925c13f168650cdd930c2bb5055aa981a78e292d104a717c5e83e2616fe540437f0aa52827bf982e2d010a9e0182a2956d65f0a493bb842ec02 1655292941000000 1655897741000000 1718969741000000 1813577741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-124 \\x30a94c791411ec5614fd2d10051fe20e1dcac7c8a4eec9aa1b885753b30c1215035ec2b98954b32e6826c28820f72149cde966daecae082c3fc464fac0640287 1 0 \\x000000010000000000800003bdea2f91aae1becc08ab7a98c626dcaab532bddda6f3955d341cec7c4442ffc41412ccfd19ef174c8ef1f7261ccb69d9f387fe92daa5dbdea362cc674c5e640d5c3578c75940ecf3f1231c85950d2cd274dbc65b3e4d76a2774d91b9ebbc416ca66889da78cfc51528656971df3fb36fc857b0d4066f799774eb26c22851c9e5010001 \\xc2100ff5124cf366f12cd02aa375d63cdcc2e3b065b3eb484ff12448282fca3dd16f4554b612aa8965b84d5b2dd8309cd12a8e017e77d033fada8356dd413a0d 1638971441000000 1639576241000000 1702648241000000 1797256241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-125 \\x30b5c7633139a82622127dc17b345c71f3387bdd7b9a379cdaa0d63018059693a87cdda12111eef250a126c49988d96ab9bf9846e6cc541c67984ebd36932b6b 1 0 \\x000000010000000000800003d7f833d11af1963f2e135034fa1eee75a987be9097f3c8dc0ad58d317f82526af9b48aab87480d5d783d57edcae2c185b77f6d4e8572fbf2ddf34d14e3b43e4233fc4bb57dbfc18b235d231aa3a1b0d5e7cdcc6fe18596dd6dd395e54fd323558d0009d0d7ddc3d443b72b37707e4b4301c6a94bb9096ea3d728fe25bdf0d1d1010001 \\x2fe71d20908cccfeed7ce8e4603e09c0398e2c28b42e8316b47ecb9de2514d824d878bf4a3e53c765c8732677fb7c9b683bd3b6f1b87c15d4b55cb18f0c4a903 1651061441000000 1651666241000000 1714738241000000 1809346241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-126 \\x33b5e709a3c2790254089ee44a1a29b9d638215aeda0c8e584624871d6174ad02e7d62b319122bb1b82a5e61949a8656fe588e76679736fecb826a385c65caa6 1 0 \\x000000010000000000800003df8da6792897fe6bb1a5424389171ea996f4c437ddda94cbe373fae32ddabdb31f4c7ec8c218bcfe5c2f8df99797211da2d523377fc8f3880356b0bd5802268e34eba6935361ace11cbdb62f6a27aa6decd4db4140b2435d97712ac3b08d018c7d9a19236b2040c0d7be89bbf19e21e17198fb15d0519db9ca58737861e9b865010001 \\x21938ec8111009021de9e420d30f93a1747af5cb03e630d6212c9ad735797ef756ade5e70629584b9071c9c7075ea6a46e62e88357ebc5a17e2d35561c024f07 1656501941000000 1657106741000000 1720178741000000 1814786741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-127 \\x35950cdd932aedfe29f77ff5b91a97d5dd1538abb6f6bfbd5b07dee7f12e47eb3d2aca6e1246254ac1010f3f351e016a5c427498c3f3bb45d2e6de139728d5c2 1 0 \\x000000010000000000800003a05686677889375670c88d03aa932ce877ca85424c731614dcf4dcb4fd9a3a8d6d6b037ea3e528b0f463f3fe0e5f49c9f9ac18884c9f84eeba585ac8f1257095ac8ae9b3c8a318f6d12e58039a587ee42c572474f807e29cb4b2938e54f73d644ec88d1ea7437dd24a23dee543bbf1c3b24be93977bea0460b660ff73ff951f9010001 \\x09d616f4ffd890e811b0ee1f58c6aa7d8ff8c29eabbbb8f6ae6fc70936f056b6c9696415ebb08ca342df8de1d0da18302e431a040ca1528ad3b9bbe328713607 1661942441000000 1662547241000000 1725619241000000 1820227241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-128 \\x36b1a1d2d2e5965d7b18b1185baec63cf2fcf65988d5b419c3bbcdc05dcbb20c32359329539fbcce95b42228a0f5c7ef9fd79ab040aacb4c7b14816f0b9e3282 1 0 \\x000000010000000000800003c887ffaa642b8a94560313fee1e7d55841bb20f5d9f931f011e4dea3eaffcc170cbce57c4afc99f527de5704bc6a67dbcd7f52f172119e634d758ddc1b44f6a00da3afd28fec68b3dd0574e726536bcd45e9bde28ed8f32c4453dab48b7388e8bde6e33b16f955948a4725cb44caee7e9d7855230c22ebe5c9bb061c9ae78717010001 \\x9e353631e996fdd7fd3e0a30bda433634351af7cb54576a157089145892b1498649dc61f5d9582fa15f8e57ef1d55727d29f983b1f40ae705faf02398a036f09 1658919941000000 1659524741000000 1722596741000000 1817204741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-129 \\x370d3dd1919d331d9852cad3a07913e19aaf2f63b5286297733a13173b6ff117c82295a30b2a97ea614a023ce39d872916eaa95aa6fa680f81b828a44af6cf72 1 0 \\x000000010000000000800003c68f70f52573ed482189bf0283200bd94fcad3a8053f5bd2f0635b82f82836344d60af774e2165bdca3dd930310c533f93f4b47ad8a943cce306f1cd78af8446c01a70b0ef1b037b86364487394cb588c22deb1d4cdbd89eb09810fa4fcbe6e04ae5fe7ed8626e2d44689199de2eb78ac518ffe27c74d3c7d46c57216d27c767010001 \\xdb1dd7d362d590ef092a721cf18ba40a777fdead47e4f2010d1234f6fb6d3df206f6350f44951d62fcd653a5165f16c2263869d30f17d4d4b4287e5831a27e00 1647434441000000 1648039241000000 1711111241000000 1805719241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-130 \\x3ad1453666f485a86b632b819beae0f06fc98d099106a490c90042d5b14a2fbc4ff30173d046165b082080770130c51c313fc57b7606682bd5e48e7873edf6dd 1 0 \\x000000010000000000800003ba55d88e8e5fa877235399e837e731f6c4b654565c2e0d909b583233b4f98e1f9efbc37cc2889a18fa1438cf61011985c3c3b39759b4f14984e18a7dbc54d9dd110b133dd1814a55cd3aea881e9e90e0e7ccc479bf760aad46fa4eb1f5a96ff305cc2155e910285891eae913251f25b1980be17ee3ad5f68ffd40558e27c4eab010001 \\x1083788e63602d39298c792fa04894dfffb2e18c36ae2ca2b614a7dfe1dda650e3c21e2440cb594c15dcd0f2ab6c176f0319a8ece166cb40f8d8b8b638cb2b0a 1649247941000000 1649852741000000 1712924741000000 1807532741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-131 \\x3b515753d8186beccf418dd192148102cf931845ab50f8700025888ace64fa6a0bb5fe91ed7a4045f19f91973bb8ad356281cca08054edc4ee35bd58b22c2dfd 1 0 \\x000000010000000000800003cbf8d5882735f53636360136f00ef3276619c6502275a90e76706a438f0eb733c07f9121af3719e101f98e6e0a1af52e45c22fcfe9159819041cea1e24a180584e248c2c0b36bfb6c5b683d63752b3741efbe71c30558f515536510deb375f49439648ac19a14afd36e7e69246afe9682499edfb876df395f03a4b7d714af56b010001 \\xda7cb3e4fef885e783923980e058edabfad5708a18a3ea37b984801bdb0cd09a0f045ccc89835b6082ae60790358f63e9b4b3c280d2f125c645dac7b94859b0a 1642598441000000 1643203241000000 1706275241000000 1800883241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-132 \\x3f0ded1ad7619a60d5e0145d6f11eaf696e6e3fec9aa35bed54d3d8ffd292dcd723d241a4cb39bace82965012227dd2389e6100933aafadaf3d16054461707eb 1 0 \\x000000010000000000800003c32db69146cfb87a18f290253d9201b4a92bbb3bb45944a074f5995c32c909be4f84570e3522b150a5e724c88da0cdbfbf716ca09e6a23307d43fc22cbbb21af2984cd3d15554f14d68c20adf8098b88aa3481e3d32ecc1c0efd52c72413c0c1723656d4f844ab1700ccf934900731666f9a0eb30bd4c38245c3158f471eba59010001 \\x0935739cdfb8c6d269fbda59e77c0730202696793c828830fdbac354f5f2567a486183eaa9f746fef121e9de80f0e5c767efe7cc431f944fee63e98675655509 1667987441000000 1668592241000000 1731664241000000 1826272241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-133 \\x49619f594ada81c72c83eda8d1cf7ddf2d5255d2e863e2d34f946b51630780322a35df138f924fdf5f150a65aed0e899f4bdd436419e95ca883ba7fb2a87dd8d 1 0 \\x000000010000000000800003cad97786bd629af02809c94602f50bed531d96465ca623a7fcb51b511536c5d555e0d18aad8b377efacd8461e47599d3890a02f9d660257992a40a1c66811b225a624f9ee37a3dc28a5de9f36d44855124dc2681af5906cfd2eadefb18071e6e52449ca4bd8057319238a8bda3d153db154719b3bd36bea34fc76f5f438105b5010001 \\xa8eca51a75475b0055a842614a15385140d69f58423c378f77c7ae8a16a42cd22f5f700050df8a14f8817d96aba1c6809471064df9c4c69b7d7b688d3104af01 1655292941000000 1655897741000000 1718969741000000 1813577741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-134 \\x58fd5188f08293723f219f76899168a1af58daa2d0a276718da326c53cd4ac181e2033a1e46811d1307baffc829dd1813a88f939667a4c0dab83601abf20feba 1 0 \\x000000010000000000800003c49d9a1a767ac59055164c98973c60327391f3c834e2e95ed296783e616f46e21480e871caf4720eb691bc6ed9b41d95f3f04e675652758ef24cc0bd0aca9cbc389701249654b5de56c43c0680f9d0ea5f98138890a4ff67d5d40159e89d7aa462bfc64f876fdc17077d352ea87b0688831f080e1b3b54580cbf656f6f61fe37010001 \\xf74668b957450b854f53c1ecf6f75c1a266bd2a437005eee38e8791554430ebbc3bba97ca6db7c8c638af46e6412ae2cf28bb9931f1fb6bc992131f990bae703 1638366941000000 1638971741000000 1702043741000000 1796651741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-135 \\x593d45191811123aed5f53f43b677faed3e3582c20d01f4d8df557454754752ff6ae82734c1c284d5b49632f52d416e29e3bd20486575370027ef00a0232e973 1 0 \\x0000000100000000008000039d3eeeac1d8c3d8b22872791a0c33990d2577c9119a40746d8306d108043c427803f0cce438ed45d53d79a3e361d398a85b3a7d979bb93e08405a5c436b2946e07d64b536c968ec3d368073e4d86d29342d49c93a30381ffcafd2776049f8892aa44c590bb8b2bfd47f791ef16414994e5e345ec579548db79f7d01f78be064d010001 \\xd2d8615ff3640abb605c22f6adaeb654cb377a051e074ae737ba60c7f6950b405b13809307f0196dfca75eeefcfae413c18ff150be9eabd2f8f205e8143e6602 1643202941000000 1643807741000000 1706879741000000 1801487741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-136 \\x599dbd11dd874a654620dbfc4cc8127eae7714362ae05a8e2352d986805c7308e369685a24e59630833ef6be1d48bea4b1d76e608a1e35440cf70b0357e1f76c 1 0 \\x000000010000000000800003eb1ed568791f7da3ea7b6a49c6119b5d6c9af6fbafbe9b87338c19d964d957fd731e22c50bc849fafb1c330a0f6d1150a7da698c03433c3fc3ec0dbbd99b1ab6e39dfc3f488c0bb4266f9d4b7dcae7e7b6792da7458e343dbb1378a36ed2cdcd62c323d242d0db4ec39b6ccad078e0829c12ff696458e08ab572b02df96a6075010001 \\x6ffa5b06c722d9272f6a4d03ceefafda0754ab3cbb12fe4f4788ef9b3c2bcc6455795da2782c53d3346f7ccf845d880608424e43477043d42ae82bf6bbac2806 1661337941000000 1661942741000000 1725014741000000 1819622741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-137 \\x5d51d9ce454ae3ea07f50ffcaa92f1ab8ed18605a4b547ed1b792d5a6dcb92477eb7dc21b84a6ba76a8299fe89b25a9f5f58a21074a8f154760ab31ae936aa9d 1 0 \\x000000010000000000800003dce2784fb6e41a85d7197f3e0949a20f03d3b6b01aa5ff41383210c2396c5fb1b552c7740991ea02d2639f43e6022e73657e362c25f1f13ddca3d95adcb89e79114652cdd86f8444d4a8da930df86bbf492f2529c3dc597b3d6d1e969c97cd0b79b9cdcd3c2501bb27671b45aa6b565763a8a57a4e07020b91cada8537f5e397010001 \\x9cb2f223ff3e1e6ba220976b41e126556437f44d7c7f5a6a7105486b14c5d106208b810a3563319b13d117e9afdd2a50a7ae6de40eebfb63171996ea0973e005 1657710941000000 1658315741000000 1721387741000000 1815995741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-138 \\x6209b42bde4487a219013a4e1e6651a4d05252e7fba81218d0fe222c05ad1bcf52f8080e534e83df5be1065b498c3562b5e503fa57c6b789f0dfc7e24bc5cf05 1 0 \\x000000010000000000800003dbf6a5bbc318754b949acf4c5bf00d953654f8c499b2d69245471eef2e94f075129f3e1fceb258da882f45b75b168343747493a8362d0de810bface3302c19da2bb4145a17c8836ff58f86c1fc86ec4b805f99a9fc04f4c5604a9a8df7eb08a96b292fc768f5d31b099208e28fd5f1fcdec2c1b976b6617e9163a7151c98cc8b010001 \\x24506265ca71f23bb7146a28f1086789f3348ef8e1920e6e27ab2c45164260bd9a46f7ffc1fb8591f450810172f4d0197c899b4dc6640515c41afda21b573906 1643807441000000 1644412241000000 1707484241000000 1802092241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-139 \\x63855806bf2e743384eeb67de2468b5d3e71598b44f7b591c86c549d909e00f0ccbf0547d4a41dbab43c2e9a9cdc4cde555c0a75945be6a5c410a46e6438e160 1 0 \\x000000010000000000800003c3d382b4a070e3c338a8565de7196a5c3dc58908106290c0fd2e73980676e5cd32e244527ffa520a5022e38836f8e0ba8b299ba1737fb4260aa49153058af15820c41c6eb67f0686624a0b315bac8874a785c5614dd15201e93c02f1c495e58853d0aa52abbf676fcd4f3ba61c81ec4753c21dea9df43b94b9d2ec5055659865010001 \\x768631294ee72632afdd45c7808ea6785bd445cade523364724034c03afebfa738c908234e62ed7f93d6f8df550dff91ee5f04d9b8e711595090196cbed50c02 1649852441000000 1650457241000000 1713529241000000 1808137241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-140 \\x66c1830477b7d21c2d2710fdab7cf94982a981c4be4ecb2b41ba1818004272f170fc1e1d3f7dbbffd6437fe7d88988726a70948f98b7134869e558c1036a701f 1 0 \\x000000010000000000800003bfe5165cd0eca1c8e4439c54a428187d0ef8e689fb1011e1a64432d777b9ed8452f45147e0397fc2067414dcf0b9a89d0530f54e72190c8f81cc2f19f71099d6870a4be5a09a946c98ddeefbac6da421f4dae46fb98261f1fcdca5ddc1fe1cf469860406581ab2b0e85847242b1ee8f06ceb6bab247f98a0a6ff1a2bb49b0271010001 \\x0a02d908ad210e446827e3e68af14e23186374804b875d3d42d88449e31586e6445d80e44293b29b2e3a750e0df753245de5413e1e819c31fc330a97b9385c01 1660733441000000 1661338241000000 1724410241000000 1819018241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-141 \\x68ad641e8e235be3c357a89bd71c7950af697436393a376341cf7552b2a9569ab2c9be145139cd4269fed053ff348fcc1dd4e46237fbe506d4f56a74862b0f3c 1 0 \\x000000010000000000800003c314c4fc6a6a4b326c930a4d0234ed64289e8c6dc41cefccfad95ded507e456021c486401a48c5e336cb838408ff64e8b8360c2c2fd150b8946ff61745fdc95a235d67ae102def2eb426cc152f5120bca8ba01e97a1233b2b8318bdf935fcceb35b87847d9788e503dcfad375d9a8904cefb6ac79f51dde08274cb741b33aa13010001 \\x71375cf583c82a66b91ad8ab9f537be0d4e834cac37656488176af9d62e320a574dc364e82dd6b2e029580aa450d7c3e884a4f327dd82e5bb983ab74d2bcef06 1657106441000000 1657711241000000 1720783241000000 1815391241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-142 \\x6891fb81c10769070cd23a0e5a2c1d3ee8c1d0471fcee7ae191382fafd47014cb9c5b39fda80781e382b8fe6d6a1947947be6ae00755a5fffebe5555998e72db 1 0 \\x000000010000000000800003c576fad783a192d6843126c40249ee686fc65660ead9eff5ed8df4d0d114fc095bbed19edd14a8e5ddf3fd5bad9807b669c2d29707a1802a61b8f52ca1c37b438afc1548dfea20ad7dfd3aac2f76608a3ae8b5313a9b0075bc894247a424263680c20dec6729a251904f6a17dc5537ca7befa53f832b4affedc02e404bceec19010001 \\x30eed729ca247498ea6ae865203ed59c11cf3d19ee17123e6040b10fdf9ed8340fa0b11aa6cfc77fb5737c1efff773a1bea2258a55b710a1173238c4ff889d0f 1658315441000000 1658920241000000 1721992241000000 1816600241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-143 \\x6b19c00bf5aacf95b2a6fac41d8f510e0f74bac2e075606d2e109871423c6ee06a816ca26edce9ca0160348b61ec71c0a9df3b34aea56a47571a191692030af8 1 0 \\x000000010000000000800003e0a8d879c9ef2ae0da6938debd7c192ad7b7a58bb8aafe79c84a5bf33f5a42e93f2e57a6399854cd9871ee869c203d3e304f70ace4ee16033e1bb5e8108c8f00b00e32f899a46062f93af0f66825eeac7cddc5041ae41538c55bf0bc407c37cde98be7d5d332e1339cbe3ddb915c8a268f79c5eb00d28519a2956fd857ab81f1010001 \\x42f080701d35d7ed44718b76ebcc57a05f1e26446ede8b6257db8fe4a8ea156a28c66227d0aa46eb9067f42e2b69f5ef999ded3cebb839e13becaa8c5ccf8104 1641993941000000 1642598741000000 1705670741000000 1800278741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-144 \\x6f3d8b4e6d85d785549b770e30b4c7f98ec4e1a141902c306ead89b6773a62ffc1f9b04b1b70b6f898ab98be624d0dc6359f610c875941ac7f56d65c2e9b682b 1 0 \\x000000010000000000800003ebc940d9f81414933c01159fa19fe388903638e499cba06ef923f39a7e95e80d5405e3930c968809da70ce137804dafca7137e162586a0e50a42e33b8aa72d177e1693895ad68b747a503dadc9949541e5bd60c2af78f31263c54aa222dfd6c36bc16a691ff1fac834b72ae624501492192065dbd059cbd601db8d421f0e0903010001 \\x1900ebaef0fb540ed78f9e932c757c388d30ff1a2a497c914b29957b4ef996853416b15917a9bd76e5a4566c2b18bee095118b718fa1fc4b3416f706930e3d0e 1663755941000000 1664360741000000 1727432741000000 1822040741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-145 \\x7159ce3981f6342cc35fd31d57409be19426e230363c0704a70df15113af424459ea26893a21d5b72ebe477728bdcbc61defd67cc664c3b455f2c7f33f5c822a 1 0 \\x000000010000000000800003b9a8e788e85e3f5ee0a05d03122f322a22c571fc55f13f2ad4dec97bf3e94bf0de13cd681f7d31d830cb0c4faddc6d22dd2e870056a80a0a687b05d834f4f3b9caed0a885bd6f2418d3ec97b271865c9f5c190d02e840d9aaf520172911f6f61599a7c3485f9386c423e10e4b09fa3a9b3ec7327c21d8c6031dbb93efc171ead010001 \\x2600ae9eee2a1b0219f24b89ab4e9c0c98c4c96e097fcb11e38e1de8fcd25e54c301edf53a54e4197cd0b73e8684de2898db83e07d47288603a7642012671605 1638971441000000 1639576241000000 1702648241000000 1797256241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-146 \\x73a137178f211cf0f01b016173bea4316824a606b27db77d408b3e1577cf30f38e978eafd0834a6f208588942d52bd364aa0dd231b1ec2e147429a062573edfe 1 0 \\x000000010000000000800003bae51bb90a2419dbbe5d39f5c91c7c0101d11a40080c34b125c61191e248e29a41297472b9ddf9b27b9c00b7494e57d66a68e14fd012ece76b3942c77ddc446029e1bcd39655457d5105e81d12c7304e910eaf7f248a216aa2110a21a880fc6c8582f85652a59ac2c55a2bd6ad292e6d276541d28c8a9ab74ef38d616a25598d010001 \\x48bf50752318fb88b2bfbbf99e61fb7ef2b38b421f328c5fa66624a06e1c835fe3a2f3040a03b55a3e52b38402c008f4a5e563dde2a30c9ecd8ce4c3fa20510c 1660733441000000 1661338241000000 1724410241000000 1819018241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-147 \\x7791ce344be22d0b65994a385fd2fc6d33446abaa305b70423d85e35232eb1353f3046b6d9fb8168fc296e2a3e938a9e296459e95d66f8535735def5d3b4dc1f 1 0 \\x000000010000000000800003d983bee847e35c9d056fea984dfc572c93f4d5de21c800cfc069438668e0fd2922be45683dff86e0c528bb299a0e1cbd839d8c847ce094ae3696a1093357a9c53854810ac8761a83d95b950735777a0723accc80a8efd5f93ea67ba5068689f8a1bc5868e7e7171d075ddf4a9707544716bca5e2b8f08aec6ca80b6137453bd3010001 \\x6e7ef5bea3ef86902928e55992b0ff522d54c6fd7507e659792b4cba599d26848c18a50c4523c06922ab6dc78e23bfd973aff679bdbe8a6e3abb925f2309400c 1651665941000000 1652270741000000 1715342741000000 1809950741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-148 \\x77bd70b9a21caa0078a835fe6aed7de661de15e5f8078022e544828321ba5f5f74ffccf37bb1535ad4163b4141b81ef4059b65c201ac0560e3a03c29e29f3b65 1 0 \\x000000010000000000800003c5eb0dee593b850e357fb8d9cbb90ebe0f0ed92824866d4576b640d2389bb7acf67a7bbb9c821f62308465e76a518e71adc8805e0d6fd4b3fd6e408f0299e2ab853381b34c8fe243d1645797342eb909a17a026ea26f06037b73d91f854a962dc1ec621efb69f76fc6d74744fbef5f3bee49887fa6ab5522ab2f39fd67216221010001 \\x0b3f86575c924fc087befb22e11a57be72d239b2ab969b6c53730592b0643563d2d6f6b15ac04de7c0fb8ce814f58e3918ea6a0337bfff4f07f228371a477e0e 1664360441000000 1664965241000000 1728037241000000 1822645241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-149 \\x784d0ad5b14a1283d879a120d6ebeb7562f486aa243cf9cacbad3e66530914b4de95a367126e18fe4dbb29335a7b23e5c5190aab9e6672dd437113eecc2e0b67 1 0 \\x000000010000000000800003a98efa89c18267858c6635dd9afe198c57b7d77e530a7d4ac0d458d401405ba2e11b428c65e15f812c5a3085f1c6f0685e8012419dad68ec2a6b6a445db5a8396069b4d3516a18a9de5793d4c8cba0726df676cadb08a6ca464460ccc0d47d7eeda3fca4e08b30b6808d55944fb0232f61c866b0e8abc88556532da1b6c09b33010001 \\xf8af19e2e3518703fa5cce75e4d8451826783d3e5d5343914d749c4e71223c6f8942988f04e673d88d8663dfe37e914cac73ab6ed09716327f9aa822c130990a 1666778441000000 1667383241000000 1730455241000000 1825063241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-150 \\x7ba558fe4c0be652c59e665d68fa338b679679f812d11d73b375807ca64865ce77f23aa7bf0d456d16145c3d5acb272068af14fdd85a2c85098d98f205560b07 1 0 \\x000000010000000000800003dd3625fdb63691fab6c1efa71606e4bc2a825ed6a981cc7d565406c077dd45c786972c7c9eea752aaf3f4972465bec1a6d4b8948bc875bcb2147c17957c4b0f075c00986bdf6d2f25dab7de5d496f314ae8ca38909741c2b207965ccc0a9ed373209361ba73249f38ade71944774e7f1fdd0a9c6d1ea1ec8457ac11b8b9b7d4d010001 \\x7e76c5b4b44e65301e19df59578f7039e7cfd299e3b87885122afc2780cb105c4a5512be2e82b0421fc2e053a0980d2f3cd2a0e7787ea6213cb8d4e7b6d6f903 1667987441000000 1668592241000000 1731664241000000 1826272241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-151 \\x7e19ffb6307048182359fa0a3b73193812f4d3ee3f3e480319fa1c8f6787fbd19467582749836224299b65eae6bc71c3d250809ea0a88f8cd1c06a40260e80ef 1 0 \\x000000010000000000800003afd129f64afc4a501ec98f160ff939d4ded8b16310c22be53200a82b901fdcb4f436bcc78488bb676c6d004e5eea991c4d7076e2993776a73ce0d0c2f3dab2a1cedf9e7dd45ce433860a77f4c8f628d28e4d82190b6e81c5be3b11a71331edc9eb6ec703dd6a2f0e29ac73a3c3ec22d260fc2259ed49604f6e75247fafcad1b5010001 \\x610368c91216340fdd799acb264a2671217f02fa027523e87c249334184d41b44ec3a986830efcfc8e04d515c0788051db44163ee6bcc7092965a987781f3f0a 1644411941000000 1645016741000000 1708088741000000 1802696741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-152 \\x7fad8f92227c26ae312e24420e4db272fef8d11fe931c9f02b739b4a41e12aca09769c878a54af03dae3d9fef8970f4075c217f7bf1bd02026483aec943f2d6d 1 0 \\x000000010000000000800003cc8ee18a5fe5ea31a6fd736a1a34a47f151df65b8d07646eb038c8774a5dd1662981b8ed2a7a6d81f8562d6dda71a3c7c3b7983be7da6818582b6b0b472c50149900fbc9dee04c99155154580e72011f04709d3c3dad4687fc6e41cb06187ab14c9025e86691f29e18f732b51db6143b12aa36895c042d12362926b6f99498a5010001 \\x7b063974c35d1f0a7d8bbede65f5411051e361956c8467995af7cd3cac0184a1cd53920815c3e0eae12607111a76b5c0ed60b90fa709bf0942c3ce63c855740b 1646829941000000 1647434741000000 1710506741000000 1805114741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-153 \\x8091f37a61bc827faf7677c22c58082cc128a831e48025dd7766974a32430ebbefae0e4509b9bf436a93fc404d7eeaafd85dcb33b0b4f7781bc2420f230d15bb 1 0 \\x000000010000000000800003c7ce86eaba04119bcf880fce478664e2ec383274435e5ebc13c81246bcfda5dcd2a094757f1f64db69a973e9ef294e8a975c2ea00770228fd0d280932e32f83070d2a08455dff0f22e3c886560685d4ebcef2f097d058cbc45341557b65817edd15030bcfc520b1d6b887a5cf619b38d56d34abe38d5ac59d6def5a693df7aeb010001 \\x81b239d3a4a6dcebc00b5c32a986ea07879a0ed0ab11f3a3ebc720d3089a042b7c0b49949c714fcf1a06fb960df8f6e40632eb95f8d6677fbfe8eea3e75da20d 1667382941000000 1667987741000000 1731059741000000 1825667741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-154 \\x821d1fb124c698136d91da3cc26fb07b7c865bed40a33b05f6cea82b73e909ab091c041a5032a470d16b8301b6d96db0617294437b06c1b17221aa1995689dbf 1 0 \\x000000010000000000800003d820b03e898c16d647431389fab065b49f923e6c41d8f52e51dbd6500c560dd58a7675af5fc512aeb6a58535756319b51cf9f33df06b79238a1f8c432b0e4457c1cdd43b481d953bdbe5326b180945d168f4cdda6ec2203d88e4957eeb06eae011874ca8294b5a5853ce4fac1a064719e91764345c3068233a6cd808db17c9c7010001 \\x484db55d35e86d5b70303803eca0a2342741d9d2a1392a0c64151dd584d97991e69e3e80a9b47c4e88fef116d64dc1077ba7fbcfe0baa50e3df32c0c4daf4807 1661942441000000 1662547241000000 1725619241000000 1820227241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-155 \\x83a11380242b159557f378d56bed6423ee3c731baa6d0c6255628ef57820ef15554675aa3956659c3450969cd631838acdddf265a12cef9e1a37eca193d23979 1 0 \\x000000010000000000800003c69a2021cbe2e9c1908a9b5c226c0cc88f4fedfb7c0b125075b3e8d6419ca491fca9a35222e3017e4495ade8e24a93cb51f8ab33c353bcf5ffbe3eac1d88ad52833473f85effba005bc68cdd5b88eeef645cad1547409648689fc4137e31ae17c8355bbfe5e81662cd4a146f59c8e37072863a5523314f8f8de1d3f6e5e9ae33010001 \\x68a25275c8e1e1181749eae9a4c837243f4884cd83466d2ab78a19a598632796c3a724ccb6218a2adba3563aafb3975f1d643b87126ce0362d67ab98c2b91f0a 1649247941000000 1649852741000000 1712924741000000 1807532741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-156 \\x86f9a1dd386c3b3188cb70c46cd22ea198c0e35afe1a54481807bc04bab2821eba6a504ad065c8087162db679c14a3998cf74f122292afbc6e0cdfd544cde36a 1 0 \\x000000010000000000800003eb89a2f2b8233693b412b667b78a36f6bbfcef6a28b3b03a18b1f96d93affef64da84e22483f5884bef8deb074b5155fdfaeb345825d58d3c6c0db215b04b0467a06f59f349d287ebb66f604f9a4aa8cb8ed847e25c6dd839faf4f3cf4106b74978e13fca904e1101192725d834e363c1a343019710f9d4a2a91bcde0932c5db010001 \\xe840123a4b2fce59dab8f9da61499ac5a1e9b46bdcca7fc04c319e3f62976216f9f2a4c9f69d7414687159fb47be930cc10288b02c61b3b7fdfba7401d0bd00e 1649852441000000 1650457241000000 1713529241000000 1808137241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-157 \\x88a943969fc8d3acd7519c3c0c657e72a8db913a7508e8c5d51a568d09f30d661e359bbd1a2486f21af06c60eef27142a7b031ec0cfbd146fd144b6b6c3e2a90 1 0 \\x000000010000000000800003a02548d57c0d4fd25641f24c3576e24adea540744f2d7bf58d1a04721a26d70f57be1351f31d268b8d2f8728f2668f787a3e553f4e688e454f85b0985e2facafe2d934280df06feca72276e328d1389fc266a64a24e460067de7727e4564ec623959823f9fafa506005ac4427db53e52a51d26c5ffb0c98c24688bc66ef6ed17010001 \\x88037cbf29f5075b6e43c1ac86d880c93df99ee9e9c0c9d3161bd9b87f7071d29408603612194572464deca10ca483b3b29e61dfe05c48a9db886712ca56f604 1659524441000000 1660129241000000 1723201241000000 1817809241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-158 \\x897984ddf6353decda4af85e6641dbb3b80dcb2276e5000150260a6210c4dabb0bbde7b2e30ae772d3fc840bbdbbcc2c5a26be3d566f952e6b17a24a5656fb81 1 0 \\x000000010000000000800003cf634a369bb54b06d64dd391e187840afb1322be5cb73a21dd8a2af98c915027d4c29f71d5e33fd95a88bda960557812343d37365a621999831b691f7d1d86fadbc797c746f398e5c2f314d0bff8ff6aeb22868c2567e934e9c737e0cfb585c999451ba2d43d1f53c31d1884baa333084c004c92ed288c42c25d0dec0156d43d010001 \\xf238349ff4d53474ce2da1237e7ba52cf4f4117e8578a02892d1d2d88422662d4b60852c257f82528542f19786b7c6f8793a0021b695baef741a73026c798c0f 1656501941000000 1657106741000000 1720178741000000 1814786741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-159 \\x8ae1649ef2e1c6aed2360556f25d5ed6c75bfcce20346edb2d014e15bb317979b505d00cdfce9f37fef311c8c943a2272791e77f03f26fecc2d562f55feac6a8 1 0 \\x000000010000000000800003d24ed96938cbb0d832d4a6ad82ce183b3dffe3fff1ab171a3a234d067196f5b0e20b3630760095b89af1bc240b2b5b2c7d8b55c7d248e19e65a4ed94141a2ed8c0736cb28a236de1002cbbb75b1c0881f7400d2bba7d4f4d7c188a5a23e14f78802607eff93a14eb90fc2e1d6f4d28009e1b85928b5cc250acca1a66e46d99b9010001 \\x9cf1b8861ddc7dc4d719baeed2ea450e4155796f6f637a3e4df88690868d635b4b96c6d14430336f611cf9687986ac380e3f63f53ed58e2344cc4a53bcf0c608 1654688441000000 1655293241000000 1718365241000000 1812973241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-160 \\x8cf1b83a61253efa9ec60e7d3bb3ca2abcb881ecf8af1e8c3e3c6ce2d165079e10339790a298133301c807876fd05d307ec84ae19a14cd0195ef5f795c69fe3d 1 0 \\x000000010000000000800003dcaac64afbe06e15e8b8ea81803747d6f584233c50166814e61f783a819a319e598fc06a41237e5775a8104472e3ca82c74b65dade81f6d743da4585ad84d98b2e5b9ee47d3461b45c8008645f0da197e082a2f13283e6b87a31ea1dba2098d77b25727c719cfb604fd771498a62ae4254a8bed467172eae10e722547f4fd8db010001 \\x6a2d8d0c53d4b6a46d6abd2c7d6f1315ea04f28db5777dff410110985372c09e97aaf891457bcacb3eb5cf5f578eed883356aac784e569d8f4d16113b3d69905 1658315441000000 1658920241000000 1721992241000000 1816600241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-161 \\x8c493fbc4fab2803a8fa699087e495418926ed8aed5d9bda9ab4154521b1321a70a975cc3d89d0421249535bc222f6f702b3ce77dc9966fbeb7b069d0703af13 1 0 \\x000000010000000000800003a5aeca5ca85af62b3db444077d6579249db9a7cc887f6537612b7e662276a51e2120fb5536a1849a4077cf0cd9088d0dca3c044bb715df76f2c39078d85ee55d2c9c01f805b0567771b0229d5594b0c5cc10128376345dbfcd73a024fc5e2fef664af6681b20593c77765f3df4a106e5adc060beda1ac2a1edd2a9e828392a6b010001 \\xfc9cfb5e344cccb19cd851f8b2398cd5d05033d9ab8ea8a3e0c5ee752534deec9e3853572f2459bcf53fc1f80a27ed1c82fb481f3c0c53ea6ed563711c0f040e 1644411941000000 1645016741000000 1708088741000000 1802696741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-162 \\x8ea1b233073595837de69d526abe170e11b11abde4e881f4e1cf82698d0ec2eefe3e03ae130de1de5b4e866b159e59ddeba30c5ab5303d1beb70a40e8dda492b 1 0 \\x000000010000000000800003a13ea68bb44770062090462d5c0157ff6ddb98fcd5ec14c9957dd8f84c3a1d70c2d10d4316bfb5daf6547a3a740e714373fa52b2565118704662d1b3aaa68f4ffeaae0b1db36d58844cccbc6609e59e7ba573d9532a89227b24508d588586045a4b21ac9b968bccfe80dc90e37ff578f7c7f396eea45ffb9cfbc3db2ac8c9c5d010001 \\xdd53603eba287bf4b09bd6606474974faad2777f8a76d47ece2535fc6cc960e6905c7844bc72f62664a88961737d885a0284b7fa6198157e432d12870642a707 1655897441000000 1656502241000000 1719574241000000 1814182241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-163 \\x9719aae38cd9493a3868e4bb7d3b3f579297ce5c206703e0571ee695ddbdd073826d851983aa899ca39dc68929ffea677e8ac5af19ac91d6b9e25ced2992cef2 1 0 \\x000000010000000000800003df609d15a6835e8b967a59aa268f7a8e1ca314d7d58d834838e0f0be3099c53b4374624840b75ac8de329d7516e2783af68fb77026153787023cd714dc57ebd1a4d9f48ab6d3fbce31c7a56a4ba40a70cf899297783ec99403be9dff790f00392a650e93827e32374b8244dc648c27ec211d25f08c883615e283275d7f1c60b1010001 \\x95e96860c5de90fa02b58c58879db507e87c93737d3264add8129da0cf1c54a3d000c08fbcbdcc7274bedec474a50f32658c982fc204da12bf13636fae8d6204 1653479441000000 1654084241000000 1717156241000000 1811764241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-164 \\x998dabe0a3dc4e620d5a7923cc59a5e88e9f8becee5436c7a8ecd105e44ab97e4c75813096f6fd77be38df48a34be87f2b1f167599a7a1201b448416066f9e77 1 0 \\x000000010000000000800003eb4a3f69b6b05af8abceadd9bd25c78e3c7bed6821e9f021c3b352c574678261e633a4f0d939af419e407caa2ef59c1b6fd171b7543e8c209a5eb82d57a6a6e78d253113006ca6f15241b3992b222ff67c21c7e0d9b6d1c0dca4643f6ed31deacf89d7e23b1bc2d100fc040b318e20a90a7859f17a6c87389ba0fa0a16e3cf61010001 \\xad86908c7a2740646bcb437ae6c598a7afba62add9a529a678d35d640f5f72c5ffafda2d610e86b8e70847702e04699da7dae92ee01aed7c12ef9e67c5cad70d 1669196441000000 1669801241000000 1732873241000000 1827481241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-165 \\x9f41f27e915716767c7877bfdbe8edf1e29edccbdc7174375c011b0629b852b1e43edab3c966270ae447c692f453218f9956b897faca90c6e077f691438c2c1a 1 0 \\x000000010000000000800003b82ab7ca33fd32b7601eaed0ba6e8d9973de495257320e2d54541ad77ce0e84c4c6ca6c99fc81fdc48827612bbd4ae48a66e4a722e3dfe65b0008fcf9bbdeff074fbd6a2b2cdcc18c300e8a8c50e88f99842f4bd4235741e3d8a192c49baac8afe49be205fd9c902ca50fd5a462c642ef8265d8dec0b643bf0c5bc40412dcacf010001 \\x6e09f97e32a0fabf214e7893b3498f430804d1c889c533bfc047843ade91645cc43861a13eba4566a64b6b881d8d0fc457f037196090c82b2349b770dd995602 1638366941000000 1638971741000000 1702043741000000 1796651741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-166 \\xa1359742da938611c1fb6f81bd19b0a07bd7b070ebbe5dd465df1c960027bf5719c3eb65332ec7e06a890370f3056a3b0b2fa8789a6af82cf49ca20214b1cb3b 1 0 \\x000000010000000000800003c62c80c18d65bfb39f5b90cfa25fa0f41f531475becd1c994d92d542468a8ee4404acae1bb9cb1bfe3d4339d26f88f786ca0d465d06661dac2cdc81c4c0c488a3592b8fb9a62e08ff791cfbaa91438c092d0f14628886a56891cf5ce2ff7a4f4cb43b6a438e5822246b588300223ae1f5b97b7fd388468c078393ab9598c21eb010001 \\xae7e15a0116333e70add9d98e633909e8d1fbfc35df28f33ca398de98cac5f60552e719ee29f741414b795163af2770db1cf1a8d18b2be778b2f3d987354c602 1646225441000000 1646830241000000 1709902241000000 1804510241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-167 \\xa241d642704a27105e8220bdb4ea66127b0065f489f85815b75cd5f5257492092f5451f28eabefc16eae761737b85addc9b9069074d4cba457a892c1335c0f8f 1 0 \\x000000010000000000800003ca1dac06c9310538489c1d7a92f63fa7f089f7882964a47156548bde120616bd935d63a54c01b0c44b70985ed819ee2ba735250da96c6aaddfe76aa1f34ace26d5d10df5b1726f9eb06dd56e0d9a984f9942300a1225476a4801f9f7b50f73b7b6ba9c86d202c0b111a0415d280e47361cd4bd15a16b4e58df0c7585e8c930c7010001 \\xc20bee99434a3ff9b9e249a6969c21ce09ad52f26f366c0cfc4fdb98760717433fcae23f23c6949fe5d2e16de058b9bc48574a529e48c79d34e562cf1993910c 1640784941000000 1641389741000000 1704461741000000 1799069741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-168 \\xa321c2406139244f036a179d1af41983fc34eeb919cf7562b2ce7a86d27593aade336c14876caf4a143fe1185cd8359728665af2af1f07a752077f0cbb94ed57 1 0 \\x000000010000000000800003c579bd17b20edacc7ff7e65327c92dedd095cb5a7418e750f2aece797d22d20e2c0ce95b0670ac9605a6d9a4ce3d9fecd73ab2a0a6e7e3b96048857ea4b1195e7fbeccd7011b865e584ae534be2f71b274ea383e57f128ddbd37045dc75e6b44e44789f941b87b358954656615bb04fc1d85d99b4739a630310261ab6e29dabb010001 \\x083a87b2b1ff2a11b32cc056b51befe697453f09f00dd7eec6bfc9a166f567f5e34625f5bcc59329fe5e8bd6782099cda37e9df58103705a33310045c826230d 1641993941000000 1642598741000000 1705670741000000 1800278741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-169 \\xa4659d4301e709affdf1503efd2d4bdc31a7e4992ba323b6902496f419acb03cbba31b33bb4c1b11784c999894145cc277551ac8a6e98cabb854c30544ff60ed 1 0 \\x000000010000000000800003c4d074ba077bf2e34cf4e6657eb9300022b55ca53b22eca529dbcd416ce088e451ca4c5f743043ef99f4160e11fe1fedef250e3d4762e3200809d6ab73df423cc6de39d07b37a1c82f3160706596d482defc0533eab8333d597a1372e707ff4bf60216839ab0bfa65d41a247460db6b24db5cee489855f8e55b5a9e5da5b6d1d010001 \\xb9e1d238a773cee654ebffdce9cf21bf676925f3b3bc3d00fca56766820244016c854692c721efc1c51c1609d7eb38f4e584b4bf18d732a6d6bbf0e4b6b9810f 1660733441000000 1661338241000000 1724410241000000 1819018241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-170 \\xa4c9aa9fe2a3ee09ecc5eac4890c2a6cf54a31908aaf2e4c0d3c72802ef5bb9b02921d0bf25faa64f6c7f1573bce7492de2b9233b3b70426cfc53282e7d7bde9 1 0 \\x000000010000000000800003bc2c7e86c86884d1c6f1c939d9cc6159dd7db7f956ab759d21b4888a5cd7967da56bf09a8c38a4def1579028f96a15e29f70e96c038162971d7384506e240ab10e0889e1f62f07934a93e08fe3792d150d77b24d2385554d1e9845ac62b3d9fe4b756d66fb99637da1a9732be13c8486401a593e1a266d06e0534f4bbed0cff7010001 \\x87b6cf6a182a6d01b3ae68bcb55e20063aad203e459cfd12494c482aafad027349c4ae587c887689f2f3dbb03b7ec4e6b983bba1fd8661cc3f8642f53c4ca30a 1648038941000000 1648643741000000 1711715741000000 1806323741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-171 \\xa59540a8f2706845b9ba3fb3dbefcdd780829accdce8958917301ba39f4e85fc21c9a31d844e33319fe35c52d697958d1a832618d72576f106076b07f9025454 1 0 \\x000000010000000000800003dc83bb477d0c2ff0385aa4b4675f3e9c44b6e1d646b9ebebf575a210f48426c5a94f15b4373c0cb66f39c00d30c50f839977a5da82b08454bc917f45a1ac9cd8fbdf1ec245fee9ef9ae675ebfaf028370cbf5a0a0b004087163805cd5f4c9902d562eb4c50e027e659eeb2240117a1c0f603628769d6a21d904e890b501038a9010001 \\x5a0c23ed52498fec55246ce96bbfb524824cbe51d7ced73d31c41316ce6f0de80278b8cec78257da74d63997a24e0cd2c2d4147fcbd4e1409d77b5c420a8090e 1652270441000000 1652875241000000 1715947241000000 1810555241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-172 \\xa7c940fadb5f93a43452f548633ffc3bb68af3d6bbbdcdf2f47510c8695bb702b22f454cfd51c65ca71ec5da493aa730f77629e03a9247b05d7d2fa2078df222 1 0 \\x000000010000000000800003b0ec37fb3963a8770aced84839e1a2be34d70245cde0998df9e7d65732a112785b4aa86846b730981fe05d5c63fa943587814349f2bc6169775881dd5dfdefbf4218af29e5de332ac9c62555e35c431cf9eafc10fef2b99b729e94f4f3c5bf97c901c5f4cf7dd81f80435c9080b93754725f407f95eec9c4139a2a8235225bed010001 \\x742492c6ae8b66b3bdb32276b58ca14bc1e65eab9c0deb27d77c80fbefeb96b9a94bebac852e500deaa01ae4d91b3fa7a017c0bf446d2ccc9c3a50b24575fa02 1645620941000000 1646225741000000 1709297741000000 1803905741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-173 \\xa805f846a0780315b85d4ab3f417b3f7f4f7f5af42c016cbfef0f75f5585dd24f6781bee7cb26c3390a441fec85c6ccbe32d61dbc598d6438639bd7ad83f6a93 1 0 \\x000000010000000000800003a5fa5f3eeccb0f487c2a9958cd221a0420fed2fa4fd159af3ed08d646fd4ba84da3a93e3483395683531ef326b700e26ebef05835e33421200cebadd70c6a04c74440a93933795b042efc4abc889d7fd887c696f362acf8e0ee9e77720b7f7809714971d600599b9c54450cb09157abd47bd49ffbd2269d9a33668ffaea70221010001 \\xb80468e57775ccd4647e1dc4984aa313306927190591aa642e2c0c95d65e888b794f826e7bbac8354b6a75f519e77c25ff213f330ebf4364b885d6a948e93107 1659524441000000 1660129241000000 1723201241000000 1817809241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-174 \\xaa39f5e3da0c5965945ba77576d2a28db91ced68349ad3ecc12dae24c2b120bdf4628793a34958749b13d055c970ec93a1fcc9135fa5ab0c6ee4821981437286 1 0 \\x000000010000000000800003d9784e8fa795abf1a7e17490614612a1c65e54c55eb58c1e3abed72a2d05f262f688616b1e8e4d0a2da8198787f3619084fd1962a515719b0b9bfdd947eb7415e315c40a52a7de13630a6befa5dc3a780f24b2f96b5716464f3fd39b88904c9ac4422e621721256ed1ccaeb797bcc0e98ef8ac9396fd6bd421ce3c0a2131223f010001 \\x22766233025a6c8122b882ec8eadd5431f27115f73bfb012c0e0c639efdbfd5a04aec74284cfb55043e23229ea4178c161ed996034d236cda7e2fb5363e24301 1651665941000000 1652270741000000 1715342741000000 1809950741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-175 \\xabd5ea71b7fdbc11886e1262c19347cd769d6d1c34404a7e1319334cd3e8b2a77d7a1afdaf807252bb1281646ba096e89537ef0a2732eba2a14b4ae955e83523 1 0 \\x000000010000000000800003d14b457821f587c81a058638bfd648f28b3600dbb44669612650d709e48ae6636e51247ece784b8fd1b49d7b016e28d0316796113a2dae950635c0a306f696e61bc96ad77e25217ba3ef19fdc7038b716978ea5d56f27a298c7a0753e0d3766c04ab39025c697157983b6cef35a44769cba1277068459383044024cf15275e1b010001 \\x6f15a4a65637db92b283ccb09cea30318388d11099b5bf1916b3668d019ed9eabdba43c9607d958f719f4257be70d522e5adba0bd701f5c3dadd81344a016e0c 1657710941000000 1658315741000000 1721387741000000 1815995741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-176 \\xad49f2276e63b0d39089768fa370445ee1c0cae55a75098fc1f38cfb2e6d754aa4cf2d587995086cf00318a65087a8b292f3e50a46a81bd6437752078e702006 1 0 \\x000000010000000000800003a808267ebd5c66b26ef94a47140252548f28e1926f4717abde12a55aff6542ffffd5341fe6e50a90ad991097e3ed66300d5735990ea8e33365bd656606fa6869059f390b108caf1f0400a0b93be298a5fa8ce40cd9863336445172c9dcb634083df10a6c716d9811513e31616d86cd5a60ad6229b0d3b43e177386edd9c255a7010001 \\xfda8e319a2bea707894ee8f2fc46d99bc7138d3f9344e4cae49861991cfbc52ec5a42cac594bb6f5d700a5c2a58f851e0c2adea6d3a451ef10731beac0df4d04 1661942441000000 1662547241000000 1725619241000000 1820227241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-177 \\xad6d586fa84c847668f0c86fa6a1f92af7989cfd1708efdb69eae4c06a6f0b61ab6d556a2827871daaaddc96e9243b7abd2b2e13862735743115b283d6a854a4 1 0 \\x000000010000000000800003bafaad2d71728687f1d7aee49250ad4a2fdca2b7de2f32a1cadaaa65ab8c9b45a3f9179067f10ef803e54976df39f6efe5190fd9ef6df22905834bc686f76745f3eb0d4886d1395f54f50db736da9647ba7dbf9e60b28d05e0ade78882e36fec2bccc9f4f4b329fd9b4a16020d10246439fdbb0f04b6290e5a51eb0af3fad08b010001 \\xe80468664417364af1232fbeb2bd10e5096b52c4b04a635a61d4198d3d821c56bd36d7d1955fa81fcff948b96b8a209145228fab61cae6991b0a7bd5d430db06 1648038941000000 1648643741000000 1711715741000000 1806323741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-178 \\xadb9ff3b62462833d51f30459ea16e5f6ef3d2647ba1790248acbb0c0fc8dc458f863b579df7c7e1a8e8167e11ee28deb93ed9f8154c7f0cb78e2834595ec038 1 0 \\x000000010000000000800003e685af947c8cadc6719d66e6e9c01142823b7ebdbe974ab4fbedc3063fe1a202cea2f6e1648216854e44633e6b454f82214d85edac4e5cb33383d0138ad50684335f646f812167de8130d4e190b705fbf9dd376a6db57916f65716e14c4591a516c249d838d3edd72e2764e30de0488d4b5ed7d19297c2fbbbe9e96a1018e2bf010001 \\x094d4ede388391e4304515d99edd302fbed5c3c391aa1476a1fb64c3a657117f385dd4419f1d6f841ce61c72a44fccdf4b6ad0cbd0c85b2636f60fdf3a9f6a0f 1653479441000000 1654084241000000 1717156241000000 1811764241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-179 \\xb1e568dea56525947db0fc3021cd98de1e3af66715c1105dec8141676ba8dba7413e9e7321a663b53ec621497a9fb438253557c1b6578f4bd07f2d4b8d150d38 1 0 \\x000000010000000000800003c3131d2f5df8c964bc7a20b6fb1f331ba0fd22e868cad4a0f58241fed57f6b69d3503c403cb7eba376276823707bbc262e7cc90b10cc15163fd07c8fa7035dea81e7399be10bcf2ed53a554e47652ea05f3b497c9685552515285501e8f86fb7880ab7ac9571393b1d3d0e9e55eba6090a3c89ee02d9dc05951fbff6da8f3a21010001 \\xca039905ff1ccfccd0f7cf65b1e39d8be677b25e5064b89b4a92ce89283d50ddcfd5b4aaf136a8485ac6d137fbf1603f5c3372f3b40770e1cb828987dbba440c 1666173941000000 1666778741000000 1729850741000000 1824458741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-180 \\xb7d173e3754331fb7bb011b3efcdd33f0cd82a5e85b849033f3dca27607bf4d79e080bb36d29066592b0927a25b3cdcf7864714fc38de6a6402ac59c48f7ee27 1 0 \\x000000010000000000800003c31a779d0fc8a596b4d81f38957b3bcdde08d5426dd1fea61695f9cf4961ae5780e1df4598828e38f42ef5545028bb855342d8a44c592d42e35f1de1583e1c7d003fb2c8503c89d5aa59acd9710244895848a0479031f83ae2ab6ce690a251873d979ac390628795cc1e132491d898ef2ada5f10463f726017e8375a02f1885b010001 \\x3bfb79b1f28ab7cc728cb78ea83693ea36d9ae2a03e6b718b2ebd2e32edd91779c420f203b49dfe30356f7e9c61b631fefd15a31f1497418f12ee4f9f539060a 1661337941000000 1661942741000000 1725014741000000 1819622741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-181 \\xb9ad89ba989416d95f0471653f284d1681f297cd02cfc53040dfb7ae4e8bb9748a107dec7eb4fd1d45891ffa64c2ebe06d9666e4110f8c70deb81b2773181dff 1 0 \\x000000010000000000800003b027a5aa66bad69c78d933c94160a81db7496e8cf9a73d8adf7932b0d1b6b4f67961c897b9ed82b2107c213cface1959eae5a8ea33c1a9bd6af2823c6d542b6636b5cd2c7612143ba176ebbea8735a03b8cabb3566d234469111f8dc79d537a2298f8b1d7e486bfff2e72cb7df08c52ef27fa585c7945f144743ee1d428a9363010001 \\xa0c2603ed405d017e2ce303dfe3835eb3db58549aa65e107055f878a4a650ac599a88b76e9aeb03df245d6ae694954198105057002da979f1fea367bca28e90f 1668591941000000 1669196741000000 1732268741000000 1826876741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-182 \\xbcd534cffd89aebb7e761a2ca9cb3e4f1fd3b3cb3ab3d8d7e665ee1b0f5be08b2479c8c14012e5c6b9e6c795ddad1d9a6de7d8ddd45cd2f1f2f9fc194b8edb62 1 0 \\x000000010000000000800003abef5e01b74c6b74569367f6b569569df63fd87f5f5978f82c6c14607128e673a3dc51b0ffc3dd1eefcaa79ca019fb0f5054507d96fd0555f880d2441f43997c16c8532b6d25357fefd2af101fb2a0e597ac6a845d37ccb2847067cff6ace428371af004289e71cc2983820ac53f4cef94d1c316bcc61f8ce1c6ad788042e213010001 \\xc957ad7321805e6fdb2a07d1928c1eed6669a979b7819450103fee8ff93d8f4722ceb3f5d1cd806aad8353236e5f4ee2926126c4a190e7407b3d3a6dca71d504 1638971441000000 1639576241000000 1702648241000000 1797256241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-183 \\xbce968716ebd68255df00e1843cbd079de16b60c4b4f3e8feee6076e64cadca11b468b3e3570fef91825c7cacf31f6bef5841b67936d793c7a4e776f431b6e1f 1 0 \\x000000010000000000800003be838ac9eacd446a0b7cb3928e0f595020d726c6ace5273f6cba997e7e74b26f11298cf99ddf90aedf49c7b2faef03f63890ab2c6aa91bcde7a070b5c04a41d74df2830cc7ac6d2d8c4d44e3be70c161a225e7309339f9ec1b57cf6e72a01c0c24c885f0c465aaa4930112dd9c3925fd084ab65952b045d615102b1c2e557557010001 \\xab55183d3eb399f6ded2afdaa4541f31b0505a0552125dac08aeb5981410cdb6970a9af250e5e8842385a39fbed89f427c8af99929be2fccda3e9391ccfe4902 1662546941000000 1663151741000000 1726223741000000 1820831741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-184 \\xbe9db2fd3667cbba7af9d0fc6f19ef38258aa2e59e92ffb1ba97f15f8a224484d3d9a73462f72e8df4653abfb21f1e1e400656fd10b413662022c9c28313f97a 1 0 \\x000000010000000000800003d5da846f8639158318a07c6e2ba9f172f80f9a4647826d5850841fe0fa2f4b34382c2a0966e1031a686b1c9e9c6a4096c91195a620b0b5f5122523096f11382ff65a86011b9062918ccf1cf65676dfe6e3f15aa0ad2567971f99fdd0eef955ba41262bc16d612e3f85ee0c55074e983404d4e59368f21b6e912623f42b8a22af010001 \\x1e09915425d9a4182bb77a4e3480e00ad04b5e64f17c39b6bbf067c36dcd99fcc9abb230c08d4baaec23bd32c9d1541e4594fb0d3268f6eba284934ddda74c04 1664360441000000 1664965241000000 1728037241000000 1822645241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-185 \\xc169f9af937e227c23b68adf478b2d30d08f30e64d856af8650304667a268eb78dc576179fc0bf622c6db4ac535cc108616143e866f35bbbdec5fe49e4feb18c 1 0 \\x000000010000000000800003bbc12154c30a3dd41e40a07779c94721f1d323deb9b2b6d8b375d939cea920b14d1e7760736dda82fbd958d320360e9e46e133edd78e3fbb30069b9370817cb8d5680b446772ca3f84860f3dc19ac569acf3588c3f2cb8683e96aee05c54af39e0250a3c9b890c4af4a55553b1e632bdfc239ba267965ebb612e9874ae9a54a3010001 \\x5f76b883ebc1e5afe9a66d03f2c0955f9d99a4477a98d5c3724501a5a56cff8cdf74b3ed62aab74523f00a6208372864fb972ac018d5c7c6bf3e1423640c1700 1656501941000000 1657106741000000 1720178741000000 1814786741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-186 \\xc5f16e7da021c123178bf3a9d07a50fc50dd2f387f07347452e9326fafe51355570634beb78cac16186ee6e2d2310dcb08c045e1b549f9e3cd1d4da80364bf6a 1 0 \\x000000010000000000800003e38102ff9ccf9e509646ac15d665178e814d81a6b8ff0891c15653c21357ac78b1f51e8bdf25798dc96ec050360695ba0c099f58ae0e4b56b02a81cdc373d3366d805314274d79c5b1f4f268df404e84422075057158068984a0ec5573faa141d3b2df009db836ca58e1a90f0e50615294e984fa7b299eea66f4b47aff513fef010001 \\x197824253a9f0e8ac82e12b59c931ba4a3f5794e937acc5d68515bb3cf0785afc92315c62e2087ff137f8a65d160f8f9a98f34afdb804fd74d431017826e960b 1654688441000000 1655293241000000 1718365241000000 1812973241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-187 \\xc6a1f1e89e5a40e971d21c425d4e38d5dfb9ba10d9a17d3dfa0ba1f862db9ea1e431ab7a45ede08313d0c9ca96bb7c180e575a37888c79d8f18419d5b2ed2fa0 1 0 \\x000000010000000000800003b93058c48094352fd2f8e0407ff723cd3a65696afc96726c981e694b4d496fb1d8d78ab0ac393bfeabcc26d6d6e2b1b63a76e1c5a95c991694ea7fd4a9cc9b3f72754223350fa1d518e3c41ae0900774920602667750efedd02ef4171c0a811dcf1e9865017caaa3f5bd4459eb3f55a63fea2c24c80194ca474dbbf6edad329f010001 \\x7b977fa0a96e9c2f63d9241c1ea0b9d29156f922020fa7d917e663571ca924824784bc93cdcf24a900ea59e2d74aa6a7d0bd0c2c3ef42ffd0483245cf5ff3201 1641993941000000 1642598741000000 1705670741000000 1800278741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-188 \\xc915d9daac15cd610b442c89e14ad9598b6d375077d25d029a2c330ba332b71a4519cbb8e14a786606114ce57a09c3bff30dac358024c64419a0bdb8222a8b2d 1 0 \\x000000010000000000800003bde5b45286cc380640ce37caee258c5af07a2a29262b483c86bf306d010074e9dcf0ae9e23a2ef0ee8bc5f33d3b0c9403566335b5db2e7b460213ca7f3169b0806af809f0cd557e9ace86ebf5449f9f8f21eb092be6bd7bfc6cb73c915d74650f903789e287dfc8c21824185d014bf68eb0e00c4d9baf117fcc45f492048ce15010001 \\xf57617d5111240f2ce298f7ff3678943994c8da18faea21adf4621c57a17d98424518ad48196f07a847ddab0e36d0578029d59539d50f463ca9f9552f4584a0c 1654083941000000 1654688741000000 1717760741000000 1812368741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-189 \\xcaf573d1841a79fd8b8d805475b537b6c5f9408dd3b228ad077add2745348913d0f2c4a16e21da1c0f25fa4b4b78a32e940908d6c6b7c9e062b746aeef32318a 1 0 \\x000000010000000000800003b141ae0c9a5f94d4dc76ff74d8315f47eb231e225754d3829a455f092e05de96213c94f7f731b5cfbb95a79daaefe489d2f2b4d9b7c1a6f2095a1c82c21cc2a813321dcc3cd3fbf93cd5f7664627fe4e6ab7fc8066d41dadc16b7d94253998a0a00ec5f0c81e2e035256f264397bb6c5be1e37612fe72bc5acbc876e8f8f627b010001 \\x201260fbd10816a15533182b61e5a2647a98dd19ca7d4de718b012be945724343713af03e97e2c7da5cfd6dee52aff4ef40dedeabdf1832f111d00cc86f18a05 1658919941000000 1659524741000000 1722596741000000 1817204741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-190 \\xccfd6545fe4f00c677892891096b8274f652ad30f86e77c8641da8628cc00c98f59ca2be63963436e221ee8814ec1d684b103f67a2156db2d311cfb8ba789f2f 1 0 \\x000000010000000000800003fc9ad5a124c6b69477d5e8ac85d06f28fe065cc465e79edeee7b1daa28b7b60685051d05e63bc7acd25f7c3de981e99dcde476539d5d1a74ebb34a0c02b00b388a3f3765c2b89bd7480e178ffe9ea086a5fe77d5ec034efc50baf17a78521d3fef508bd1e2353e359a4ceba63bcc57fc82cec652b5a3368e2edf93d4c59d4521010001 \\x14a42d6377acae4689c26d6e5ae2a3c7e3ff8a134bb3aaa34ae3602ed435f6006b1af733f9ecf72fab11b42e87a278fecc96b6e28e3424fff4c609ff18795c04 1646829941000000 1647434741000000 1710506741000000 1805114741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-191 \\xcef98cbb22efcc9b5b63b2ec640d1a85c77de7a0f9e536583fa2c77d9b7721f7c48ef429513165f849be4046e9b98513f40e44495ede0a0e4a312018db8b5de4 1 0 \\x000000010000000000800003d74b7870160a01e5a4b79e009c75d7c67e96bd7446a0a467db49d50cb527ba4695274d3e9fcd21cdc5ad90749a46fa0f4d1bf9de71b9e2a060c05576dc34acf4902f4794eecebaaac8376431e41b54726420146e00bcd54eeff87f345f9c57af7bedad7719f8e5434a9cf99cacaf641f7a0b3217493c4e3b897e6b49d3a4b437010001 \\xe8adccd0456d421b99570d3badbacf8ad7161f053d3a64d4f3de45244c74403e0399fe2e297fcb5386ca3e1f6c606c2d7f2eef9d42dc7bb7380c3ad5af440707 1639575941000000 1640180741000000 1703252741000000 1797860741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-192 \\xd03dd39b122e8e188fe3a4b6bef684b2cfed653112d882434ff2fb4a60157df165b89522785f24234ecc888dcb9b3f156792757efd7b646e8940de4ba21e1858 1 0 \\x000000010000000000800003bb482f25d36fb6bc0b46397aa9ea3d55161d5ab8d2bafeb9a10193b6858cb1ab606344d9119f05352bb233962bf3f08d6f6f1ab7802d25e96b69e75c87eb8a8d34b0929d3bcff81c855e79c77e029483f26ac02600d09892ae1279b6234b6f02f58e2028a339ac5e7484a77b051519652f1e4712f95c31d7043a7ccea2ae25db010001 \\x34bc60f55886cba95c2fc986a2a8ddbe9cc5c808c41c109d73004040c0bf90cde16e5b05c4726213da092e84a7bebf0820c16a93dc329f4a3a02fba2e6c4260c 1665569441000000 1666174241000000 1729246241000000 1823854241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-193 \\xd3919f6c4910a1b01bb46abb6fec5ebb30130ba9109f888e29b65a5eb7458b710923ee70adddfc9eb3faf20a732ee7d5314188f73cb15be0ebaf4023d28f9b5b 1 0 \\x000000010000000000800003a3fd30aaf5ed05622a819e580c18af3c3979f488dcf2ee3e1b8795a6d76794ca322b0e278a0aa003176c79052227dcd5ceb3c717279a810aedcc3359c76b6a4428306c9347ecf720df7b04a41fa90849d70ecb42713cc4906b4f1358d9dfbd3a2f929a52a479e6484f12b433e828ea9897246a69e90cc56f945b801f2dcea6a7010001 \\xc68eb1d524689c8f59fb8856af112a6b5cf53a6415cbe3b95c8cdd5169c08a3f19e666cf9b282ca47b66e80636ac7cb3d2c4c77855e122a7524651c28998f00a 1664964941000000 1665569741000000 1728641741000000 1823249741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-194 \\xd38dac135615339960dc90e10fadbbc8393245ce9d89a6397b04ff3b50b1f0cba3d6fa3aebc2d82626dd2d06ddcbfcce75166c2c2ee62ec193cf6b012004deb7 1 0 \\x000000010000000000800003dae9cb624205a3b9add88617d7b95f5301e01c062392c9e74f6a73f6adbe099489e0401572df4cb26c2739c245f50750a31940c801c6ec8f8ee5d9b6836beab7b1ab32ddaf72bf940f050a70504c071911130daf3f28f5a2fae9857a5add9135807a80ec40008cad3481a9bc7f90d62afbed1d1c6cbdb0b0fa041f93b4dc5651010001 \\xed6f16b9cbbcfa558073d4bd582187ecf1775ab41190e41a818c2b768107080f56b30988753739c5377ddbc9c2bf771c53dde8214e58d30e085e7956745e3608 1655897441000000 1656502241000000 1719574241000000 1814182241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-195 \\xd33179d5662a79168e554c9f37afcbe3dbf8f03a1604701ccea6a960e1a13e83f7f29a9fce44b0b3671835bbc1e89d1ec97652d79c170a5eb18279a34c3ccf0d 1 0 \\x000000010000000000800003c9e602214e29910334eab8c501b089618d74943fa7d5e82511d0e629c10596dcab756e93295760183909bf179eaf4738f85049862b3b3a6c87c38ae6bd9539f3af534f031f4625d8f01e52d12f84d30ced1b75c7098ffd1c36c9a1277be23a99846060bce79291dac215434c30a7621876a3b448b17e72fbec70fdddf1740e61010001 \\x18b4153b79267bd12ac4bb05797d3d872cb3e957c95963a917f4d05f05a40d70e3f38a99ac4c678c21d6de8b6c7fd2be2b482564eb2fb7bcd5a5b04d26cd2e02 1663755941000000 1664360741000000 1727432741000000 1822040741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-196 \\xd48db9364473dbcab4b468919eb5ed110f46737bec5c7bdd545af42ef88c9d97a24247d4a36bef5383b1e0d080bb53b05436294ef6ac4aec26fa730a6edcdf9d 1 0 \\x000000010000000000800003c8d15d7afd45dc80a6635b978063b9edce87a86f8fc14dc2d5d28987927422f53440c13f91579cf8e1b9922509f8ebb09532eea7829ddbd49072739808eef1e1c4946a14a7aa87bdfd64386bf6e48416bc8746bcbb4b13e53918df96350525934d2c47ef1a73c88545780b7ff388e3321118cb44cc28272988ec17097a22ee9f010001 \\x685850d48aeea8941ced975b43b4919755208628b467afb76a1dcc7d884092850e57573f9786322ad43a03cc41f724770d5c91c813153493507123f17970cb06 1666778441000000 1667383241000000 1730455241000000 1825063241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-197 \\xd6f50c572300fdf6becef7f259899c17e4aa47fa435902a01ee15869abb21e31d22406d754d83932ba436dfa7df41e0f83140293b5c51f3674b7d2d6fd8c5b47 1 0 \\x000000010000000000800003d1c3ab0aa91302e2f4cd47a2ce5710147018f8ab4a012a554a036f2006a0c6c88d00a9b91bfb9ef04a6adb700df4a761bc5713504f7c9d614146fcbf446e0d6b6c719e67e4686e0ec97c5d16a3996458455dd1ed2de4ddeab375422bf15db5d6fd834d8315dce0ff1e32584de09eb6e687897d8135ba17ae60f449917797b561010001 \\xc38f700e3a2a7169ff136ee1ef96d07693c53ef34ef555e33d1acb3570427f2030fbf49ff2089dd4ba5f0cadd83939af6929b9a8373c684b48ac6ed89fd0b104 1648643441000000 1649248241000000 1712320241000000 1806928241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-198 \\xd7b956d59b11a54c3809d18cce64de14a8adfc7c6ab52c66bc8f186e61ffc19079a378991917a3b4d9b0ce5184e8a947b7d97a4d96febf74f419ba662ff37b26 1 0 \\x000000010000000000800003befcc04da7e8d5f9dd6b9f97c7d90c7b0fff56cb9bbd9c39e105a59bb287fb9036be978e9dfab5c2b1e67790ea6c475e6e0236f8e5ae5a147cc0b6cd2feb732197111c8b1f48ca54e3219e9ef51656b477e69ef6510a3003c44df0fa48600bd724ecb5cbf798800115f5b5472e9d9a7ee21d7286cfd01bb88cf4794c9141b031010001 \\xec45588d290b87bad276ebd65786dc53fd27e7330bac31a3dd0ac77f14ca2c87a38a00dcd9311383be3d8d6fd6873d39042a404cfdfe1ad95a1ab07398482c0f 1651061441000000 1651666241000000 1714738241000000 1809346241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-199 \\xd8651dfe18c7e22d450f56ac302c5717565350a360a1bcf671737924143148e67e7c231c0e0a68cdf2d59dace92defff14af9bd0109688c4d4f8e7a9e974afb0 1 0 \\x000000010000000000800003bc1b7af188742efb845ebd18e29a53c52d793e31126e470ef72c7a723e363a5ace37f1e8b443a8fc8eec50530a5a7923f26fecfabafef02420a92a45c60e3086c5008d4434d3a97f7a9a2ba2b7cc39f36df4c26ae183c656bf17154f49acd7abc7b4669e1125edcad45216a67fdc9a4eda4e295c1919827eddf871185b05ff1f010001 \\x34131ec703f9d4796e2874f22d09e1b6cab59692edeaa37c99640d048da3f0115d927f108917e1e2428a6026f34a8eb643fd2f48204f3edbee0325246162560c 1640784941000000 1641389741000000 1704461741000000 1799069741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-200 \\xdad5f2d3551ab0bd3ec098e6afa65b3291e8a8696a61b452cab3d79bbdf4252bc58b59a5e59cd26f225c65a9bed5f163f13ec44b61fb86c703ac319e1a387454 1 0 \\x000000010000000000800003d48c2ae3e84e3ebd82ffb54c6b1b8dc25864b7901e67fd514a6fa2d5c34f2d9f136cd988083ddb2c5002a74dcd42b38f94d1442eb16acefdec760c19c5a90c33198a6fac2837672ddc38974cc03a02d90ee8a566e921fb8445732dab47a34e30207d1202658f41a711ae2b90b38d49b0c84dae8a6471de71f4d9db2fb875fe91010001 \\x888cc0706e34fbdb103fe7ed884ad770fe3d67e9419cc7550d7a0f1db14ff51390990a9886c1d3d5a05f72259c2c985ac0c328247dc039aa0e1bd884f1b60d0e 1659524441000000 1660129241000000 1723201241000000 1817809241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-201 \\xdea901d15d39f9d4246a9c9c91a5d8b7d34ef665716486db5523a35030f04a929f426d70d926a10b34c34bb40c4c7e545a352a92b037e0efd05f30637ce3f048 1 0 \\x000000010000000000800003adcf3fcc2518681f4d4d48707b8cb6ba43944b58da005bc0f72227a0fe0b47f8e0b04a68ca52e09134afd64117e3ee7086f274b17f6376fc8452c01343ce783a144c72b3be6324c102c4e4d62fd833b2bc94b82178bf0d75cd4fd361dd01703ac7b4e82870d937666796b9a24bdcf179cf9f4cf5c6a1a87de0a25d77afa9f257010001 \\x96bf4cb26e94c899705245db8b2f7d65035b5d815ab669fbcb6eba4d50371070b5275077cd93aa68809f39c8494c6f2038f3e8a53bf9ac26e5275d57cb56c300 1655897441000000 1656502241000000 1719574241000000 1814182241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-202 \\xdfc9a711ca9bbbe196f2976d9fbbab36e5f93e9698d4f26f9ac28fd8140045ff939297a600c19b36472fef42f78e636f49ae5a459a661f5559cc90143a4c0126 1 0 \\x000000010000000000800003af552cf43a6b7244869dc46717f9687e1a201260332cbcd780c84b25942e5074ea16c7f48c92ade98abe29a00349b44e2bfc6ec2a096e0c90ecf2e3852951a3dcfd297ce1f98b17ae5bdc5a6184ab8d736c45f4c6c74baff10171c69e20c5b8df39ee84514d27e886c3972d25079481925ad2019443077c7be0cb536ba82baef010001 \\x3b68e760821481b1bc32fc499ac33be4b0d359f23e844716d91267cb2660ee6623965a593f1c2d314237e3ed22749efd53e51c6bc3f33f24b8607c19dddfd90b 1638366941000000 1638971741000000 1702043741000000 1796651741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-203 \\xe4c9654e7865d4ab3de52f53375b6d76f840abdf66d59ff8f13f953a9f1ad5e8c3520ea71717da9e3fe4e64eab4fb4e4f6acce9e22ca5dc8ef18f4bca53af61d 1 0 \\x000000010000000000800003d3186a539b842d1d310730ab5610d213b18587d6f3d9ed17d75a7648bc00261b89b3eb9adcd42429d9e5733c905263cff870574df8a32c25609b862d946a368b4c3293be79a35996ff7722cef9650bb0e902f0c2424d563700a531bbdbcc36a27c6881731c3268c279e9f74a8fa10f2c2df995e5588e63e188b6c7f587e6bbb9010001 \\xf0020b2711b2d662a1b29c1caa4850ce466474a9754edb420c1e616ab904f3573633d90bc36086e06c70ec5f060d99bf5df178628d516f6a36352abdb0ba6003 1656501941000000 1657106741000000 1720178741000000 1814786741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-204 \\xe569522e5685f89e62772d0f1c54a2ed6ce165f876df9d21d66ff465aec5f099b5dd9ee9a8cf059b581be05e90e38fa4a1ef01e0789ec95f69e780edcb880be6 1 0 \\x000000010000000000800003b427efdaf07b60cfd73aa833fa37f7ce1280d0ccbe34c64098ef26a881447473d4fd5ca99a27b84c5726e089272906260be523e3aaa57fd798f1088c3dd9edc922a49df32b045b9e60264a9fe610d69e14025b2dd1dd20e018130dc0a3d1c65956bf0f3a283c73ff322f6072828209b6453525a20072618f5cc7b5c5e0b21dcf010001 \\x600654ee87b01a7cbe23c2b71830f63b96ca3f11f26ffef6465115c333751246c394510c62b3cf8f915dc9fed4df02bea76997463e25698a8b1e0b84cbcbcc0f 1649247941000000 1649852741000000 1712924741000000 1807532741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-205 \\xe65156f78402b33163b33591de227e8213cf8173eb71299b5d050e6a09a649d136bca2a3df13312dd2c62a7a435b3b0728feb7f29b86ebdfa2fb2ca6d99abb5f 1 0 \\x000000010000000000800003df2a03181423a6ec9740faea20633d6e2ab252635bea35e6de6eb683c7f25e6e6dd1139ac828e4a4abb78a4388785d766b0d8d0f97c679b8cb9ae42c1bfad6cd6c8647280fe4390778f0457f3e305163013bf90a6e012c83526e6c6d6ca11d2e3cd7e3d03b946112839a5abbadeca6bbf0e516fab24badd8f7423ad2b78ac0f9010001 \\x2970de1ee2efde742b10ce49562044a98c8d01ece381342c2acff98f8c1c455f502dedf566dfe7749a67407a50a44cdaf55f8128f2ce8bbc732eaafe4fee9c0c 1644411941000000 1645016741000000 1708088741000000 1802696741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-206 \\xe68572118e1520476bd6ab3fae731ed304d80b2c6176a5ec0234009a3d4f5d1f3aea80fd2103f0f132be95f417e38335f9bca67d3664b12d6e04e3683e631cce 1 0 \\x000000010000000000800003ade0af820194a77ddb4b081b3149818d64f5905af52ffdc6c7348a7856c1c41071419881adb4bdae940e3ac84ff231b983fb980368ea7bea517b7e5d8bba5f016a393c33df0af790a2e13a7db4d5f6b432d79db6a2adda0f72681465625f57cec658bde88e8a28a7c8de22932c07ecbf411d09b8ff28e0d1192ce8045dae9e1f010001 \\x890e420a72db274d47e23bc3fc52409eea7b5543c98ffb925f0a63f0eda4dcf1c53c3fac4c2c672cc984d8129138dc43627fef9a71a410678def7f08df921f05 1659524441000000 1660129241000000 1723201241000000 1817809241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-207 \\xe9b50adabf7703a0f8572cf452f4a59249cc7d3e6699c07c1f81bed902de1092198f4606e06d7a12325c22724ca8cf850519c675019f0a9fd9afa0fa1e031a37 1 0 \\x000000010000000000800003bd140040bb4b575d0ebb47ad28a565c1216dd10cb7267b747df67297b6cb7297871c8295d4909a6f4728273f952d66d84d99a34770dd9f78a886d072e1c8fc6bbbdece0cfc888fcf06bbeca678fd390e3be193ed02c18aa4ad44f9babfef83cc3f7aedde6c052d72487a4fdd569c8f243c6c760de4d99edc8f1d395112fcf36f010001 \\xe87ee15c2c4bc277b779282729301eb29467a7f45321d8cf1a6a4fdd92154e7f6cc93b363163014b806004258e882eb74f43887ae9222de31f094820ba81d202 1648038941000000 1648643741000000 1711715741000000 1806323741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-208 \\xed4d1689489ad038bb88739e049556d1deea78da3ba01bb3f3b3f6dcfb289aaf1abe398a98ba46efba939e1cdf7a2fef34acd4d7b030ea355345516115ad7e8c 1 0 \\x000000010000000000800003c04feb3a691e9c76cd57c451238c9c3793d416465d91ca6b42fe704d6783ac57fbee46e3eb9eaa807bb8b8b46a56d8e48d157b10e6bea46908baf0b31acfaf27d7ce8d7060135802d6656f50434eaa27ca8cecc8fdd3c04b4ddf0ac5ebf4e9fe7d47e53955d2fa84ead2cc58a53d5849b47d13700c38c055397da51236e89ab9010001 \\xa83bae6bf15976fad79f2411b6c16e7e319cb1ea6b08e99f6e9cca16dffc57909637d4da0f765d4e8d9d6a9b29ff8bc0aab72803aee9c8d661db9be8cbeba90c 1657106441000000 1657711241000000 1720783241000000 1815391241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-209 \\xf631fa08762010c85f6b36d06ef9658294c2730ff5f6021343f7e617138702d035ff758e5a67f462e1be4cc0204ab5ddf07302c5d18ea8feb0533bda62a60328 1 0 \\x000000010000000000800003ba07d2e39a2d0d1f1ec9bb7843762577ceb73b119fab0b49e8ab800ded73d1e0b06cb9dfbfdedcdbd00a1a2ba8258968f595a9a74811ea2a31d8c98885fa285d01e7e257c6ff495f20034b7b26f203d80de9e4b15a968716f3aaa980c97f4af11c88e0986f9fd05bfeab92238fe39a58ea3f947d5075e5e8a43fbaa96c7c4667010001 \\x790bcd48d8385bb165a8ca684e26851f07b7311b7fe4ce89c31bdb0365199186ebb285246c1ac982fce061a477dbd6b3e5a059ce6984995c364269d602158507 1654083941000000 1654688741000000 1717760741000000 1812368741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-210 \\xf73d7632861f1161b5077f96fa24b02a77f4e0f4f327e703ea8f0a2e3e131095b646e999593dc05af6b917d94b796ccfb40eecb06bd791117797f3e304ce2fb6 1 0 \\x000000010000000000800003e1e829fe16cac32d432b27f3eb2f4e4ce5af68b7d423e77b8861942c1804c19d6693126797949ed28ffabbc7beb19785ed1d80a7264667013b3a3312f81ae962595a8657663bdd41ee1dcf9a9c358b72133bbfdb0a1afa8218efee78ec8ba828d160e70373e63409fa2d0ce13f2b8ef2f3a5eb4b321e550ec2b842008a0d464d010001 \\x2c2a04fdc2e3dd1edebfb6e015846b5edb473e1c4b4e77e51a7cbd4d80d21160b1b0ea67cc3a85385c3d5210f464c90d116e51f38ecaa09e8d2ff93c6078df00 1660733441000000 1661338241000000 1724410241000000 1819018241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-211 \\xfa69f47bb80f791c8bf70881534729455cda9d3cb427a5007294e7890a4c00cfebdc83db5c6f6f105f07c658960d9e3f245cf220e2250303f0a567977192d0eb 1 0 \\x000000010000000000800003a89fd05ea18a96712afa66ffd65080650ffa76b90f12efcae8546d105476907d346da52523aa19d2e6018df361b20030622c17b14f61f86c2f6aa66fb92a0622b3588b616f5a725694d0cf4e330e2f0123922ff47f756cc511f1478da9d8fc0d2c24f10c15e6f552f347aaba07aaf3e13f61a890219dd55007c24be9fad1953d010001 \\x1396c5a098f0374eb2afe76476092d604edd8bc8396727961101f3c1eb6981b74963b54d71a0bbbd806624e6cc922dae629c7011e83ae7515980178306a8dc04 1652874941000000 1653479741000000 1716551741000000 1811159741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-212 \\xfc697dcfd2555af070892f89d6ffc2d614d344b8c6d7d066b414d7bd94860cfc4e86287d323ffd6e20d85a4a1cda95c0d61b9dddc66ea48f3913ec0043c3141c 1 0 \\x000000010000000000800003bcb38a8f24a8c418ffb9c33372ece4b461e4e158974e50092fc66ebef5b33e3b7fbe927a3f0f059bbadf6f2838ecb776e5bd4a794ae3a2f8dd1a468555204a6ee857c4593fcdb88ffb864c32bb94f3814a106c6b8255776f65482c92450df261bd78b15623a46cb646df293628651129a29ac59cff33ae2fbac239b0683a4d65010001 \\xaa682cf853d11ace55cba1d58a2585b91dc548edda814549dd15e416b4e202463cbbf3b73ab606d5ab739069f626aec352b6904ae1ab4e728ae9e3f838e91d0b 1650456941000000 1651061741000000 1714133741000000 1808741741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-213 \\xfe91f22143f2c1849eac7b27dea11700f185e6bf8345517830d7d956dab181bbe550cc5827238ba46bbd931a053ce0237c9c6bdb295965c0d6ab57652e5c1c12 1 0 \\x000000010000000000800003d34b193b0c515608f41688b89922bd9c247025f23134fae09e4f4a8b7881584a6bdae53e736389c99923d8e3d09e202362670dd3a0e7e20071bd17899d1db2c2bf03f050ad29a3c992f01ce06573a226c6bc0c2415ebd607f4b4e52cc709bffa1257659346b5298974c539c62344957e490fb4b1e828402d6edf55f444b91e2d010001 \\x93aea323099fa4a6ac0c26372950977e2fe58d785ccf80aa6a4866fc74ca86ad19cea6693d922d61b732e7268a5163362a94624c721c74f2754ce406e719e30e 1648038941000000 1648643741000000 1711715741000000 1806323741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-214 \\xfe01e45ab30326b2206c0be1dcdc4a30024b8c002bd3bd298fc70be69574a5031072d17e667d93c1e71228c48f902d5803b441fa87db5a1ca5ad14a5ff5e0ce6 1 0 \\x000000010000000000800003c5373eb6544319317c137c24b0c6e001d5c9ada1828c69e6761dc93655b0715f0548c50e3665a274b8e7b49f7216df8f4dae3ae9dfa29c2aced963133987c737812ee06f37b4c634c961b02be5612a0641981f1cc2ae85a887babdbdac72fb9959e7b2865b440cee15205237032bb58d7fbd37a72a8fbc89bd389cc95b55a4bb010001 \\xfa62e7fadbc19cdef48fde529672d578f733b4a24884b71caacb3ea1e038b493bf49a843bfcd7145bb234894f9f2c411dccea04b92e47be77f8d94cf46598f06 1668591941000000 1669196741000000 1732268741000000 1826876741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-215 \\x0012868383ba21b8026c0fa01d980f369e0a2eee295629005ab2a5f7e11bb2400e37e09496abc1825177e27827c739cd2b704f6a6bf6c6a4d4b41085435c4ae2 1 0 \\x000000010000000000800003c6f4ec1b160be9114db6379b8147ecc923b75772136018ce93e78e0addf877d45fcb6f87528188fe8996852dcae339a3afe0070bf145be40497e8977f919ed267249c8119683aba808e0b5ea34e60efb910e6583b43485c38394bb8ba3ab483d7ebebdf183110468f3c02c9733bc9d78c4921b6609d4b15f93dfab682c26bb99010001 \\xf3e588826874a0241c7437d1fc4e9dcb230b66a1e28a746fc0664cbde5615cfc805d4239d95c3be669b38e101bb67025ea9f988a2201a2e8972868beaf6fd00b 1639575941000000 1640180741000000 1703252741000000 1797860741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-216 \\x01da62389b39faba35b7683539f082bb5814e347ad038f6b21121d493e1c57d1a642eb6686bb4e8dab0d94fa6093de79f3a89cc4364d0227aa3e0269d2fc0f30 1 0 \\x000000010000000000800003c4479744f4c633b63d067ee9911258465b2ca78dafd6f11bbb89c160d17cbe09a3946b7117587fdf1f1be5bcfd9ce224e7247c2ad4b1379ed8a15987fae8a7d01ece636f9b92b392bac9030925d105c8615a672ce9086e0100b85a618b622e626752b3bf8c64a1b3ad444685bd72430a8daf60ef51dd3a2c483a967e109da223010001 \\x41dda9476b04f6053d3d10e89976cefd9e6d4758a574af22b3cd11495bfa83e3d2a578583a6aa7f3c70938a8815bcf3cb4b3863e1dd821c0221c2fd6bf46ac05 1661942441000000 1662547241000000 1725619241000000 1820227241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-217 \\x02c6b0ff00d9e857e7d6b0adcdf8dba737818613583a35a48f0719b5963b5b1fa3b22d2a517ef533446295ad40c8e476ad283e7c1d6aee0175b8c41a0c852e1e 1 0 \\x000000010000000000800003bfe0d766a573e39c22b77605956bde6f9fb00bb734beb02d65e8ca9f2f805db63307839f5b6f26a90ed49b00f2319a0c1302260ceb0cd1c7c3d1ca0932e5f8d85b9cc514c094927a6f06a522767dc3e133d46e30ca32aefae41f637650e0686fd1f8ed9cebaa45a50798787ae1c9274f8f14a15e0a6b6d8f2a0883e5faf32e07010001 \\x56e810452087894c69ce7bad51ebc899bf380da6d4d455c90edd6eba33369b67e07952367dd01bad46c5f30362113216f82a2ff5a0dee153615a7e2dc52cc001 1651061441000000 1651666241000000 1714738241000000 1809346241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-218 \\x032a00d5b8a76d813d926f3a634c8b18f09d9937e6e29240d5c74c91dfdfb80c75ec9fa6db69f38e600628fb8e36a264bbae9e2e1521bb84078592e2f488c21e 1 0 \\x000000010000000000800003ae2966d5d650842fdf28e479aa550ff169bde075addc78203908ce4b9b308d0337186d77def5f2f7308d2340070fca35bcd3a24c9322cc7c779fc8f1885a3666e6a24fbeb16219f643a134645d5305603733b95c0a73a086edaaece843a142dfd2c167b6d305529b0b70b1e77f8516611771ee27e92ab56e7bdd6ec7fb581fc7010001 \\xfe061457c18f7674a2565aa9dcb9e88a5a3aa4973842b65e05290e05df1ef046897c4e15fc040462d4c8d75142150df5328de5e3b5fd81d7a57830cdf6945f06 1651061441000000 1651666241000000 1714738241000000 1809346241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-219 \\x04d63639e36f9cd27b974af72240dd21a010e0284b668b67165df67b96a03d241be5ce2b30338fab2831406b6c66b8f97a96d655623452b6148ffa708827b106 1 0 \\x000000010000000000800003d8c322433b26622e114ed3f642fb2a2d44d9828f1d60c7604feb836f9818ef5473bf721b20abcdc27e1858453389853f11cbf871107080cca88575cf727e2b8e4a38635777a2f882b829b92e02235786d8d6177dc52e8f8603c667f1aac31c15d554110a4bec179074fe4507cb0fd7fe337cbba1dedf8a12e3ae43e0cfadd22b010001 \\x160a41fd779e5bc03e0c08d366eff721c9a98c77b5a7f4a8ea48b63096aaa17a605099c9077b9db0ae653a4a0881c045d136d6f3fb616acbf92b2b7948af4f08 1667382941000000 1667987741000000 1731059741000000 1825667741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-220 \\x055a862e91b95d1f0611ab0ea0a8edf8289a5431e3b6e9542035df4e96f79eee3e6895608d35fb100b906d2272b257bb6e9a95f6ccd010c8f2dfd3a9bccec2ed 1 0 \\x000000010000000000800003cc23ee0e4b43b0d4ee31b3a2e568421e0a9dae824a78dff25259c66a7816ecdde1a09a03734ed69751c0409bc5239443288b5c4595fe729d1cc45abc16e1d6a386ce07ee8072cf52a196eba6016d9ba8f633241ea97b6815add8dc507713debf08e472e0d7e9aa9f902d7be93f7f9119e0c9055fae7fda10debf3e09641de8c9010001 \\x5ff222eeb1e88acc2dea98c53258e81a9340165eed1735dce6b6311fa94812378ce05631a59b809d9bdeb5a6735b09b90fb9628025945a8707d1bc40b7009d0e 1666173941000000 1666778741000000 1729850741000000 1824458741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-221 \\x09aad548e5db208c7338b362e3dfbfeb0d95165cc38f79c5fd574fea61d2314a9f8e69d73fb96220ea8af9898d7cb46dbdc02863fd735e41a817b2e73e087b77 1 0 \\x000000010000000000800003a210780c72fc911433b8ec234dae74a08f19680e68abd6d89e7809f0b6f4828096ad5e63c8f13546ca37c4a2f59e54fd56c51c0a7fa23f887d9cad4b16d7f1e990a91064e510373ca88c0f80a5c40da9b0449cec14d5098adbe27d38020c9be0182e559c8c9b45fa65d3790eecdf4e9c5867837b7a646d030456fa6f5dff5edb010001 \\xdfad6bca7f63de24637547befe31e16c9fc6d581d4f40029ee1d1e079628de3552a1a31c8eea40c403ecbd78914631e83cc3e8872d6f7b2f2b62f03f2a99ec0f 1663151441000000 1663756241000000 1726828241000000 1821436241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-222 \\x096af474f8aed5fb87a211485644305ba5493fb9faa852f31a1c5dcd123738bcf03336428ae57bff370c3de06cd359804b65c759b4a9c5fa4f1f134f9b0e7657 1 0 \\x000000010000000000800003cc5b784ef543cb0aab39317d63b9d15a9d6f55976ca1ded58aa8bbb334061e9ba301247af457ffc28334dc1c1bb854ab29984ad1bd11962372c9505c5a5502c1f388f6cd7f8be6a606a02e742ed21df72dde71d5056afec2efee134bdc4d5904581948f828b61765faf424b93f2446b80cfa004de33b097515e57c58bc7a9c1d010001 \\x934b664cde441d2c791f7d211059ac982cd1e48c32d9d8fb5661e89205d984703b774506a0960b881fd630b47afceccd600740f39ef1bf5ec2c4a10bf1f9260c 1651061441000000 1651666241000000 1714738241000000 1809346241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-223 \\x0e0a87e363807270fea16a347f369937d7aef5c9060a8fdb5d84d419970e435975997f4f5fbe69f738315cbacca190911935af0bf69698f5f5449eacfd15b06a 1 0 \\x000000010000000000800003beb5dc33bb091eaac7991dc08378215aa5b089c8d389e704d110cb5f3027584a3cad434306e01f7dc83873f5f34f9fdf739bf7b158a132fc17453bd0f0cfbc6643e3a9ed650f6d9f70244f70066dbe77b2dc7a57f851b735d5df9c076e3c872beedb3254b156f551156321333f76496516f8f1e55f7fcd823c4dc298e3fe78a9010001 \\x611a4bfe5a34438107c385c203b7d192d3d106ed3d0da0efbf092acd0fcc937afe1481ec22bdd660190eed5b4fab830b72dd2333a29ca05c3d064c2c0ab1770f 1640784941000000 1641389741000000 1704461741000000 1799069741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-224 \\x0f1a797c1b5cef3bf69c2ef83b06764469d266be086f93862bfae3d7ebf5a9258fb6bede4e7620ae7e577f37647ae64e16dd1cb48be657b3fa7b8f98e1468307 1 0 \\x000000010000000000800003be8bae02f5177196da7463ff97de323b2305f0498915e176ff5521fd6c8d55a4fc6e10778ab79c636c959a6114fd0a13676f430ab31926eda04b5a2e50b06d75cfa472c644d7a4413e7e3cc963da49e6bcc4f0bf7e0910695a2f45cbb8b43cd0d55d5d9f209e27338779181c3ecb46869900de4bde9920f88ebd3605e698d177010001 \\x43a7bbd725d73da16de93551c671706a15c606566c841b503f92bab22e6ea9921155aa19c8887d6f75fd62db068769940f9155e8a678df6420c6a51b75167f07 1645620941000000 1646225741000000 1709297741000000 1803905741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-225 \\x10b6bff404f1d4bae66a74c1a9018a96a385d0b55fce61f65c0fa59a12cef43e3d9bc5a5906ab19fc336c48a5d311d31a940ccc3dc45a9292e6ff93634651a0a 1 0 \\x000000010000000000800003c83eba52687ed0a5606c3206c4d0cf102eff1136a0b89fca53e0b9660064ff3ff5e37bf63e6ee4120600d34d60485bb7003cf42618533f94717ed4a35debe2a7bb6b75b875549adda15c1da5293422ec8affc088668f3e6c682902f7b90fad0798bc411450dc2b1af159c3bb7a7e6a4b791d7d6dda356c344782ab3a25be3f79010001 \\xafb7b92754f93926c58fe57e565b73ddd3bcbaec85ad2fe52323c04fafbd98829d7cd18b0b9dd496078d97298ad3ab5fa3d8861d61475777a95725d038e5110c 1660128941000000 1660733741000000 1723805741000000 1818413741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-226 \\x141e0220f7584a17b9d147e77edd1e7c63258d522e3bf81f6e4e1101bbea444ac610dac35ae7bcc6a713133743525485b2fb8cd46da5a742af7399df58afe1ed 1 0 \\x000000010000000000800003b82e0807ccf33ed808d72c1b444e01f840bbad1760589450298ca8c51cc149beff940cf3150185d13a968b906df4ba5cb8faff5a2ece2904c56010913936c80d8f7df4abf1f6102c47e4e616e3755802f5f0eadd6c40114583354509dd9d8096e79e5d2bb21dbea0a342d9af449d1d75e303f84fe7faf520b4c1c8314ccfd375010001 \\x3c6633a64f8cd899ca736b2eefde4faa345aa1c05377b1fb22d6def798243bca7ec47b8421da3ca9d5acb3415afa43ab132eb455f19237d581db50db87bd7d07 1663151441000000 1663756241000000 1726828241000000 1821436241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-227 \\x14f2e501b6214f8a7e898219feadffc647ec5d6a831a8b1c06786384aa8b71349d9760fa8c4b0e0ab5aac9221b5bdfd33f2cf86883a7cada3a93411b9b65ba77 1 0 \\x000000010000000000800003afa87970be306f6b1fc1e8c2054df2385cc744256730207813f04688b40725910d01b5ff01529309a1565ce7e965839df7da1ef67d6739f8248e230a51468632c7504eb1a361bb771eca74d26a7e179d79d2c7e79c2e3c14ad916c5f76633697d1fe09d3fc22715850d505bde0824e5d821d10f7fd778c40d594044537b35325010001 \\x787c4da342bc329839ca89525de8e1dee380cbcd346d32b640c42a20eba007bc9918027cc06da2702f5db24a4c77ebe3e099c09da64efb084db00eb90402cc08 1649247941000000 1649852741000000 1712924741000000 1807532741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-228 \\x153e9553353f824e8d0e9c64839146ad81fe1e6cf5d21d7101e857a24433713059ea717f1088e11505915dee279b6568d79ddb33420b1f0fd64c4a141c7ff36f 1 0 \\x000000010000000000800003b49f44008e67065088a98e322b25f383fa06a2be870ff51245d330da8f2ff1f30edbd46c2beccf4ebe554b4a6f2869532ff837a4d7328ec1d4f89d6180e712224391db03521ae86fc63e5275c3b6ef46a381b0546fba7fa3dce777763bf9241367a7337121d097bed5ebfc0b8491b00864c99f74c9670ae828300a76f357d5b3010001 \\xf7b783fdb352ceb4fe5bc263d6efbe7401b75a0319824a5215672d17cda9a633b0cd894b2cf041d177dfd0f0467dcc48ccb2f6067aae91e5048abf97fb07210e 1655292941000000 1655897741000000 1718969741000000 1813577741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-229 \\x16b6883369e94ca2564eaa5fa40e2450a3fff02b7579aef287fe701cd98dd4a27b05188f82e60ad0ec7b803f985c3fbb6c2fe5ab478f2148c8efa23ba2d2487a 1 0 \\x000000010000000000800003da5a08ff555741b18f0fe3f2b42693a8caa3628601d9f5b0763f8e60c9a7373bd9c8a94b05683abc1aecd64df690e6bcb59935f2ec4489a6190a7fb4a860f647542f730c2a32efae0ec796b9b44bb25dc47909ef1c6cbafd014ae6bdecf5d75e671a50faf7e1567c21d74c720004f1a55d1d3665a1207eeb659237e6292e90bf010001 \\xdfc90fc75f170eb1b50bc4003acb0609c9226a5af3cc9f33cf045c46dfc1355bf3e7847cd527a71ba8682f4f70c71da5a7c70975ebda25d9b6fe4637530a060d 1657106441000000 1657711241000000 1720783241000000 1815391241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-230 \\x18ee89d3ed6f775ce8d5abe4a4dd76ec6d53915102e528b05e67b3cf270ba9ab6405ec7dba1efec1e7808d098c2f42d2a02c9eb3bd7069b328bf640af88d780e 1 0 \\x000000010000000000800003d052ebb20352ab45ddd743c0279b972d346a3e851faf2fe66028e91c8f8160054ead38fd0c436a37a8ce54aaae387de85982faf25386aa6077bdaf01efba17fff4a1adc7747d9738bc9cee34b563917685c6907b529abf65ca225551d4dc658ae0e5221f11e8044b48a503f2fd1e54de6818590c48e48fcd40eb9c5ae6f704df010001 \\x5c0a6521a61ccf0bf8dcec8e1f9d83674236243e43972943c6bd3bd0d5a59f9649405cce9491fb3bcca737275c69e395ab1885e8be35b6e9cf657ec5b7db5208 1656501941000000 1657106741000000 1720178741000000 1814786741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-231 \\x18ba4fdc41d7ad8f2640f956f61c2ee95074868c08a185acd24dababa5db98bf2223fcc229217407dd939134ae0f1afef0250c3a3fae98777187c02463bb97c6 1 0 \\x000000010000000000800003c918870fd0692fed400974a0ab47ded6cfd96368b1a1addcff22487c246e9492526228698d05bae6bc65a8b254fa29cbbc297b396ee83953e1f35f58b387e5229c23eb51427d6a0b444098b668c0ea1f8dd61833d3f2acb9ad5da377dc7c1f634c2c08cf71ffb53c27cc531cb14a5610fbda5b7cd4970a840e951192720ea42b010001 \\xed4747663e16a89fa8fd1d742c5fc95ffac5000d9a53e6365de0f93807ca2f9d6bf41e902fadaa4a2afa71051c7eb4e808419f645f0c37751d8ce1d435d2a507 1661337941000000 1661942741000000 1725014741000000 1819622741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-232 \\x194a02dae549dfe0ad94fbeaa03f49c9a6be2bac00b8e644ac744d575ec3db9d6ff9a563872b8bf65ecfb1bac43c4c2d37e0d342fa8ef6b647aaf50c4af219cb 1 0 \\x0000000100000000008000039e53ee9033d36ef10247dd7abf6f54cda7792324b954ea342210a348b0a789c8226418df94de2b0f7da82916dcf4c159314efe6b9c2c52a62cd0b88911e613d71a2861fc37b659651d16e861421257070a47b06bed1f1aa7fd3efd560536925960cef0073fbab48d9299c073ee46245fb7fa6ead84273532ac222c3a6606f25d010001 \\xb70474788791a6c1cf5d78b5d2e5a7a8096f8afc141ebca02d211af8f0bff75b4c8f64a82a00efe1bd429999673900708b60420e23f79b251181fc031148340c 1658315441000000 1658920241000000 1721992241000000 1816600241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-233 \\x1aee938716fa3f3129d6047f7a57f86d4f3efae960c455fc6390daf513871be8b1ac52b157da4b6b5d560699aba0eec58de96f88219b6c70620faab93b673894 1 0 \\x00000001000000000080000399e691616aca1eaf81c33f28174dd1ef836787e81c9fc8d4bc504dc6b0e8440b53a55c0a7e9ab760afbc1f64b3a8801b5e0e7fb88699f5a889b0c3186df8d567ad18026ef3295ddee85c83e9a301aa092547cda681d43c9be7543f01b80a7b662e01f189b6fbbc08318e04c7d6c7408069d6cf7d00ed07b19f6dbaa59ad8bb93010001 \\x50041cb1613f86567f2e47596a01e8189ea252185ceb3b61427e311a322bae5699976512e0e01322678bd39f98f1a1605b804a4fcb00cead7f5876054b7af206 1663151441000000 1663756241000000 1726828241000000 1821436241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-234 \\x1d82f811e7321820cdbbd953043b767fba3922a0e65abb3dfe543044759bee70df9ada9ae062aa9fe077da92a5f00a3aad6d77064aca6144ba7691c186ac1527 1 0 \\x000000010000000000800003c19194be9fc9013e5df310fcf51c42f82a7bba7705441092c9cafb2d9231a49a8d645dbf8e1100b55800c70d54c2158519eada38514d4ccf38072b971b0a0ef3596d71e005b8e9c6f7fcc66d92318b85a455203a8dd0d9a4f7c662da681733f5c1e3c0d4fc61c78d1cc884125de4ccd95b96a1a4e1f8e1c13e5708105e76bd73010001 \\x6b3b5b125792a21b03bc6aa5419ef6d768da9b959ac8683711a97bf92a6d6406e398fd8cea983c94b3bd7049fbefee5672187bee8ebb3dd1dfedfd3e6379f001 1651665941000000 1652270741000000 1715342741000000 1809950741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-235 \\x1ecedbd48b689b451a6cbf5ed6858f3ca7289aa838d4ce4df7457bb73bdf3752e551f87af89baa009340720b0eef892c4864f0f0a7231ce749a6605cc5cc0184 1 0 \\x000000010000000000800003ac4eeb280db3ffdcb9502b792ba53b4932a8c3953504e66a89dff89732567e652574a6d73866f3a8182b17cd62fb9166cb7fd8663ba3ef53bf4f0e03232a5793b909fccf51d9ddbcf83d38ba14954238234e814d6e68f6836a3227dd3c0cf083b4515f26bd7c4765040d0c1379db49bbf3abde5ffefe2a5ce4789dae29cad3c9010001 \\xe8b00c2af3f64b5a018be31325c1f2ffd70e50829ffd2f918c7ebaee4b08ae2a888bbd45adf36f877b9740f9aa0a9287c5b96aedec957222c0eb709ffcd1cd0c 1667987441000000 1668592241000000 1731664241000000 1826272241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-236 \\x1f8254a4de23d2bf2d125a5230412a1d9e743ff5a60ff0906386762b132c8c87b1fabea17090b764f291b2a8d20596beb93e2b3b2dd2abc3002de4a0929e4a66 1 0 \\x000000010000000000800003d926cd2e488c819a03c109278228ea4c7dfa0c43b818d2942ed03483d0cc87b947f8805b9c3991004c014093d477a50a88bf1bd49bbb34a4a2c83839da82ebde5b8aaf924b8750619e90927cf779d8a9fffc7781d7ab5b404aa794e3b773a0919338faad624a50cc3bba4be5f62b43235bba3349ca2d7c202689473d7b8746c3010001 \\x5b896f0d45ca472397488cf4167300c925a23011eee37b18d013a88f3af4023820a12e79660a63f6239bca2f9eab7516007627353eed55efd1297845ae1bec0f 1658315441000000 1658920241000000 1721992241000000 1816600241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-237 \\x23b237101912d9f47382102df1d60c5f523dbab70d2f889055ded288372483ccefd9007938b4c10197d1e6f87409c79dea7b307e714853d12b01a5a2c3b61a3e 1 0 \\x000000010000000000800003b65cc08ca2bdd6c34bf3c7984f855b106c44c087b022005dc44ee0f3c1a13f1bba5d9f10d6c94d623c3714b8ca503e164f1c73a3755925256a95e11f2cafba9c0303633f7abcb71219a3f7b22bb362dc254145f6e8066f549d088e8acf30f42cbae0866ca68a44b5c9c26378a02120f4308e748a1c85c76116cc6ff90f1fd467010001 \\x270a7ac707cd4b1a192842bd14e38f8cf2a3e83f95f0bde88b0177eefd960f2196058557d91db828b09382c577760d9723972b7f0f1965fd0c5a4a5eb1479d0f 1641389441000000 1641994241000000 1705066241000000 1799674241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-238 \\x23fec01729f22464890abf22a15288bd950e103a3adffaefacd2339af0dade5b374068abf7c1cc76c87bc70a75fa2b9012d70e9fd11815dbd0fb4631673bcc07 1 0 \\x000000010000000000800003c9f53636751502b4152952c5aaf212ea42ac634f426ac0bae692211d805091ad68489c2bac2307442758ab437f855156a14f69eed333e965028cda8fdb92d07c110c03e74a9caf2676e1795d9984ac18403c20f88c382ebbccec5e64a17dc6b52962dab079f274a68df9aad4c9d25c1a88cf71720d29126f26e59e4870d2f659010001 \\xdd3fc3fd047d12941c90f9659e42ed91e9f668e7cdb12b1359c12018e385dc352ce58711a11566e005c109e74b684bd78212cfce7ae92b5bbdfad9d2d03cfd0c 1660733441000000 1661338241000000 1724410241000000 1819018241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-239 \\x28be479f034d07c6d72992319dcd5de8967dbb99c8e33344214eaf07214084e01335fd68eb796b55034ddace8944b7f0b65ac3693341394922579a34abf1b160 1 0 \\x000000010000000000800003d4e1c6c331a11bb3b699df64465b3d74e0bdbe8d296d1b6c91380b4e329fafe25dbca7956a5fc7180a29dfb76580d1806001679ec71db2f43dc05f251c375b4216077ba14d0cd6a72f4e25fec75b685187a5572fa4e8cba972fc7bec1a56d2a286bc6a64db8d56c391714bc06407d2cbd0e22dc105487f2607d98c3ce27c0385010001 \\xf46efe6857909e5a5e3b22fc3b43e6c73cd3dc25b7a201481d1f506f43e377a45c7830bd4a21cc510ca0f2c55e462ff9ffdd661419ab19cda2bcd7f5eafc970d 1667382941000000 1667987741000000 1731059741000000 1825667741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-240 \\x2ec623dc4bfa18789ea4e7b413f6fae12362ece2d77bfde444845099e411ab7600fd468cb480051c4b9abafe24d07a79d1a2e520aaa74b9e4baeb19091938f6e 1 0 \\x000000010000000000800003ce0971f1b0ef392a372dfd2838c7878f33e071d2be708e6399426fb3eae5a41a3348218482599f597988a1e01289cff26a10c5144fc893224cef68099518663f4df0877f3eb105711edb8923d91549e27c55fad96788840d3e4e08280c9f5fccd6f96fe2e83fde62efa2c992ef1655501729d76c8609feede29ed5b1eb827637010001 \\x9e874660cb170ec78829812de4bc4cb0e83a40f20fdbebc3ef961dd71c4d611ae45f915b22c1c13386f65a1d33041da416aaa9a8d22fe19274098cc041f2770a 1643202941000000 1643807741000000 1706879741000000 1801487741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-241 \\x2fd6f35c4ee50ae6185fa319597b7e5ce1c2d7911f7f39e23370a96a5eebf87614458b49ee4f2776183b5dacce0a5d186b66c366819a23707b182961f7f10fab 1 0 \\x000000010000000000800003da72e75b93d251e272f884524d5a9decb2014d50818ac766816385adb5e8216d2e17dfe7b2ce86801eb3418b15cff09a6d5d5f94ce1a2ff78c044c98c95d7e5c284b58d00c4607339c079dbf521b638be689f0a68d45bd453370494be812278442a02625561237052445f7e58744f1597600a2ca6b037d0e51fccfc21eb1a2d5010001 \\x6b2c4a1b2fc90851e4791b9cdd5b251ba99c9885a0f364bd40d66f76ce50e28c40e79b73aefb5a5e80469a914130f0286ab6437bf59c84aa0bbc07d5fde48c0a 1639575941000000 1640180741000000 1703252741000000 1797860741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-242 \\x3056018a8d356e73793a173c80e675424a6a500d2952a36220a9c59e18787ac7d80b18dbea42bcbf0e3678bd7acd15c2996739c4871e9514592d66725b14254f 1 0 \\x000000010000000000800003b1ae921f7207e9240298074723f663b808e192c62b5b2698f30bb92a00b2b204cae1f277e1bc975563cb516bd6525ee667b70fa506deb3b2c81eda3e49390913ae67ddfbabe03b5aabb3aece57cba3bb5d5ea1ac10f4343de4152b3b66f24fc81d41b73e77c7d544ee3e9eac09ff795dcd1a6967d2b6fb354e7be79a1b596385010001 \\xa1a0e91754f917add34c969f5d02f5861d71e53168262e83c653fd3727db13effee8db40c11ee797db474f2b6f4e1d05aa8013b6146f53281e05d2797f9f290c 1638971441000000 1639576241000000 1702648241000000 1797256241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-243 \\x3116af9789c9e2d6f5ae43226e42353ea0a3b8ad8503edae02bf72f90a78e6ddad177bff70e47aa950ef815d8ef27f8f741cc3bcbf544a04e4ad60f8ec97327c 1 0 \\x000000010000000000800003a50bfdd8e704b270a044f26a01625d6745430fd5d88d1ed63f5dcdd602a2a61bbfd47c880870d84e8e1a3020ba9563935b769ecfd6db55434b52295c2734da5f105029d71e8fcc84e4bc400154ef4691bb4a703bb91f6142fd703fbd8751e68189ae4079b1b32e8d7d5188c8349e0c0921f86df6c924af93704ca6fb825f664f010001 \\x7f93d3340a1a3eb7a895204fa3d01386618898559b5a016fea4a27e15ea89a0a05a08554d1aa4bd919d803c8ee96f8c3507125a4cee2f8f46d24aff24d18d206 1667987441000000 1668592241000000 1731664241000000 1826272241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-244 \\x31c2f7d67587f3fb3ad16c1912c98209ec433e1a2ff0b2e2a75f2ca07df48d1989c96a74ef7471583b7b53f8de0764c1a9d210bc4f84a3dd138fc9fc19553582 1 0 \\x0000000100000000008000039ee69ae32fabdae9bb7882fdae92fc922c6e902334ef252aefdb8b46c613a1f1a718e5c0645f4c3bbc3868ff28683374e2e4225efa670f3eaabd417f632457a943962632efddb57b1b97b524b4e3840d3eb2c20fa37f93e6e9397e3830e4388e4557912b973b76fc4fdeba24cdea0ec339eaacbd163561810317b4ceb800e9f1010001 \\xf485281669b94500395e68f3c73f285d54ec14aaa3c0799b932821be4bedfe8ad63196e56043fd06e4ebe965d9623b7764162ae7234a00c1244356df8e5f6609 1666173941000000 1666778741000000 1729850741000000 1824458741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-245 \\x330ecd85f833cbac973f7eb2da9d5ff76e80e92939e261f0f3f5b1ad30f73916c2561180de83152c3a740cfa20c9d7e98797f6bbcd2e738ca27269686ebb52f5 1 0 \\x000000010000000000800003b17d995caa879c03a83fb4fadc770a539f868bea61f83054fd215b3e0486a6940a91f6f9ac2d04aa3b3505b0497d88673746edc8f7abe970e613b4e6fd2e2d1bb788aa292e026122e4f5bd8c630255e7db5de8c38cfaed1aeea559a6762a3adc60808b0a17b0bf3916b5207c671521e0fd1ba6acf789b7e493fda4ab5c043de3010001 \\x65d2d163dc38a8fc0f1caf91784a10fa279b6ba593a9b7582e01ad9077f07ad21cf5d7daa7e1c50a2af756c330a8c704bf0c3aafab88153dd2aab013f963e508 1660128941000000 1660733741000000 1723805741000000 1818413741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-246 \\x3706bb582858889f2ef043b34c8949741a0b36cb992def276e087afd1a83bed11f091f1121502ac34ace7ffbf3b835a9c9e75f61664b516753fdccd46b0ab94e 1 0 \\x000000010000000000800003ae8805fdb3b881c4bf474fee9f4d113061d1579d578ec60dc1a0da9a040fbccc14e64b0c3238cdea99590202d3bb8b15b3d8982028a1c3df72e39f643fc0b21d4e35d49684773d1d618700bfed884ec348c4febfcef7fdb0c2767d0e9729a0d7275288f55631110792838f15309fae1441a7f4abe9e6b0c4db08199ba933d41d010001 \\x118f4ffd053b3ee49b76022dd10f3e84ec7ac7fdf1c63778873b465d36d8e3e645cfd0575cb3751f29cbeb1dbc178226e698d76bca651f93260fe0a502c8270e 1657710941000000 1658315741000000 1721387741000000 1815995741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-247 \\x37ea78a80288c7158da10e69dbec417a2a345e14c606bd143f0bde59b9e9d0ed1891eb43a4b0d2696801ae3cea2d2fae2b5f466b9f9f4df2ceaa2f93cae6aa2d 1 0 \\x000000010000000000800003a40c6ae4d74ed80643f128231f52d2ad5e0de46b1525bf04a44f4ae8ae529300eb9491b691eb5e04dc8c7e307a9f3b182022b905825c93adc46ece4815bbdd0a28430998b1202f5822c5c28ae3d832aaf0054f9c010c2cd2704b29399369165156c05da6d50f696f6f9c2f16f7f75e1c0f44d5759cad45f0dead01b407e9c765010001 \\x13031405db731dd0a6aca035c8a82e43403a94a2e206abf40c8ec80f96cdb05717bc3e178301155474d9dfbb2158f403326aa0e97c4d7c697963703a2c09e901 1645016441000000 1645621241000000 1708693241000000 1803301241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-248 \\x393ec72b6b4c5e08afc2e83ecb49ed8f1870e29a16ae4015bc64a7b183e5d94a22bf9c15d6636fb2ca13e1d0d5cad9c8784e6545548cb131342d2ca928ec6dd8 1 0 \\x000000010000000000800003b921af87901f6b7b1d77d215e10aa3a9a360690c62bb167089ece3ac92ebc4f474650daf8764b58ff6d6d4a69f6ae6d4db85713dcb963850058b7b46c524922ee4f6b1aa919d4395ec0e5f4e168644ebcfd3468635cb9399cd53418db57abf53969a2665d696c039f820ff3611df97a5cc52a05e110c3f1d3b7c00f09e3daf9d010001 \\x987dc278fa9c358e7d6ba71129402a9a755ce7314a9ca428ede0215187f18c77faa7fd8554a32d65c57a5bc43740dd1a04e9d9fd5be087b5802d6bbca82a3802 1646225441000000 1646830241000000 1709902241000000 1804510241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-249 \\x3d62c421202297967c83758cebbe39f1ca9285802a3ce40a8b800e4f0c29ab58f2ebbf5075d1e654e3d3144fb75a81a22687a8235c3ef852c73c90069eafce06 1 0 \\x000000010000000000800003bc7c4650ca57dca6fda975e8f3a8728b8b4f4a76e850af837cb1576c184ecd146422641f5d0d5c16e5ab10aa270aa1506a217e19b8da588cecf19aeeb9b0c30721d60fdcea30920e3d197529ff57ccbd2a29f8fd22c157fb8587f5e10bf7307606d8836cfbb4f3176419a5194605bbe9634f4c25b8b79be3234cc39f90217ed9010001 \\x9d68b8379510e4adbaaf4ef1acc62b243370c0d2b392bb7dc88aaaa65dda441eb68ec0ec804ded8a82489b30ed684e04e08389cba02c039ee5a34dbc6c802604 1645016441000000 1645621241000000 1708693241000000 1803301241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-250 \\x3f6a1de02b352cd02ec2f0b0346c97b7541e73b83b37c157e65f67739ca9c8024fbf28ce3b9899d805c1a7bb9709098573377786e15709c880dbae220326e95f 1 0 \\x000000010000000000800003f16ef42f253cfdb48e98c4e6fef94c83efcb8e16cec31c8e422a13267ffc2791f8b8065a4223e1a3c4067f7b85f3f53fa8d78566732ccf392f2b07ddfd3b508a4af2bd72c1d2fcfbf705ae14eadd878192662dac623ec2dbbf113bcc2f2cdc22b43d81594cabbfd110a3107b805813ef1ed05dc30634981150d0e5dbef7d1f89010001 \\x9c2bd1bf5c633901cb63d27747159c573a4a3ee4fa985f547a6001258acbefba4b7f31253973dceb3d1ac230e682f2666af7e601145250a177c2a39e7fc7c50c 1646829941000000 1647434741000000 1710506741000000 1805114741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-251 \\x45aa9b631aed6cfd940487931a40459f1db39eb9ddc157b187dbcaf83cb77c2d315c3748dd8c9fd687be073615650006f9f616874393b0d08b5c23824a95a085 1 0 \\x000000010000000000800003cab06bece2e9ce7a0f3e0b5c2ab90981e85c131fe862aef51ab11c9b5dbe03912513f298bdf53ec5fc238afe9ec3ac22e47de17c356c0034a1123faaae500a87fd45fe53dfbb1b379fcba740b40cae448270218e262aa0578eb526a25211a3656a9f0875255aa619b3e4d84ea41356dff634e904b978d9fc6165c878ae2bb61d010001 \\x0a485395bd65ad9ad98824ff394782b2e9525135c4b84a7e3edaffd846e9ef90fae39f050b00587d7a379cf2da569dc7b4b60818eeed127998370126a84c9f0c 1656501941000000 1657106741000000 1720178741000000 1814786741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-252 \\x4f024fc06fdaeacdd0afcac4ffaaba2159a1aee41c7a906e10b28962568fd39a117d267afbf05c40283fafd8971a094dd4685244ae91bf5dfa9a358896d5d065 1 0 \\x000000010000000000800003c37635b8596c8445e4c902f65b060cd039c534af8691ab7b25ae7f43592753683b442038fa0bf5535607dfc38c417ec89d90cc0477d3572eb1af53f0bb6388d05dfb7db662836eb0c88f7ef000d23ab08958c62116171a49134a5f79863f8999067ed3a23344496d31cb6c6c4265bb43ebcc1c8a790c1fd926eeebc340beae49010001 \\xca1cf32412a61833c13a9b8b5f221a6a57a97c89f35f9744010290f54304a9e18accd1ec6bfb6d68c0bf631bfe0a98481a476e6941a491581c0544054a216a0b 1663151441000000 1663756241000000 1726828241000000 1821436241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-253 \\x527eff165441713f27b9a3dee90da355af0827142dfb723ce108025afdfbee5e50877751f29b41cb13afa8cf9ec21672c5908df4c2363bd5b59d9b3441c2fc04 1 0 \\x000000010000000000800003bfc85119d80f1386f9f2bc9c38640aec8f1827305a420646683d976110118de96d4e117cfde5109c3dc8d577a477c47d9715cec3fdec49f88ad5ad5c3f55a666cb0fd76259d14cfbb0ff8b4dafe6a0e79e40f74de710241166f2824f69cb83a2ccb3786e55f9330d0f1a6a54965712e27bbeca41f1d5c6e0ff58b78c5a3fe2a1010001 \\xbde4d1bb7735e3653de37357cf7e1419ac239cf4c8ff4424a41a37057aec7591d8053d4baaecb19290ef2bb22984bca26ded276739d6ccb6f218dc0a7f15d70b 1648643441000000 1649248241000000 1712320241000000 1806928241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-254 \\x546284c9d72dbfd761ed73c4cf1dbf033474d6b816e414896a24cd70982b74c298df3e62d3fb4bc2b7a8aa183ab04de1f88dab94765d28896faf36cc824e2790 1 0 \\x000000010000000000800003c472ae9e501da3004a64fa0831da1f9651e05b1f2f45796b8a3571e391f8d1d2e4f0d93c6f64dd2a54d8fc0b19f33d452114d1ea48764b72d09da89b914e7740b08e4f2ba2939bd991ad8cf0574238778b0e0692c6e8a80a5bccab43748c5e1e4dc9895710cb150576c826e012abc32e000dd3a53a0befff521d10f4f6abcc51010001 \\x00ac25f62108750b3f49743b94761763a2b4ca737c98825497beddcf3ddf12e619210469e76dfe805156c7e44321490d77f6b75c29d9bd95db346f20aaf90001 1662546941000000 1663151741000000 1726223741000000 1820831741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-255 \\x54421631fb48f1508b385148ce40bfc04d47f99b4480de38c08ffdb60cedf6b88dd36697dc15963ad57c565efe37438e799dc096376d9a8a585d800860af0597 1 0 \\x000000010000000000800003cd7f0c42bb0afe16afd5ca37b0be3e27e94b40d1b32d0e5025fa9f861bb324cdfdc22aadb046dc185c9dd8b8ff06f8195acc5a606d41cf5b0211cc78386dbeda40b21f77f6c0cea98ce9e8948016ef8555823450e9d240c361c6211dce4d86ef60e2f4f6aca8c1e1428a48facb1b02e9106110877434529e1ad62bf6b38053af010001 \\x8d3ae2a0337c26efed5c49ee5d0c6ea6c7f6a4fedcfc641c8018236edac0cf2f008984ce7b777a733d6ddc56413eba106bf09ffdbcdc3e0d215629341494f70a 1654083941000000 1654688741000000 1717760741000000 1812368741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-256 \\x55bead5bfedbe2407bf6a100a39ffeb8d8f847949b2e3e9593ffa5e01b7172f26e8dfdd1508da2f8da3909b3dd3e540f5989e4be84c37464b56fd0485b5b32c0 1 0 \\x000000010000000000800003d86e2783a55b3c9558666da488e787fa3d0f6e9ef03626f7b7fb9e47af4d397622ac7be5e4802e2304010849f75fd391b7a9a02e77d86e2149907ad4a62b1e4a97a95bba268ffe87f0d2c798be2c14d4b6be6c83f2e371d4a6054b7645999385303ed17485101e0cad349fa75fab366eeaccbfc82fdd6629756128659b8f8fe7010001 \\xfd4801b21baa96d5c4f6294226068853fa45d4f2b3d1c79ff8b40e87d0577c89fc6fd9219280515bd695871086afc175f060ade393976ec51db91badf6543b0e 1661942441000000 1662547241000000 1725619241000000 1820227241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-257 \\x573e99e4b1c0ebe8f343d0ed69ba772c23ed0b5854945303205d0204e07858b37c4760e85cee65e480f4501c4b2657fb132b73ed63d64e797e4d788367b13e35 1 0 \\x000000010000000000800003be76a9abad3b74af8e719ee1948ccd4c339b212cc3e93535a24d094b453d709fb5daee3599a3adf9d64143aaca6b4efdaade4e3ca388b218996dc03db78243583ccd6d78c2a0e00789145edb6fd6eaa1995800de0985de42e471bcc31e6eb43fcbd08b63b808ad904d08d2df5f926d2b5b88b88816a178ff1fd825f5b42f207d010001 \\xb1edb14cac3bbb04120645f600b78d9eab18b8deae8b5c21f67d5db4a7c2cf88afd846713886e2a229c539d06679e222ee169165973e1bcf248b936685976f06 1641389441000000 1641994241000000 1705066241000000 1799674241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-258 \\x5aca4e2259740a3d7cea924a83b463d68cc074038c27080b7483161350207bd7a58b1c00c0c91b0cdef4c22d36ca02f601372a5c2fbdd0fa715a2c8930a582e1 1 0 \\x0000000100000000008000039cf5a4d5892e928644a64789e816faf211438b4884299861c305b2635b39a2eec34573862c0033eab962a16141ea419ad662e60292b6261af37d6bfd4439402593794309ce4081806bfd1aaa283e1fa0303e9b2c67adad53e1eff9c98c798c8a64123158f20f5695226aee98f3c64fd94a3ba450fc29f8370970aa1a366bcfad010001 \\xfde763aa0a4082a871751af9012f0e5fb688c9af25a508dfcbdf375c1e371a06546b3e07ae8039efb9d1399e45c333044122006fa8df87dd06f4a2f90f70c606 1654083941000000 1654688741000000 1717760741000000 1812368741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-259 \\x5c8a5e7651b81aa702c642c61de0e35bde538f02682233752390c58a66e42251e586e3e83b236ff1c2ce65dd87b3a8946987d85299ddadcacc36f6964fefa1a2 1 0 \\x000000010000000000800003d976ad44473c354d3fe937f9ef3f54351a2ec4cc927782be3f1fa47d258e427d13bf91f533b695fe99fb5c6340d1885592f37129600d162bfc5b005b311561dbd013352133dab8ddba14ab4e78406edfd024e12ac80ee084face0434c292cab40f65cddbe155bc7d9f6f5fde2fcb0a187071371bae20d1492e34f4711811b375010001 \\x291fc5833ad269572b868e2184a5c3ea6dab686f2b5668a9fe76dc6a8cf089b06e0d8ceea865b9138f9fda8f209586a79cdd884b735832e84e82dbfce2fe0a0b 1658919941000000 1659524741000000 1722596741000000 1817204741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-260 \\x5c36da9276742089e99b57d033d9cf0493737e389a4c1a3a4339f70eec66943b34082f3b5c73a2eb01d4bf2132e0fb1bf552314759579a2968163f06e246dd83 1 0 \\x000000010000000000800003f607e63309f0db53d8ae1521031b29e4cd7e3117fd2dd8f1e89e0f477bf4672d87d9e3a4fd4977af93441144b0f92202e95f77c8ea8b208309fe7b82abd6d73c1a21b2c398c3421cc51609f4b609a41b86a160f2583fd1d940d69b4266160defdf29ca44dc892b13ff2dc7e67a014c0f8507db566a99805cbdd1c3d2a211ea53010001 \\xaaae8da162173ac74cf4f5717183c38d25ca2ace2db0c3c0fda31274c5b429cca8c1f64e4443666be0abb9490f3e5b210d2648a7d7143ef3f82a45da800bbf01 1641993941000000 1642598741000000 1705670741000000 1800278741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-261 \\x5f12c848f0aa15f7d056c8a3f6e9f2b4c0f5c2c4979a9e6c2b882e562280de846084bb750b1e7a15c78f6e95572043db153c1941f85061f44205c4b01aed6507 1 0 \\x000000010000000000800003d9b2158e4ae5945a44f1390340066c3483d1ca3f9d081c90ff0561e119cfbd8a1874274ac4815997ede8763a75c960a494156a5ee079fbdd09896661fd1daa0e3bfec38dcd6c9ad9e44e5e6b9ed24b9db924a7a432f86ab1e6d4ca197efd7705aa19f5fa63ff73e9a797ec0810b77a96b76a58723c75980f42f9c49d8046792f010001 \\xe99c75c32a1e860aceac6f61d82447f1ddde8d8db24bbbc49df263b6868700eb57b2eb2c7daba7d8dd4f86b680e6cf9b100637fdebd3b9dd7a9679536b504902 1640180441000000 1640785241000000 1703857241000000 1798465241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-262 \\x69befc01dd9ff6b272334f32b8e8d7dd89e5805f2176ba54fa00e009edc771e1c7aca41101adb6d0b4b613e73c447ff435873000c401065bb76bf8a5e81f5da0 1 0 \\x000000010000000000800003d6263c245a386fae92c305c7ac0b6094349e2ffb2303f1b96a072fec04ca94654fc1c3c5ff742e7ca1591f8a20510682a98e0bf2c2df5df1b2a34bc40b62d76d2ce069161ba5e9eb4dee785a9d1e6e69e4797274cbc8ff9a4fad4214715b76b3bf8d225e8d6289823887da2b2588101174f529badc7cfe95eedb70e0f12e767d010001 \\x48b471503731afe7722db099bbd18af7d10243ccc1eac71dcde8f95564f6b34eb1588ea6f56b64e527d816604e934c4964d09bcf6fc83a5dcc0d6fcf3173d108 1645016441000000 1645621241000000 1708693241000000 1803301241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-263 \\x6b42f02638c6ed4177ff0e6edcace85e045dd8d1f1f58416cdb8bb4365467eca19102eb28f75764e5e8998756af6a5c5a1ab544499d1d2315508d47e5f263c68 1 0 \\x000000010000000000800003b8e74b9dc9ac59e7f3a69840241c557d970e32a0075e6b8975fff34bdd97e1a855015ed6a344460927d28c6be9051b37e7b8423c0cfdda83a21200884c314aab80cc074815653fcbe35f9917621aa2c78e88996cae5999dd5ed02032c908c2e1a4b428d80d3449043f7cedde8db2b9861af0e48d19ed455c3e6deed450a08ff5010001 \\x2e14190309239a78fab5f72966f8b4b2024b565eccaed08cfd6cdcf3b8d4487537a8ff342139ad231cf509ad6aaa06739ad196bbc84d3793fe22c2a1c9c3d100 1648643441000000 1649248241000000 1712320241000000 1806928241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-264 \\x70ea2bee5a72d3ef84539c95180eb9b1d3e83331f6f1b49cc30014c9c12346c78a5fd2980c34feb7feeeb916e7db9b5b26c4593597caec569be091d412a366ff 1 0 \\x000000010000000000800003c1f6b713624b2363799452561f378d467dc2ea7ae84a14612d0583e3a73fd3d4466b3c75eba7ca9ca260fe81770316d136fb5128224e9a8571411854fb8250d498a757b4e60956b3db679629e5a1334af2b6d92283aa230545a6c25a67f8b418a3cef0f50aaf4db2077f6127f8a60e858112723a3f85f658d6a8cb3524572319010001 \\x665bf8c31505f2a500781fc3cd28c68ba8aa516f3878afed805ac3674deb326f0da6bba94076e5a9686306b4e2852d7a1dbb3b566fff04ec8aacd9427dbbd705 1638971441000000 1639576241000000 1702648241000000 1797256241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-265 \\x768e0edacf8bb35874f82534fef5c1b58f1d7887d2b8333375c4c067323cf2eaee15c9961df0ee2548d93d20c15d809b34c09fdf008e2b09689871e759b78e5a 1 0 \\x000000010000000000800003bc609c459f6751ea0c8133b4b241f4818ab2c0e52da0a0d1e5e3a9df44b1e20dbeaeae0e99f8887f24049c3c3c79ccfb648b08d4c492192f4044335fe4a07af3dfcb96e92be49005a0afed79b322e39d37da7f6d63dee75c98dd2efae164e8c83bbc137366c5bc1082665c55223591633a474a06b12dd34db480da0b32d4923b010001 \\x99e6c2a4761d4a3da4eaeababcbba54790ba1732207140280c3c4666d80e7c0f60dc8d761c67cd5c0acaee72982e48d79b5d3b0a45c35c39b62ca66cee92ec08 1667987441000000 1668592241000000 1731664241000000 1826272241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-266 \\x76ba618900d4b5be89ffd16d0288f16528c953827ef404fe0d150689db5d02bcd4af547122c7130b3c3fe5a8451117794b4041a2c2ea1d4effb1e153ef1f673f 1 0 \\x000000010000000000800003abb9215ec36ba898bb251a31975c93f38181d245af09d18d1bf9f95174fed94ce386b0b918367afee9f40c36956b0f97ff357b9a7230d31bad48a3ac7244e7c9d9c7a572389916c9db135d5a2024e0ebeeda1911eeca40cd03d064b6adcf0881148029d889cac56dad1e0601dbccd36482eef150400a9af4fa48da8271bc3e29010001 \\xefb69606d213ca1d570697725e358ceddae16883fec183f20be5631ff2a3427e12f77fe1e578d9dcb0c0bc7e4fc47287b70ca3f50855287e41a755c7f29bf409 1662546941000000 1663151741000000 1726223741000000 1820831741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-267 \\x765a1b1e95a36854bc68ec18b145905c07ca2f1ffcc2e40b3d1471cbfd8035690930421e59c5c05934531b60c96be0ae60f742d413886585d59810b61a197e6e 1 0 \\x000000010000000000800003bf709def5584b08c17f4ad0a0d8e7a6c35eeda42b9475f69813b614099a753d02c902fcfcee4d21618f40a8f26b6b3002972e1328332945d0948c0c268ee35ce869afe6224417eed6edfd931aa7d1a8eb609affed4d454448a5adf942eb92d9518ea4ef3a8fe79b346a281fdc61e1eb3faeb994663ec5ee4f8bc5a279e95e495010001 \\x85297e870a77ceeda08d003ac95c8dfc5899e93dadafa9ec1a31490186167e2dce4ab0d2cf1d08e0393f87d890cc640ba47c590dd11f7fe97da42df3c2014908 1651665941000000 1652270741000000 1715342741000000 1809950741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-268 \\x777a0b0d8e178a0514c4d7149d18a224f04ec3e6a07fb15c8ec6792d3e81bed445f916419f8626940f8606125f2800885db2b4dca3ee67fcad20ddeefc3b2844 1 0 \\x000000010000000000800003e4b11bbb4d917098902c9e1c712820b40055f5fa249dd9c91d59e31c664bd69351f06eb31d62580bd07be56a21a3a7dfe50cccf67b145eb0100f46d27a60a3903a5ff155359129899f6556304dfef73ce0d746d69d73b2735ee82008dbf4fed09ad8a8f8837a53e9d2ba367f3089735af1e65df8aed0fd447e2a4746571efeed010001 \\xd9d64cd0147df9344c4abf33fbfe8a80b266465d37116fda513f957a644416ed3e0e1a88935546b781cbf65675d944e09cb342a74329c497e715d9b04e49a70f 1642598441000000 1643203241000000 1706275241000000 1800883241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-269 \\x7856053fe685e2e1a48f0a58a9b3e1ea6e11b7e7eaca89f88133b749bc581a48b81d47ddf83edb664a58539951d77c775453bde400e4b66ba4dc5c821f5ff3a7 1 0 \\x000000010000000000800003cd75159dd9be2cf085e5d53df0ccf386c5e681932435b944be41b190efc82964fac88c83318bed07b34f92eaa8efd64f90a27835129f41d0feebc2c73aa1d022fe935e268a6d43bb69e4069ea87059f250019c603c222d7e6fe492859d9076219030be1c8018119de29312d345abc74d63c70c2f2c207ec24923157186c35745010001 \\xdec4fb837cc62e67c78b2511c1724eca0bfaa1a56bfaa9fb41c32504b389ec4b983c292a95c8ec08902c783750420721a46a99b267e09ff8582a4c6d98da590f 1669800941000000 1670405741000000 1733477741000000 1828085741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-270 \\x790ef412acba9f993d3f2e10e12c145662a9b6ef17f1cd220a4581f2c1256ec6fa76791e24ede2fb177db3db988a7d6a29cbe945689b29640730db676aec2781 1 0 \\x000000010000000000800003dc043a356eec15ba04d51e7bba4375315a5a80c46f36c13cd3fb8acb7a92b9ec87daa08f036212a12c2446eb45cde5028b4974ab2ab037cfedb5ebd48940699a09ec2d7ce9dc0def8b8e4c54ec0759e6cef446db61e5cc3b493a1906b3cd7e3514ffc249ef14358ddf1a2d148adc9761bddc847ed92b9e213b8a32f6dd46e8e3010001 \\xe6f84926cb4aee39cc57c2fdfba55086b9b32ef184398fc5c93c01562db0fc27c5256f62bebf69da79f40d99baeb61fa183b3ecfb4f8c8810ed75880f1f78f01 1651061441000000 1651666241000000 1714738241000000 1809346241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-271 \\x7a26140760ea29e3e268612c8cc88a34968254a2b1cdb5d62fca600b5926a83bff888048ff8fd1ee81f6d29724e85600aa5b85ac8473ec28fb40427688f58184 1 0 \\x000000010000000000800003b21a83c50ec54fbf235275e8a8034a7aa1c679d80434fdcc20ce2c2e95636cbcf35da15cbe49234b977dec224ba7febe3f70289c5064fce34675cc1a6836209755cc7926d6d8bb7ef1cfc90725e6f01efce9dadd0361ab5d18d19872ba8989471339f2261aa1bde60a8c3cc6d32723eaf91136250e3f3d124e5412e4a9b1ac13010001 \\xafb8017dfb390a8c2e41eb6c693cfb15d2a21e3a91b365ef8dfc196ca3125b69184f640b2aaf65ca8c17c2eaab4bdfa7b647493bb3f4073244099b139b37e20c 1654688441000000 1655293241000000 1718365241000000 1812973241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-272 \\x7d860d9f71d24ec014263fb61afb942f1a08b9d3f1a7169349c542a83dc3bf16e075467214a8cc40b4732e2bae3370613ff55eab94ab58bf00ba078ff112951a 1 0 \\x000000010000000000800003df11f951e0fc520cac820da92eb4932741e41bfd38407c7454c0734a6dc8ff147d32227667c3d1e57ef6967a074d01c98c74906d95017142407e176dd26fe4976b2710a81be3fd3de281be84e8d7eff89687411cc5fd7fbfe4a26aa3162eecd3450663415edbc4d6355bec3e855601e82ed63c835e4ab7828d06517fc48c9181010001 \\xf555896299fa8adc857cdb9165a9482aaa6483a476dc6404dcf001b0f301cea6e72c6ec8b08839dd84948af5afefb25a5f5535f20ea64bd802bda28da22b6f02 1652270441000000 1652875241000000 1715947241000000 1810555241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-273 \\x7e46786c4d2bb3c56ba930a96aaad45030946def06306af3d5a2c07f8bc65436710321623094f9a5bbbec04bbd756f0e65a52d20e5fa69c46519e6c19002cb8b 1 0 \\x000000010000000000800003dcacb7a068682ff934ddff0db1dc5d523ad518b7adea3c0109f950922930ff99b0ded35b960b1a1eb8eb817a2ece507d99daf3a47cc28b79fa0484ffed25d45c0432d9dae135dac3125550db37164cc9e73e2a59f2a7edbcbf95e3619eb8cf777789572db4809f8b1b3f204477df58b7d790b099ef2d74c59fea37d18a2e3ec7010001 \\xa97fc49fb2e7a654387749d26cfb0ae5aeb6f82b33d0e30972ed98c468c9e7268b597bb320fec08591ddc1d4d44360481ed8a4d7d008c51b49fd90245f2bb606 1664360441000000 1664965241000000 1728037241000000 1822645241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-274 \\x7e8673fc6bb89acd39c269a81c847cb14f4e92740d4d95e114334e063ac6d32061a0584b102eb2927f117745babe4c7b7a09128bc4eec98b92f2f119a090e632 1 0 \\x000000010000000000800003afe96afad81cbcaa5e644416c4ae81ca4c2a0ee022c23d5f3e2afde8e4d16c412e5655cec188e9b7af4b7c46811cdca5052bffca8ed2b7cf038ab4342e8b5c3ac8c32d7013d7561c23d764f3a23dbed3b1b52f3e15daf4f6a79c7bfd9214d4ee055391c6c221cbe4cb97ebbc6f367c0ccf32cd5f7072e7b7866398670d2a731d010001 \\xdd52517111ff125270c400e567d9fdc3bb562f0eb8ab21f095ef4054432853122266c5213785e7cb0d7fe6f4c79b081581683abc6724d8d4fa9fbf100919bc0e 1666173941000000 1666778741000000 1729850741000000 1824458741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-275 \\x7fa681a85d421e9be128cd3f7bf8c39c2ec861a1b76831c1a184d6947e9716e255b1c4a0f630d98cf086fee42f842645488927e381023e51d6de634e1a3d420e 1 0 \\x000000010000000000800003adbc1311748f8ca464b77a54ec69b42288d249447f6bba7bef1c9cc2662b74c7aa5d380ae0ddba7ff806c92d9242356d048adf7317722b8058948afb2e320ba6d30beffd2c03ad62a4e42349241cf36e921b6890cd0276ddd0311a4d473b9a4e3bd9adc53e1091af4283a889d21746b1969ca67a5494cb3e58e1503c7ff40ae3010001 \\x9ecd77a9c185a0b881a8781f996fb78674cbc5dfc59d3e16c492c79902b0e88c2ddada2f9e3df206203610ba6f44198ecad2fb8b04601f5394db4bb266958e09 1654083941000000 1654688741000000 1717760741000000 1812368741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-276 \\x82b64ccf1dd3f1e8acfb9bbff8cc2b8350bf444bbbf36b3b25bf4d0373248162b6f2bf83ea059ba5375d582a35ccfa1c1a998e40c3dbd00b9e602f36eb588c74 1 0 \\x000000010000000000800003b0fe0173094f30893089408041bdf74a5db965c7381d79a015734f8c0d599c2a92ef68a00e47f0144fbfdf420b81a459f266622044e23f138dc3b10dbef063070096936ef514b8406cece16f528204c8d9630e269299ced53673df965c9483e6504458bf4588b39ac7bb2c51a91977d39627dcdf9c33c04de34c6962c7c900ed010001 \\xcf1e45d4c58a5da4c1863604c7928d6aa43fa30328f07454c17c35d5242b22362711efc35312045036b2c9b3e7797d8cfc4cc6ac0957dbe12ad9af24a0eafd08 1648038941000000 1648643741000000 1711715741000000 1806323741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-277 \\x837ef6126239be757fc54f568bd3e1d00d528af87734e22b9430d1a670839f1d314eb0ce7ce4b1e066b6b29381b54403cfd2f555e6e9b0956e06716a845fa7bb 1 0 \\x000000010000000000800003e25c5bc2734f63cf91e5764e2c2266b35cf359863bb6380761da8e04294a9fa353930929dcbc54fc95621fea2e8b071b4004d8a7bba2f2941f169a5f465593a85eb5bdcd717f440511737e825a9c1c421647b9a54a38d63addb672b4e7a323056b5f6665201177f2391eec25cf83d1ec59b08e1d5c79ff0a7bcfe49cf27525f1010001 \\xffc2ed32fb49a4c7cfcb1ed97a2b3ff37f76f8de10c2d0be10341d2655aad0c348fa08eb30dc61625b7142f9f6f2e388364d4653e87f3822f874405cdc077e09 1645016441000000 1645621241000000 1708693241000000 1803301241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-278 \\x835a42adb6fdf6d8075bd70828e237c29b5c402bd950a968fd15e0fcc6e32dad7a3099de4e3e8de14a769b20124d51e1e7a133a56c1dd5b1c92ea282dca4ac1d 1 0 \\x0000000100000000008000039d38bf22cdefe7849cf7d8d23856f98bff20e0b556bbeb76b4a249d379874fd15327efb4b8017f1b907772c78a469193be01d4243816705c27cbb61d56b30c03de108d43a185ef13d97c378106d5731eea3bcf25ffdae55eb900d24830aa6552cd65cae3eae9c50a4d9eefc581faea3732474af189469dc1f4e341710410d919010001 \\x9b3900244d01e772512f6517757c8e60865c57cd7d150523e3736b23ab2f3d2a3545c59db87b459656fd383b668648e1282a3d81b2e7e93bcdd816e345afa50b 1650456941000000 1651061741000000 1714133741000000 1808741741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-279 \\x83ba11e0c2f1dde89d126c45013438c939a717daafdebbf4c905c4421d4a44d2b0be784ea48963c015c78d198ee9be1cf70b6a08fe8b30a86779fd48e17efd21 1 0 \\x000000010000000000800003c8d6a1c3b9e4cf28402036ce4f8b791a9f50545696839eb373fac313ed635cae53f73e7f8f5a53c8dc376f499a3838d0ef64b01f33f32062c042399da69c584749e9b7acbd4d1333b85711cb0ea7e701e1933cd85fcb181d36e2302744b0b99f251fa311d09dafa8cb92b8a19286f251785d85f68c5c2a83d8580e6d28eb01bf010001 \\x7e45a096174e2310236b7a8bb05e67fa7122ddc1cd090f489a22444b36b9722581063277bec467521747052e8a5eadddb8c05cecd5b69de17fc19501a698ec0c 1657106441000000 1657711241000000 1720783241000000 1815391241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-280 \\x838a55ed2383a9410f62c8cac408e5021097cc70a8aebc295fb578880f997cd75687e3d3968a53b88c7b4d626d1f83597a9bd8348c3ad00767dcb84468ecc269 1 0 \\x0000000100000000008000039ed6215ba5981c5aac5aefb1ab8560562dab882c370608ba4e5f129cdfc590e1a879d5823c99f9bb1c776d2157c4cd297a90f1d14f4e462e71dccf54bcb7045c6b4e741703377d20621cab66fa5116fb767502810d4af518156b1510b0e417d8770fa98a6f537c09384f558a50fb50fbc4d76ff70cd2434397fa80a1aa389891010001 \\x93483c379510c3ad39bcf7c9dc15234f21ae156e7f686d38c39de2b332242f0f37c6194b71679b27729521cc16275b8e7bf92c2379bf184abcf03aef45a3500e 1665569441000000 1666174241000000 1729246241000000 1823854241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-281 \\x84bead4e229badb24ae285896869923811ac1c919159b8f4bb40fe0e52306cf8ab8404b6e994d0c395e8f41230ba77f7556c551ba246b29992b8b941b1399cd9 1 0 \\x000000010000000000800003d8bc9b785149181172024779b73a1f0af7bf18602b03893efa3b188ebce343b74429be9f3e2c0c8c1296ccd7898a0d64fd57e4f50d641a485e0f9dcc5417a6e240efe4390ffc9af3f49e4a68bae78ee1bbc3b546af6d46fea0f94bce75946b97ea0e2cf664268d7397e9f853ce5a839e1f962f6e35cfe779bf37581457f505d1010001 \\xc5ee98bd77f6af8c904c95c6bb6400a630a7244598ce4770f576bee693641ddb5538f4d23ce01a4f03b09df419abb65b330bd8ba7311310082e7c2dc3f07220c 1669196441000000 1669801241000000 1732873241000000 1827481241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-282 \\x8752b206d7459abadebc79926a3ce2a7a5dad20b69d811e724fe75e495cc0ef59506b21a2887c2cf807a46fad8ec94eb63fe39ee48fc510019ac3090f9ef5fe6 1 0 \\x000000010000000000800003a084afa039d4034f2fc24d41a447170e4834ed482cf39dfdcf1016728c93cbf088562c2b011a1763ffe1d21c47c3f5c5d211cc95d130fd948f08f9c7e7e3b0d5c1fcaeee71fcb76f19c93c0dd32b26119d06843d0d89591384649092ee768b8e5e83ded5e95b72e2dcc7b52c011d3fd3f6c66c3cc8fae6eebf3d1e1515fe9fa7010001 \\x19bf0f73b30406ca46353736388dc4cc80560fd4992d980ae895d5522cfa05ee62d8e2474cd2efdc4fffe8df6c5579dd5125ff5697d1f9d83d9a3baf113fbd0c 1668591941000000 1669196741000000 1732268741000000 1826876741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-283 \\x87b64bd91e63364e27e5681d7a9beaa2bd06d37f1239352a4c927c9809b506128e917e49f00146a8bc9e6982c0bb0208302b291675c6b31be5136af68839a3fa 1 0 \\x000000010000000000800003c2fbadf35e08ba77f2eb50f254b64c639e907329f4a9ec3a1412c57e6ebcb13eae111666a0b8f043ed592701874e86084c80440569fbca94ab3c51a68a9361a61ffe9ef9654163b3cfe5c0a36b1ef74892d78a521c30175ef5de528400983b41997342cff8a1b513f77827ce950189f2e4fa7e77918457b215adb19d3f59bf17010001 \\x37e1d0fc9dca2f5f5e22341b7edb87ec3569059e69d37ec2936a957ad48bec64a3554223818b5e3c041fe3066375bb3041f528197684ab28901739c1e1328e0b 1646225441000000 1646830241000000 1709902241000000 1804510241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-284 \\x8d622d69934bedfa0215821a33d214a77e0432e0329e259909b30cbd19f5795b1c0e89ff8efab87e9a254eacdb4057ecf7df3a8a148ab1fc28237608f47772d2 1 0 \\x000000010000000000800003eecc597f92ace5e4e4aca10aefa33d5d56e167848ef7d0a4fdd298da45076ed71ad3980f3c0defb7528e9942911609529500adefcdbe3f8e688faa4b782e99ef577249579c00956dcbbffeb52a42f3451e829839679954498d3c7671139154a00ffae5142a2e93e916a55173d2691c7f68397c7313c9844d70a6167fb84de39d010001 \\x61c118ac2885f20b98cd561aa7845143ddae0edc3621e9fb190cb3fe1a2cd4994b514bc8c8ecbaebad88bde54ac8909a6ebe8e0698e07a6e194802b4e267b40b 1652874941000000 1653479741000000 1716551741000000 1811159741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-285 \\x9346d51acb2bf83593cf564419a5086f549f51685cbea59092a2e6086449ec6a41c80efb9786181febd1770aa787899c51953c7759740174dcf53fd306389ff7 1 0 \\x000000010000000000800003d866e1e3a44e50fb0cc99d8b5e7c3f3583d4f59743a584a337ecf0098e21dac7f729f7cb1d79bc428474adf6c22228a5edda9f26bd2090de6a8342af073c7ecfd37bd4ac242d29f297242b6a674954c19ad670cead4bb113fc118242bd6aa68fc48618fccf61325630e349962ab4781d64d88841da31dfe2a691aea2b536b377010001 \\x6cafb7c5daa9aab2cd2350ba626a2450329f2e141fc8e5ae0677bab76d3ed89d7262af3792386a4f113219a2e383862f13b7e00006bf84a1566caeb602921e02 1666173941000000 1666778741000000 1729850741000000 1824458741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-286 \\x941a8acb4f45bec2bc7b812ed0a27b16ab1138835cebdb0a7faab46cbe2ca8d166636f3d9c2a8dc52566d8d631b77fc749b40a940dec902a9fa1d0783e757fa9 1 0 \\x000000010000000000800003be911554afdfe60e9b1c7555b5233f1648739e2e0b2b7c5fa25fbc7584e95f2ccfff617c04cad7db5f290ca4c9d2aea1530f006b392962501af5e188debf0204ed471d7947529a61d906d51ec6969f9b60706d69c8b86aa90c6b8050f813665b1686623ed533c1a0a8de83ec7acbff5867b2aa140f0adc4b30ca3b91a4ea1a93010001 \\xe4439998f8f0043e3d11e4b408f02e8c0e0803f2bc5f04c5932a5ed5487473f4f5ca7539f4e8bf88395235b092adef28d63d5aaf4920c2dce4fdd1c4d76b770f 1646829941000000 1647434741000000 1710506741000000 1805114741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-287 \\x95def4a747ec641d23a79e3f62debdfc1b073eb002c2c3480ae2010cecc181b4641182ee17aac5c1809a2d3364652a4577d7ec2c326cb60096d79eeec3c6238b 1 0 \\x000000010000000000800003be3288605c8ad6a2304e62f38ee39a5e9d4f237252692bef70afb7571835284f38d4096e38b8b5acc4584243663160e5729a4bb2aa3f6d14684b2b6e9d041c10e615d3026346f0b8aab2c929543af7d6daa341693fb5f3284862635ab665133ad976e59ea07a535421ee339cf2e1fbd08ef25942a36ca5004b74f4311cd3c4c3010001 \\xa773c54be0f174507e29227c65a23b0a7d8af9321398e20abb6671a854b79e19c19fc2bfb11bbbd56b907f25727af2a669bc3e1f1568bffe9776260e29861b03 1643202941000000 1643807741000000 1706879741000000 1801487741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-288 \\x9a9281e34d3d1d79d877016a89bf06b48e3da601306d95aa95596287c8fce3a279cdbf07afd3c73bbe2002fffbd67e78ceeaf32d0f972b864870bfa8f794904e 1 0 \\x0000000100000000008000039f736d3f62dc6d775b5c76f2e5c52f8087d1d3879aead36a0eefbf55e0b5501250240ef9de4fe869f56283ed720de379d380544bb0f472b33bdfa4d6c6cc79d70463e5e365d0b2a2185686c3819bc4993eda38b84af2684088e3d6cee64f587148c3fd812c4147f97da1d3bcc1baa1c030f74df7394b3b484a4e98cca281d7fd010001 \\x3efb80c527e91ee3dbf7104c8b598bc45cffff8c383a73ed9cc7755ea5d4084eb2bf48ab43739599e235f78fdce0fbdd3042f6951c92c3b503091b54979ead0a 1648038941000000 1648643741000000 1711715741000000 1806323741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-289 \\x9a565b16aa06bf4738b74cb2a85fe3951bd2ed08b137c3f429af5b234d34def097de6f13c246197df6f0b436b6371c15c058271764c5703b088a57c33191f8c5 1 0 \\x000000010000000000800003cd0a505d1277282834abe98d22c0cb4fcc7cbbda991b0956987618fd03720eb2424d24bee66311740bbb6ebc1d0d488db2341e240e7d7fc689383fd26bb234e93eb9e235ef4d1d50e78ecca4178354b2e1f7484b9964d325b8eb01120bbc58068479ba1c9aa2edce701c0a2d1e3508cebe53c9055ed7f83db6185aac55ac0401010001 \\x77c967d716fa0008c07869db84b357f9ac988d2400549228cf3e5c94498ed49ce1363d076d597d03d335ebcd4406f971f3744cddcc4fcab21910300c37ccb70b 1655897441000000 1656502241000000 1719574241000000 1814182241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-290 \\x9bfae3034837df6b5234eac4dfeae9be1178e54aa8f7675d8edb54bff46093d8ef2f4f25e81d4e787775b57fff89dddf338bb1b7b47d916e118218eb669b7599 1 0 \\x000000010000000000800003c345f1d816756491f76f60a326df92874307440296d67b317f421c1fd60c4e630f88c59503c243919e8c75dcfe7652ca645215b1e54e405921ab02bfba22ba7de2ec79574790a460e649783ff82bca1487394cb6bf3ffba9987d7d102d7f10fcb7894152e3fb3e3f5364d26b812736b06e4e1946a923ddf4c92a8c34d3f8e9f9010001 \\xb56e3d405cafaf5ebf2f257f1aa2966694cbf8b7ebbee7b10d4f4d6d545224685b4115aa5ef9d52623506dbeb4b8d6e92ab5a13e1e33af446950b4264124ae08 1664964941000000 1665569741000000 1728641741000000 1823249741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-291 \\x9d0a5b59b4dea721b6ecd018a433e71d1952feae934794b9f4ecc7d79feabde75d5d745b38a26eb87ca37a1baabef266fdf1a35043b7c238db8e298959da7ac5 1 0 \\x000000010000000000800003d1350d8c68e4c403293fb8ab62952e4ce13aa9b6489a476acabc356d8d7f2c57000add9761a210a47dde400ef67a4ae3db1fe02ac6dc7ffc4b93d35007795eee6489836ef1c069cfcfd473db333496e20553fab7f7394f0491376ef10f325317b0c145d2124f4b04d7545a145db131c0125c32036536d1d751a0b1591510963d010001 \\xd5722fd8b3d484c2da1519f839791ea4cc961529a4b83376892cc965175d2388c8e7008e510a2c7b28a0e99656ac29797a8bea13602a63cb27f228b7694c7f0e 1655897441000000 1656502241000000 1719574241000000 1814182241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-292 \\xa6a62410dbac03059861886b1a0fbe65e5b355abf3fd919dc8880ec99b8965f0a0ba2873806f400792932ce962618850b8abfa8574f1010b84c10aff3d52b5c9 1 0 \\x000000010000000000800003b2b587e1e4d927db7a1a843f47395d0264afeca1390214de77642899734f4fc489937d5a8f703b254c597bbeb01ba0c669e8ec4ca80767f8b12bd8149f7fcc79cf44306b7ef65c02a65896bafdd437dbb0a415af8ba3256ae14bbe322508cb3842b72fc886a077d78dd7370d477045222f27691fa55988d61abba531b09463bf010001 \\x8bd580b5e9277b193335b04b692bcbe9a7fdd9d37f0e95ae8269a65cdd5f7e4eef664a8617352d2b630c042501a5855f737b147eca612cd96b35ca7af5c5ee03 1643202941000000 1643807741000000 1706879741000000 1801487741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-293 \\xa6366cf8a3e4278e65742dced71f3aa50f2ffa48d64fc90a124d44eb93f5d6d99ede0f887678a051910846dcb53f65ba9debbd5c963a73aac74bdd6153269731 1 0 \\x000000010000000000800003bc00140fa575f7542d2a44eef63c5e81c6fca3cf610f65641ba0ee8b1141d9bbf5e7766c6a8dcc49a6b5d26fa6d59be36477069aa62ac766ccb323b243064d4c0352370d2ecf1f987f2aa042c1965ac442f8b4495db119d5759acd9c9860bf11c96f997a26e89169e7eab91c1726983ea0babf6791cf8c0c4b229f0620cc1efd010001 \\x7373377cf43828085a27ba7c8758c83de0e81e30bebd97729605a8bb1c934e72f6db4794dd675cfcbbb3b648151988e8ba8b3b16857bc87e7e0cbad922021403 1663755941000000 1664360741000000 1727432741000000 1822040741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-294 \\xa63ecf2346b6b667e4fb190955f8c3ffb6d55635ad9acec378629c8b0f184a7747034584532509d3550998f896b461e11c08d7046849c82c2c44614417547a9e 1 0 \\x000000010000000000800003f7cdbc8fb32b3f97fc3af620bcea3f9bd0171a8a368e7a67ec2d2f88f3e15b9a63e0b652c368c4d7410372956bfbd3a2c6079e1e63ddd915f246378d8ec023b8ba4168fd20f498b7597356af618342bd07d37d6cfee6018615d4bbfd20d3e0317a94709709ee64e666a0f289b24823867a4f7e4eb92541bc3b948ddbc6ec56d9010001 \\xedbb75e5026a6e1ef7851fa89da2e5bdeb9ddd0426c8ab211c7b654bc8c79c2d3aadb67d680976eb6289c941378f7bf7e11e6328340236518f209b01ab74140e 1651665941000000 1652270741000000 1715342741000000 1809950741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-295 \\xa7fe7c47748ee2721150584c6e298b9a1ed403e84c4aca623ae4d8b5700d93e01d6b01fb3c4504c868fe4f8cc4190446882088f5d4cb1c333638ec8dfb3c2428 1 0 \\x000000010000000000800003d7e57a58ad738d40075bd8d4334aaaabbd22a96d63b722075a928a3b482055a1e581d9d7649e0facabe823c09a21fefe7ec13e9568c523e3f229d58e90ba6d75f7b37ead3f8e3331085d84abda36de04d9800a3f4a29b9a06c3a6b0c49d7689756e1f4c88f34e83fbed2beec4fcf62158c11c391f7e29d2c6088c8b9ddda7f79010001 \\x46907377d6105faa5c92e67f5fbb2fa29c68d99cf7c6541ba5a6f244c359730beed57edb26d0a34ac2dc37b34787683b869bdd72b03460d006ca2f6b14ada10e 1655292941000000 1655897741000000 1718969741000000 1813577741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-296 \\xa7a292e8accc75ef9c96998d0c7008ae0122940002b070173c9cd2d38625e3c00f95ef1f7c92be57a0da2f03bbdfc7722d73b9b44da3f80648c4aa031df4cc40 1 0 \\x000000010000000000800003c8d6a798cfc2f449fc5c24d85e1c392681caa7ebfcf9fa8fbe1300cf0d3f790ff232105a8e1f864bbe12b59151dc3fbf2ce02647d5c6836d7951d4e86007f10487bb5198a4c4920dd2d3e12834d0b8939120c836a6abdec66f93ba87b3e0f90bdf38befdc185376912d88c8632ce528fbb06d8d1bd864117c41656dba2a6e647010001 \\xc6fe2a2b4a93e61c81164805244b44514e94904274dbdbc42a5fcb6bc5ea0394c890e0dbc10af823228544be4699d60881cf03b190f12312c35479c3dc010601 1640180441000000 1640785241000000 1703857241000000 1798465241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-297 \\xb2aec1afd2b72135a3414dfde13ae3e6c155955695fd72f30428962784e6dfe7f926b76549aa8cef6f7ff5229e60a489bf993747451b1408745f5b8d60ac40c9 1 0 \\x000000010000000000800003d02e559ed7424f6441e1099818c48819fdd15fe4307e1b224356d31c0902e3b230413cdf6e6964e98b357fb387eab6e81d1c70033ac889ae14634cc25d838d6792041c15ad2897260a5823b994c1190b965ce38598275a6d28184ad7a4697ae8df8a6afa6ac7fcaaa15a12c768f202347e7e4cd78ffae60a7b1e838ea0e72d05010001 \\x0b1f807687944711a4f365016123790c747eb8eae2f1d8c66622800b225d92b2b4a9fc9bef626a2cd0f0dcf9170293d2fd37952c8c2333750b30c95ba692d308 1638366941000000 1638971741000000 1702043741000000 1796651741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-298 \\xb24a8ae79df9b3a2dba1cdb505d73ffc02faab81c9c49bf3879fae28f853117e563cebefc0502c4809e5875ad98158f7d621ade4f1f601de530032da90031998 1 0 \\x000000010000000000800003e12404645beb2f016f45ee76eba3fd12b499970014910b6562fc0310246a9b0ca58c4a7cfb98a624ea503dfa9b9ea8debd7d55e5dcbf48002cb8b124d98f3db72a7149d5fe8b60bd16b5878f697f74b1a640a2be4db5a867b941c48fb876ca2ffbd296b077b6070d564ea55c3b457bffe36836d298dc3f2d512bf8c7575fc501010001 \\xd1307548fae751d5e36f49a11cc8302cb94205e298d981ce209ef91a69f1d47ea99480592ab1b0eee62bdaaf6fc7e2821739f46f6f6d1d4de404590ce05cba07 1654688441000000 1655293241000000 1718365241000000 1812973241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-299 \\xb42afa934909714dafd228c88ae998698df009b95bebe6238eb13465024d6ffa08532bbfecf669a93b8c3e9791e4f1d7737842be81aa1589cf5bcced9828fec8 1 0 \\x000000010000000000800003b1d77730b95a22f812770a40bfd0d9e56ec9870e6b1dd4efa1ff5b6081bbe3aeac3cbcaef69077554dc1a34904097d34f3b438fd552995152e0799d5f53cf0c6e001e60769837f3195769d6b8821baa2d2b21791e834489edb733e9a2d8804dec96601cdad2f8bf8534959940432bc5a35cbd6a085b9d1567335c74baeedfc4b010001 \\x2c3e7cf29601379f03d8de718ff703b2378fb83c98fefff860862597c3ba4897e4d426f85c6f3328a337864727d93fa39713f5a923c72fc00e340fafd6a64304 1665569441000000 1666174241000000 1729246241000000 1823854241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-300 \\xc016f0bf3b87bacdb42b9c9a60178eed8355b3540bb889d4f4fa2308bf7a3cd2964766cbb335f59750276417bf39f585844b07cabe47ad596bce4770a06e61c1 1 0 \\x000000010000000000800003c587bd64f9c5dd5bd15908ed37ed8ac41c8cc078defda9c02a7abb3e12900ba46fb4364abf98dd63eea5420b05db299f723328fcd2831472b0328456d19a5dd733aeed6ceb9193d6a0d1f9be2a4e7aa741ada565584a21999e80d07d48e0a0844262bba571dfb0c801c6f76929838d9ef98575a7cc04a99e0677adeed47167b3010001 \\xdf936f5543fa34fd6b896a2856e04874b7a45e986f94b3a1b0fdd416fb7f83e9c217c7bab56013bfb22e94f6c677ce62b96dd740e092d1325f646b18fec17d07 1645016441000000 1645621241000000 1708693241000000 1803301241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-301 \\xc066974c9acb37cb0ea8b72d258db8dec474362bba09303f695e69f25331af51facc5f39b10f13b50a5bc6537efd2566a9249325e8fff5a46377caf84a61127f 1 0 \\x000000010000000000800003ca8167f77a4e8d6bd5b860811262f1ac32a90a87b79114c0d02c3989fe548558fe4c57032817a8669607f12df868275c39e073bf30eb1821059fa72fc2ca8b04be9c4fcc225febd69d2f1d9bf769a7a99c988efbac9b8511c0b787c6f6a965d7dc2271b36bfa1a3cdd861337e6aa565da9526f24304e847547986c78206eef8f010001 \\x818bae0095669733c18b78b955139e7907339f1c17507c0f93655567d02c4b12b30ad154eeb796f4ea5fe96ca9af8babf397e915b189a73aa6e904921e36150f 1640180441000000 1640785241000000 1703857241000000 1798465241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-302 \\xc0e6d8f1b62e55fc70573ce1374f145512dcd34f8054a033f7b13f064b9c3e098de9c93d78c4460a4cbd58a7f77805d43494ea66a4a4a58cb71dd739f011d73f 1 0 \\x000000010000000000800003ae7b17e13940d8c018a587179d770f61aa696f8663cdb8bf0e3f50f287b2c1707c5b41fe1fab041d0ab64a1d5139bff7c0f12ea98d5c39146ef9324bcae13e3433ea277d78722ad1c32ec7d6797877e247ee9a1a9c829f899092a3c5847135b4467f2de458aae2aa6179c89c6b49d15281268ad24d131ed411f92a35381027bf010001 \\xa6d4ec4b4e8ff7745d1c372abd7426b37709a530b528a8cb9ff541becb181fea61777c796bc6fc9ad21f5525e2557fa72683a28aa23c9d3a4b46039fe5945205 1666778441000000 1667383241000000 1730455241000000 1825063241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-303 \\xc2860a37418391da98d4faabab435c12a8c5eb5a10b2ffce5fbaa76de119c2e1e23706691a667788667a3d4482f225e7c8e9c5c6ccd091cab2549c7d31dfc380 1 0 \\x000000010000000000800003c3b9b64b87639eecb3a9c39fd0ce339439d27db447340117811c92231dfcf416710bf40dc9d028d352332657002a7a06f4e89447b1a7faa469deeec810da86e1cee9d67c87c9f76fc70537cf8c5e373b30e52b7208daf9abf16b30e0c89ff07fcc5743ec14d6c658663600187c3fbc7530c780688ad6da134c74bb2343b1b0d3010001 \\x3d5a37fbe8cec744506ab2baf33a1b0e71e2f3daeae4ea583e7b28492cb59b85e5a11d2d67430e317e338f5151c7dead098a948d56674c2d8e7371b09a00130c 1641389441000000 1641994241000000 1705066241000000 1799674241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-304 \\xc272c67edf57ff9310225a536d0f3f4ecc1f9b8d1025c02804867964a1f735f64c06c926f95d14c8085ba32fcdee2bd4ee00900c3d0ecc44ecefc12e52bff94e 1 0 \\x000000010000000000800003c68a9946652749242888661324923c20a3ec873f37e3cd22d960e3af334698c959c42d80c7db1bfeb457460bc22b2de4450b57425c16e5cf79915802846c234ea5c3584fbee1066a3fb23ca5a09d54b9c5022e3f4f65d388feef28f39cbd0b3d653a5c8b25892cad76fc9dc679b8fbde3df93aa9d461bb0e389a9b914b0879e5010001 \\x8128219289247997df0d51718e01ae2d482eee84f8e9e57bbbc6f3824d95ee1bd2331c291243d66b4734cb30871ebdcb14a9619c122d1b920449cc423ce75e0e 1646829941000000 1647434741000000 1710506741000000 1805114741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-305 \\xc35ea747120fa2aef5cf0ca39c333ab8fa7e908896c1d247967c084bed4f1ee84bcd88b94773e2ffe78253d767a3e638cf07ed91029821ceb4e1a5325c86d06b 1 0 \\x000000010000000000800003d098995b3f2785ab58cc64e2a24a566eb8e0cfd2619ac76bcf5d46985cca00f0574b1e604043bb7f92f8b59f0fad0f42696a95b9a41dffd171bf24b8b00cae3eca934eda68533c7a0a26d8e11cb97641b6ad8886b6dd9fca030aaf1056e9ed94977a9b6f019efd923247b78140fd96af7190fbab9c09834c5bf12d677ed5b3af010001 \\xf17fbe26569942c34ba2c6285aa6b249d3cba7d0459f730e63532de28a3f48aefb1f8cccd9483597b526615528cf21980da83a6712f318b96e78c0ad2a66740e 1644411941000000 1645016741000000 1708088741000000 1802696741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-306 \\xcca218e3db5737b1067d6d1b02f5dd047156671733dd341376ab3df7326106e10041a79604d169d1f2b7f1158baddadc1036b9daadfc833245d22f38151e0fe6 1 0 \\x000000010000000000800003a9612c7419fc4cc6992472f0479bc6eb4f93f8bf4db40c4efbb2292808ffdb0ca961ef93f7728c8c1c0aa9d4e17648a4016275dc4e20dbe34ad8c501babda82e62c82cc57f98074659cc31607a7f6dcb32ca2579992da9307480d2c30bb78f9aa27e00d695c208375fbdbf7ab70e262d4152284b42a64bd482bf3f379a02662d010001 \\x20d9cf443f88bd8929aed66e3e1cb406576a636491590e1d339941e92eee898e3aa0ef4666880f0bb7b91fc8f31cedfa62dcb92424b2c80f71f69ec5c509870f 1664964941000000 1665569741000000 1728641741000000 1823249741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-307 \\xccf69f3a234713d6ef74b2930b9de7dac2e7b783c1700941bad663d45fb66a38eb72e18c5970a0abc2ac743af2c67c810b878f8de9f83e8e38631f7dd889c30a 1 0 \\x000000010000000000800003c1b86fdb0c2a7d533d457009690f1a59228641263c6856aedd1a968da7e004f8b3c4ea739c27352cd692a7f05f63f35773b7fe8d8ed63b5a18fe911d380337e2da87d59361ab9caf05faef409c4fddcae4dca4481847d92354a4491c472a4fea1fd4ca49363e9e6954ab807f524ec6bcab3647a36c636b599fada869aa079373010001 \\xe4c5eb9d2cdd9d4dff812f13627bf942de93af7c381b3985ea16a3f7bd374e8ccfaf377f39fed87e517c33480059d0bd5be5af6f0f0cd9e61ad8cf33e6fa5b0f 1667382941000000 1667987741000000 1731059741000000 1825667741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-308 \\xd38e43caed9790533d5e65096accb4fced5ef4228570255dace8a9b543f360452561032e631e2186918916a6ff839cd294eb6a0b93761375b7685512d615a587 1 0 \\x000000010000000000800003b4e4dc9c76d03928a6f771c618ec2b9e12814cae1e7459166cbdf329a4d5ab2977ecb36ef1a2359bf30362264e05e43988359f70d9ef77d15dd1461ec4f3c6f2f3a5e9587a639ab7223ce028a6f8a77d1c8cd884da422eb5a53519b742d505200be2e677c48a106ba9995642d7ec5140999c559aa19536812c79df92adb3c14d010001 \\xbf7c09c26415e14e8212e66c2dd4505e491627c4faabc7a58d60da47f34f534b15391c7a66f01bce85fd4b581a6d7b694c454da539dc6e83c78b5be73d72920a 1647434441000000 1648039241000000 1711111241000000 1805719241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-309 \\xd6be3cd6307340bef356d329ec8243b546698635adef70b9a97598d410422d7040c926013755696305006aa9b6f67e43f34a8db4999a7cbd6fe8ba45d48ac95e 1 0 \\x000000010000000000800003c5100fcc3724877c2a89b95b30fd42e8e725af92cd5d55a4289995f7807a93ea0784672ed8dc5dee82dfa9c382b7da80bc74749604cd18d882093ca980355e7e00f648e30ebcbfff938a8753be1ed332adecc26ab6fd2c9c6c251e30530aea18bfcda4cc0cc71744c12c4fd423bc3d4affb17ae6b8270ba1c4117bfcba4a2371010001 \\x78050c196e84b1fd79f5d7def0d173125e599cde2073d8fbc9c90950a21314cbe8c9051ea20d07947f57b0a69541f9a658b015ba7f4ce095f742c8047f65400f 1669196441000000 1669801241000000 1732873241000000 1827481241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-310 \\xd63a9c8290276a7b63651e6ff7be83dbab9b6e238daa3772591c62896fd027f0ba75322957ba6c009281a03455794481470db2ec51818d14b004564847c70f03 1 0 \\x000000010000000000800003d00b485b466e9315e63a87b82d2a1d19a389bdfa14286d98fcad7825c8f729dfbe5d1d836b3553981675145cf0483641340a5c6a5dc89a3ebc03f5f4db00f5cfe523419f0a8544cb44aabdbf6084771bcb6bcad3c10b02127fde361574e85020b07f1a218594a4d9ba58509a01beba809929a37f09eaee14c98f1df90795d787010001 \\x9b432346ae824b1666322cc5b2d691d3894b84c99f4b183bd0d134b1368cc19ece2e90a6aab30d15ad645dd8729d9b4aa2633111620d1366e9970bfa3797680f 1645620941000000 1646225741000000 1709297741000000 1803905741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-311 \\xda360e77983c34d17dbe51d100d2aad72d611bc64b4b9ed29a0f8587bb7514aad9229cbb93b10d045458a4aa3cec9feabff5f25c3e97dc3ee2d2d76baee57761 1 0 \\x000000010000000000800003c559538863a0f9af2b889fc2b4af037ff21923e85348f8442333ca39269692c5abdd9f5fc0cf935fd5287c72e56605040fba6bff71765165fd44fb6cf28a984ffae3dddcb96f8c8394aaa037e96cceb930f55a73eda8f3f6ec6c010b5e1db92b4d51f4873c0d76296998d9a0197d4d7dc1efec98e94dcc89198ec45986165419010001 \\xcb1b1beded353421080e9efd8a243b8c69b0b86c79d25d879ad39248aa388a70c41b871dddedf2e375e212a9d233cc796e08ec3be37461c8304ee35eee925c09 1645620941000000 1646225741000000 1709297741000000 1803905741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-312 \\xdee2e183114c218a925a406d80128ea622b488605c8f08fd459cb6c2c3bbcc07ee721cf28ec041020482d97c37374fef782abcb0f2d0f55426e9396c3ba5d920 1 0 \\x000000010000000000800003afec977a63a95fffd44fc7b5642b6a2faaf29481d8808f1b15931b47d139bc4cac28592b0f58e44788221afddd445122b750395928ba86967c9cefaa6c26c5131c3e0f11aec10fe372129fe2b6e2b34bcc6ba77330dfd6f8f5345a7e0ad9c2f43bfe2f51f6895267846632b673162dd1af87c74001de0a666df3e068a7840a41010001 \\xa5e4a010c8af6ea08ad23d6b9b8e22c1f86ab1907805f037f5f77965cf50cef71540af241c89b8ea06c4934f1a508468b64c3e513c171714fa16aff8711d7003 1664964941000000 1665569741000000 1728641741000000 1823249741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-313 \\xdfbe1d6efe1591e3add2765de2ce519dfa16341293eaab3c5c7cbd5b242761c186dabdfc6032efae2cfbc35d21ee78a79e60da2d1d7807e54a414c6a513967de 1 0 \\x000000010000000000800003e1b7543f1e750b314767153942c7ae09d0a90f327f51cc0d7d5f900f3fa2128f2ac4cd3f433244052a37d9fc39d1d587e1edefcc7aa8c22fc1e10f3c1276bd98c3a5a04258cc12c751d8d0e49804d9753c004e2e94254eed9f3b3b1f469e23f629cf2c0cc36fff3d1f4f1a020dec25e4ec7ab27720892244e06334167f0d4dbf010001 \\x438b104b8b68b6bff168162b4cbd9a74d69344db2e37e0af58f5276570d4fd652d992e4858200e49abbf4f46617bc2c20e82ae98771ef6a8f7b310f89993f000 1667382941000000 1667987741000000 1731059741000000 1825667741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-314 \\xdf9a5729d5ef85b3c73d9bce01dbf6eebf1ff77bbb8eea0ff04cf1885638507043ea2bfaa32c55475a630592e4eb0065f7737c5ce370e0689dbbd1748076a06a 1 0 \\x000000010000000000800003cda4c4f9a6fec2fb9017d09cbbe85cc75dd35a7e02ebfbab0445a38ec0272ed083a8e34a9f3151cffae77e8f6856b6bd1cb12fbde739273bedde50b2f08dde4177718b26436ab29ae1bec712a97808299565be21d2e9054e9f787edb4bae73007646841c23079d6363e41115d752d85a77e7990ecb6f7027e1e5ed0849d3deef010001 \\x68986aa888e63ced2d3b4ad31895187dd6907f7fddc8b8cd80be279cd23ba800b60404118ba0ca10bf23e944b1db8d39bff6c60f3b0edf5126de0a5f746c7f0a 1658919941000000 1659524741000000 1722596741000000 1817204741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-315 \\xe492c4d62beed3a2ddc69e1aa9ed658238e3b0c4f861ef9d5265ab9173b836f9030d081a3602f157d1d1549ab7843121c873f4c5d622643e8fcccff8aa134c42 1 0 \\x000000010000000000800003bd4cc4823b9429c3e4601ef9d55ceb981d4e06b806a00633200d58386871c30afd6ffdb3087ea3385c52fdea50c44462d8aeb083517836e3ac8cf92445bb7ab730c8f8e25c5293de489364594caf96bf25bf2e3ffd0f85880056f403b7737e65074c8e992c322f7d515e9365092bfafda539a2aab943b1468036725bcc8bd81f010001 \\x07008f5630cc9c53f85e88252e6f7f86a520d93d8eace1ad75dc5cf2ac4d9e9aeb578dda6b610affc7d7fe5fabe1e894cfa4f70dc64ddb52f0281de1c8bd490e 1657710941000000 1658315741000000 1721387741000000 1815995741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-316 \\xe6320db940d50924d60599cd9b23455265674a24f39b697e3dd221a218f5441d1edfaaf48b9f2de528e216a295f6f395647b0cafef12708be34fd89e71f538a2 1 0 \\x000000010000000000800003a3f2bcdc8e09bca1bc86879fc87bcc662d61b53688e87d674a12847cd2f4fe43be42b6958ff0ed1d9dbe7982ccccc577b6a6e19f58d817748b5457f727bf7360e087b42f0cad0be0585bb9619c3fc850e3c512cd950bba77b5796bfefe727398720482b6d9031f3fa48c918bfd4bad53af1b73cfb124893376987ff5a7ba2e17010001 \\xf42e5c0a956568ad43d3860962f24b96957ea6050705c9ce98ba4eaff5f046ee9a0f6df9cf8c0b1d8e68b3f22880252a907cef4d4afce03147e9198c81713408 1640784941000000 1641389741000000 1704461741000000 1799069741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-317 \\xe9e29f0f0adda23db03df7103420ffe4a105de0b0b0a2f7b7db31a3ec7747932860305a24543854aec7aead6666b61dc18add1b74aeaed9a02d57400df42ae51 1 0 \\x000000010000000000800003aac15f248834789fe58b5fee661994e9e054d620da523e332307bbc407fbdeb64c789de2875afb55e9f8585f8f6bdb6eb23dcad2edfd2c8f8a55fa29dd81168fb246e98acb0150ff064b1d7aafdb0f60046d28ce1ed78cfcfce59c27facc52a262350616a81a03ea46b5b28633bd74b7e4660df0612e13721a70f8c75588e7ff010001 \\x617d937a675ff100dd4f6d769b1d229bca566add7b89c4347159057484018615635900707d058954d254a303f23d4b7ed005e48516ccb44504599db72428880b 1641389441000000 1641994241000000 1705066241000000 1799674241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-318 \\xeef6924cfa7bd3fd5177fe34652f34adadf4fda7d8022f95ffe89eb41cc27ced90102160c9e4b2272ba838b41d619b4a3e7c0f9b483be8165a8fbf9bc0c505ab 1 0 \\x000000010000000000800003a99754004fe513d353b8bdb5ecb138e387e7332ea9876a6e46e1266700ef6732d55b696ee9642589c6e4d8fd633c17f54181624b624002379aca13520c9bceb9066b29b244da92c8589dfca7a7d0bac4e83d6abbd51f816d8f769848fa54f53a3228936663c8657c199daf860d9391caeb1969be9afdc390346b25bad46ae50d010001 \\xd234432b22a1ada5ef5ebfd26ed4966b5b893eb20fe728f6943ece2e89157999ba65e3a059917bb5b32b5e95db22eaf779a8258193a152163e98d222800a2f02 1669800941000000 1670405741000000 1733477741000000 1828085741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-319 \\xf04e7b61cd215ac8fb757c7c8b710a619d47ddf4d8288cd7ce67adb779ab5f53494a60b03db9ebbd8ec00f6fde4e7a431fc35223a57220e2eb105760ad445ffd 1 0 \\x000000010000000000800003d48ccfc4311b28248541db1ca1905779a1134baeaf4ba105a31a9aee89b4156a89e9aa8ead53435c2bbd9ff3a798a992d4a0f6e47a512f607ef3bb91eb0a317f11485481ffc395885466d5248f76e0c60f695f6aa352662402dd4fb86059e67277cf70d1c4706f04f76625cacc6590f238c56218554eec04b5f67929d1879b8f010001 \\xfe43a90371eebb87691519cb49c8295f29b0ad14bbf5933d9b0396ede8e56900fb215cdafd37f1c72fd8b289da9380670b0b67d4afb1e6b43caaac5f16ff4505 1645016441000000 1645621241000000 1708693241000000 1803301241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-320 \\xf15e0da399a86b17693133db4c69e0bcc51ba6b6b581e99844cc241d8a429e6c0626446a93d3cd71eecf0274362e3caf395476ee93337872d684755bd74baa85 1 0 \\x000000010000000000800003c9d86387ada7b83559436c18a5703b72d6f9bcc1e3bdc49cf42802469680bf76630275dddf42e3dc0be9fe87025d89f56172568844a93e59686fe4a3b5666a2c21455048dc470b2922b1f3be28bfde53e7a0e894719e899eec5a8cea69b71ccaadacb02ee360b8a5eb623398d67df635f147d08258b3cad7424f75238c1756e9010001 \\xe36db0227b000a88248d576dbd0b36bd02a33fafb72e2c74be5b457c4054886c2d3e28cb428bb36a408d643169c4c8ed7fec3787f0acb1d4509db970a450250f 1658919941000000 1659524741000000 1722596741000000 1817204741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-321 \\xfbfa87cdbe15c178610010921665b02ea8bdec12e29971ab16a91ff8670bf25c5d31f4a42b9dba8a3710c5df4f3b670644834a2d0643aef694171ab2807fa321 1 0 \\x000000010000000000800003d3d3a45bf099c8df77bf19f2f35e46e5b51be1837dde15336b84cbca274648d1a398137997c1327008d07d61fc5d8e10df0e87d1233a838db65520296b6d4693caa9bb358631d2c4f4d931dda1d65241fbdf40470999691e6033fd7e0b0df28726939e4b65203b4bc4f11ae12f55b43ec34a3bd7c95d13d884edf83d3a772fb7010001 \\x1f505d46c91d84e6443368ddfd317d852312c45cba8ea9069b3adab63674fe09920d399be69a48e3d49c300539fca39326875fd034fc1d27346393d28408570c 1640180441000000 1640785241000000 1703857241000000 1798465241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-322 \\xfc1edb4d423704ab3cf7567286dc3c6701bb56ad8f1114a2214daa95799eea882322f75c9162819ad3bad58861775d5c449fe2ce83bc06fa7c6d95a103c3287a 1 0 \\x000000010000000000800003bb73c3f823beb9ad2dd3e76ea445b8e9fdaa1bf183b22d3126efe232fc12c929ea04fde4ee1ca7451481f86c153a319005c1e39966f848f602b971eee791c4982983e68c1529d35cdf68d981d33dd8e1a0f178ff9a9a93c53e3a4943a0b9bbc15f63046b4472adfa75b1e03d99fb7d4bc29265475ad0647fd5e76071619ee4c5010001 \\x2273892d6c36d56e5dc674006b2ac0973a57cd506e038d6bc0992ba046fe77fb9eded80f87b40bc2ca729feab23dfae0adaa949b5d1a002f00111e1d87a4c107 1650456941000000 1651061741000000 1714133741000000 1808741741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-323 \\xfd02344fcb57eb686b352807944bd1add71f90f068e9ec20f83d48b24ffd554c54b2b10dcdc8a2610520b01173b1dbabc2e40ec1d73c7e9b509a555221da147e 1 0 \\x000000010000000000800003f7852d380ca9424cd0e1ff0b031c9d75d94715aaf7e764c444c6c55c6a921950a92ad54b14d6d48cdc097833ad26dee802d79c8180e4400b5dffe545ddc38e0943b35fce248e5513a6e818812c13dc5028054d404442222603c4ce88807ae73b95ceb0194ea3558c6db3d42fac585d46f76ecddf21880dc27bb423814cd2b5a1010001 \\xcdb4ed0c618559099bd723fe47434e83a3fc275d8610ca6db2df0818c1a8ad5e314658b9f35d524bafd698b929b5615dbbd2b807f8ebc3c487c0e5086945aa00 1660128941000000 1660733741000000 1723805741000000 1818413741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-324 \\xfe26c9d41ef170a342634a5eff2e06b22e5ad1d65872a3d80f320d8f96b44cc93678cfcebde089dd9a95aaade7225e9e4e5b301477630ee57db3894da8e178e2 1 0 \\x00000001000000000080000398bcfa0559fdeb0d79ce3b673c2a9ee555de4e2e47cc898dfc6a30f30b6d9b18cff7fb04d0a08ff2c9df6a330f7c38cfa6ac6ce8c21bb31f4906b6131619d9c497ce8940f2d7bd4f117128c2d948dae1f34d7c234d131eedae8255d02f803c375fe4c9cb57095acf4ec12469825b07276ceb8215f9e67364fa0405388a0e461f010001 \\xd6638c0bb00ca8eaf18a6fdc52ef83b1d7b61ad4372b3f051133eb3ba16ce4db38c5b277e54f72cc33f5b34d05bcefaa3881c49eda80019a6081670bedc93104 1641389441000000 1641994241000000 1705066241000000 1799674241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-325 \\x02634c757c044c2eddc51a8255bcaca207ca8e365ebbf10dde04b316287ed180326144eb269f68441338603830d2c7e9dd184e86146e3ff2e87bc9148e33d959 1 0 \\x000000010000000000800003b8780182b69a4aa1190081b29d5790fd4b4e931dd9e9cb957dd0c3902e34a816f33967204559a515fd7fb593c101c61b4b92072e9cdeb579f74643529dfe06580ed3300aff4a8ebad1dea9c5defc0facac2c79996d61e58701f1c30290b6a515fc32ba84b50fb50c674e349c33ed9414c796b0acec40a2fa95cdd4c3c80a07cd010001 \\x6386b09ae670791f9d70ba5dca5c58f1bb8c5950d60d528a343e20072803c0e27c143ca2ad5d8d4d27baca142a8725c6de9fe71edac9d54cbfb1286bc93c0002 1664360441000000 1664965241000000 1728037241000000 1822645241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-326 \\x03afe59f6cfdeaee4d8c0799cd1045c25c815610320adcf1d019970008767cf69a3fee94b0251e740d171edd48940a2dc8d955e5a22cb979f3902673a914c130 1 0 \\x000000010000000000800003e361dbb70f78276759326e96ca86972161278f3c797917d4cd8897a1e9a6aef35ac6cfed437cdc86be860ac4f79b92039f455a9bf76b1e246683c510c0eb2c9c52e79bacf630f045946b1753409c1ea80e9854c8c5fb35bbaf371bee1ce7877e6a944c6ebba57104be01eb1251ead07f61bead97beaa0bef845b1d8d895502b3010001 \\x1ece643e343ec58edbc8c85005552f2f8282b669d25bf6a04100ada566b53559ee39e7b737ea554b9211f8d194f5c4f9806ae502b3315f3f8ea11655bc8efc03 1649852441000000 1650457241000000 1713529241000000 1808137241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-327 \\x068b0768734daccf24b334b1118ca2e369409d3611c76dcb3838301ec1d8bd6fc751593bccabade6cf0e244697589eb307edf2a2fb688a9abe5ee7555cf5414c 1 0 \\x000000010000000000800003aaaa2b5f1683ebafa80dcc457f5c31c42c542bf0a48200268e578c157157aef98e9d2bfcbceda056724278d7495a323a585c61844b5bcb4d4dca3e833591d659bdb207a948d09ff8ff1d1199713bbf1f19a7661fe49d4e4e582974265103204d0e3a284d274a13f73569df8d85340ce5993de228c0e2530e1d74b8fb0d4ee543010001 \\x352dbcb784f3fe82ac2b18ba22636bcde41623664c174683c9bd2b6b51a67866492f06551eaa13a2bca01d708639e5bda97ae1f4355892fc6e4177e898c8fe03 1660733441000000 1661338241000000 1724410241000000 1819018241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-328 \\x14df010ca82b05c60e642827d1ef4e7ce005986a56529c991fd14ae4844cd5a02491acd867c42a57affa31d0d64a3f0dbaa3fa700a14f7602912b5951d479548 1 0 \\x000000010000000000800003ac9817f7ed027364baa3c8469dc5d3a6679bb3a061dbaae3593a169b67a1a65657eb04374fb84a38cb467377142e17b562daef7d43044eb38a6788045539bbc993cf2a9c3f0b82e47cf5d3e93c777250cfff3b1e79586312c03de3243cf21b6f64cc62c97835aa6e389131b8651d243ea7cc8602e0e26e8bb7a86a47b74d5079010001 \\xc27b486a95abf2afb6f8d330b089e1371c6f9d9fa8c0e5a3d5cc13b061dcc572393da94140b0062c0bd39f0b629a13fc36274837788554aee9dce10048c1b50e 1663151441000000 1663756241000000 1726828241000000 1821436241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-329 \\x144f12a1937c726d5d0c9998713ce5797f9f614bccf7fa41be7580b11fab63a19b9053d75d3f9fd1826cc6336e4c1dae5d193b596785f1289f39525f5bdab17e 1 0 \\x000000010000000000800003c391143a895b446ab77cf73ac505f36ab5828db6865380b00fd0aa1680cf18a4e35603474123c153a11beacb40c8110fb171aa79e3a928442c037d185e6f79548651aacbd9e2c208d8dd4c915918b065e7e80e8427071d254af26cf958fb6fb798e84edeede52b6f8bed49b9afe9088a82909fc59347f6914e9c14f4c76637f7010001 \\x4752b16d9733f903a73a7a640c8fa3b8fd7b274d9d024bcffad530ae9a3f3df3984426e45274ff9cb7d3471dbf78b7d74c83b21836e3902cbe488f9e1a570d07 1669800941000000 1670405741000000 1733477741000000 1828085741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-330 \\x149335c1462f4f3406b4e57627826e82dc880739c219cfeab58535bc43065c779142693cd708a722f5b5cd6044f395b85cc039a13c7a6b54da73f8bd313eae5d 1 0 \\x000000010000000000800003b6053e25e600ea998f97059e43b8fc123c51c4b3b640c501368f578aea1a276117fbbd3dacea4a8e5bff332fc1c929e4855dd825f161c06d43d8fbdf6c074c8d7dcfcb81d1a9037ada7fb7f57f064ba12c703eaa8c42662a365b25b9b27dfb5bdc74b49496ce1e1b24e101bb5eba039465da616b28475a3e971a6fd0be1f31d1010001 \\xdd30afaf830c019e0869f756a2106501dda729ab596dd99fcdcded5f4a13b39e1041df49e30bb22aeaab401fa96d8cd8538bbf3f84e4bccd08c60da45a5fd90b 1645620941000000 1646225741000000 1709297741000000 1803905741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-331 \\x16237e40a68e11e1e7460ed19a1136c691901bf6c005da4ab919e4aff9750751e9dc6beca9e668cc0e0b9ddcccba7eb0a75ca88518983d0461b72f93c0d6fdeb 1 0 \\x000000010000000000800003bb9dc6d3a559ca964654619273926f172b44c6a8733d27201a3a66d0307d163d62faa0cbdc173010c30b6bc3cc448c74ad8b055c4aeb467798bb689a7a12e38a219cc89a02ece9ccfac8c751e6be919696f4ed3a65d82329f505681c5e7a7f53d34dfe17823f89a0c44162dced03bda33f6f2632a47b5182756a761fe26ec52f010001 \\x1f26c28ac45eb4ae66e8d7212a9c4f2e75cdc134db52b20180d9842e3ccb143b6eae416ba20fe9dce0e2b3c39b037ec38dbd916b68b97374f8925b1526b28403 1648643441000000 1649248241000000 1712320241000000 1806928241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-332 \\x1b7fc2600295958ada64f9fdb26615b58fdac6bc9cc803568735194216016449db12ced5cc8f3618f6ab230754a1dcdf522a11445c6be7aa50fc1be72f0c57a7 1 0 \\x000000010000000000800003d659a56c0678a586507869c57e74873c010f34e3bcc5e5d749dd011cbe7526fe087c347de7a66a55f83b6428b59f035af753daa5ede4f30e95559e490703a1361418f259a5b3ed0944fc54139418ed362a5f47a8c9937e11aa930286b988b27e9b0a533eaa083e4439dcbf4ef59c5d1da6550e3d71d205370acdf43625928fef010001 \\x2c7e3dfd5a09fa1cbc6b377d7a7e384e1625fc13bf8b5f796a883233ef15b4ba0ca85c1d8b1c41ae4aea46b4f9c54c7caa4bf1a3daf37cf8042baac0977e1000 1667382941000000 1667987741000000 1731059741000000 1825667741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-333 \\x23736a67482554b097816a0248cf2080d64b9bdf5406d0dde6fade7d92074f12122865e4d4d06e19f1dad14ff8b7e5b31d2a8028deaf1ed98d23789c9bf28d01 1 0 \\x000000010000000000800003e608f1d8182b3475731b16043c84b74c9f94650b1a0404d95e1b9cd3720a6d64a6f2f9b6bb1a7dca1d6068d78c94be81fe4cc33694e39fc824f01cb4c4880112eb4667f11ef67e7689ba9d32d04d404d574a54f45c28fceb72ee9c0196fbad1e1c09fe32ecbc831855ebb530014a00efed81785ab6579c80e353bf9a483effdd010001 \\x8c285192a562e074836c604d0afb92493b07c085e4abbb2ce457692a9434319178c171e5ddb1d0d908dcdf37f0a422590b7be26351c9c0d708dcebf3a484b806 1652874941000000 1653479741000000 1716551741000000 1811159741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-334 \\x237b26aae41f966242ce4d0c5f698e0473a0aee000ebf9a245c86c09f84eebc1db0d889e690b39b015409236ab193d90db079bca1ea1d06a1fa8390db9bde175 1 0 \\x000000010000000000800003c2490ea9f44b739f127e9306ec2551aa1b9ad2bb6fa64c2febff378784dfbc42ef7983fa1be71a546e2948d8104cc873363cd80fa7ff79377ab5a4acdf7d22272228b6be11dc3752143f458f84b1c7ee7e93f7d19cbb8c1db2557122e0b7b03db82292d2fc4aa51ece2c74e6bc061a3951811bc5e3f145c735e19dd8d0bbafef010001 \\x76121d85624b15ab38a901958a6418ef97235229bf003fc38f77a1ebe3fd7e09be697c7607070c19e7baf2b617c3d286041012846ffbd0cdff35ef82d21fbc01 1669800941000000 1670405741000000 1733477741000000 1828085741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-335 \\x24a7c763963fd5f8e7ddb970b1c01aef84e8ba9d803993d94ea65bc94ab87908ab110b45d21232fa53a7d8531ce66145519f59f935bf50569be4a5c198911ba5 1 0 \\x000000010000000000800003d990fdb7abb6f47663e985d46b6930f73c73ca3c91e585b4037b8ac5f44e62cac507192f619dcfe55872e6ef6897d82155c4d036919711601e7f958eb107262bbd9d44d854fbfeda10dfd41600bcc1faf85e38eb832f7d74c13c7bc56e9948adb00a86ec0691b736266e3cd33202b5dff65b4a59247c1be257c7fc5a0464fa3d010001 \\xe06fb51e2b851106f0f1a183ab3d186272d7d6ef5d6c9f3c79d07cac86386c8a538d32ff93107d29b5062d449a53d1b728a140fde9847cd2a9ca3fd1a258a407 1655897441000000 1656502241000000 1719574241000000 1814182241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-336 \\x263bbfcc82bb63fa4d31a65093c9d3640bafd3bb14faa817ec6889d8cf3015c0bbf58d186477cf0732a69ae3dfceccb39c39e2234be9a9024cc71d6e91a268da 1 0 \\x000000010000000000800003975a4bc7b4857c5d520dfee321b7406ad5152b5258e80e246be6d3eb1b8f68b8fb61c498dde0bd43649622f42c635f2b663d112f7393236f89eae86636293fa284bc305c0470eb0ee987fae45d3d896a90aaad83a98e417876645da0f263fae753ca0b98caaaee84b0aa0e2b42b5cce4289be4b76fe14dba7fa063bc257bfbbb010001 \\x324b569f27e4b838de72ac6498bd1425aee669b0fd95871fc61d05a38627cd31264554903ec694a15ca0f5ebb4e0c4b1843456a117981215734b6beacc3ffe05 1664964941000000 1665569741000000 1728641741000000 1823249741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-337 \\x26df9a35201275c2227fe0bb04130dd18bd803a2b434529e363848c45e84242ef9e5ab8d67540f32489e7ab1c21ae497a5d5b376eed7d7e94d3a18b027100603 1 0 \\x000000010000000000800003c682f22531f784d721ae137f0c2054483f3e80df090679d69e719aa8f0e971e02d60312783be6a7463e4e75376e07b85f05649b804e548490000e5d118b000a4a7f5c80ba6ccef3eb654e57aafeab50d02104fa3e2d2b91313f3ab82bf56b76bad846e55cf5e7251ba9f39edb835dd2aa886dd64a7a15a63354c955ed9da4d95010001 \\x7d96e58f39c57f19dadc841f4e0500ec32bbabfa4f9c1cbb1ec291044bda33792d89d1ec3052fd5f56f2d0a550b234bf7aa32b3e3e132fe20403a3d17221ec0d 1661337941000000 1661942741000000 1725014741000000 1819622741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-338 \\x2b3f6055b623a0683e2046123f21edf405ee620fed1cdc4393acf0313d1ffa63f0c58006db79bb3827bbdf9634b3d471ec039203db19cd793bdae8fb042ead96 1 0 \\x000000010000000000800003ceb94dbf767cb117477f9123eb426ab4e56680dda0fd846910d384449e1ec9225a5d8970694bc96c25133d9bed7a4808ede582b091c594f2c9624e3dfa73461e36a361f12962832bc3362f7173d74034f01c9d63a04c7743084a24eb0d6cb75038d2dc31cb5588aee37e481fc5f34e2cbc33c63b74f8ae3ec83743c8cb413965010001 \\x6cd351b6a7abcd6cc6404142d52b587516113dc72757f44a580c0cef4d0793a5a5a44d9bf0fdaf03d27298424eafbe377fda385d1dd1d3a37427eca49bbfa30e 1668591941000000 1669196741000000 1732268741000000 1826876741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-339 \\x2cd3ee202c930e9ba3de18504fe5855b510d1795236a5614e25686adde4c9ee87ca6a1decc1347677333bb89f59f2072969011f98da9c5d9466b50ea2db3918d 1 0 \\x000000010000000000800003a058e2f23c094afc4221992c9086f5d8897a6a562a3e3c7987e220a34a4cdfa0a1d5cf2abd36a289505006cb7992d2ab448c439aff9c8accdd17fc0e4d6f7f35ec96a366762ffe150b208ac5154603741c70040840303b46d956ba1a11bf6a4c338c8486ae33197f7a39ea1fac2ad202b4f1056901defb795020953955f829d7010001 \\xcc04d33d631f82eb368fcb228a2d125ba602536a884c67220542a9e1401abf53d2cd5b14c297dc7b371b97769ab1821f8d3127a1f5b09f54e05645601d87680a 1645016441000000 1645621241000000 1708693241000000 1803301241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-340 \\x2d3723912c51df2c415d62dacc7cb7dc77277ab508143b3ce9b786cf58cadd96b4c66941d7fc510840c3b389753c855f6d0c5a5f0bbc672545b5d6a41a50d3fd 1 0 \\x000000010000000000800003d4df5eaded25b9644332dc111c7eeee9b6b7b434cdd873f6da0891f1ef494e7326d87996ccda166b063054f54c7ae6d748cbb41fe10dc99c754f6c41f6d3ef77ec37b14796de48970b35e809648620d6f159407d91280031ac23a70133c0ffd339b7ea56a31a1243a9c89986ef11f5b7e50d33b6ef2424a3c4e6bc6368fdfd99010001 \\xf311d012be5edb50637338b6f8c728f2e1bd11695e0e913f8e88eb7cd97662202b20f7a8ec27844d09f4bade1ab097618e786378902f7ffb351d5cde2b1b610b 1660128941000000 1660733741000000 1723805741000000 1818413741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-341 \\x2d07ede800f34d2213101662a8cb6cd883aa2b0f861dc9b657e270ce25aa741f846fbe4c5e6b9b2c39daa34eccb02b9eb1892359fd373872c7baaf2a12a2bfc2 1 0 \\x000000010000000000800003c8afa0ea6c16d9a993b8b9e29e603f1e6bcb6a8decf1cf77cb176bd89a22edbe23963c3b91c5401481903bc945dfd7e10224bfb514c7c75822cb4479f4c32df2d82c34863aefa4527b0301665da7c670fef4934f60f6c50c5f67748c963df807ed9e130ade5e532ede946a6b2737bc79b7e30dcf8a94d35e800b700085a7b439010001 \\xd09fe4ce067a5d51aa1985fd1e2b497b7a1a0d05327fc0c7b79eae0b4043fc8d9335bcd3769f82e2641138ecd72ee3e4a5a04a59497fc75ba1efb736cc365401 1644411941000000 1645016741000000 1708088741000000 1802696741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-342 \\x2f4725d0668d379c51c6e4c14593cc9cd4dbd25f8a41fed6db751f85801e3a8a7a237bc0ebd080a51196e9d680219273e42a460910dd1c4730e3aaf64c83b236 1 0 \\x000000010000000000800003cf9e6a23c025acd6d5380de4c570a14c2821e19c01025dde2010e02662ad33582fea4c6d9a62d2ca90129c71278a6b207b21c03b674b6917154240e0cfae77758b18cf000b16bcfafd1fccc59fd5a2dd4d667fd8ccd49dd0c472c45c76b987b27e82b4e067457c39a35f2d53d4b889f2e953baab0a08c7ddaa8d8c4ac46bdcc5010001 \\xbe000a0f913c7e1cd236ccdea5be9beede41b4bce1b6639ce2843b96ac87aad84e037080f8386de0b66cbe4794efe290701753aa6c9848684c72153d5fa42502 1643807441000000 1644412241000000 1707484241000000 1802092241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-343 \\x334381efa17153250d54f7c8d06d475fde9a71ab5732f50a2efc8972f44c1dfa4feed39a348a89bb818f5b1b8328efc7b0fb0a8d56f75d5c56b2f71df2ce2fd1 1 0 \\x000000010000000000800003b5c6b6655a331ab098c4eb3433e4ae91a7028686f6b384c0e06dab1e7665b53e66d59b9fa114ce980ce34c2f35ce5aefc2aaf2c716f81325940f9b6b62ba575a0f6a95d85682feeed3f7a74fffe01e54ed10709715f99202d3850cfb43518a9a62f13404d9d593279fab6b61614ce4acc26f81f55d69a3de0219613c9f0ff9d5010001 \\xc8e5659d0b9dab41c6d5e0eec91cef7b0f71f41118841fcc0b403fabe1bbab1289b70d4a223a3684938530b613c8e3ee32a66b0bb931904e02c30de5efe8ad0a 1668591941000000 1669196741000000 1732268741000000 1826876741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-344 \\x3d0f266a66ace4b168d1ee744357d76ca159a874d6fca499e7ed62e3c4ea78193e3a442b0c8e75d170715056f9004191976df27b6e7eb1ed956be4ae360c8306 1 0 \\x000000010000000000800003ba366e9cff79d720cca649b8d2458c460334c5fc9b739a38e1e14d4a1a69e15bdf2303b6549b71eb892e8a65b628ccf748b0bde8bd8eddb8974ce440e96a10d31663090382bffb0883a8c421c2a869e8ba06ae36c1aab260e1840287d06e6a5511fcd5484fb1b664fa0f82891678b61a9d120ee39044f2c88b5c7b473ba3564f010001 \\xe728eefd6c1de759d8743281fbe210be40d03edb04396cf7e2124c67d416d7b12677c3d013898a8a414698a70a25b4d4f994cb384ad7fa289c49b4d4ad7c2a02 1656501941000000 1657106741000000 1720178741000000 1814786741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-345 \\x3f33d863e97c14609476a14039556337e1af5a8291d460c3fcaffb849d019f2c53d90204becc45b53312f99dfed0257cf838e7c9f2965f4a2893e295ba7996e7 1 0 \\x000000010000000000800003ac8b78a2a0b8ce2c19f61008101cdf8bbc01f29896a98791c9442b3370ab61538caf785e98cd7ebe9bbd0e6565378b02fe467a06bda9d89054d61205341e11ba8ead80766581c4855f0742ef4076a481f8f69cf588872e9ff19b55b10d9427f7020ccdf6f20a44c77949565e2f8e119799eb6f5cf0093eb497621ee69ad06467010001 \\xba5f22972237e24731fb02f307634d05df6b08fb8524249b77839748d27987b3b3cb2f987421db680053166f6b27d1dbf8264e5c456ee52025c8b13dc5d7740e 1643807441000000 1644412241000000 1707484241000000 1802092241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-346 \\x4447be49a7d49021562b724fcf34c03af2d89880b0a1bc4b291fb8f0565b6e748ba30bb6dd19d7c8dad997321e10be608fe652068c3ecc2b70bad16ef5b67b0a 1 0 \\x000000010000000000800003da1abb75dc80c42a51ea08dd1bc0f327c606c0f2e5a22ef0d7c8fd4d0e24773bd8e051a019068f495a707d38e34ff3ea81dfdb8dc534edb5d4dab2c653a365de95bfff9221d003a4117542e74d2f854d3c79f42e0356356c90960e73456f7a2537a3a36e2621d8476132d6e031c5f154124c0a990ee48593ed6ebe55125e35d1010001 \\x26befcbf41fdd7f1f4a0d8eededd84dae183b1961be48b26175070cd1762e612d7b273092e1ad543926c19b06eeade17b85486f4937e06e0fb6b7ff3fb26790f 1642598441000000 1643203241000000 1706275241000000 1800883241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-347 \\x4663f53621886c3bef32574dcb1d91a35b185016721eebba5cded5597df575737e2467e829497ccbd230eed4e306203dd9a95aec6434e5e7ae7d6c4baa638d25 1 0 \\x000000010000000000800003ba770225f576ab101a3cb88e41aa24b2b1d374c9a324723ee22c6b1c033cf4fabae3d100a358f3e49e2b1fa158f63e41baf9cb77bc256528991269569f8a076c74c4f41a938988a437c744ce6e511908104afeb4414a8bbc649a1c4f59337f586d1a11bc9eac083cb2537e42d47999714114751c56692840c39ff4e1afdb8c4b010001 \\x9c2a3ba534a085477500ffef082ae131d9d3428c1a4613ce0d8ca0846a27a0023d8f689a08f0a17461cf1cd2d74f762cacc17d49c7d8250b4e9475c94469220b 1655292941000000 1655897741000000 1718969741000000 1813577741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-348 \\x46db010c132649f6aea03a469a475d79c8021681dcb4eb408b7a895d3b2315bcb5cf3f4a73e44c5b0883a9c49ad80d1ae1ebf57188490fdd1d7f8360238e6041 1 0 \\x000000010000000000800003e4e01425d49955453f0d9f2da1a66c97a14ff1863dbdaec5fe7d1bca01c27b45169d6143aeeb61415f323147989e93ce902e9a4c8d89f8bc7c5420babf3909e27dc5c968bbd5ad584bb359da2820d21c858306897bc605dd4af9d4298bf769508c580eda5f97857c61ea7c95bc708b56e9abe0de7d71da918e33bddf425d794f010001 \\x7ad582d7e133a3b89cd7d6a16b47e9ce9e3c3f2e75ceebed98d92d4d73d2fc2b90fd8e62e15ab25df519d83236beb0908c5a1429f5dea7395ee96e1d8afbce02 1641993941000000 1642598741000000 1705670741000000 1800278741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-349 \\x496f877812c39fc5f8a8d0a06ce28c22058d016374f91c5a467e37e5498788cc0019c463f67fa8c683fd504e2d70efb8870e29c4eb7d9b24395dd341c059ea50 1 0 \\x000000010000000000800003c029778db7a148af85e3bb0a1f33210b643a83d6c613affdf10b5daccf82b162229e053c5abd80a392bfdaaeb6c0a6e56d940afb2c0da9c9028e96fd88ac3998ee6aaad6bcbea71345bf853c35a274291d80acc083b6f46e1340b852e595521d7d3e06c87d71fbc19471945bae26f8dc52a237bb8a003f9f22a45582c34b81fd010001 \\x4a65c3cbe10a3615107e22bb316f1968206800997aae60afc7d13544ef500aeeb331991ae5e488f0a79dde871acf4b5cb98e031f739d3f2a00cabd9657ffc107 1646829941000000 1647434741000000 1710506741000000 1805114741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-350 \\x4b775e01c7b89acfee18c3542709d0448a51a890e03e5137a42ea0de638e7baa98c27a5e13869484c93c14bf1a6f94392c1048b3898bf4c7ebafa672ed10e62e 1 0 \\x000000010000000000800003b5e1cf8272d95e136c5a0da7197f3de91137d571b86346b1ddba7a9bbf414781fbf165290bb68859970fb88d171dffa3318558dc3489ff54f792eff52e9a0c03b9e6a858a83278d7b52810bdf014b0f130ff0653ef40a10b7f74999c738ab39889888e5763e9eaf46e980b9c6840a13e363437adda8bc56e11b0383b2e1bcb49010001 \\x121eb56750300635f9ec4ab2e8506aad0f979d7ddb1c2d76f2b798828d3a6a037bd51d8cf0740ff9be56531720734c49793203e7c93be1c2cf23eb58ed7d2900 1648643441000000 1649248241000000 1712320241000000 1806928241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-351 \\x4dc77644a58b16aad3fba48a2f1f46ee91bbc51e4944405b526484d6c79e7a690753a0897006b91289c2993e641eb34881f7dafd03a2b188614a86e76a234a3b 1 0 \\x000000010000000000800003b39cb8569c381ed7a964fdd079a901ca4623fbe07bf2fcc1f8ab7fd1d40b9a99106d08e0fdd5d78d3b7688ec0595b7c1c17554d2cd3f3a2a64eaa1c051f2a6b9c63742bc33e3f3b220f9d14d421beef2ca2eef3b92151ed77dbcfbaa499d0db4dd5a3042d81719b3507d3a518f1afc22b7bcc7e9d3a12875e185c1f4f4fb757b010001 \\x1bb30e7045f26a60e829ca96507bc002f224fcaf2518a6c07d15692d0186af2f972204b0accc15e9665ca718566b5f0601d079fb400508cb062ac63721efa20f 1662546941000000 1663151741000000 1726223741000000 1820831741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-352 \\x5513e2c6835db6c9e899e0f3daa43ecbd6891fc882f046f3fd92a4cc7d9103a8ce2ce12c65e819a542f07d7dcf9ace5433b7e7ada4262f568c5630fa187d4709 1 0 \\x000000010000000000800003aafce84f941df0820b1ba9b53805d8c12cb2c729d85c577572c77edb14321048ae9866fc2a92a1125630b18a2db84677a7fabbbb5128102501820540f24cb1bba7ff9dae7eb0b576dc565bfdbac42382461dcf7b1600faa9d1f438e6591118884c12016e50a92496367b8f665fc0f4bd8ffae7e1431ea4fe2fb45dd71f3ff095010001 \\x53b97e47e0cc097e1fb63c31ca47f57b3cb5434a70edf294575a4cac212b77fab22eb2333259795f64a9be59ca517edf1e5678a1b6cab07af81dd9e58de9cf0e 1641389441000000 1641994241000000 1705066241000000 1799674241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-353 \\x56b7e67dd93f1f7f6ff48ec3fbca8472aeb03079fa213ce372090fb479546a7652df722d4face1cd7ea7d55efe98989332b29eef85bdf205ea1fd9360b08db18 1 0 \\x000000010000000000800003b7339da7943cdc31cb86a865cad5d0825422a23aafebda07554413cdd62f9c77f078a5c49ad4cf418879f48fd9662ba64ffca2f78d8dafc9a77c11161a6117c6bfe5ce89eeb7bb8e6d24a84b3552b27140cd9f73b2b7218bde8b060568e965a603d7344057db1a7654173e999936cf6ae9e54e73d0ae94be3975918668f7131b010001 \\x9ff2520681e32a5041ba7a9c4ce996f2be817427c3530f05d043909a51f103cab55b8e03673d644791461063916401cbaade7c2522f5c5d6f506323d6481a10b 1642598441000000 1643203241000000 1706275241000000 1800883241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-354 \\x5ab304ef0246b393457f8de5cf35a17c0b457b5f91b6dee651ff10f98348139512d9c44e24717fedc409b161107ba6c527e749919e593e0a2834f3464adbeda2 1 0 \\x000000010000000000800003da227299dcd1bfa321f27cc80f302e94865e971aea8e541a70296925e8a4b07572d1e5019b6896c6675205874d7b06a57b78f71d74e636b3125f99d7f3574880c9cc32df61a9cd946bf74c83c0f8d705acb6007b4757805fe612dab2a7be7c85c45eaf1db6aeef298ab994ba4c2ded42ede0b490d69fa069823aa7b215cfe9f3010001 \\x34c41d5e7cb9b4d4ee2fb6efe702661e67f5563b896e6b3eb934c32916a07f9afdd6a0dbd1604eed46becbc2fe231e6c4d6d88abee65263d43320a90b49d6b06 1651665941000000 1652270741000000 1715342741000000 1809950741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-355 \\x5c33a0641f8dcbf8610f85bde211bda34e297626cf0dbd642042af945cbe1450ae2e7ef08e71b07dc3b5b23ad2dbf3f3ad2ee8a3ed72ff08a7dd4971806b4595 1 0 \\x000000010000000000800003a63c86430da4dc8fd8626d7bbab896e64f8c2ea791cccc09296f12dd1e8a8b503448f70a1670eae615bd7139b18f08d433bb6ad14e3e36ef8683b87782dccb7eb08a8054599d5af3da41f96425f6c28235a9fb393699eced782708c18e35d6aa1e6cfe2bf1cc8d6160091fdca0068635756149470ae341c684c375706dee4c13010001 \\x2fd02692caae31177cdfe56029f102d4a1574c2f67c81a94f9b9a727441a64902569c661ab04e7368a3a2f2ca8b9e1902c092e238e183cde571fed67c21ff205 1649852441000000 1650457241000000 1713529241000000 1808137241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-356 \\x5f8bdd17987fb05907dc84538a511122ff3721e9ead4e76808357aec1cf41c4b14d1e9656e8a1fd0b19629ebe473538b76552185004156363f4699a0984f2e89 1 0 \\x000000010000000000800003dce760af7f327ac318621e0cfb3f8154326da982a0b3ca209bd0593320810081c6cb1818c82d115618aa586e319c05ad4c9f2c91bfe1f5cab5474ea0bdbd5d86b17f7298565a1bff3fbccc4d1fda509ad5ad7fe26ffaaa1156304a4eac4598a695763bb42af0ffb8accd74db40d2f98cb5a8cc314d3797f9bf8c81197dd8f967010001 \\xaa07c17b5fe4958b60769b79d9c6a7d27da64f210f9914b2125dbcdabbfa19dd6823cf550ef6ef7edb94a57c27cbade1fe9610f41d5f0cbebcd78ee1af89b20d 1645620941000000 1646225741000000 1709297741000000 1803905741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-357 \\x5fa3ff4d48c44a43bcca3ba8aa0f857f65337e98832c24ac5ca5025a7cb02e263eecb9e74a97d3343cc9723141d655308679103c004944e18b51a9a117275f9f 1 0 \\x000000010000000000800003b2db67f64ad412cb31b8f39fc0ac259cc96bba32aeb4ccbf6e70cd37380c03441539efc5692ce9fb11248ba8f46fb0216c30bc00b6b96bc3cdd9c0f1768163d090423a8417fddbac384f05bb53d52fe663087493b945867a264a62ecef7b82a4481af09dea1d308e5f768b3b0b4f485777c7637ead3d949a8a4ee6c7a04b9013010001 \\xbe212df34620034c9bcf7283305b11b8c77b400bc168a207997e76fcbc9e118037d9c9246583ba52d1f838e46abe5b98f55874ef878287b4d7ed65400a680307 1651061441000000 1651666241000000 1714738241000000 1809346241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-358 \\x61b3e35f06c391b51653e9c90e2df68aa21e8fa74181a96c35774e9400d536aac64347720c33a97edce5c72b68e8d15dc3f965bedd32f96efa636f99d2f19615 1 0 \\x000000010000000000800003cae9abe7aeffebd175b4d44b9aa7116671afe8c2cca3a05de7a4634a8c415c3f32f4637faa9d1130be8ab6f4ed8bcc1d7a0238fc710200ca35a9ff686dad45b97a51a14f2c0f425bb7ca32f74075478273510a7de73a453500c5a4adc2005853f679a74c64b7902a1b4bb03b4bc4685693b2980ea39cf1a5aaa3d25018a17dbb010001 \\x936e44ad96a505edc9de7b190ecbe86aaca702a199674c4efe6976c5577fb7801fc40e76736687438ffed02cbc579c44bc8e7092a17b6ce92f8eee5873c69101 1649852441000000 1650457241000000 1713529241000000 1808137241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-359 \\x687b3959e31a50a0306f75b37c062f33cc612e1d5c5b8a2b0c36aff9bee51bc5e7909595dc393b98a3df70c5db896773d50408c448b54b64a38a1da844707f3f 1 0 \\x000000010000000000800003bf306830773cd0df179572ea0d1e752a8ca1e82ff35e082dff4fca2694e67dd9b178f0fdf5975707722155afcd57de73ea35aaff8f96d332cf344c22f0b4f378ca96adb649b4602ce720e3810e750a9d990178de2fad8f0063411bfa7a05a64ae3c82c61707fada9148033b39b173faf68b4d2227897154e5cbcd4a35c435dbd010001 \\x00a91ca69aed45f4fa0afc4dc73e56613f95f89c2ca3eb4195deb12bc56f5aa37af7c829b22469474472219c6e6993f8ac6cf77efcaf12e642850fc4bb780403 1638366941000000 1638971741000000 1702043741000000 1796651741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-360 \\x6953c1189920ce4f0a04fcb42164fc4b5d8bb1cb21da7edd1d3b53727ddb616ee75d958ba7d0734f107de1ee170aa2a50830fa32871b1fc6f4955102f92964db 1 0 \\x000000010000000000800003dbbb582d1e340e3c391e1d86c071bde48c33fed9aafd5d9aa798b71945ff36923ef24677bbc9ea67169ed61a95c9c09737b592eda19e5bce2908d2a881061154d61de001d92ea1f4128469ef0a8ed97bec42472eececf6dcc6ea3773d34b40d74bae1bb76227ff8b04e550462ea31ccf1dc280b68e78aae1d0e55c2603b8bce1010001 \\x3785357e93cf6610740b13d85c27a50bea854300931081b9c77416c25c842e6e4887c637ec8b316063084834fe6155c8f485126b68516c3bf27905e90cbf930a 1655292941000000 1655897741000000 1718969741000000 1813577741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-361 \\x6ac395f083c28f3ab963d2f43494a14d9515a98f6b9918864d127004d2fccfc0bc027bd1c37550e8f2da6e74fcaa420ce9301cf74072d11d4b5da3f3383f554e 1 0 \\x000000010000000000800003c1c6cc1ace57dcd52c7e33b01eb61d13209dcb8eb9a1a2d4fc5cfef5c7a69a76b14fcdef80a3c1fb3d10c0888a9f1cd92be399401c971d45eb0a2f8107df510b6c9fd0929df872f2dea6ca33bf1b3d5143a2e2f7453e161c8441edb0174d26165f1592394a6fcf60a90128bc7be03ab3f0d2f07eeb071f260460a34cac4c7ac3010001 \\xa9042dc8d96018618ee87955c02aa4269448f9439e96d364bafed2817e6df25cc0463bb3944d1993f477311f2a6cb43873a2c401717dbb2b4d4960eaa876050c 1641389441000000 1641994241000000 1705066241000000 1799674241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-362 \\x6d237fced35e1dd2e8934ccab4e8dd0a1cdac8ad36538d5acdd69f600f9c2bc3cfdcf1e356eae8de19de2332cbffe4103ed49a93cce8241b283a2911d209ebcd 1 0 \\x000000010000000000800003c14ff972c042e6133ec4ad98d47bd0424dfbf7cfade6169ade7e49eb691eb144f644a7e284cd8db997c22be079162a1c988737e5762907384b327b54a8fbdb7c356d9162e6c21c6c8fff85db43a8d5a9758751eeaf03c549b216b5a141cf1822c3446bfa077c36bb6afc50669b8bbc5baca8abaa64193f548b1be1f94670d35b010001 \\x94cf2f249a6afaf99300b2c1ede946a9d9fdff223a6553e96ede355643e13c8cb9a5aa020390e179bb2581c5d05ef18f832a758f08a3f9175cc63e0f6083b60e 1649852441000000 1650457241000000 1713529241000000 1808137241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-363 \\x6ee31625e90066f3e1b6f9c94234be6012ab945792fb8946b0f4fc0bb449097723ff616bc8550da4c3addeb1ff1c37c0b7a12adcd4fddcc4ebd6b44921351d75 1 0 \\x000000010000000000800003af185a0d19217deb0375afff283cfe2576c3e6f5dddbfaf7069740ae3bbf975ae59dfc8fbcf13fc99edff220c991767e1c1e59c862def237daeeb31dcbd6c667d02cec9b2d94e5843690e5fbce1a4ed4db93fb4271204213d3725be2db81ef737f9751d85f32edc01824aaa73b54f9d36aa7afea4a317d6fdc7bae1e6de36499010001 \\x18fe7ff43075918cee818c93107ac06e334ca53b0db4ab289785a27b0d4a0cdc1fee4bae2da306988ebd6f0541372611ae5d6cbc39c348aeaa75ed70e1b0730f 1643202941000000 1643807741000000 1706879741000000 1801487741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-364 \\x6fd7d2197808d6eba21b1998283ebcb0f7d3daad396c7a7b3a7caebb04a935aae889daa1f7c5fdfa59dd5a165483f94f2d0910964fc424315118361cd134c46d 1 0 \\x000000010000000000800003be5be58b6ea8890a7a3e620ebf295864a52daae684489ae13a8d9c62584040cf11c13973a787cea43e53d04cd51a700ebcff6d36bdc39706f7f3f27f98dbd759b174afdb3e37f7bf794b9ec40492e6797a89e9f921d8e015ea5cc4d4edf6db8558d1326b2c90372916cdbf57ac44c9f868cc671657b34277eec9449f0dcd3501010001 \\x15fd01b6515f818294f319cb552ea92f48ef9fdc0c986d9bfff5443c3ee22fdc8e96c9803c0c503f95634fd9a1f1caea84fab326b403c9ce5ce375726365d40a 1638971441000000 1639576241000000 1702648241000000 1797256241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-365 \\x70df11adad6bb56dc31f9a24cc3458fbbf5fe03ac3000b9d6e894e36a2f1600b7446ed4035605b71e9fc056830f06e135884c0b21323ca81694e3bcefd343afd 1 0 \\x000000010000000000800003a2a12e2244d1708dfa901eca5dd83c70133f9f4de143a4fa45b042b7c853c22b259b5f7e2da801151337dab395a00e66e42140be1d31ea329249922eefddbec9e70b8ee75a66a0bb8a19ec583b6784517623cddcd9d8f6ec3435dd63be6bf2c8b79c515fe468be13e092de6adb72aa8b735747cc2fdf5131ca8d76dcec56ac75010001 \\xbf6aed2776a31fe5972b6610fddd5bfaa5c5f8534b0262805c31f1cbb63dac0bc513829554803599e05ba8060a007eaad9cd26fc523c62c863aa29edf60a5a02 1663755941000000 1664360741000000 1727432741000000 1822040741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-366 \\x72572b344cc7832223357033428be5debd0ee6213447ea8a7b6192a10dc70d089340fd27c354d420967a59ee53e64e38f106b8b18c75cb350d643631bf12c094 1 0 \\x000000010000000000800003ccaf52ec4918ac3461f4f16940e1bcc0ba49e7fd0443ddc6346c063e1c8c345640271d7355bd695685dfc68dc8fd445452bc5ddbe85ac84f13579aa502b394221f4a814ad4f22459b105c537b768ecd1c428583e8ce8624783af11bf70fa6fccb09ee331cb7b02f403a907715beb7533ff81c5352d6dd1888a49764e51438ca7010001 \\xc30f2430ad05ec7195bd83a5ee7a49243b82644f7ac55a0795440ccf6b50ba751d72a7b122653ca1409771f31934bdfac047665b97410213910db8965822a80e 1666173941000000 1666778741000000 1729850741000000 1824458741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-367 \\x73a7c79c009ad5e05a1711b861d9cc9f8a41e356d13c039243f1d8c588bc33640b1c93ae49d12af38667449f03538d103ec13ba16b087a51a9798e936c4d1266 1 0 \\x000000010000000000800003c5d22cb511e921e51eeb842a9d45e64c6cf293ee121d12f538ebddfdf387036b6cc7cc0570c9451572eff5582a3fe52e303d4fac16471b40147add325cef38ac09506e130a1b626378849c602f39ded459963e12d9bc71dec31b0ca9dd25e796b7b6783a574fb4c347bff914be3973a08c7017b578d06ba665a66b870769295d010001 \\x72688957336e5be5cfd2b3b82303e15d1aaf77603d183ee3f1f9bfeffc19b076825f640d9c7024465c3b66792925c97284d47685d49dcf90c425d9f9087be807 1644411941000000 1645016741000000 1708088741000000 1802696741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-368 \\x7e9bac3cf5042ed82ea8428df4a02df921ba4b8ad5b06609431723c431526f01f65103556caeca50c90918079782dc12d69c672e7a9891ca438993c15067eb8d 1 0 \\x000000010000000000800003cdd86e933dbe23b195743e1831fdf2a2100a462e67b28dfb9a6969f4cdd9e43f431705388bd6df649d53f390c576144843174687788c8f785263edac0c6cfb9c4e10d8891ec3ce7d015968a8fcef448e06536329132c692b2b19e74c6059eb7d3819b61c1f330525fdbaffe38d2d40a7ab5240743912f3de7305c41341ad4b8f010001 \\x1be590d79a0702f579464b14377c87012fb2152a9e9db5a067d4c9d710a03873c8bc1cb5d54607f4337c6eb51d555940ce1be20d87f816bce2b4e9383c847202 1641389441000000 1641994241000000 1705066241000000 1799674241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-369 \\x7ff73716fb203a7b7697e0fbd967a31ac1df5d69f41d0e509aa27aea7a2dceb03480ec04f6b7a8757bf163b6ebcd866d22f21cc50ee30759e23b3d7f90c17b3c 1 0 \\x000000010000000000800003bb3b0c252745446e4fac40a18bd8d7a70ad218fc1621ec4de9dc427b2fbf8ad61359b5404da9d68190d4b98c771585e3d64f528d26a86841274e2a4319e366f537427987db677e5558e05b908595dec70c6ecd4ec35d26897f768baac7b38189c335abaf243a117bea583b43d9b9c991575a498a09beba32365e5cae4b6c9d2b010001 \\x375701cfa37d2cd2a20b22725e0cf08ef7b429025d6096bc053bcad71fb5db5882de0fcc1d72e42dd2a27803dddf39a51a61699e3e9cb9b3a881d23bae9be00a 1639575941000000 1640180741000000 1703252741000000 1797860741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-370 \\x866fb0d4d35b758a5039aa08be3541aa436dfb2ad7a1149ec421411dbb44806d794abf36772993a00fd42e01da24a2d716e929be143664cc2aeaeaabdeefe8f2 1 0 \\x000000010000000000800003a59d1fe6a9b4281b136852980e332146fe0c4b438467f857fa97e6a2c78a4170fb36ba0cff4989b88bf5062aa75504ef08b059ba190e2279481ccc2ee23580b785535007b3b390d42bad966b7bd09f27b7b05f613c5f79b34f0cb4e5756c6412d7ce3069007f911ef584725e150e10f5b82fbacba2773d1da5c66afcdc31148d010001 \\xf365d3b9bb099442d95d4ba6ce59ea10ede69c96583391383b91fcdd4c67154ba1519fea451489dcb4abf431755905e8c963223dc6e2264654c3e69f4258bb09 1653479441000000 1654084241000000 1717156241000000 1811764241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-371 \\x867787ca2b0f6bf658513489e98266e4c161a4f59198365d612801f2feb962c5b34219025d94603518d4953ec99b03401341e661e85d541f2aac08c5afb54f68 1 0 \\x000000010000000000800003ce847030f8d8a45738f665f7595005e47ed8d9d46f56628580d7136c3d4858a23828612edc9946a574f0ea20247d8ba12f99da096547fa7d4a08440d17eff071b69227ce4170272160cc3083c4fe409dfdab0fa4bfc405edd7cf85e43210aaf1e98deae0264d65e7bd7945ce2bad8f7ab49007ae18c8036219ab207838fe031d010001 \\x4be9105f3deb47d3c584ec2fcc702a2eea07d98913eb5da67adf158cbaa4fe232b35e97b41d523723391e87aba800e121c05bfb5e0ab61649a20ec50a2914200 1667987441000000 1668592241000000 1731664241000000 1826272241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-372 \\x88074bfb299d9f2938acf2380b3cf0e22fbc0f455ccf3b66daedd9b84b71ea6d2a5272887a60334ab68b8ccf2c3db2a9a1f22d14b127455c2d5bd266af90dad2 1 0 \\x000000010000000000800003da8883d2ce0c09023855d9832660d46bb8f2b88f0fb567aa1ca15ab44204a68de529a0d7c14d15fd18efb6c358cb989aff08ee473d261115d975360aca3f4642ae977e2aab393569fd5fdf11e6e0090d67ba5bb8c04a8c9bd6e472b55e49ba849141b469f802333c2676bd556edeccde1c4a3582b6026a87e1817a4561a79907010001 \\x976b9c67d7c20d47dd237a4179682985c591f8f5d18115070880a876c1fab25933a68aac16bd1dc5af71fc7c44dc387e16f3ec9bb2842483c3cca62225319101 1662546941000000 1663151741000000 1726223741000000 1820831741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-373 \\x8933b2f8be4ef866568dfddef6cba7c17b382d93606476f30fcd8204a57dbdb3705e67fe5044220d157df523a82abda954a9a20c734b4c9eab96b69960eae89b 1 0 \\x000000010000000000800003b418e252ca3822299f468139bf04eac48cfc2281dcd03e063e9b0c994d95a99cba1ccdbaf186c95694f2335ab77cda5916d8fa60e8428bce7f9cc755eae5c1e478e86b9e794fddce9cf0515f487b45d806f4a5f86a3d36763361a6c2baed06440b552460e1b8cb6a5e4770d9c9fc65a7b5e3cf20f26c021d059a044ca5da78d1010001 \\xfba1d51f4fa46b3abac7e6f54c604684ced70662771f658bcbea5be5f42ed1793d3986796e5c5cc9d43ede468f20d55024b0f81f27922cded32b2257b9886106 1659524441000000 1660129241000000 1723201241000000 1817809241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-374 \\x8e9b9a51a24b24e8fd372786fa224e510a2b9dc09923e503c2e0646d9fa45cddb85b9bb8a461a25ce07870df78a4e297f7e545258b1547690b25c4bf971612e3 1 0 \\x000000010000000000800003dca267a736ec8fe897225989b927e2a1b34bd9cd10da278a44b76c5850bb13b29d72cf153faa8e839ac4df9d346e32d9e4ad01afbd165e93f73a249f6fa8ff04efe47e38cc2769e28d8d26aaadde550996f2a52279b182378ca77dabaa591006266d19a43c41c8206305587681954d93ad351439d8e747937c7a127e74640617010001 \\x200845d9352b7ff267ce80159dfc1944e06e32698df2d3fb9d35a16acda772b2d724e19f9353a62ebbb48d88c4fde0cad3562720fb27895a55bfd8d36cac6407 1646829941000000 1647434741000000 1710506741000000 1805114741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-375 \\x90cf47b32fc8dae46e400a60b575e6f200f4d5c9f2cdbf87ed112dda0034aa791d2a1213593999dfea40d9926ffedb9f4d07ae8f38ab4b2bdbf2c51c9faded07 1 0 \\x000000010000000000800003cb908d3c4945b68bb74fff8f1beefadbef78f8da55dd9b45eae345eb65bc82b1b89a142f435d79a68945bf5a64437b7459e12c6a443f851beddfd0c44bdd69c63a5073a27b8007b75feb212a90e780eb75c3c5b532f4ebf87a91b4cb3a6602f12a54312b26ba326c3c04fdf9c7b3dfcb9cad808437ac9c10526e3c91d8d5d949010001 \\x393912d2d293cf00867bbede0fedcfcc01c30707b80aaef1a29483123f8933b18f42f02e5e6f9e6bea2eebfaae4a55ddb1f3d62d61f47f2c1025c33fdc20f705 1653479441000000 1654084241000000 1717156241000000 1811764241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-376 \\x90673cb7e88acce21e08a342b01e6c19fedebbaf0f15c9986e6fa0c494fca630b45576fb3c0611de60c3b236e4b74a7a923b91181deebd41c178e0fbfafc00fb 1 0 \\x000000010000000000800003b4e9cc1afa463828aa32a7119f926c7475a21f57fc09a17decd233c766af80c3952f0129f649aa9be46ec9c31a05158e2c4d5abd207da4178e867634b135b96ca7619188ba0947765205b2cc76f133279f5198c09e6a64659aa2195309c3ef6f6e4281b9b7dfa7429c86e1daba7b00174155231545f305419816c698cf296c7f010001 \\x4d8240fb1af92e3ce457ce22ccec47e711010d845a39c852252da6f6847f0c1c47e80a8bc14321b7dcac634e553f578018415b53833dbd4a768fed027ee2c902 1669800941000000 1670405741000000 1733477741000000 1828085741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-377 \\x928f7f4a36cb088819e09edaba8b5816568bf50615cc1e6fa5688783586bcfe6534a4805e0da555fe570e32e82120b138087de370fa11db79e5c7637d8c6a785 1 0 \\x000000010000000000800003b96d0e84a3a4df7644421da988c306ea1592930e8b02da205f7be5cdf11bf6418cc79c759e7bb915af45f20908d9f0aaeb5ac44ee046c8a494d7594cd96b49003901b820e3688d7ff48bf6f2f1f0fb4ee248ab83280b5551fc4e30196a7b4ef2673b45ead277ebaecdc6a55561e64086277b2e1022c24be93e027c9ec0acba1b010001 \\xa1e466a033da2cd4ea8d0c4d141956f8250dfe7e8d87db89c189ea1f9d7e51d68e0387f9529853d10693a5ed9aaa10eebbe02f384be4ceda84df3a46199d500b 1650456941000000 1651061741000000 1714133741000000 1808741741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-378 \\x922bc419062265748bd4460fa55f6d6e633d2a1f1a8678da15d30d5845e5cc7a50f7f77434bed32b61c4acc910c50f206d2f75f08c5fa6d33b2d48f0086f88f7 1 0 \\x000000010000000000800003cc40c2a3fcb1bfebc6794035171a773bc0e76755d1df949cc3bb0e198e0394a712481ac10c95afc59e1f76beb88d775f06872a4ce5e380d127519c2d97f3761f5641d138f21f3b89a477ac7c12bb404cf1135f88b657b9f4f3a6e741c37c0f1788aea368c79e3d7137d9eabb170e420a372960ddefaf787293f458c4446f304f010001 \\x6440d765f55267e594da37fff9a04bd08fea94ccf653f908e6a05dd1a101f1cb2e02ce8408d71e24ed3181a40ed54a2ca8c265339bed6bb335e0e5f630473a09 1645016441000000 1645621241000000 1708693241000000 1803301241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-379 \\x9a2b04a85db809844b539c3423e2ecf82d08c84ddb6e95214d6f5c5c38c27077695c231e03df785f0d082386a9f1cf4add9437d6845ec8ebbd91683bb8d8f4bb 1 0 \\x000000010000000000800003c7f91f0bed90e5eb6d758c1dd6e41a26bc9ce4947487c76974e4af11556dd8c7435e9414e0b43115e253b36fa5a1e4376072e2d04fede63bc9b13ba370afeb6d1db27e80924b76ed231a288daf937bbfffabb0fd6e70c6270d7243696054d92373193df02d7b7b6b42375c41cda506c4df3f53c36d35dc6801143fd5b75a471d010001 \\x7adb3a6e813495059e7fa14622dafd79bf07076a9b7c827c424b7c9abdb1c3507b38832fdf82c1dcbaa69dd75739083d3c56add0a443ea2d7b7a0a061be2f904 1643202941000000 1643807741000000 1706879741000000 1801487741000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-380 \\x9c2bd52f90d9256afa34ada132235c2add2ebf64304e741f8b502fc474ccd9afd86fa298ebebee1f72c3e2df7697e4a6dbfe3d3ed651a677b47eb461d8fd4d28 1 0 \\x000000010000000000800003c0f6a98a737932e9600eec5e51dcab9d003b03ee4f0d8d29b6bb7ae00029d10e0eb4047128f2a200f81701eb783c586e6637c7657bd94019732063e3b3c160c813d1587ce0cceecea7560a5e3dd9c2b8f11c7722d2c38cc263d70df9f957bfc87223a6663397192a51a12cad1f86e32bac965e1e9dd3dd720362c476daf20a6f010001 \\xcee37395bbdbdc8e5e130c430bf01eb65646859f468a33d8ddf92af60555ba5759fe2982cb8028cf49722ce9d8a9b80b08e2655e5dd2fa2fc0a92f1f6a1e2902 1645620941000000 1646225741000000 1709297741000000 1803905741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-381 \\x9e67d622b2038a99a594c6fadc20d012e251dfc2a2606f87e066d51a62e2d90d65a1b604a2f5281a00be7c5c5822e6507d90026a9a625e6b44efa12320031f0e 1 0 \\x000000010000000000800003e0df25c090382dc5c2e4eae77ecd843955f713e9e87391ad3dad3e7030e32c16d4105c96600068cb1606b908f33de14be8ed0555293943ae8223daee0db5edb43515e006f0214403dc34f783266f22d5d85a20b9a4976870fea329d9ecac0c89f8362820885bb648a42aee450c3b6cc4879d341f2c7a67b7b720ade6f4ebed45010001 \\x0c7899f6eca1234ed1e11bd96be431990f0ca23656d80845011a4e54e6c964e6934c51032302d8c6a7f3ccce86818b71519b0a7677e2fe8a6bb04e1d3817a805 1647434441000000 1648039241000000 1711111241000000 1805719241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-382 \\x9f43a6ef2f7a0b1f459a065ec6de46ae65ff22355097b3a3a1a26b96a1177fa8d97fbb08648a2166c0f7cb1b64d0d69f4832903592e5766e476a5b0966273a62 1 0 \\x000000010000000000800003bc61a25ea7dbe4e3c3452b177095d1beb43ece601ef5c43de2cd647afc45d32fdc8b2821417fe4ce4b3e24d5ccf180135d4802fb254e4420579842f609a801544685496aa3ca3a3e62b3223ad402ba7f5440bde1c86ba96c2e1884fe1807a6c14bf0ba08fbed3e726be8c58f4eeb2bd70dc7c135fa8300b1cb44a67b4aad5db9010001 \\xb3a4ad2b23ea32d9960cb3ce818965bb3806d295cc9c03f9a49ce8300701561c3af6eb981bbc64a6686bd17d02d1aad79aa9bdcabe623faab330e5b83e80cb01 1646225441000000 1646830241000000 1709902241000000 1804510241000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000
-383 \\xa0c70aecfad1c78ecd38c66537fd77495d8324b8d007b215c5a4724f05f78f3af9fe066c3b3eec8045d78136a5e9836db741b0e113a76e1a98c08d7b2c8d1ed2 1 0 \\x000000010000000000800003cbb04913be2d614e523976be0984ab64a1fad6f0a0804247e23db97e43309cc93bacadb8d27cbaaaf0a8e426fe0e3c76376388189d5713049908c08d8f19ec6b8f7d0e8232deed75b2e6d6be99f216e3056c2cb5a4fb6e82e1b82651d17b67385bc11c090eba2f911ae692d58272410fb95538a83bc791caf8cb91ed6aa18133010001 \\x2ed6e4525928c9f2c55e6b4e2d5217ab5a0a5a402eb211a9f0b847f42f34479afb647403af406067d125f13ef54d0b8eecd394698e09fe1cfdcee16d46cdcd04 1669196441000000 1669801241000000 1732873241000000 1827481241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-384 \\xa163655c0ea07c740a3f11d97ed4da8b212444e6da839172687fc3d2b407e8e0d730fc2accc801d557c9673654c37c986bcc923f2e1c2855e744ef48ddb29f5d 1 0 \\x000000010000000000800003f27beded017424aa728e6512816482ac3dd869e3b7fb2757e81beaf472dfb11466545f1a09f63a373149bad356f265e40f398477e98cbd6c4bffdbd43f13e2a0595585616b9caaf2d3b6adff028678d31b5e9256271e284ab33648aa2fe6ad0a137d0349817739b316c4c8d14d9359cdcc08fd0c7e6de90c6bc33693d556cb29010001 \\xba58d6421c5b23ca2ed1ba06dac8bceb95bd0412a9ecd46e6c9c5787a4cee0a50a7f5e27fc459326d6786ee94e4cba0da678a6d7f01192e9c99a8a8639370a0e 1660128941000000 1660733741000000 1723805741000000 1818413741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-385 \\xa357764af4e739a603e4eff5420086b0740d2cc4fde2f2d309f0750d5ac1ece589bc75fac70267db2795e68aeb375a9baa95d401e6ef6b82f3e246ea6952c438 1 0 \\x000000010000000000800003b176574c5997947a28a00e04dbab6f2f951420c52e2b54bb2baa86e22852bfaa90d57bd20e85cf4f870d88b779124a064282ec5945bb873ca2668a186acc07e22c924bc9448f57ff52a810cb3e0718780122738173f57d00c28b05956bf5bc1c4c16f6f45825de6b786a9d258b42ae729285c88082c9bc8ba790fced55f51057010001 \\xafbc4262654bdc8d324d0bf6672768fbb4cbe66c13dbc477ba9d26618aaeea2c84de90186ee7121fa94cab5bbe3a26dc6441bbdf106dbc16ab1203c04c3b8b0a 1649247941000000 1649852741000000 1712924741000000 1807532741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-386 \\xa35bfedd5065d82c9882591922e53e6266a11b2d35ed9a18b9294a331d3a0364bc406223d678049759493b98ba7ab6f0dfbaed4de26668340db2dd45251ddffe 1 0 \\x000000010000000000800003ec79dad8c1d134029a3c279744e57eb3f77780359aca235d54ff9d20914c93065b80ef7924700b5d3fe7b53389226f3e2a526f4f81b5b8b2ccf9792566941493afa7da1237769f9f2245faed7ebb9380f73c7f2718bf58c131085fc73bcaba6157d7f74e3b5d9e85ccfdf1a6f95a65e42be87595338d7952de0bd0b1898c24cb010001 \\xc2e292d5be82dba23e9953b20de760e85c49f9ed8c61ef5d8bbfb8b957b7e771aa3830537fc1958e20757adb7d961f1473e24588eb777f25c06b2c2eca29860f 1652874941000000 1653479741000000 1716551741000000 1811159741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-387 \\xa6d39a0670873a9e78405c70bff6832b44806a844f9040a7aa3c0a6516b3ebbe11ccd32ac6ac517489bba301716327a17695bdc3f7dc9d51b518da3fe4f37cbf 1 0 \\x000000010000000000800003f130be841ab51bd542cc2838a01301df25e68cbaa0a3a84ef1b1b44d895322940643836085a139dfe186ad8de6d674c299e9cd04313099214e02674dd17b37fb117972078c6e6a1b189bfbfcd85064781d9e616d01d61349cbcfdd2067b5589ca7c97281c3d80988083b5ae00c4a5e8290170c3fd5665bd4a34d79d5dd6b73c7010001 \\x6fe20022d3fbfba0e279db8c78498adf25d969b4ac2807f476571889e75123e53186a5464738eeeddc72e63dfd9b65a4545dcf3628cd9002bcfbf12c8587670f 1664964941000000 1665569741000000 1728641741000000 1823249741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-388 \\xa763d3e25616a7a96629c0da34e3832d0d694edba6c4f6b1895ef7b7144385f70b552acae3329c9d3a498aa999777a0e6dd43b8904103202577200d0d56311a7 1 0 \\x000000010000000000800003a84f1b3994a5724462864df7266017e3b111f9c474b5bd0ac8817591c7440807b558493673711eebe9729a12fe04e5dd71953585af6a019c7e505c8720f5a88e99b643b49ee993740b585f29d13d74960cce99d70bc9955353099cd3d8abec12c036c4c998ad6b2b40283b77bdefb62a9dd8b6e4ba3f196d5d140c71b8ba4f2d010001 \\x1e339181d7eff23b4ea976c298e2f5194246a82e16474abcf66aa4b565982e8bb295b505091482337b463c6f3a79b288c7e8f561aafee88b26358854f1b06c01 1658919941000000 1659524741000000 1722596741000000 1817204741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-389 \\xae2740addbecd8d6fe0e93be711c8c920f6d8d5bd6306284d52ee3c431e213f8d4dc19744b236c0275eb87c45128aee917dfd16ecbf30659873b846675b4488a 1 0 \\x000000010000000000800003b0abd73cf2474b54d423552e3f62261c9e1cd224f0b8744677c908dc4cf353ce31ce725b62bf777ca49b40fad4673ba0ccd77e73c4ad4128e35b8670a0c43d5a17af27732ca4ee91e691b4b4c0754cf34e0928352a9a8dc48e3fb98a541f7feff0352f548c5dac371a3ba335e050d395fe4456cf13438180163b418549928033010001 \\x1df506112f761b22358d3b3a33bae54df9707c4db728eb61b78f6b08790f08fd46e27eea94299921e7fe046aed143ee1c519b1570cc90930b8de1a91e7c4e106 1642598441000000 1643203241000000 1706275241000000 1800883241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-390 \\xb42b894f73c444729cb10346a0c2150fd0fa7896e8654ae4647e6d889d0d3f3568ab7b5606a7e550ee87c08c5c66c4836af8c39076f56381ef78c1be3209247f 1 0 \\x000000010000000000800003c54a0eed9991b5137c70ce89d2e83a154459807ce86567653ab025afa1fd6913d4a6e0f204a87702bc1d0e8a779efe08389f5d958235229d0e8e268b0c8dcffd994bd3af1a03e57ce4848fcebb57bdf6b79ff8b9adf48425c0c4d0851dbbff92f374322f504ca7adff19f65f72305fb59c7a1ab4a9b9c24fdf15d905a7a09943010001 \\xeec55734d90e2445aee82e4fd588ccf7df9379f71216f9ba9c440873e206b5eaf0458cea6fcc02ebdaad2937db68c5d8af875e031afa27891c9c62b88e08f501 1652874941000000 1653479741000000 1716551741000000 1811159741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-391 \\xb84f329af187ff93cae002caf41c44b4507faf144373a6a6810faa606fe9f4457f2f7b50bacc3f0b3946b02dfe5c879efc47ac7b0ca14f218d996dbb91fbf51c 1 0 \\x000000010000000000800003be1525ecd6049c92bd88a280cc5a69363c57b7ecb4d3e309b7d3b5ffed2190a0af0114b57b7b35d6b5db1635b61f72095bac17def7960e515e5039c250c25f3f853e16defb22dd175a565b597d000381ddd1ac9f70ef6cbbbafc48f66f54c21c2c8c0d28f755dcd4f07ed9d58e6fc114c1c618f46b905c152d63a082834f0427010001 \\x760f409b997eeb1adeaef83e68bac8be7a403e6f7da3a02cd30e5c82bc929635c730742f17f111a1455c6c95d5e159b7c59248e49d41b0c6089fcaa98af93500 1668591941000000 1669196741000000 1732268741000000 1826876741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-392 \\xb86399aac9118c85b0aa6e9ce93e3571f7d52f606bb28df0062213c250940dcd9f6205a14bbbf17017c49c001a17b2f97ab59e9ec1c25a738a1366e6d5ca3699 1 0 \\x000000010000000000800003c7bed422d205752655b0c5ea15262d5f59142f2e51a92cc984b81047842bd6c615ae7ee25cc237b628d51f11c450ee0e88ba48902139e8a39ec0626a92b0cb152c5f5ed860fc9c43dbebe868d7ecca65f63522f447e70cfe8fd7db840be1d958542ac6ef1410a29db227f180612109cd69b73957639cdaf0e601e81537d898af010001 \\x455cc6df7f0b1783bc92a641a6753c845c6957d90573cd9d751f309afca363e34c6f17afa51491e595cfa261982736a9be5751773c5fb08862b396676ebe5c00 1642598441000000 1643203241000000 1706275241000000 1800883241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-393 \\xbd6f0064f33573678f779dfb47108675e2ef50a94bc70feedfeeb7c2fc240cfaf10dcdcd019db47febe0034a6954b8d7093d4a0ab289c9cd7adbaf7130b45426 1 0 \\x000000010000000000800003c927bc2a3d2e260ec5cc5ab3b2efd5ec98f3b78b4b5287485c20a5ffa0900e76a2690f6be99af9991f02139dd1f064795a6a54920baa7c2bc05371badb1d2f8f792fdf61ef6a56e5c14492b33754a7d1a43b861635fefcbd4d6f8030cdeab32f772f0bfae0ca31dda2e08c0a40f4b4080a86ae424fda3056bbb215b458aabb3d010001 \\xeef3203afe990657dfe8938dbd867f211fd28c995a57d10a6bd3689c28873205b8417ff5ef425cf0d75276fe3dd3e665de6873ecc89430443246a5870d752809 1651665941000000 1652270741000000 1715342741000000 1809950741000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-394 \\xbebbd0416fd5afdf901231d06a595a77cc4479be7181ae05e727e98b7d03b65c47c7943773ef2d60b3898f85402a98b3191273660a30c001e7dd7c6d2582ac75 1 0 \\x000000010000000000800003d68dc811ad19d425cf45fc7e4941f71a6c7261cc296fd4dd2d8df87b70c969c01ee50feca0aee393e58c06425a898be64cbe08204f90a4d98612588024e9705c40cc193f99bf893df2df60959650a6c1e094fb1e954c773f42c7f2c264301af19b0909aeabc27b5e51d9bcdbaf9188be283841caf23a56942558adead3ae9d49010001 \\x622f490dec2c54d30b80b7fc19b5689ed8182c78516c7166a264d4fc277485b14af48a401647d68f3e48e4e26ec04a9f96d597a62b44f3b9918ec44a5308070b 1664360441000000 1664965241000000 1728037241000000 1822645241000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-395 \\xc1cf078f282a2df3232f41cba057a639726126b9730e6d6a5c27abb6164ba59ae75dfbd3472b7adf3ba55cd7d738d10d65ffdba0622c1c568a8a4fa078e5d774 1 0 \\x0000000100000000008000039a4c0bf6085edb8acf96478672a90f3a03d6b89fe161eb58c37405517160e3e32ebf44ca833c8713cb26582a208ab2bb721f0b6972015837c931e191b332a58ca6d0c5de7d0285dbb5057a9a1129cec02950630d48d959aff76b0394345857a6ef772db1dc154366f79bacf17e1c99fc7db052ef26c645de6643237dcc177353010001 \\x3ced37d5e4fa6fac84d6b1e58b811f34517a122d7d5d53481f2da42253cdc1088aa28dd80e29f5fd4504d0a1c198f2f85bb900d7b07cc57bae8e5be8560c100e 1652270441000000 1652875241000000 1715947241000000 1810555241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-396 \\xc1c765976431c318f33b4ed27eaeface2034118b0605a03d84078ca08494935f9bb28b7b037ee51e9dc4660768a167a5affbdec912ef2a5372fd8ce076e0ec76 1 0 \\x000000010000000000800003c6e4d742caf3d73505cd671b15b9f10a650f98878de2f81aacf8f68b6f195e231380d21f30c70dfa7316bfb375beb5a60a9f0755bb98dcefdcd6e9e58d8c816c93b8f17721872669d59aab7dde964c02830d1b6999bb85f02f2aeead10aff26dabaa1077772d0e97250a0a04014ad943842c694e368d1fb213e71c203222ab39010001 \\xc864f306bc3336cfa3311e956fc9b41ba8a4a43a45c622665dbee69aa4e5d57e203bbc87c868c376c32559b85194867b523009a819275ddbe1555ee888ae6305 1657710941000000 1658315741000000 1721387741000000 1815995741000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-397 \\xc367e72f237022de14ce361230b8a595e75484885a58a35c986be353e638d9dfcd2945a3b802f473c0c56dc4d3ecea59a04e21a7664f88c8880508482055ed6f 1 0 \\x000000010000000000800003b3e47ccc05010076179d458f22b79182c193690bb7d52c6b7cf27fae67c515d3ddc9e621ed72a28b32383eca28b46dcd7ce71329b8c93ce4d9d12e9a4aca67fc758d61136cad571b31e4f9698646e52690a6468b5b804b60e96dfd9bc11e515827dd0539c5ac019549ec4f1db3d0582fef576b6df8eb1ce40e1a785870ef17a5010001 \\xfbbc25b6385906ce135cb001f523f76f76e16b8ef0913b5d7cd014e11285b84c5a9657d35cb79592ab93023854f4c9861ba950394a2fcf7d568f331acad5fa09 1667987441000000 1668592241000000 1731664241000000 1826272241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-398 \\xc92321b97e1cf48f5a3a186a8fb771013bd1da27c3e82d5fd156fef3753fc5990f17273c43f226fcdea8d273470a533237a713f0e0844bd3d0700219f812fd8e 1 0 \\x000000010000000000800003c7ccda951394998f625446f584b8eb4e7c6f9de591717e5a6bc0b25e7d72ff11cdfaa9edf367ea9730302dab8054598dc488cfbf509a04c8c5f56f4e376d81f30ae1b225a9a0116f340f57f6c4f6031ab478c28a1235c8f48af9d1572c9d786f34cc0b6b7ab1534d7e3660c055529bcc55625fa3cc833910d76c9c4c0bffbd51010001 \\xc85e56b220c0d7c8b9a75ec17f37a37893218b312cd6801ded405b991694c9930bb82983becd1ab0452ed0053a11b828fc0339696e6824ec3870c9d5c5c5ef00 1652874941000000 1653479741000000 1716551741000000 1811159741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-399 \\xca1f16f1be37c3910220942ce3381557014148f719b8d3a909846b2672ecba3b82b578c845d3f7a71dc311c268e4ccaefa6ef01615ac7b8d9adb9161faf2b297 1 0 \\x000000010000000000800003bf0c74d27094f02300923d41edac812dfe55982ac0cc160487d7b412bdcea9ecbcd1f23726dbae073df77fd58b7098cd58ece4610404b1ec6506aa72f6d42ab54564c0f9a2425a1933bfa279d17ac4dab44bb209cfbb54c4ce94aaac5293db26a9ea6dc0f6b8d655c083424b69f78c87144b0335032f56606aeb80059f432051010001 \\x803c93acf15ba54619b85478038339a6994e1f15801efe4ee31659e3e95f81657ba3a2b41ad14c844fb64b8a4390473617881236010ff0eda3bec29d09afb506 1663755941000000 1664360741000000 1727432741000000 1822040741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-400 \\xcb9fe635277fe51d852f7397799d246d6626a82dfbce57690e08029cf76abb6c27e4d322aa12a8b562e47e5dce820b451e43eba5f1f32d91a16fe303006f43ef 1 0 \\x000000010000000000800003b742510595b0ff33613f5bb477940f8141b6183eb72face0c6afa2379f3787ce9da0a2c44dad9a929378cddff25cbb613b8840615b007de2d79a65553bd247959a70926db0f2743a974518b4e158ac0cb696be493a6bb7cac2e5e4e78bedc5826fd3e638836c6f4305e778ae730211f12895eaa04cc49f7a11edcdc72e5dad7f010001 \\xa640e24a6c3773d9419099ab6cf6e051ff213a492d115845d3b4b43ce23339bdc92e7abf62b111a292c6d2bcd38c730be38afaeda18160b4958d6b1af8489f01 1641993941000000 1642598741000000 1705670741000000 1800278741000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000
-401 \\xcca3f1425a9bbf19fc3d8e159bc1e82d6ec9535925cd1372c4b2abf4f3d2e9fd1188397bdd542316c864ebf3fb38c7654e2c27e36eb8f3e0a350633cf38e3661 1 0 \\x000000010000000000800003b37934c40249483645febdc00ba427872385b9d5d8bb8b22529f5eeba7288082e34781c927bb47f0108a4277d3f0f0bc11eb776306ef1b4b361ef0ee87781d1c71edc7f5ce2f203c5a353c47a5089ffcee9d08dadbaef83e371b2030d835b9297f722d3dee7b22f8b64dab1ad2769a2b5cd8a0f8783d6e74298671c2c77846c5010001 \\x9b4f202f8603c93e0b5fdabafead0318ecf3d11b20dd2aab046d6bd28dfba8f12281f0ebcfad5f3bc958593e533356dab468a8abc0fe3d3254508227a4c5d80e 1654688441000000 1655293241000000 1718365241000000 1812973241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-402 \\xcc1fcafa24cd7b32a961767d6356085a4b01ba4b2c31ab95fc5ba815ff97cb7467ef1450416dd9e8e3be7ee3dfab82da7147b1485f0bd3eb6d729f31b6d9644f 1 0 \\x000000010000000000800003d185f9ef4809fe901f779d480213e70bb9d9118705606364752297a0dd213ab8f2d6ea20695025167a4cbc3ca9e03e4345d1dbb141b53ef272f27526103b180fe105b5c41f8089c3812522a6e9e082db7c4a04c44958343927e54367cfd46e983ef9175cbd34a2bff47ca727a6c3c953d9b9ddb2a7744c72c0f0502422dd6fa3010001 \\xa69d411b25574883100dfaad66f3bb3f6e59ba3a7993246d4237f809cc19ea74ada45b4ea2926b310f9a5658cef49b2df464911826e353511222d41008bf200c 1651061441000000 1651666241000000 1714738241000000 1809346241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-403 \\xce433f122decfece95c95fb00659408944d70a62f91a10feb5909adb427797563879a919941737f0dbc07d9bbbc4cee9263b937bd630892d3bfc71694c561fe4 1 0 \\x000000010000000000800003b5d4f2250634d13c693e6ed5d7d6ab124473f591f5fb8fad90128cd83897f1348588aeb8b87d73028bc1f0815cf7df83f0c5b111ef57700069e26aa7456f09bae6d9c8339aa888ec040c5e055857315df2bb75528d0a4ec7911aa4a09a4eb876b771d7ad13d653622cfd7f3efe934f9bd84f80ddd7fa3917e5618bf50a234aa7010001 \\xd607c9a59b3ab914dbd60fd080e987b71b81b5d4b33f4f690a2d0a0134aaf578a01b32f69e0002a424b5e06206aadb762520b409220e2f4a9123a9081be31603 1660733441000000 1661338241000000 1724410241000000 1819018241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-404 \\xd077add6aa614abfd92fe2807cb43c7eb52e41473a5f5739d7a1103e3a5abaa57ef92a0e62c672be20c97dcedb40b9d8a10f459a611031071a72c485643a5b07 1 0 \\x000000010000000000800003ea19bc56f70f9de8d08ad386713f428b69de6ef4c05c1423479c6c5a8e303d957ebbc01d25e057f3a8f60ec36126d8e9addf74bf31a9e4a9684e80018a0a1433fd16c7906bbc3121f0e35b49a7fde1967e779c383512cc919cfc8ee4df70eaed4cad2dd9d2a9b457b0d59f2499c6bfb2dc2d870840aa56de693f723c2180d46b010001 \\xba5bc6d4ed6a1d211d148df3f76256801487f88187630b05f0a7eb275ef6333881dbc859df8074845e5e4e26d7e1f12ddb786beb67ebe5a4567e5c96431ceb06 1666173941000000 1666778741000000 1729850741000000 1824458741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-405 \\xdbdfba18050f3716660974a88f7e3baf880f6b6630afa4f95cb7905bed731ff146aa0da45993957fc400b46a5355dce992f61cbbfcfc4e24d3a3b1b219ffe7d6 1 0 \\x000000010000000000800003e026cca824eb16ccc3d2d71a7284df49ec4a079befd2fc9b914c4b60253f0698f5b86c7fd0d8000d7b6a6f9a7aea6e9a9823d52f635c5e2d0541fd41d90b970ec69e533657051a2263bf9d967f3bb32bdfe59b62d22955def860179ac1a37a9694dd6f2f35015641ba169e4f7cd66c83402cab980544379a2f5438698a826f43010001 \\x7a45caa035e34305631a79902e8c67fd70c1d6e4112c9d8ed51c99c7ab02b92d7d1509ed53310af47a0c8163307a7ca6b0b50b0c6f9b1b4e7c65c425d6ae1203 1643807441000000 1644412241000000 1707484241000000 1802092241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-406 \\xdbffbac9896c9c8a9bd54dff46046b764aff6af0a8794a61c44bcd23f96e3b052943d59d2c13011103cd7872cf4929fd2a9b00627d267612e8a56a04cf5907d0 1 0 \\x000000010000000000800003bb7d1cceef242f764332971a9cd2c63323169ca4ae90b1f2f550df4b60f38a05ba1822e7490dfc45756153f8daaac6ee3ba83e1176a1141b485f2902632713aec383a0f31d1aecf61cea14133b0264ae4c44af8f8860ec25a3398ed1d71a207366d0e4fbf44182d216a3234a99fa418fbefcdb42da4bd66959787d653de1b529010001 \\xad59079cdc2832bc444004560aee3bd961339eba1b03d108234b03f5824f595a5cd12df11fd926b6c13f804e188260fd41ad8125a79787eab8f39bc9e4bfb809 1638971441000000 1639576241000000 1702648241000000 1797256241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-407 \\xdcfb9b1cd6b1b4572246ab4bf71ef6b87d47e279cff534bea266a537fa917b8a31e2cc086fb615c7cd7e39024a48550b20921668e8a1cbc56715856a4428f79e 1 0 \\x000000010000000000800003b72a3e02bf0df088ba43da1f2894d73daedecf4cd68f7643a9b0f0624582989bc8e2b0da7b7e0c8869bde10fd13680fe0744ced1343705b08186f1f5adb7c3c7825ecdd4d50af32f7c893a5edf428d34a14dfea5ec1de656c7b5c95e8c5950565271ae9fbc8081bba3671d30e5b2f2ff084240c3d11875fd886b3df52c801f25010001 \\x5ff6e007897f61caf93fc2641d8678a1ff90c0e4bf413619bc366975b3adb4850882d13ac17d06b3ce0eece6e75bb78e65d2780862219aedb6986ab4f39f700a 1640180441000000 1640785241000000 1703857241000000 1798465241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-408 \\xdc2fa1ca9dc133ec3566476d4c8821ccf67acc7bdd7dd41cfb394750dfc18baa1f1a6f400c5468575a519827ef8b5a2a50cf8ba41bb68ae66847ce153dd1a031 1 0 \\x000000010000000000800003d730ed1aaf13897a1f5a6370505fc15ebe5e055b9250b02515d85cda2039063f17c9497b271d7002f058127ce1760805b1ecf0a71a1d708d40a2d98a5cef294f5a0c1fed4398dd1449ddb1d3775991f8748ddcfcc6e513a7f1676df38704cb97c2f5b93ba2eb7c197a74fd5eb8f540a5527a372347aa2cd0144bfd00b99e0aa9010001 \\x65af38ab40de4f6bb644ed7241d48e067127a4ecd136e8e6616a614565843c619ec2bb2c6c1702ed0a09324b66eb433fa2a7f3efe3105218527cd6fc2a6d130b 1659524441000000 1660129241000000 1723201241000000 1817809241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-409 \\xdf57e9bf552d3f8069456ab17abe5e271946c60470d3c45ec2e72f1337041d78372a3f5214d6189e29392701f8bc5addf89e9f54e2aba27ec98013b3ee120f1b 1 0 \\x000000010000000000800003d7115b55bbeb6922feffd27f5e646a51e1afab6b3374b14a42de68db589015c1c20b7df6673017adf928d57f292a86e2125ad324085997040ee31a7e112c350b729d6bc16fb65a829e8a73768fd2b4513c56a0f6c79fbe1245d06bf8390c98d0f208fad8bbd0ec73c2457a33f72ad5c4a9a5d4821a63f72b325797e5681926c3010001 \\xf7ea14e707971da6c6fb326b668f2b45b3d27fc003629c8c5178060392fa5ac7ff7d2960f219ef7c2d4157fca3654ba3ef68c12735fd06dc6cba103934f38905 1660733441000000 1661338241000000 1724410241000000 1819018241000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000
-410 \\xdfb3de8d94a6b50b68b3e3c56eec54b0ad51bea52f26da8cb26190a6ffe3be1bff004631e7d4cc9a78aaa4f518d91cedc428bc38fec66c759af995ad810abb9c 1 0 \\x000000010000000000800003bede262b11a02e27b6d8f340f1a17d32da27447700b0444587ac8eb92dbac381374c7b23b3f80da2f5e4c650852b8db9d65a17ce40622eb1043f96ec5b8ee11e0fb098f122b8b2c830317e7020c9fed23398db65ced007313321af3d23c7b57feb404ef404513e79d03c663853db7cbf8a07ed38214d9058c46b0871198f7ded010001 \\x52d920002037363d4c6eaf53b25b3ddd64d11a445c909c3f93d7c7936226693282f8959a212b235c20083d12ccc42f1e42a9ed31ddba86a00b106f57ffdad30f 1640784941000000 1641389741000000 1704461741000000 1799069741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-411 \\xe2c3c0718e7bba758e08d67387176ba1408e8d07dc7eabad6aa1679823db8a6c470d3e3c3c309c8e1c67d2fe7f89e2d6a4184b3bc5b4295bae6b039ae813037a 1 0 \\x000000010000000000800003b3895302f664bd5b9c049255a37d8e9516d4025f851538b97f3a4a5bebf36717dac739231548f8d98782d8603e97a52e34fd62bc25c5913d047c35256e3cedffbb5563631928490773839e4c2d06df42e4097e519016410484579d05e3aa2714a31870f2bfaa78d8fad9c473e0c8d6f73cc8eb3b8ca38fb47393d99af86fd6cb010001 \\x528d30185287a4f3374a50281d193619e6bdfd3ecf3ba3db03f4619131b8c009de814da8a1ff3929f30584296fff2a732537b054dee13c5f9f1a2a651cb6b009 1657710941000000 1658315741000000 1721387741000000 1815995741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-412 \\xe37bb44a3bb7aab6b85948bc6b5ea93dfe5d423aa0443053a6b4e6eb21b173cf3ae2719640916992d566c424a17eb59fdcfcafb9cbb4df78eea156fb7006d50a 1 0 \\x000000010000000000800003b871ff782a778d6db9dc10ace9926d2b7c357f14cd4226ec4658db9ed01344cbaa04f993c9a233de3c93267f1ef5a084fd6efdd1c11f86ea3cb90e0ee9f0e9c008e99a0a72247f68edd16936d0d8127c7216c485cba0aad378a3e26561fe4b85615116be6bbe941648bdf24405a1dcaaf9e56b116085aa2d3ca2108fc5d6f55f010001 \\xebaed6bedce35b49c7f756c280e3875e2bd6417e0656416a797a8df903951df51b2cb76859e11699e375b10f0ae6fa702e1c54c215d4c9a1affe82eac7907d09 1639575941000000 1640180741000000 1703252741000000 1797860741000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-413 \\xe4f3dfc73e169df4c3d6d8e279617c0e481342ccf31f408ad15c7a3dad3fbd8c37195ecadf8ddda23af73a7d1189f414b4ccdff55d25165d510741fde0691a4a 1 0 \\x000000010000000000800003d1577dcf1fdf3a8e5d9462388e40c7180f66a0e6b254c25f82551bed13bee2158dcddf8df7e9d1ab0fd544868ecc995266ccc70576731b3b7e78ae686718fd3df4d63b7f36e05e3fe427f23b213b9b1b76620668a962ab7a2d68e5df7d7f05729b1e984c20a0e776a873310e8222b80cf9290ad434a7c225bc3e3865e29f4517010001 \\x854fe9efb4d98c968094d59a0f2bf3aed0090adf2c0d62c9c9e8573678d65d7767af525ab7ed43638b77491a7e32a3204a29be1c72c158314b339d8049956000 1643807441000000 1644412241000000 1707484241000000 1802092241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-414 \\xe54bddca1a76e4843c90646b979ff23ee3a64cda8a703871a2a03ab49ab2f8bef4a74551689115ce161d2199c68f37565ea1c3c2c85bbcccc7c5d542782451ba 1 0 \\x000000010000000000800003bd7245dd28d1db47d7d777c8a09614d8bde1f3ff3edc2a80878f5f9de72b474a8f46c6963896b6d9a88aab313af63062b09de7ab394f365ca718c176ba737085d9359c2a30b3da871b9a951920bac8f44025068716e85a36ade6e2de87baf90c5861c5919efee35ee06e39025ff0b4a53bdda4f2f30f97ef4b277981e310c591010001 \\xe9259b35a4edc0c4966e0aa4570a7bc7935a7290adf366dd92770bff6e6656b3e85c755bff0515c2cacb210bf7955562ac5e1cc965a352da68807b746fba8403 1655292941000000 1655897741000000 1718969741000000 1813577741000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-415 \\xe74f5b204654c1bfd964308db62c84749ff2962118c73ce8bd383370edf031882a76eb517b508d79a81b84eadf49a6c675c6b21db39f21168d5993aafa48830e 1 0 \\x000000010000000000800003c86eabbcdf777d311f6d6ffd1812d319ee0e537a7001e8f0fd04e25505f27c41a6a956f0fa909f5095ff3ad053c899b035657e264bcf66434fdd46493a1bbb5ef2e4967e7fa95ecf70a47734c2390426b67fc5dd1ea383978913bd557f57293d2e8d5f341c69bf110b6ced04ffbb7b71bc2bf0e217bc1bfc7e61d494c1ed6339010001 \\x79929032fb0a2e5dbd4274bcfeab8c18e5f0f3f4f53ce3496e2bd892d795616e3c91566ac180283fa37b0987abc97575ac47aaa62d49b7aa73fed91cd16e3e03 1647434441000000 1648039241000000 1711111241000000 1805719241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-416 \\xe8ab8b6cb9752605cdf6525dc4c8222d4ad1158ed3581460e59d3d72b8d153f9c7d8aaf25bf9d024c4cec44a1b8f9c386bdb942cfd96fcd7d56b4d897d6d4c34 1 0 \\x00000001000000000080000397a171c677503f8204221158b9d91654e7aa39862eb2c827dfdb41d08d862fa25d697e744e438afbe73dd07c5f7783c3d9813d00f285578372a3c2ebb94bcaa6a8f1ce9fb7d5079bed630d7588aeacb5793b59203510e62995b2720f25819f5aa65dac300e00605cbd367c88deb50931d93b6daa03f526bd4fed7e1ad1ef9b7b010001 \\xf8a195ac5172fef3f3c8d4f89bddbc648f2e05a490101b7e7bb8dd1ba80ace8789f94e660c6c64209e81ad45f543ba9a31f6711bd6759304fec909948e4c4a03 1663151441000000 1663756241000000 1726828241000000 1821436241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-417 \\xed4b1aa39229de6b7f3ca9e2cef140c8212e4805a6709190bec77c2d6aa2288fc5eedcb53fcdb68b27db40fe51792e54266c9720dee48ce68e322b2cfef81d19 1 0 \\x000000010000000000800003bc10ee4fbab09921573331fd66289f926e2686cf9251f2620064d21b65bb6c672894b51bb3e33c2b948de29ce946d8d10376b70901b5653b93e011b590989db89e295dd6ecacda502bb4e5cec5260ba6abba5241ac1639e5284bf5a4746dd51a1cea4d3981da9d2c1a9e356c367cd2a0a6bbf16b036fef2c9a8cfe7d73e5c9fd010001 \\xcee0919a33bf0a5258bfc3a1554cdf6c2d52a311c417c1619e37d259719a5c71a715efd1440b9928b7a9e30d519d957ae0d1e8d7c0059d3727fdb2f809696307 1658315441000000 1658920241000000 1721992241000000 1816600241000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000
-418 \\xeff781b3eb7e34f795939d0f9684b6adeddd4d816205b0508054fdd9e6803d8742adf78986c28ee6a9ec914c2f28ab53bd1495043b69a7d1b1c8814afa4d8b55 1 0 \\x000000010000000000800003b7f4a975a2d195b83d959a70a762376ee2c03effca6ba84e5dd3d7fc09c6a99bff1d91da17e12e63bbb59d793fa0a60dc0a4b85053f5e560faea0a67f6f2aa85a9f8c6e449455fb8ab7cd2486ec3f7ebe505284f3a99053bc729feb96af2faf9945f007a697521585e04389a21f303e87ed30f6b62636b00bb3ea534d03cf247010001 \\x6b9b65b1809e48fe67e085113656c133a33cc89b395a713f3de948df81948c0af9b1e959da5f4a8d75cefc1535d514ac65a0a6dc0a4bba2bbcbb1e36fc7db40f 1641993941000000 1642598741000000 1705670741000000 1800278741000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-419 \\xf3833e9244db82be991db2f44a69405176c0dc70a023e90d16bdc9fde4b492ac1fce0979aaf78f17236cd6871d0cb5b1dcdae41127c35a7d873613dd87cf12f3 1 0 \\x000000010000000000800003c26f47e07c6cf3db541335762df029f17d5c9aa3cfbf0a58b68dddaad3688f500924fc7cf77e7f0288699910158dda337eaa4b53ca7b5dd876bf7e3e15a6f9f4dd4ea42e1caeac3702abab0d7e744ca122949563904d378f4fd95b1cf0b15e3fa6726a961955554985c076ea25695b0e1b74cc62f90b1d24dcf626eb875573a9010001 \\x83146e2c5e3118d47057b9f77d432dfaf79cf4f27693cd84c9328276ae7c502953152ebeaa8015546cdc46efc453575fba1226d5d9fa3ef914db690da3bf430b 1657106441000000 1657711241000000 1720783241000000 1815391241000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-420 \\xf36f44751be59c6e69ca2b312decf4ba502fafbc4ce9aaeb33723336979eb51f6cc9090fee72bd6c6ec5bd4b858a8fb732a9451b5cfab2df1f88addf037326f6 1 0 \\x000000010000000000800003ede8d78ca527403433b37b3da2aba37fcfa4bacf0dd72bdd0a202383a6fdb20c1dba628d30cdf66777cbfa000cb3a00adfbdd203d2902f6611c826c385174ef35ea4773c4225511f4a8276059bf09425b9c964d0a8ad7a64489edcf62fd31377f264edc981785551aaff61db6be16b9b65ceef2671f43cadf08c54f32a007fe1010001 \\x9f582b16d81d96722398b6a34f43ef3ac1d879150e04fbbd2dd7172742541abe0c3e41a73a538555646b8808e81f57b554c96242830b8d7ce1d8550111f3090e 1667987441000000 1668592241000000 1731664241000000 1826272241000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000
-421 \\xf3a3b30bbe27b788097d7a94f535b63f6f1fe45225033aa965c3994f34ff3a6ac7f055afa75e527bb9fbcdc5ddfad89a41c84cbfc1eb9fac97149012e1c8b408 1 0 \\x000000010000000000800003b942c43db27be3d33909d923f4e03208b2917ef5f12f7358872a14be2ce328c6d7b42015738b20a02587d094a1fc8b8fff74237e0eb58383745ae6186f29a8bbcbefa2159ed797366d5e91e51592394659b2f04651076e44b04f52f83a011d2619ac8443f7ec2c88c8f5380dacf916d63fbd7a68ff2a9469e5bf4e662b4d3cd7010001 \\x36d6aed24c64e025df33a24707c8e2fef9aa317e6573e41b6db5a58bb58e77d28ff69bcfb67b3f7defd4d9a272efc2bd000f9b2293567a506a2f32c8f52f270a 1640180441000000 1640785241000000 1703857241000000 1798465241000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000
-422 \\xf4b7e2748781e52ac477ca8772743ab7373eb2e3731b097f9e096c53e55b1627dda7c7523bd848665b1b3cc64b0ff27ea6834dbb4b6e20e03c53ef731b5057f0 1 0 \\x000000010000000000800003ba71ca2190c7c817d040f22c24a88651ef581fde2e2fd77ecfa49402018680a7036aadaeca6ca5b5808e20d351833263fc9cbb4b6fc49fafcc206291db9f97e1157b132d0930b8d5552950693cbfe3cc53f8b1fff88f85912befbe5bb23bfdabb7c89f113e39577ef6f531f8558afa44fa32ee758405392d4b965f1e2e71ab47010001 \\x42f14043b02bd030808b93db5124827e08cf3323b97710644c53f404b23f596d3439ffe1aea45c6c7594328c6a396055e15acc956c768acb1e259f474092400a 1663151441000000 1663756241000000 1726828241000000 1821436241000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000
-423 \\xf8b3fa627081ec67f2d2a7410d250f8a6c8c63898051a363cd5c183973de0b12bf2451627e433181f92541828e7999dd7b8cb848b6036ea4726a0bc59ab00ce5 1 0 \\x000000010000000000800003bc04a44c36871c07828350d7a5c7ea1f76ec51bc6a03a7b571ce629477f022a86099b8d58693bd1ac60684545b8c6ea901170922d661a9d383f009436cb58845c1f1597aa36dc9c59c4aedfa69ded329bf57b7a2c740e574aaaaf5bab3c1bb5b3f565976f2be9fd2770589d9a09ca06f1c76e5916af9282150b2ae3f879f8c81010001 \\x7eaf2d488d985ae7ad5365b79f602b843df7bd353a6b576cbaf24b3789e4d3b9aa58997b317b6b306090e39f4a7a06676645ac384392c6eab3928a095ad1f60e 1666173941000000 1666778741000000 1729850741000000 1824458741000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000
-424 \\xf8bf78861dcbe30a3fe5e847ed2885ec22ac744584840e127440a19df0e2b062a475e4f96f80e8297fdaf4a2e86b523f27486a747f61fd8ed989ad565a9d26a0 1 0 \\x000000010000000000800003bf9518bef6caf0d6d6cc92bf27a0211284bc9dd8539b982edae99539a21e1966100911ecd44f12a002301256f0e85ce15ed2ec6e1cb161b7db9d05df57a4f3b7a1d0e3a7ba1fe2ac99f0b457f12a9e5170d4f89fa08c50e59183eade6d7bc6d377fb36186bc473ce9f43333b3bd73d2604d5b5cdc58bf0f14f2803816b1cc6fb010001 \\x91ffd7617cec83053485a282698ce0905b743966923c8b6a5ee90cfc753303b223d691f607791ae67873ad262026c7c58662635b684bc68b130ede3cfba8310b 1655897441000000 1656502241000000 1719574241000000 1814182241000000 0 1000000 0 1000000 0 1000000 0 1000000 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;
-\\x48ed82513cc149c010ca237982a36246850491b26723e0568be0b28a9b8602b4 1 \\x4fe9e894a158a6880831024afb7768cf7e2bf63a0dbe851684770ec4fceae82037ce1e83e9994c88fa00c032fea966233753431cbca0e372c0e869fba879ae81 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\xc17edb67fb6fcda6be90eb485f2f68f617b6e51cc469db0757ca91f933c99bf01199f09519c503f4c830074cb4a7dc8f64d95044813df28801364f2f86df6252 1638366975000000 1638367873000000 1638367873000000 0 98000000 \\xa1413938dbb85af180050a3164a6664a171980c1bf8775778cca5b02f9ed078f \\x28c90b2b1874b667b33ea54082637095c75c33e3857fc25a4ec81b6ec4c31d8b \\x4f0abb980d4559b25da2a9013004b5e2b2a3747e95f272fd9a3c5d6e61692c4a2dcdc310e690e62f1e49c8572475c2f1402eb94516244b888128511dcecf3600 \\x7381fdf0de425ba7c87466c78b506c9f453784258154f22784ba2f4159d1d267 \\xcbf64f03d2550000cbf64f03d2550000cbf64f03d2550000ebf64f03d255000011f74f03d2550000cbf64f03d255000011f74f03d25500000000000000000000
-\\x48ed82513cc149c010ca237982a36246850491b26723e0568be0b28a9b8602b4 2 \\xaadf168e1276328a987e5dbf06581844c0b6e5e508a4fd99289d8a9d2bcb071bd11a554c51e2db1cde926a8805fe8e81b1d961e62cbe0a753d5358005d199308 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\xc17edb67fb6fcda6be90eb485f2f68f617b6e51cc469db0757ca91f933c99bf01199f09519c503f4c830074cb4a7dc8f64d95044813df28801364f2f86df6252 1638971815000000 1638367911000000 1638367911000000 0 0 \\x09cd70968a5e3086cbb191a45afd0f0e96c578e671fb829723649fac30082571 \\x28c90b2b1874b667b33ea54082637095c75c33e3857fc25a4ec81b6ec4c31d8b \\x674671a0193eddea5bc2f651ff55e3778d092ca76a031ab5627679e5c5e49878be483c71ca8294a5b41b2023212fd36330d3c8898cb1d7251284a3cce6a97306 \\x7381fdf0de425ba7c87466c78b506c9f453784258154f22784ba2f4159d1d267 \\x6b245103d25500006b245103d25500006b245103d25500008b245103d2550000b1245103d25500006b245103d2550000b1245103d25500000000000000000000
-\\x48ed82513cc149c010ca237982a36246850491b26723e0568be0b28a9b8602b4 3 \\xaadf168e1276328a987e5dbf06581844c0b6e5e508a4fd99289d8a9d2bcb071bd11a554c51e2db1cde926a8805fe8e81b1d961e62cbe0a753d5358005d199308 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\xc17edb67fb6fcda6be90eb485f2f68f617b6e51cc469db0757ca91f933c99bf01199f09519c503f4c830074cb4a7dc8f64d95044813df28801364f2f86df6252 1638971815000000 1638367911000000 1638367911000000 0 0 \\x13d98aeecb195cef3fa231ac98ebc998abca490f09d0d0fe9ebc610ade1c3233 \\x28c90b2b1874b667b33ea54082637095c75c33e3857fc25a4ec81b6ec4c31d8b \\x86cc74e494459812974d86a13dccea2118a3f87d5a8a602bd5700503f4df724962b9e96942197bc2c6587bcf70667ef4b1f3dd792310ca102a75478fefe97f01 \\x7381fdf0de425ba7c87466c78b506c9f453784258154f22784ba2f4159d1d267 \\x6f245103d25500006f245103d25500006f245103d25500008f245103d2550000b5245103d25500006f245103d2550000b5245103d25500000000000000000000
-\.
-
-
---
--- Data for Name: deposits; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposits (deposit_serial_id, shard, 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_serial_id, tiny, done, extension_blocked, extension_details_serial_id) FROM stdin;
-1 1382188551 2 1 0 1638366973000000 1638366975000000 1638367873000000 1638367873000000 \\x28c90b2b1874b667b33ea54082637095c75c33e3857fc25a4ec81b6ec4c31d8b \\x4fe9e894a158a6880831024afb7768cf7e2bf63a0dbe851684770ec4fceae82037ce1e83e9994c88fa00c032fea966233753431cbca0e372c0e869fba879ae81 \\xc3019d5a47e68b46bacae12d0a240097b204339a063ffac5e13f00ebe0ab52687ec04d338a1226d87169c061febafdf676fbdbe425911c75bfedb551474f5f05 \\x71cc75fe4952d09324d003da4118aa08 2 f f f \N
-2 1382188551 12 0 1000000 1638367011000000 1638971815000000 1638367911000000 1638367911000000 \\x28c90b2b1874b667b33ea54082637095c75c33e3857fc25a4ec81b6ec4c31d8b \\xaadf168e1276328a987e5dbf06581844c0b6e5e508a4fd99289d8a9d2bcb071bd11a554c51e2db1cde926a8805fe8e81b1d961e62cbe0a753d5358005d199308 \\x39c544e9ebd403b075dc5bca95b072cf35ccf8f10dca293449ddb1863ddeaab9236352216eb5d3402f4f898af062d7b163037faa9d082d2906209126c43cf809 \\x71cc75fe4952d09324d003da4118aa08 2 f f f \N
-3 1382188551 13 0 1000000 1638367011000000 1638971815000000 1638367911000000 1638367911000000 \\x28c90b2b1874b667b33ea54082637095c75c33e3857fc25a4ec81b6ec4c31d8b \\xaadf168e1276328a987e5dbf06581844c0b6e5e508a4fd99289d8a9d2bcb071bd11a554c51e2db1cde926a8805fe8e81b1d961e62cbe0a753d5358005d199308 \\x54cc11f856384da4bc295222895a1d454b2c7dd60f4cfa0e9120e5ed7e142dbe0fb489a9ac086996dd97f4473d7c9572c2603eb06a41f2920ea044629a111c0e \\x71cc75fe4952d09324d003da4118aa08 2 f f f \N
-\.
-
-
---
--- 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 2021-12-01 14:55:41.279577+01
-2 auth 0001_initial 2021-12-01 14:55:41.382701+01
-3 app 0001_initial 2021-12-01 14:55:41.450952+01
-4 app 0002_auto_20211103_1517 2021-12-01 14:55:41.453042+01
-5 app 0003_auto_20211103_1518 2021-12-01 14:55:41.455097+01
-6 app 0004_auto_20211103_1519 2021-12-01 14:55:41.457776+01
-7 app 0005_auto_20211103_1519 2021-12-01 14:55:41.460569+01
-8 app 0006_auto_20211103_1520 2021-12-01 14:55:41.462687+01
-9 app 0007_auto_20211103_1520 2021-12-01 14:55:41.464554+01
-10 contenttypes 0002_remove_content_type_name 2021-12-01 14:55:41.474418+01
-11 auth 0002_alter_permission_name_max_length 2021-12-01 14:55:41.482812+01
-12 auth 0003_alter_user_email_max_length 2021-12-01 14:55:41.489571+01
-13 auth 0004_alter_user_username_opts 2021-12-01 14:55:41.495386+01
-14 auth 0005_alter_user_last_login_null 2021-12-01 14:55:41.501046+01
-15 auth 0006_require_contenttypes_0002 2021-12-01 14:55:41.503096+01
-16 auth 0007_alter_validators_add_error_messages 2021-12-01 14:55:41.508524+01
-17 auth 0008_alter_user_username_max_length 2021-12-01 14:55:41.518685+01
-18 auth 0009_alter_user_last_name_max_length 2021-12-01 14:55:41.524606+01
-19 auth 0010_alter_group_name_max_length 2021-12-01 14:55:41.531793+01
-20 auth 0011_update_proxy_permissions 2021-12-01 14:55:41.538824+01
-21 auth 0012_alter_user_first_name_max_length 2021-12-01 14:55:41.544625+01
-22 sessions 0001_initial 2021-12-01 14:55:41.563641+01
-\.
-
-
---
--- 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 \\xc09775c48b8cee11d08ba85669165ff54ccfe4c3232a2f1d206151b76296e945 \\x8dfbf026aec87e499c0eff6b8fd4e00fa02906d0d3495c824399d34385c34b61f264c483a224c68f210026d228cb0c9187252653eb6d2d973a32b753c408900d 1667396141000000 1674653741000000 1677072941000000
-2 \\x21480f729e3e722a811a9261b0ee7ce65ad9837dabccd82fa944ef9bf61be83c \\xfc791fc5a0e770feb0bfde4e5ea823becd33c097a2954e73554c163ff2d0dc8c651151ce7e6b001bf11b0d172514142e1a8d2dbdef1e735c1fa9b3a601be5c0c 1652881541000000 1660139141000000 1662558341000000
-3 \\xb07d619aa2def3e5a311e5c2769821d3e35045361f6027f6075ac4bb608ad091 \\xe7119f45abe5088bb2ca954935096751626217a7b6b68c94b63db037129b38388c17ba5d17443bf66ef4925b42a044149f7b1d37ce1aacabaa75b736c1777609 1645624241000000 1652881841000000 1655301041000000
-4 \\x7381fdf0de425ba7c87466c78b506c9f453784258154f22784ba2f4159d1d267 \\xa0d298ebc68805af02cb0f994d48b4c7cf88c9356a9ce46ccd55bee9053fc558462f46d171acb343b405e45d7429ab1a3fcfeef76f4269cfda2a88b656059a0e 1638366941000000 1645624541000000 1648043741000000
-5 \\x74087dc33a9f3fdecd032a452e565aa8b7241bb6dd8c013298eafc2b3541fa6f \\xff394faeafd8ccf73571c3d6de12b822c219d3423b6de29cdf2e5e8484d0e6165dfe6a1fad49c6c94f3b292d29e6bcbd05ad93093cb8eb69d5414110826c8805 1660138841000000 1667396441000000 1669815641000000
-\.
-
-
---
--- Data for Name: extension_details; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.extension_details (extension_details_serial_id, extension_options) FROM stdin;
-\.
-
-
---
--- Data for Name: known_coins; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.known_coins (known_coin_id, coin_pub, age_hash, denominations_serial, denom_sig) FROM stdin;
-1 \\xe0186bf5b3febf38f761e298be270898c434e30dd87e29f58ac3d4078b56fd90 \N 92 \\x000000010000000027229e865b66cd52ddd3f59f13551670ff4f51b50f6f602d4c4f45f27d0a68be407f628a4da14e6b8bee309c0cb305445b2ca27f35cb1b45b43a8b56ade4209831fb2c21d6d40244f1de733590a7139f7e79f9f83aa18e99569aaf0b9749c8166ceeff024870d844ba9a77df49482c05664560503d6e2288198c41a3b0d83002
-2 \\xa1413938dbb85af180050a3164a6664a171980c1bf8775778cca5b02f9ed078f \N 134 \\x00000001000000002f5616d8bf60d805d528a76067eb31c8e927b6c7a7b13e1d50c312cf3ba41aa9a85e0f74d88c0e9786847adb9ecad65be64f3ae162472d37a1814338a8fd9e95167196d310683e05a9d1b73a38623b09e0686a2b358761f22712f0ece7520fef5f9d147c624c69dd29c13f73bec7a760804c0b2c4f63fb82a15f8417f80fd7a5
-3 \\x728b8b6f25aba26ea7402af16fcc3ae6bf3180fd4e7115a714e52164d2c12558 \N 93 \\x00000001000000004d762e535c9bb8cdce66f8227fb5d91144bc00c49cc41a58ef1ae97c6b7d158fcaa25910fe5689c985c588652493c36f380716be0aeafe1483f5ca376764026fec0106bec061a145d8addbe9018e5c478038aa39d14c31917a91582cb209ff608315013fba52468cfd33ddb313b5f619f798bbfd26c6c05e965867f66d6f23c6
-4 \\x20902e167b6e6d105471a1193e57e4e95e69472ec0c3109eb26b198d6be377eb \N 364 \\x000000010000000095b82d67e39eda301d7cac22d109b63dbe2345dc09f7611722f9f7a6033968c58316eb76694a1d57a48c2ddb6624e4e55e194240233f668c12889d1f4d709862e9968d7324c3a4fb32028a07c925fce4871c26235a98cd0d89a908074ab7f493445a8020a2685f302c309a0f1f0431494e2a83a85c91e96dd1dfcc7526f809ad
-5 \\xee2f5dea39c17cffb7872b274affccc002cf6283a67c392228e7f15b00f9fbcd \N 364 \\x000000010000000027525bbdff513800e7b8a883b174ab8f9e3d1aa36da5c431b863aa6a11963286fc9f3b091375c88100c30e38215dc9b93a5523aa5727325e60403714f618b7f42f56e86583112debc26525dc0c7bae5f342b00a3715d4be33e7906f320e0d808be7cdf603e87020de930b81f85b62f02f7355843221389ed23f8217cc23a375b
-6 \\x475a1b16b5edad2f9eb50a3b953ab83466f7bd60f4164b43d5de6f3096e84ff0 \N 364 \\x00000001000000007f72118902ac0946513fcad4ba35894006bd3043eb52e7f29717045276642dca23d5fdca2fba7ec613b5011a9ef4751650593f0602d844426f63a6b74dbb9c04a6daa11f883a84480e3f75031393ad953a65441513ae24de1e269f635f0d82bc3753211d828b5a4c4ad460202f7aa619df788be97a9200ace888ab67eeb93bbe
-7 \\x69324983d0cd4727fb97daa6d7471b2f9fc8840d05219274a76bee146efb65cd \N 364 \\x00000001000000007f9673351b68b149c79a945806186acdb90bc73fd166ecfddf97162246e3353a472a3486221146ed6c5e378bda7842961493b55916a1c59d78a7fb9f55fe6743ab4e906515b748846e77ee61b5fb9ebfa55bc7808bbb24f5e523936ce7efd23c5a1e5ba76ee0981b10e30501a5e961b414aa4cd4d6f8f203969163a724a496c8
-8 \\x6dfafdc0ed2b116eee101cdd0c4372a9c567a24dfa626d3a9db0fe975117b514 \N 364 \\x0000000100000000b60e9b8b64572002792fa087e6bf432c4eb37497b0b9301ed4be7f6521988147b27a708188d7f7fe16b2dc1750839a2f5134480130b8025004a84e5c77a8103a2a09f8eb2b96245ce85936b9050068b4ede49f980348e3c81f6534f89e8684cdfc3aae8792e6fbfe45b9e8ea7746ed6cc74998ccbe6967c9f7d6daccf2793586
-9 \\x755466d3375b26369bed54c4113d5106dd531609531bcb9e1e3eda13b3633653 \N 364 \\x00000001000000009a4ce4a19b35c81e181228d8fe32cd06a3b46d36833137aafce50d80944fd526555fbc0f90b45b81b9bc4c63ccca95a2d1e7b6397fccb1200674e7f8928f33de342a33837b7bdcef85d6420d63943070166423803c29cdd7f92b0d1f91322750b35f86081c236de8a5a97513f12d54755e596901911e77d630bca2f120c15f88
-10 \\x82b08ecc189a01691e5500ad6ad870d287aae25234a1cf02a1e51b6c9770ba6f \N 364 \\x00000001000000002e91a348c3efab2fc3c97755cc93aef4c6a9be5a717c3be0498c2c2d6e2f7f787699dd7f33990fc17a312551cde306adfd059fd3f9d2481a64bdf78b4a9627216c254c9b44134828efc29f263570656414a6fd09d10c1b869bc1db969519d4c9fccd228f1bbdc9716f5bde7e40def6d9d673d67dec4cd76246b590afa8d02104
-11 \\xb521a0bdc5ff821d6309e71db85fade321871c708b49eded381d1eb225124d37 \N 364 \\x00000001000000009785a9ae858a3672cff7f9d4db8209f821731ee95a9a7a1a26f8cc733b15d0cbc60d6886150c9a81c2a0eb27ebab0e1b566c9640e0c1ea9e665ab42ddd95e0c3110b19a0870a5b3e265dbe827c6d895e60edf0871f65fc8deaec1ecbcd9ae8dbae13d3243b5cab6f2721a30c722afda3aa3662d2ceb5e1b7568720a565e44c15
-12 \\x09cd70968a5e3086cbb191a45afd0f0e96c578e671fb829723649fac30082571 \N 264 \\x000000010000000084271e0f735f3460197868bdf964c54174a269a55975cc276b057f1f072b020aeb2a161f052e43ad366003ad8a59a683c279e37d6188bd3801dfafdb461fe9c594b4d0eecd9a126d2b8b79017442ca602a7129b9c8755f6052748eca65e4c6823adf2382c6620836a7a47874bc0b5b5acad3c997b1f067fee68cb84b3f9adfcc
-13 \\x13d98aeecb195cef3fa231ac98ebc998abca490f09d0d0fe9ebc610ade1c3233 \N 264 \\x0000000100000000659d040133cbacee2f875fc579ceb6481a1a90dc05e77d414f27241381e7c08613261c79345c9eba19af74a0771a8d68d0d6822b2e3b1c0bba91f1795d3e324f81671bc07c23ddff2f64a17c54c323e93d482db7c5aa7c553c4e2da8914325c6ff2e45c68cab401c20791d5556e478c63bcc32508b13cf9ce9e6f15df486b6d0
-\.
-
-
---
--- 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 \\xc17edb67fb6fcda6be90eb485f2f68f617b6e51cc469db0757ca91f933c99bf01199f09519c503f4c830074cb4a7dc8f64d95044813df28801364f2f86df6252 \\x71cc75fe4952d09324d003da4118aa08 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 2021.335-02G3H7DHA6ECW \\x7b22616d6f756e74223a22544553544b55444f533a31222c2273756d6d617279223a22666f6f222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f7468616e6b2b796f75222c22726566756e645f646561646c696e65223a7b22745f6d73223a313633383336373837333030307d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f6d73223a313633383336373837333030307d2c2270726f6475637473223a5b5d2c22685f77697265223a2252355a4450535a56445a365444464d475844343559425638595242564453385752484d58503154515341385a4a4359394b465231333646474a4d435741305a4d53305230454b354d4d5a453859533653413132383246464a4830304b434b534647564650344d47222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032312e3333352d30324733483744484136454357222c2274696d657374616d70223a7b22745f6d73223a313633383336363937333030307d2c227061795f646561646c696e65223a7b22745f6d73223a313633383337303537333030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a2239335052344d395752353457303436413444575235385632385432473934444a43574859304e4d42573253384e36573630415430227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a223533344750415252454a5636464353594d4e3038345256474a51334e52435a33474e5a5734504a45533044505848363333503547222c226e6f6e6365223a22484844595258584e564252534a56314d5852574853503937505433443138464732394745445a53544b57594b4a394b4a42575047227d \\x4fe9e894a158a6880831024afb7768cf7e2bf63a0dbe851684770ec4fceae82037ce1e83e9994c88fa00c032fea966233753431cbca0e372c0e869fba879ae81 1638366973000000 1638370573000000 1638367873000000 t f taler://fulfillment-success/thank+you \\x17dcb3df058180cd09068e1394edd744
-2 1 2021.335-03P554SREPMMJ \\x7b22616d6f756e74223a22544553544b55444f533a302e3032222c2273756d6d617279223a22626172222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f7468616e6b2b796f75222c22726566756e645f646561646c696e65223a7b22745f6d73223a313633383336373931313030307d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f6d73223a313633383336373931313030307d2c2270726f6475637473223a5b5d2c22685f77697265223a2252355a4450535a56445a365444464d475844343559425638595242564453385752484d58503154515341385a4a4359394b465231333646474a4d435741305a4d53305230454b354d4d5a453859533653413132383246464a4830304b434b534647564650344d47222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032312e3333352d303350353534535245504d4d4a222c2274696d657374616d70223a7b22745f6d73223a313633383336373031313030307d2c227061795f646561646c696e65223a7b22745f6d73223a313633383337303631313030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a2239335052344d395752353457303436413444575235385632385432473934444a43574859304e4d42573253384e36573630415430227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a223533344750415252454a5636464353594d4e3038345256474a51334e52435a33474e5a5734504a45533044505848363333503547222c226e6f6e6365223a224e48483250394357475a563035574e31534658593846323432483333434e51504a5657594131414a384759374351435039385830227d \\xaadf168e1276328a987e5dbf06581844c0b6e5e508a4fd99289d8a9d2bcb071bd11a554c51e2db1cde926a8805fe8e81b1d961e62cbe0a753d5358005d199308 1638367011000000 1638370611000000 1638367911000000 t f taler://fulfillment-success/thank+you \\x517f5c871f3bc9b50635679d3c850bf3
-\.
-
-
---
--- 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 1638366975000000 \\xa1413938dbb85af180050a3164a6664a171980c1bf8775778cca5b02f9ed078f http://localhost:8081/ 1 0 0 2000000 0 1000000 0 1000000 4 \\x4f0abb980d4559b25da2a9013004b5e2b2a3747e95f272fd9a3c5d6e61692c4a2dcdc310e690e62f1e49c8572475c2f1402eb94516244b888128511dcecf3600 1
-2 2 1638971815000000 \\x09cd70968a5e3086cbb191a45afd0f0e96c578e671fb829723649fac30082571 http://localhost:8081/ 0 1000000 0 1000000 0 1000000 0 1000000 4 \\x674671a0193eddea5bc2f651ff55e3778d092ca76a031ab5627679e5c5e49878be483c71ca8294a5b41b2023212fd36330d3c8898cb1d7251284a3cce6a97306 1
-3 2 1638971815000000 \\x13d98aeecb195cef3fa231ac98ebc998abca490f09d0d0fe9ebc610ade1c3233 http://localhost:8081/ 0 1000000 0 1000000 0 1000000 0 1000000 4 \\x86cc74e494459812974d86a13dccea2118a3f87d5a8a602bd5700503f4df724962b9e96942197bc2c6587bcf70667ef4b1f3dd792310ca102a75478fefe97f01 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 \\x48ed82513cc149c010ca237982a36246850491b26723e0568be0b28a9b8602b4 \\xc09775c48b8cee11d08ba85669165ff54ccfe4c3232a2f1d206151b76296e945 1667396141000000 1674653741000000 1677072941000000 \\x8dfbf026aec87e499c0eff6b8fd4e00fa02906d0d3495c824399d34385c34b61f264c483a224c68f210026d228cb0c9187252653eb6d2d973a32b753c408900d
-2 \\x48ed82513cc149c010ca237982a36246850491b26723e0568be0b28a9b8602b4 \\x21480f729e3e722a811a9261b0ee7ce65ad9837dabccd82fa944ef9bf61be83c 1652881541000000 1660139141000000 1662558341000000 \\xfc791fc5a0e770feb0bfde4e5ea823becd33c097a2954e73554c163ff2d0dc8c651151ce7e6b001bf11b0d172514142e1a8d2dbdef1e735c1fa9b3a601be5c0c
-3 \\x48ed82513cc149c010ca237982a36246850491b26723e0568be0b28a9b8602b4 \\xb07d619aa2def3e5a311e5c2769821d3e35045361f6027f6075ac4bb608ad091 1645624241000000 1652881841000000 1655301041000000 \\xe7119f45abe5088bb2ca954935096751626217a7b6b68c94b63db037129b38388c17ba5d17443bf66ef4925b42a044149f7b1d37ce1aacabaa75b736c1777609
-4 \\x48ed82513cc149c010ca237982a36246850491b26723e0568be0b28a9b8602b4 \\x7381fdf0de425ba7c87466c78b506c9f453784258154f22784ba2f4159d1d267 1638366941000000 1645624541000000 1648043741000000 \\xa0d298ebc68805af02cb0f994d48b4c7cf88c9356a9ce46ccd55bee9053fc558462f46d171acb343b405e45d7429ab1a3fcfeef76f4269cfda2a88b656059a0e
-5 \\x48ed82513cc149c010ca237982a36246850491b26723e0568be0b28a9b8602b4 \\x74087dc33a9f3fdecd032a452e565aa8b7241bb6dd8c013298eafc2b3541fa6f 1660138841000000 1667396441000000 1669815641000000 \\xff394faeafd8ccf73571c3d6de12b822c219d3423b6de29cdf2e5e8484d0e6165dfe6a1fad49c6c94f3b292d29e6bcbd05ad93093cb8eb69d5414110826c8805
-\.
-
-
---
--- 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, master_sig) FROM stdin;
-1 \\x48ed82513cc149c010ca237982a36246850491b26723e0568be0b28a9b8602b4 \\xf9099467bd884e86871559a62a7f23b6e876bf084a30371891b5129ce4440d3cbe27afe387d39b2ce8d9625abd388517c81bfc8da9f2e0f8c9471bff65a802b2 1609459200000000 1640995200000000 0 1000000 0 1000000 \\x403ddcb1ac9ae4bca73e915a1c1ef3d901b0c2a0aa4dcdfdad12276f18cc5d438c4e64057b4e11c76f8d05a3b5d6dc56fed992e05f0d76c06e892680b9458408
-\.
-
-
---
--- Data for Name: merchant_instances; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_instances (merchant_serial, merchant_pub, 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, auth_hash, auth_salt) FROM stdin;
-1 \\x28c90b2b1874b667b33ea54082637095c75c33e3857fc25a4ec81b6ec4c31d8b default default \\x7b7d \\x7b7d 1 0 1 0 1 3600000000 3600000000 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\x0000000000000000000000000000000000000000000000000000000000000000
-\.
-
-
---
--- 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) 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;
-\\xe761e368e6cdd79523b5f53b2cad49a3938caebcf7d3c1ac336341dd751a74b6 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 1638366975000000 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, execution_time, exchange_sig, credit_amount_val, credit_amount_frac) 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: prewire; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.prewire (prewire_uuid, type, finished, failed, buf) FROM stdin;
-\.
-
-
---
--- Data for Name: recoup; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup (recoup_uuid, known_coin_id, coin_sig, coin_blind, amount_val, amount_frac, "timestamp", reserve_out_serial_id) FROM stdin;
-1 1 \\x0be3f090d5d6ccf514532472983ef2636617c542809579bbc9df20e9f108b1ae00b37488e54fea5eaf2621c13a7827ab00ae795a73ca8b0aa430e5955b74df05 \\x807b9cff040f410ed34ecc188f990b1d47eff7fcbd14b1d17bc2c209587e83db 2 0 1638366969000000 2
-\.
-
-
---
--- Data for Name: recoup_refresh; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup_refresh (recoup_refresh_uuid, known_coin_id, coin_sig, coin_blind, amount_val, amount_frac, "timestamp", rrc_serial) FROM stdin;
-1 4 \\x45c50dd48da5b296a0e4b93ffd3c5a3857d8dd7bd99d82a4cea444ab5e6ca19c2b278d2021ff2522ac92cc31b245a8fe619d07c5aeed4684991d70dd05705704 \\x3d546f3cc5e433f3990f118640a4f30b1ce4a09639e21cb0f8fe9bf7ca885093 0 10000000 1638971800000000 4
-2 5 \\x486b4a0ee92e0644266cd93fc98bc72a0e6d8bbbdc3ec9ed4fbeb560d40d0fd5bd99f2de0cbe67b2a5c374b7f552eb7131d49fae2de07a34b6e198025f5dce0f \\x7273b371015234b67d1ca12af01736a0fad2e4d888736eda83c2ebf6de6c8d83 0 10000000 1638971800000000 3
-3 6 \\xc7c4f026fa362f1a38f980b9e83e3df73562050bc14174fef9b0294d255f722687030a32ec10ecf92910d2c753014b972d4f5e49a60821451349d55599d35802 \\xb91ac2ee8bb986207af7f94d3e90c41d2d046ee1e31d3c4fa91be408a01f3839 0 10000000 1638971800000000 7
-4 7 \\x29467ee969ee8f8a59848d9d474e51e4e867b1b44bb5133bd5f602b2e726a1e521afea26c30056d9ab0897b9f40346dd12019a7dfe172d7417f9399922de8c0a \\x73193a9fbc71eb1995445f0ccdbbf650c9d81cda4bfef6724ecc371a1d10a2cc 0 10000000 1638971800000000 8
-5 8 \\x750b2484c67d8a4740ba48ea4d636894d4e06ea6beea18ad87ce82c09fad21f5b00814cf871edc3f48dbb346164bd192b9bb7a57beced52e0b96e52084de4701 \\xe11653dec0c2540236840ab680a0560bcd9220ac22a0d3207ea64f9107e1b4a4 0 10000000 1638971800000000 5
-6 9 \\x5ddc2111398eac860edd72374bf3877d843861f1d76c56f647860bc3f7f3b6a6f43ff2c77b96c0e9c35c07d4c219648b9dee42106354055296a46775466ad60c \\x9785a7a7c20bb6afe7827a4983c6d0e7a5255faab81513323c38ecf04a808b73 0 10000000 1638971800000000 9
-7 10 \\xd3cb8364b2194ea92c766db0e6a1a233910ca3f045abd9d34f778b7eac4a624846745ff2d2576b80d4ff5a620ecf3e20c36f2b867878fc56234d71ca374c3e04 \\x37812d2a76662c592341f29469ef84e16080f3bab1254aaf18008cf90312dd84 0 10000000 1638971800000000 6
-8 11 \\x1dc368e868ee72db51579dd745226ac1d7668537a3b6aa27ef533e3c9eb61ecc3f387381de9bf19aa4663bb68179fe2a68248c1b07c2d3954f20a8cd0330a40d \\x50d0adc0817193083ae0654a2f4f13a4bc58e8f51c3eb7df7623c04211012332 0 10000000 1638971800000000 2
-\.
-
-
---
--- Data for Name: refresh_commitments; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_commitments (melt_serial_id, rc, old_known_coin_id, old_coin_sig, amount_with_fee_val, amount_with_fee_frac, noreveal_index) FROM stdin;
-1 \\x1a0b0eb52968acb6bdfc2599f4f8d54147fd90e4efde730bfc26abfc295abaad3a46439beb62df108498960faa9edbc7300c7daae1a83ea8fbebe44a9eab885a 3 \\xdd3e5f19563d35f68eec4dbe4be41b3edcc4799e7f4708ba1081afa15f566a4e8e392774acd54fa7a04d0ab65737e541c6021fcf9f02f4d92c7df4d34a93ca05 5 0 1
-2 \\xfe095f2b3cd7cbbed98a95d7426c45604cbd4d0773ec908fc540c3901d6e64f5df889be6bd7937a3a26dbdd6c7d708756cf7a95c81c0d8811803d9c612e39e1e 3 \\x1097dd8cfcbbd0120c9b8779e758a54a7989ac62285e77e7d9498bd4283abf93555ef3528ae399f1dd42ac3732aa75b5c0ac8d7bb9bbb2153465efa3eeb4eb00 0 79000000 0
-\.
-
-
---
--- Data for Name: refresh_revealed_coins; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_revealed_coins (rrc_serial, melt_serial_id, freshcoin_index, link_sig, denominations_serial, coin_ev, h_coin_ev, ev_sig) FROM stdin;
-1 1 0 \\x1fc0177b5a1801015180ef7b61a85f9f598a524f024c0153a15a7baef69eaf22cab2432d36b0394dbefaab11f3887a0876ba939644b87cf800c9bcc2db185d06 62 \\x18e5bbefe6693c424e0d4348005d772ff83d1c03fc345e239dbd5e10a57213030a97e2d13ac9b07d786311530ba8dea82baeb5f427c3f093a6792d92f58f9863995621b6eef754f3c281578dec66d93221ecb43a55b54a6c3e98aee7fdcf797fbf7a88ad6998b771020c0f19d3f737ed645beb528f6ff1c4f31781c6209e64bc \\xaca7555d3ba80dea0fbf31883bdd249f2b17223734357e7c4f66035c037e9af58bb6cf91420586ba89f17a5d2516d883636b9449860c1a8cc8ff23ec9211ceeb \\x00000001000000016d5f09da77249e882cafc90089f9f50251d4af54b7f4bc345f1eaf0723027663ffce1b9b1e7cfb6eb094c87dbd9edfb81f6929cd570c1ba5cf1a4ccbe30441ab6dd3c7841ba9b4662023fb4d148e82a31370ba09a1440c41eabf941ca082f7fe37e7daf431cd937dee301dccbf9d82967671ba7463cfceca4d793b411d92c116
-2 1 1 \\x071493f53d1a2d3c3e2dbabd3e596878c0b232bbc54fdc6609154c043da10d8c09a9b660d84a05c529be9c33d14f0f15e30e9e65d643ae307914256f26a1660d 364 \\x615152e42b77c4a2c2ccc8e588cde22a0fc96a7add99bcfcc7d7a9ae4431294512cc6665973002a1c8cb3090323402c93b009f204cb8ce838d415d8c18c716c9e400fa9505b38dfb32434643b23fb5dcb125f0288b632413aeb01b3fd7ef670a559de96d1259bd218c5160f19494063925bb1149645c2c87c3f3ba45ecf5facc \\x63c1827f442c35e1add6272308dfc148c748fd68e973e95c264a27d1f24f62ecf3c350d35a63836c029c71e338a60cc525894d439d5daecaebad242ff515eed3 \\x0000000100000001655c7d3a686266b0f873b307fbab5bdb7f30abd07393fe8b68534d1e6673ba9d65f5397d5750ba033ccc659376e7615450b2355d38961143d83c66d49100268a85a2d1a040d0ee8a41fc442883cfa954f1b67f57c92be243c97aae5bd963f905c8c2e82e1dfebf17c4110fc6fddd004eda8fa09a98bdf6094f28ab5ef063b7d4
-3 1 2 \\x132d13315e707f02a9915f4da95176b4663c079f18bffa476a61e1c8bd5cbd0fa9240a5ace43ea7d008e389e16b58216acfc0a91a0a306f54f41d641d72f8e09 364 \\x0399a3f3b9f9317bea40d65f0f821556777cf84cb81b2d1c4ba4b314d771f33ecf7b39efc8abf765f4ff23a28d6fce367263c1f442fb000c9ccfde9b92ba427e6b8375495d92c539c0c61c42831471853dda4030d123d7b16c0fcf9733e7b92411f7d92819a6cd5cb5c4e9b3cfd535308bc41c236535bd6642b3e3c527a32f53 \\xfa1bb030624f246c6bdd844e0cacbe412c1264f56b43ea902c0de8fef78e241bb8851b9982592cd79e95fe03147c45a6137aa6cb6212ed77c3c34dfe9fec2d5b \\x00000001000000016f5dcfe9242c6d81b04a637c4f683b14013b111a69113114873c6dffc5cea2523336e3818c7ce3d0dca1d9880397bb47ffefbf1d0fa0a28726908229394ea3403f3c0e510f8b8d218d087b02bb0357b6992549432276e925517d229d8438e67230f63b309b1cd8e0bdc33ab05a7030e363f6d8d9f0411482433760fda163f9fa
-4 1 3 \\xb546608b00cca93a14613f1ba9433f4971606bf8739cc14aaca0156509af3ef5de5806f8d9a6a170f4043dc99712171a0388ac079c74bd7552a6a44b523ed302 364 \\x891717d560782516b0e53039dcce902061c14217e0b0d1bb1c674aead518e8a8a27db3f6409fba7369131a918e6d7c9a2816e510c121456ff57fb328414d3d4ed656ed42afb6ca1225a7d3f4943aef4971da913f755b6b49deb4bea8599d371a4fba7daaec1f805bf713463e948653d8234988ac63de9a05a2caa198ed10a98c \\x04d64041888c2605d83d2bdfe5b27f9ab626e70feea4174167bead984e75299050cdf948e6243bb83c26c70b556f205bbfeccc2e4ca001c5f00025a4c208654e \\x0000000100000001b557915fa19a0de7e6fea0a1390e7f8fd8ae0cbc65c958b51ade7e992e26aa5f2693ee8a4bdb4d8b1486149796f7f6e07fc8314ac580c3a116536df04647dbdf51b97c6c191a6ed617ca6326b46f94a1a59906b948fbafd3faa3ad26a9af63c5b1aed88af5d244c54c98e5881fdb941f3a23fad582c7c1654976bf38cd452151
-5 1 4 \\x1fe2ee3f053bfbeda25b7acc61a5367a84db2c8c0e0686ee6f7637949f5271ec91fca762d19d04aa75e52ed7d8955d900bf685eb726b4f953707e1867dcfe00e 364 \\xb420691ab9e489317197bfa8ca759c65ba1104250a74d7f1da0da1c97975227645f943d146b5f93031e919c10101ffc6626298ba92654e750647fe41a57bf2f60bcbe64a6ee63f234d27672023ee75904f94501aa88fddab28fba8ea78fbf7ff5a6c4294903af54fc1a3f95d8af07d624cc6915f9ecc9ebac6e17a910cd79049 \\x27eecf0dc3854aa5cfe681277df01da9ba4de2c2136b2a0d0a842474f62699a99aa34aae957dfafa3a896a6ff98b9db0f3ff5cdfb603144d727aec9edc5723d1 \\x000000010000000136efa206c6c0a3c6f084b336a1244bdbc1a5c3628e4a528d704a4358e0a4519e17a7c563210600608deb860ce07af623a870ddcc39e168e6838049d7f4b7339dc5e8981213cfd4ea9ff33ca0616dad1dc4f580f302d89d0a7287a988924b58e814fbf091be8ee792470f49e94ea6271f776bb1f90bbba91e2f27343d3d78658a
-6 1 5 \\xbf7415486b544e8a0b41a2c6fd766c0eb5196406b0aa5a1c8e6461474e4885b1a0b44448040593c00ea52a7366b2cd0d96d1e6bb52a6b32fd9f7f112f5169b08 364 \\x40ca2342d40fb89b2e60154cae37e7f1fed21ab0271c78e7ed14d662ff8b42e94b5335830252f8fd8d44f2fdad1a5a9a9b53c38a9312ef06aed8ca28a5f3af145b3847f6dcf18c4a1ac151e2bde09f929dd868aee155ef59fecf8076de0675fe3427c60346f93f3b7ed11bb1b6ad59d803d68bff368d59640336d1e7a61d3b96 \\x6ba172edc2704115ec3e4c42f0159c931acf8f6f2867329b70462c0d33689983517918b8107d2961d54a10b3534f429ae7990a2ba010d12ad472e02477e24a7e \\x0000000100000001430d44473da6bfd141ecc9ecce15105e5f4b53a8730a7e2476a735c28e3395d3395e589fa26829529eb5aae9f001bbdfaa1eb7c6f5b652f923fb3916e4a4726f86d86007816de120a867bf8969ee5701ebae35feb940a5c1bb9106b27ed9ba46b45e1c7c2b2343f515ff31a5312b93ea36ab2a9cb9367cbcc95ae8b3be38b390
-7 1 6 \\x0ab4db1961bda6a58067d2cfecc0b874369a62265e22e0008142ef16a95c90393c05b479f1694586e08e11bb888026493e70bfba1881e3d311e48775e9585d0b 364 \\x0cb44948e661f8db43dc1d285a6c7d98d62336fcde072250b44af359bd65e9bc2c3ed48448d46f9de94782057a9cbf0b9011cf8d03f0427a5ed25e9d6b25bc1711b2ade64dcbe1e2f376e1b05e5e22b386ec0d5a841ce646599a408c0120944b48cd436dfc773bb31c8434b57b1b869243d25ca9673f798e6dcc42711eecd9cc \\x83985d6a978715a8e7ce6977cc72f6e2c6e902643a131df12e42d432aed77be5c1072688d5a9720e8eb55c8e92f3ac7780519044b38e55aa158a5e6a98742bd5 \\x000000010000000197f2371b77cd6445fe366e58a87c0ea8d1bf64a6d3a2483f0a14ffa834dc2cbab4fa86876d4010e91ad1cd36b2806d6acd636e7c895b93d1604eacbda7301c08fd265adc2e1225ca4ccc119b0819c2e8a80a4027744b2e7a3a9baeb0b8ba578fcff96edc8348bec61a386a0ef91173138952f1d9d105b34ce8935f51e2951966
-8 1 7 \\x7fed579fa6e88eb03cdb6be9f7a84402f7c10fd55d0be068269b7b3d485eba4741fd14a55a974fe5eaef4c0f6a08b8cf940c85519b87f1c518e59bbb70028501 364 \\x6ce047ad4e0ccf0a7715472593983983064ab8e9b0b8cf966cd5a973f6f549b79805b60be570ef052e8b4588dbc37685f2ac02a40a586eef0082be43e23cce7f571a9a901032faa519884811442f8295164fa2109bfae76a93b69cfb26a3ff9852f07656b212ee53147414467ab1310b38a3a1456b82f695bcce4bb6d715af05 \\xb64f38a3928e5b7a0673505dc80875e07b68aab6db39d3b343a675968363337df5fbaf31fef7bed55cd59c2e26629b8ed5a117600801f3f09c315bb73094355b \\x0000000100000001aa3cbd8d54034d2cad49f5c309883e909223fa6877da2309e5f6f37e4a0ff25fcf381cfc4c869b9a2d07913c45abd66285560643f657297d1b3636d6da50c11e008787a70c2bc3215c4275b332379e33e581290a554b0b58ee0930a1fe4e6b097007723530d74365b579760e2ec49c035d233b37ca8f63c828a8aab1d7676d64
-9 1 8 \\xa3795c125b8b0e04f34c88afa0e7bce7daacb4ed67010602cb814dabb90b2e6b765e3795c5f429e665ec23aec9cf214f77e5043e7ba76bdfd78615c29cde1107 364 \\xa4aaa73e2850a54d33dfa9568cbbbfcf481aa22e2c6167865564bfb4e00d110819c77e59b59d1ab882e5c7a89ad7347dee6eb6e157c85c6f7fe183d4488dc66779291c9987c042f3cf609e7d2606b7862513cfc80da9d874b56b0d7c45bb4728078cfb336e7e613af613829418589a746035f2d98689ee72d3b4181f364ff3ed \\x982df3d5d7b794ee880dd30fef58dec13ec6a12a07a6dfb2f6ff5e8b3296ffad0b93abbba1d2cea56c13589d8d9259712acbb7e797f6081ff5132abf3aecd47b \\x0000000100000001543181e26ac8e091444d8bc02969d3fccc8d81579fbe70a63106b755d9887bc9b91ae9a5b923d202f29e425dd22a528608b2d2f9309b425400518d1ccdb31368921397785abc7a3ac6706f267799bdf6e58b7f3db9dc4d94e467dfa36b9ee6fc8f0a9668bd71075a11d9e0609ac9a429d5e4ff2868d192d686cea32fcd127172
-10 1 9 \\xef27efb296cccdb2ffbc32c2f1bb645e5e4bf0c55ab76ccf7d8019f5ac844b4004e005fe87ae2b8eef2319fa31825fd6cb2fe74e0cdc9ced6ef31cc06558d007 264 \\xa035bc86a0dca9e3471d80eef35a84131b5e6ed4924ccab23d0b0852832778e44fa9bb8b3e096c9b963da5d7939a21eefb63dee37e5319c1c06f9c929db05885ef3f9e897e08fd96e59f889e59d39031d2175f1cf9db8c364024e264921520adc6245adbca9e2b345805833866db2bdd1d2040bbed1f30c40aa1f55ff7a9cfb4 \\xd0035f8b2805eda1b054ea96b75d29af29ff501f4f0d204845b33ead5d075102997622043014cd8b3c912f1c90ba9e61149853573b50e7a5f2f6338fe73abd6c \\x000000010000000158e47f7033fd6ac4e8f96751ad96692032ead60d10f3798867a1d4f0bf773f8e9b75df7daaa5057709724448ff789e18bd8b453f824c3f06c7653f5500636554363204e2a329db6539075bcbe659cf2d5bd7772d52d2297a0f44b1de1e8399e45657daa6f7e0886e77a5e588aac2c513acb3ec99ef8a08629548da21600216bf
-11 1 10 \\x718831fcefdc74725643fdac28124fcdfaf0450173461861df94324d9c94466fd7b927edc72c3f847630179d374306b03183057ce431436779dba2c3d660f905 264 \\xb44e0e2d18fae27afb3abee4b4e4999f52bc371b15eebea2abc4c79f8c2109610a285c6ecc1a7b5f7032e53f87f7acf2350228eb18a29529fd4e9a061a0072447391a9a52360c791b017c19b05e4352532ca16e2a9857ea3fccbddacc57b4329609b4fc30a9d17a00261a17409d694076912e90e23badcf523c8be48226ff2d9 \\x55d3be3aa0de5da8d02e7059790b7976bb8e90b9cf361dc52a2209f7f0f941b18898adc2e39317419a1e7cb7673b381057a3e3b396d80b4ecbb237d69ee7a3f2 \\x00000001000000016b5fe6d30ca464590b836c5e4db15e12a0a94b5ecca12b655924e7a3c4e5c87ce4a373759434d2ff573d11562e2db33faacf670415d56d5e28ed68111c9724c4aee92168fa3ada31220984fd66ec5d4e2173f1714c71244d3eb4d105c2854bdaeed0b4041c6d64b6912b497a25823f2c7018f5f8c574f855b16521906ffa6922
-12 1 11 \\x2fb70b8ebab9e9fb1a407ec4f3e6fe1f8c6bd79c06e35810d4aad9d4c8e5f0c142d075e5135ed9acd2cb2af4028b5450396588d2cb452ce70635727ea10dbd0e 264 \\x7a6360fc08989948117884db598296109733b5fc4fc7462070fad7b69cc4a65f3d46fe51a3f176ad57d7dbc08c7e1422e30cffa381072a255dacbcb9c96cf071dfba983966c86b11756c405272eb08685136c8c493ffcef3c6c5fb855ca112438ef3841ca3f085198e2d80a0410336bea41084c93b436848e06cf8a70d6c1537 \\xe328a690f40b25d4fa3d00d0cb1ced96334f03e71f17ce3176f93b3e29a2d05dde576a12b2fb4b95c0481101920f80626f00c36b6569337a2332f3cf4fa68f3f \\x0000000100000001aba928c1e9621e6613f9f3ae95e75400319952d5abd0a5551e3ee4697c43e9bba5a8df8552e4075702527fe143b30bdd231c39bc2abf2aca8843e630dfe7fcf19ee7d85ceaf0a6446c43fcd9b0d4da7e97ae2a7ff6354d68ba9616a2fc1e0e7afd7535657f60b848e402ecbb01e282fd8940588f035a59b27f6cbc1d2960f008
-13 2 0 \\xd2efc0cea68967aa53d4d2405b054a9ede7ef545af3607e466ea42fa92d3f63f2b51326f6aaa56042ad247cf9651e4ca464d3fbe05f98f019c6475bd3aec7c04 264 \\x82f15b4d16df2e7c8cb21bd98863605f165984a6fb2e96d70bc44aa713c9362b2ddccc6326c7f01f3644db65f0dbf40a6aefdcaca3276c07b129920738e1db60194f713917777701d0de6b49fe4c778978f10544b4a0edeb9f6db4df6f9b13edc967be563de9130901861a90b1df2c816e8bce7773ff76698e087ed13a599892 \\xa9933d4589af8379feb525e44188ee6e43f0312ee9ce6925130fb1ad7c7162521ffe29390c409bc81a331bc1b73ae46c4b04978a7e0b42d15bc3539f27455273 \\x0000000100000001a4f10bae695ea2b01b6cfdb45edf3de8ac999e2afb3d781181cfba47a3c091781f324b8c55b4a740f7d821636adc91d93f8c7d112b255a21d1df64b216bfa5b843d575215dd235fe2a4350b70e42d913fa2fee63ef8057fbb80591b5e868d8806d74f5909d8e8a7766f3e86afbb54c4d29ff0aa92b4632b25ae37c9168f2b10f
-14 2 1 \\x017871874bb19b7b407974c69aaf4b9b496edeee1d71faaee4349e52443148560c4939281c9bd641989abce8f3b4c54e91bd42c705cef623d018e3e9a9b78501 264 \\x0d3ddeee9902788081310aff2de9b478fea9251af358bf44cf443108989e0d487aaddcc5f09753c7e4cda8b5c57bd2bb1103bf5f752f154a680a9f5b1b41b69c75ba8a67793b0b8bc224f6f785c7f08af78152105034248189b36733f126ee6f95968062e187eaf0e6721eb1375cfd5903ad7353dea51193337a6d1bc04e7278 \\x476b98317908f6e5024059650e26f509ff259a90055729a273db84218dafb00e57011994c8a0ece12b5aac23f75805c20b8ec560d9da619b922f231f676c9812 \\x0000000100000001be8537069635761baa92774feafcacc86169297a178786970dff27da66da3a7261393160fd316a3214da9fa4b91b5a30cbacbc9c6bfaa3e4bef423509a7c45362ac8c1b372b76293c1842bf3bba2b55fa91a7e2cbad94e40e8b899d32561831a28f10bc8d933a01fdb671e02fc4d5d2f911d09cad923475825a2ad3eb2d44f60
-15 2 2 \\xdd71a7e71fc17409ea527ea02cd0120801186d4d8b435c740b526b1e2f5fe14eba8b93726305a444941b3002d971c43d6730b8698234b57f0e9758dde4e1af00 264 \\x4186ea2ef92c29aa84e45be2f7e6c739f9e54881f3e686b24b1110fac6cf26f32d1c4d6f1772ff4f245e3084445e0f5f2939547d151b827b61c18f79b5fed1c176efd7d970b3908a1b6177ab44a06ec6dd07aa20008f1bfb8a010c175e8e8128d46ad9b7e27a81da3919d8ada5fc5fd0f342680dbfa0bc0aad96b052f6e392ac \\xe525c5ffe6c8ddbff7ad00f11b2435a21dc7dad9f27f0430897c1a46a808f9a2d9a4f927337370b6623c1595a694a5e21aec46a75cf0ad7a0e969667d3c8bc0d \\x0000000100000001021551474850876d72e2f8c924a64e9f13db798b90353d81a3a210eb02132fff40c2ccb3eb24d38c21c5dd06f5a8829f595d4b7e35bb484b899c439b69cabc63138c8c28c457661c6a355c1cecd5460678eb4110f7f83ebcc4a91f5cf61df1765b63fd59328ae345ca9010316e2efd6bedf35a4e7f3b06b0c3e5b9aebef3b55a
-16 2 3 \\xa0a11daac4ddf3823249fb5cdf80068a8990f626c965c8741172c3e4af959900569a643f0b429ea8c93b30181374be20d63ee974a08b596188f8cc14857a4705 264 \\x3b8e2e8300fda57fb7bbd99a4856553e22fa140e60197c3de2917b0e51ceed4485c7a2abbc060b7bc80c9faa6ade54782a826ec48f87fbd025ccc42de24ed878aa5f3d80f190e7483a649a8b29abc03c5fe3dd9787f9aa38e50a89a46b12dad2c5d2901537d6933c9510c61b3a21a7615beb79d5eba713fe63f29e3011bcf4ad \\x2d0ad0da6e0a37c8c28ae41fda8f442f01b8a0505c2c476a1334549a682e3ad794c8a40c6c45dd4eee09580949c7630f87b1d6cb2c193f1930d7ae229ac29b82 \\x0000000100000001a4c42269c402c8c346b4fe05ea97a6df23d6aa577a56887e5f2430874ee4ce0d7398f282d92db2741506d0fc02c1cc73eccbe32c41fd965f8443efec6f63a6e1dae20b437d4a28d49bd720aa2d61104e5da2e96102a63e042d9b6cf5642d5486787d948f64a6282c8fcff725bb511dcbab0e00d2cf3e0c5f953a63a5d45cc8a2
-17 2 4 \\xe79fd588e29aa3b6d66a04e2088fa4ffcda1e18290ef09d83d90baf39d8a125aee6214104ca1149e5058c0b09f58a884dd92ca9309fd47608c91ba6df8602802 264 \\x98c2dba37c613c40ed854d4762bf8b165a18224a63cf74442cf2a4d061c66489cd3b51558c076605bdb1992a1fcb02af10964c5a3b3c0ed4a9c9638f0fcaca73a8dcdfe31e4423e79aea9a384436f50faae72fc3185a2d8fbeb37f12d6f521d75bc622431280c1a126056afdd86daf56836b57f38190d94a699cc7a1f026af4e \\x7dd460452d34a201956d44903d036898209a3d56a6a367c2a3a0690e73e416612451a716dce325e46b7895208ae27f4461d34926feaa22a17825f39576463b68 \\x000000010000000109e77072ed160610ad4f538a4778fabff8893cff88a8cf572342ce63d7a0513863e12d3c4484b744e3a4d2bc48b891f20645ef43ac404323315ec6ed7acdd09e25b5d1d4142641d56bbad51dc73aab1a165471186e8a292a7695dbf6af0aad62480c00934b6121fb7eb3530a46fd2bae91a327824fe18ab3e951e4ea5d2b0dfa
-18 2 5 \\x4aecd4642089723fdd008ee9df9d9daeb8668c61f3233178eb0390bcdf061cd6d02139062de4f10cc2b4d10f3520ffde29886f9d6532f842a362558e8583ff05 264 \\x8aca85daec10d3629bef831f0532ad27eea45ae43384f21d2458e6d46c1992596fe10a4520b251edefbe511a53c7768fb07ada48bd1fdf6f82faa276a4ca52908199133fe5b1e0acb0a64a944e22d3e75bcece70144a7dca86df8cf315a51b72d2763a1f1a562bcddffad9367593b5150dd2042695169fb3412a0e53d6e21184 \\x70cf619ae3d0f6c3b3f8a3d1ce5821d5bd098e655856075703a050a0cca5555b3b76b1dfe54035f9beeeeea6b01864dd31c30236eeb45997f5b02736405f944d \\x0000000100000001297abd9f95bbb48a94798eb3ce99f2ac863a678d99a038c2edd6cc066a45d24801469c021ca9ca8664c5a365fd5802efd16d2af8978e372ca4573f1248a0511c7f9ab86081e9c4978d495eb9b0295ae08e5a40799acd6038acfb349636a01adda50397ef0d96c0d431b03dbf4b7980240d999b73ca082c34557090aa36f2f369
-19 2 6 \\x163b3c0eddab72c33a7caeb653749c650e904b0e4611ae3acfe48f47f7e14b60778481c4e7928951c1fa74606306a7b1f71f19a4944578adab9786a4ab1be304 264 \\x6fd3e829f4c5c174497b6fb61396dd91e72bf52661d407d8ad14eb15efdccca38a9051a3eeab4e7a6045089ea9aea6905fb89400dc31efa4b55c67e409be7ec665736bda0cc66bf21955817f40681be5175ec99b8a679c56ec1c50eb7390f3a40d46b589f646a1fd5fd703df61c70f89d0c37798c6fcbeb56fbbc41b09fe40a6 \\xb74b6351d199bd83472724bea7cc23762416a0e96fa7cbee8579015d0d958927cbcd1b92acf632dc2e366cc19b06265fb432198f0b5d91038432c94263d452b4 \\x0000000100000001675c508497f62a26b95d4cf4600c2a078330234adb4b9fb168fe9667d5658a202b3240ef87bd040469e895fa760a57e3689ba74d86219e10ef07b02e825f237ae34b1918c5e6386681d58a8aeebef74a28d7c17639847e1a4b7dc340c2183dba09896266aeab9a67f531c70c5ac6e9de298bc66098645593622bf3e79066fc02
-20 2 7 \\xc103d225cedce9a665234503d9cf69cd2c482b8d93c46f1f7785584848070e1f65508341be2cb12ffe857703ac380a7e40b2391af7b9fb7e018f680624f88903 264 \\x924f5fbbaa96298f375a2b36565f361d09f932c0ea124dfc17e6733ddc8d89eecac1b7b2b769ea47a7f6ec4b8c79dc56481371ff827f6951e90747da22bea45313808bf123d395438fb87b2096cc48a23c5e8ae5ea394be4ee39fbcd4ff6135ac64a7c87ff412ed8f7b586512443a1917b06ae639487884ee09bdeeecab69613 \\x05664b1c4c85563fe9cc62540c51229e256993746b117534ade242601b2653e78cc0fb9a3d36e49191a227d0686895c86108506b0d75cfecd67363362b1b2ae9 \\x0000000100000001ae5f55eb36405ea38c380db40be43b3706331211fa05779a9e774e8cdb923e522a4c5f33174a34566d06bdbbea10c93e3ef18c79ca815ff6b03ef36bc42aa247dd77880cb8d19d6b02db87c0a5dc2b26e0cd29ba1267038747f2346d5c2dec8ab56fc3a27fcefb560bd082d3e85b1a5afc32d16b9d9b4c85c3a9dc943910511a
-21 2 8 \\x2ec87f6019de0a198f6bdc8265729887c360f5d675ca0055e2c0fe13a6a334d103a8c341cd0923aa8ec40fa3215d54bf9adc426e855b5cda81f5f2ffb5d67603 264 \\x21ee9fbf5fe880141fc29ce330fbf5b3038a564844c7cf9ec455973d808aa9144971dd5e6ddd6378c8c745e429bd6fd9fe07b88dce91984141e46778bbb3ae6c3db6c259ababc2bed1a4e7a9955112c6368c545a31fd8809bed08e20192fb4efa768fc53d16b2574042d0b55c11c0480b8028ecf5112cef123a97c9d421f644f \\xa8e5eca24acc1e9bbe565b700d8580f34ca078a7587c9b4b998901108c7b354195b3288ce3650e9035a4ac56a8d4d5a71f179e526b9063a740717b287e3ab83e \\x00000001000000012e642cc9151d8fc344aa2be05b80dbd900ff389cc1c82fac4f345378b96e18dec73addfa54e902c3f65d10bfe7a1cb1b406c6be60c250124a3eead59fd58ec34bc561c18f2f1d7ffa9d91d6a892c7825c35e14a47db6471fb5f21d9680b23bcf49f5d9a48f8c0ba9224db3939435ffa2c58d802a2d4297a1c0ae0f7900be52ce
-22 2 9 \\x0b5a73ba8d2819fe1ca81a6652f7d1bc70fc37f9c2038ac6c33b0c2b597002e4e842e955d17511cda77bc28cbbd9662302cad7d0fcf539607d2caad321212f09 264 \\x9dbad097aaf21d3f8939aa3cf16dd0d5365c610af5d6e1b9b9447f341799df876b7f101e0f5839d117f7f27b1b01242d9ed3fc579c17a5916d2d6c41ffe7092becc4317a11522bb3d84613309fcaefde37a45b278d69aafa56d6eb8d9a30270cf52999ad38ed3c1b962f9784222c003257f5ff72232b3afd45973b1f55b52b66 \\x49676dbe51eb7d1baa971c83b0a04b70221a7a537c52677240458604c11958b078d9fa25b7abcaceecc7b2518c379395c6b57e3de34862792b6227d7f436adb1 \\x00000001000000011a3fbfe882ce4e34ace05195fa619dbe87dc250c03e23f57cfd34132ae587bc08ac2fc82ea31eb7122da19e2fc8118a20e4f45c9e6d0e2faa40136e329a784aec6990bb654baaa819b5c5fbd5366fac110390c6b789473a00339ee9aacc5773d8a8112ddedcdc9b707b510dfd91ad4f81fc9217e9e701ce7fb7b89ed911523a9
-23 2 10 \\xfd92aba81adff23c71aafdd3899391f7c799964c94ddeb1e6cda565f0e0ddbb0cc361497324509104a2dcc222ab6068ff433aa27bb859f977cfb84516d932003 264 \\x7ae09fe8a12e220437f324a56bd30363ec6a75c314c73d4ddfa280e661065eb65f5f2e9475fc404c1da4617b5794b841b32172513d69526ab2151553bbd28d3bd611b710d80688d5d200804882ad42679a0e5c3046d6c4c20fb4ba612af6ceb2f2b979c7964e99bea30152986f18c13e39e9bbeec414960dcb8b1dd5547ebb64 \\x7f59ee4d8f8d4261b1ed75f199e5e3a08eadd8b971054dcaa16fb2c5489f35f5756af1402ec1679f77c5e9ac4005abd466ba361de02a70d2ce16c97d34280bcf \\x00000001000000010856d097676fc94d950a7936b9416e6f4c891a4d97ed7375b23c29c07d078b7e4e7b69d98a2db9035b2e04b1faf129ff0583af552cb46289f2120e7f42397fbd373e0b165708d26cc21f3e26cd9ac3b3c70c5bda4045c0eabf358b2f34397a657721184719546392d2725333d274394911f31128f20914f9ae205fd0ca67769f
-24 2 11 \\x4b1f2f7b8bd05c8f431a585a6c05b62ad6fdbb328459e6391bc8c9a42ace4d0202a74ba6f7acd534d226634abb8ae47a47a3d37f600e1a544ba7841c85e3c70e 264 \\x0e6f838c34916e38ac45dbeb203bc1f2ed6f699c7cfff074f4760771566bc122bc32bee299eae1a21632e64bdeaacbb07999e86bc78c6c7f87c8a7eb26ce161716503520165b3b4933b7c658abc72975355a3c04404d05d2de70f3208700c4687528fccd4ca274510980e05c03de83554d3231470515814534f5b80c76665235 \\x8358e7041474dfab6f843448117ee602761ed8fcdc102eb06cb9342cd1d36197c823eb3f28c5f1f67b6bce4337d1c4630aac0e3c6177337cece99d5f21ec80a4 \\x00000001000000016f86d5af3aaaaeea3ff993e0417e05d56020e60166766445e13aa76685afc5c0b0f45954a5929b90e32596aca2b910137a95d60e37b374e80826462907e48da7cee20bacc19491e9d5975fc6f6d870330d551ba5f7dc5a3aecc158acd721006d52cfb894dbd65150515fcb05c152fbd2a6b7585e218b87f52412343a79a75732
-25 2 12 \\x02b3b77015c737a0c916b6f17afeb3574b75496759c4e13fe3bb427e465026f01ef20d0143484a785b6e75bc7a2e4152c6e58d3fe322301212a727d9d923b501 264 \\xbef81865eeec5d32ec3c44721d8c7c2994cb91ab544f41c832b8dd36dbea517d435f6c2d94cc79b8e3ab0e5953b9667fd18d4d493744ce5af0dccabd69e829a7cc643057a754a3aa3b31cffe0e94fe2bba366e66c881a2f6835d2a107c9fb623f00100cd36e3749cdbb06021a3567f140927d713da378f7b0df799d03b122067 \\xe4a24fa2a349b602d59567169d502c8889cd5cd4456f4fac79fac2d38be7cdf2ee4ef6875afda1d08939705f3aed0e6c7dd328853632123b3a51429dc7fb6d30 \\x0000000100000001a57ae57b00699f37e9f4a49cd8e2c69174f63aa647aaa9e104bd4da20a6145a9d49a87bd4b368dd926f0ed0516bc9004c631858c3bd30411c16bdd4dadc7e64f99d6f4bbbb70160740074a2b39344dc276a760eda3373813c2e04878920299a5d86fc1abae255e6f6d269e69f5802eec3ae82dd027ece735e901177971ec04b0
-26 2 13 \\x49834e8827f71b186f0ff6f5c49e65c9c1336463acc9e25c0594c16f0e597e744f7248c16f890e31cd25c5d5ea2db89e6729eb9f5082a11ea4d6cacefd7a2a0c 264 \\x072ae67cd56ddc1bd46ac9290d8f5fc4020467d23e41008f79d541b6e698abcceb7cba0e5bb8463b7ff9e56fe7b23f297b2b107260675c626d37e40a7c31d9a3e47250f3f152f302901575506ed5e0345d5ce55585d31ad6cd8c244fb8d596c868d9039647ab388279e54c8de149eebc8767bccf44add33ad8d673cd10521ea6 \\x19f13563bd8a01c3bc429aa451f4e0330e155300d81b5c0b22e3a66aed09509e0049ec1c8b716403a9e518d4439e83c1b66ba271f82a7a9156c65436b14ac9f9 \\x000000010000000183d11323b86ce90818c899d4fd13757a95a30e24a3f6032a2d51c5608e5734b787e82fd0f52dac7dd950bb91bfbff2ae46fcdf405178015ca794ee65d6438f712a089ec97d2dad8d7e7fcf8997a520b75470b281ae01c541d65d8cb6153131f1c2f34e766762ddbaf43aca6833420d23f7d20f6889d8004c154ba6a8b62718a2
-27 2 14 \\xa183b1cc525db141919afa520a1cde9ac1fa2b369996f0943404d9d18e5ebb7d23f535153545a0a238ac9f175d08a860f1ae6f36cd203e06271276dcbde1160c 264 \\xb97a30aba26139a91a63dbb6a87cbba29433f546e529ae48601f6be15d4f634a41000467e509611d4a5025ce070eccd851844cd913e0208770e06156a0c96842dbe7ea40f793e7e41e6966f5cc2379314d81607fae56dbefb23532e52fec38174da57b369c9dd9e4b917064201dccaa99d2bc180d16ab2dd161cfc85dfe60226 \\x686f1715b29fcc677b24c0ec9f4cf15249fb004fc73f97b5817827ad8b023e503a25b2eb827b1455284a1445f646aef1aa0e8651f41839d7c84d12a1183b43c5 \\x0000000100000001813ab426e0d5ed6f60830628ee5132c5ad874a6ee40a628dfe4e3b7093a1a0be22da8896f02691f14f068ae9cb1c7b69833d31fd4f3d9b09c13cd14ae459af36b2f475249c87b52ee179fa6258c1bcbca1ad47c8f6d15c482097e1e37f75a774237c723f322a4f64268bf72ff85969fff432e9aad53ec5a3849f55ab03b8ad87
-28 2 15 \\xb7ca662746fde31ceba26a9a884744bbcb3ce3bc91338f0650dfef1e0d131500fa7e50053516d7aedd859460b63b3c050b265d3d21e8626ff3a32c9031a2b407 264 \\x30b81601ec6080f5e05f7cd67562f3fe9ce5687b5ad1d070a60c188d341bec921900fdd37624b1b98d13acdde325b95694c5a683b46d89421bd8826836dad1dc18d5b9a537ebe61d8fc949aab492af0c6deedc52baf8ff9f89bfd5643d94e1dc2d99721640eb1d50f62519c23240c87bdfb49c5261256c4528fb78c3e5a2f9d4 \\x9472b4da13d2f6109cc9a0efb9d6f668fb7188b91bd668f3119ee1efcb534cf56400e2f9e604b85b616242f6169c6d9edf35b298c708017108d950168afcdbca \\x0000000100000001a2a822a2343a24b09bda177813a8abc2bd5bce977e7c306b0dfc474bf613e95e3d76d05c5213892d88878397380b2eec39c14224a07cee126b69fd7c54acf418fe1afde82e811bad59ae6ee621bf233d387976219a77be8fdfacd9fbdbcea561b87d5991426655aa7c33c21b89faca1fe636c03e363133ca9e8ed33115914588
-29 2 16 \\x1fcb8f9d9b9deafc3c57d5fa8d4b0a2e31013cdf96ca293d3da097edc5eb905ddc9d2124407d05ebfeeffee44e5faecda19a00e181fe31c44883476496c0e00b 264 \\x4785401a0862d8b2e1a826a921f02bd99aafe4b49c774efdd291bd0aa8f5bd4c1234a71bfc7d3766b7f2b2b7240c3459b126f0ea268a06a492bdfad3a1c78dda9ceb3ce2c57eabebddec6e2b7f7868a03c38ea9fb960c445919f922ea77293244bb7807ca219a30d7667a8fc57ef8b0632d434fb65dc7ef669075ad32455353e \\x8af26b24d8b75e84e74563a86e4ed5b901bebf1c957ca948c99f84954716cb8446c6e7fa15513f7e0114e1e50c8d664762218740e2c1d2da9c26b2825fe8a5fe \\x00000001000000014ff0228750e3a387d155c146d62ae9ce3fc11be9dc17e6b50a3ee960a4a26bf4691216e536156ff8267029fd2dbe740674e4620e32638fc669078473f1000e15179a114f3fedb3988ba65cd03835eef247749ad3bd8f29ca1a66a82b5e8bb9395863946fe2b002007b04254f2e9c22ec93f7338ab28bbea682bd638aebf334d0
-30 2 17 \\xa62d41cebf78f147293da0b62bff7be8e8270eb4643de89ea8884e42d37764636506e776eaf15d06287719e98c9500c25cb8dcc16093bee5145f1a4006949a05 264 \\xa8be262e9dac9cc936e0e68b1bc0d2a639d87027ecb8777434a45c186f8d33d92594f5f958e3bfcbb76814e3148bf63a5648d684cd0d096c93da51359c631ae9228480a89a1665714680622170df475ddaf2deb81b6f8fdbbeeea187d12e77e58c6bb9191579a738ba9e78b62e8c8adda1ed2140effdf292908a44764321c0f3 \\x6195721d2a632d8ee8354d7093541f1d8257ae0662c192b226ebce85b149e82c7bd0a8da4f52e2da45e04163e341fe3be36b844695ea5151a62bad68a4c5b3fc \\x0000000100000001296325664fb139bc970b7460a13e24a0f919d2e4ec22fd0d8cfdb2d5ee7e8f09e5a6deeb1d8702d98e694fd898db97223e0523e015735bbae3f483e6f488e6289ed7a29cc29331c843442d29b71e80b80107bd7bdec5547c3666e1f30c7bdc0865b8a2f07105654ebf4d9d0405fe6bbba75642f659f54e3d7ee4c39a772fb502
-31 2 18 \\x5068ad0ae89dc8525cff4208001cd842d65a7578d2375e04bf793fc4a5ac272b454d0c3e4a16c91d5003eb08106f2b8d2fb45ca64e32559d2d3cb07bd2c55602 264 \\xaaaf39a04a7f3c6758f2f0fe7e669e27f2d9ab53293ec371db052b85b6090bcbd3b04b768036788eb99055c5e771c27912be6533e4e94c4a668e860850d7fbe42327dbed90937dd606e2653ef8c6785d3cf43f9e7a3ea1dbd599338e6aa8572f95c6803069141b6f0c4aef98ffc463febc6d8b9c6700f13619ab749d0a6e96fd \\xadf13ce5f7bff4a1232bd76755bc91969688a4e3cb9f8864fd878ca32468bf9d3b1b8039c7d75efd2500f98f193e817481deda71814905ee907cf024de0e26f0 \\x00000001000000012f946fd20a6fc7587c6372c7204cb68f06a801409d6afef21936535090c5b9b9bc77956a1949a386795d0ba9d039b65e0cf3eb3115211b27c0898639897c9a5ce9cc9a6f325769c5e10fc6687f0319036a32510dd4ce81b151ade6510f3d0f96d4536f7af42d549f1e87b3ddd1080c2103dd91ff11eb1ecaca2e3aad6ef02a3e
-32 2 19 \\xd115472ec4f38de85c5232649ab704ab2c25078a59db5282575e98c03f7239c564be3c41d7a5ad38663d14dd40563450b04f019c9072e3ed65457fb7b90de407 264 \\x61cb0e0e129ea6bae520c8dfe9650bd9dbd0234ab5af143b7ef9a319e84ad9af45a3d055f7a81648af9ea3bd5b3e1b99176fd38c136a6f31e1633aa334e57bca2f43b37a36c3cc87cd8f0b1b039f681c192c3e132fb54c811f16d2366795ba738476e13487e43ee78e5cc52809f00baa7eaef822d6a2d84da0aba48209fd13bd \\x08841aadeecb80099cfad8d6f075dd14f91a9cca32c9771b3634f2473b6b5fd45aeca98e1b44335909056f4203a857f2a5c44cea4a7cb2d0a3a5d6c9e18d0411 \\x000000010000000138e43f4091cb916f65ccb67df5f4ce9f021692723dcfd394dd0d875a87602d0744de0810c13d4a0459e61d2a8326fed6ee535aae8b06d1853a2d3f0f67bd884c3be7b548fe90d8aae1281aa6df6b77bdfe8263d6bea961757e4c2610d32ebb72deabba7276bd47f8fe9dc03bb1029e69cb5dfc2d849ab5bdbe80289210667685
-33 2 20 \\x5adbf7e75200520caaa5730f243b2867b0a68dce77e1c04f4ab166f670bbf14b3f02e56d0cb98ea7f55aa63134df61bb8daee67f366b2568495aaaeacbe4ab02 264 \\x06e9f3a11c49626257d85890718dc63765204b59c25da14c77b37f87aa8248516dfb040a3e25751c289ab65f0f12a541d138b86183aa989cf59ea20447ae8f66d08042c1163db6f6afe69d271c44f2e0d01a656e1f68aa56c6daeae4d9861a76465ad5e1c9da571e03412e890744f09b13b811e035cfde1419a083a6a0c49e84 \\x775b81bfec7edf5841d08ec9990e3c132b23713f5503d8a1399371df858301beff4d67938d283ffcf82dd696a55131d1a2bb16c7b0427acd2ca1731735848653 \\x00000001000000010ac6a1987653cb085987c9b8d21b1da9cb89ddd3d711c71d7092da5f1fcb7ec9a66057348ee291b72ca5f5d975a9489dc21ee3a917ae7012775434bb5a20be9d7f82cea15114adb1f19048baed2c95d937a914aaf7a6214e40aacfc1b07dd48f44cd2ec2ab8fffae408670b2e66ec71b304bdd75f1610d20394edacf98debdd9
-34 2 21 \\xac83027d7ad2c45a16e1521cae8af9d11d78a6da90be829e1da663ade3a7668ca83812557fab8db5c260c47288a2b699ba6bfedb6c28b82fd848eedac7ec110b 264 \\xc1a30c8ddf044f1a9c411ef9225c8edecf6e68cec1b47a9d60da744c9b29e9a591900d077427f12fe03453117912974928a09d0c3bddf8d1bd2c042018993fd3e97919e585bdd0c81434d472710e4787a7c48e85ebe85fcd69dd4ba6f26d302cc669f0b4489693eff040da525f30f26a254c6056f0662c59af17e24f41926acc \\xbafaa6bd023431ff3fabcc17ea1148fbcfe0bbf6f8b2d4a7c33d6a0e8cfd83227ef28f65929f3bf3e487c7016887c8b4a53dd428cb62c518732769ef02f48e06 \\x0000000100000001124b4df367e3f5e291b216048c5367c9e94eb570605c51040f23901743ccff5633d267dca6a6c2a7b0cc8db5ba559818dfefa1a2ba985821d1fadb6fa689658597bbcedc2f54513b09b668d7a1d9dc474ca149c1b4040ea19cc3f8941c36efbc963b2d234913158b6a8cba99a6577106967f8fe2f861e9c7a41847975df719b7
-35 2 22 \\x035a3f3d59a34001fb94b5fe2511a0cd19fa058bf48c95e0fcbaba66a7844db7d0b4049759e1b26240d3bbbcc64619a76cfa552c5db2317a16be43ae85f8d301 264 \\x8909a97e91d79b0c6f196942eb59117586b12ffac5697ef15d732aa03f935b6b349a70b6399b5645e10791f91738de2984a3f4be2d2a78cc56ba06f6888ea2ffc0b5540b08b1f26702dd12c82e08895e2025904de2a7e607b4a09626b7f3c3cd113fb72fc9768fd6577f477aa1e0fb1c22082ace3ea82f97f8c63179d49c4fef \\xb4359af06a85f08d9abe4697758543fe9a921ad89ae91aeb1a53949436c145d8fc1260baf64ff5123f39ce116b65995ad9a5e021ee07b83b344190732497a459 \\x00000001000000016ee16bc9001312dc72de0ffef2027c4a78f1e63ae7b1188ac257c0161f5dae93a21a829fc8e0237b5ffe892f98be0659b040a20303802ad380883051626f3a1efd25148d7dfd4cb98963e6aafef837f49dce0ee112716684e18e50c3b39083c39676b8cb24eb27fe09a0cf3cb0db2fb73f080c44960db31987fa3f633d3b8d07
-36 2 23 \\x98b996a58c5207adce6b5e3f37efb9f08d0eccf254eecb7496dcde1f566fdf6b25fcc671111418737e5b510d0201bc450ddf50b4b253217118adeceeb9814d03 264 \\x228cc70198f2f61a4a1d35fb6c9c9b0c88b65be290d3e103cbf40a573ddf055b14531f752ac481d03148feeeceb46940ebb3ca6d1750974b3afdd9ae9e3881966ed4839155f083457acf94f0c6870352c7efe34796a392de6353b6afdc1924e5efb5be9e3e32dd328e92cab3ee7b584901d5ab6206e2114bebde6046cd4cab48 \\xc47324b605dc1324f0e2380497555d138e62afc43f4d2d243b410b2e1ad0f14de92e327b24babf497d4e89c1a456d99f2191455523f1d0ab9fcf3b0e5d269750 \\x00000001000000010f2f318875cb3d8fed3d67a1e2e7466811bf683475813e3a0186efa877d5fe7e77c4083cefe5ea1079a46f618977b5e6ed74883072d80ae2129ddbd78cb081fc009490915717d48b46f38f108d1735bbf405a84fcdef4217b2e225ddc68e4cb22f91a80de584ab58ffaaab0a2faf093dde13c6d41f05f6ae31fbd834c4f74589
-37 2 24 \\xbf1c7151ad4661556b1e492c0d0833d549483f0436a2dd0b3edb0c33061a55ec740ccc695a3501f0bf3a33feb73c2d5fea6275bcd883e4e2aa95b31eb92e9208 264 \\x348e5f23b69ecac984cb5117c6df7aa114926757a1d75559e821b70cad4f2548b3e456909403b20582c2048d4a864797c4e89e7b8ec7e38c6ec76fef6256b86a95d22f849ab08b4df1e5db02a6fdf0a5981b5e75023fb0bb271267994cb61948cf4c6a192209e6d553feaed0497eaaa20b96d50b7d7703673866018eda53590f \\x6c6b783599442a4f70098d8278a9e7b82c05253b23a9d69ef45b4b93f0f2ff6e6d7568f26fc56753274c0cabc05ac1bece8430f218f2ed13d5e14bf7a4b3303f \\x000000010000000173c6e3902d815d80366e8b111288fd4eeb18f76324339fd50577781b6d5dd589ac3c99722c0eab396e3bc1b7bfba0d20d85a2dfc723309e16d8c82e1e845555c51b8ecc4334362d17b7a6c496d20332521845bc1fff3e92adce7883695cc3ed9b5cb73a42cf3aa4de2cf8b130ae1a49ef04b250c53cd00dcb6d94e54b17feac1
-38 2 25 \\xae9a04edb11464e50f090d908d1076c70d7f395f54b9de61a1d5706e463b606dc5d7d4d3e46f87414462afe7dfa1c1a8f0d8d2c953d86ee2ffe6e55b0e335408 264 \\x30e18900390e6b8a2b060131510a7cb6f072f30a1b55a0034861e0f819644475959840a7c4cd01d9d78de3aaeecdacc23ddcd45062fe3e07d6c509dda2d4668bfaf7f3ebba8a56bd032d92f3b30d814f10821445dc364636a80148688e0d728337882f9ff140f46dfe2e92d15ba69a0cac1f225ed4e1d5e221b9467edcd9dd01 \\x84bddf115e18f9100c8b50dab77c8254ec70eacdcb84c0ebd5c610d8cce4c4b4b09d80b13059048e175c5e45d3a61acc7a02e1684d684c523b849141e3bd2b69 \\x000000010000000154e9d88ee94fc84165a926ce002020b4d80446c8167eec749d48632ebe35bd05f01a139ada1d949a080c5e691451b2b811489884ce1acb4255e53c0753abf3151e781829ba2a5906d45078a89ab81c134815c32ed3c46b74156e56b6fd3ad010a9cd3ca9a5f1a8de97e78e2e2427fbba6441be9e9f16a5ab8d06607f74ebdeff
-39 2 26 \\x1334e9d8829ed93c142c30bba8e469e3d94aa0b2b2cb3d5238025c1e379bb2cd00f8584a7f00aa5e962496024d497c55d24cbce3f22bcf0e441d42d06731b906 264 \\x611f900fb2fb36795a16afd6bab1365451fb2ed1e5220db6540e1a7aa1a6fe8098b568f011df2dfdb3b1c4d53df0aeda4510614bbec35c3b08c7f5d78e3f618390c970745f41db8e5cd03a424b06d3469e06706fd7eecc71764aaf3ba20c87a5924f99374fa74b266558f87234c7fc207765c4a24ad46303140a9a4298a0c4c2 \\x0b6988bb84bd0bdf5874cd5489d41911c26e4aad6944cea723b9369d40a7ccfa146c5499795f5f15d16b2d551e957ebdbf5845d1f6278c4c7542f2a188509c79 \\x00000001000000017b6b47e60bce706d37ff51443496518a5764054832f2fb371333e2b766354a97a49f2bfc82409d929015d52a1f42f7d02d0a3abeacf5c1e704c78826c41c29891834cedaf4376889aff893fc18050aae2f7006cb8ad96d82f3eb1b059f1a2845405294ec0e4fbb7881e772a0270e4b4dc2eab79fbf3a36af20fe19d0011bb673
-40 2 27 \\xbf1a5c4e0b6b6a20a374b959055362767392b38bae35354060fdcaac878751cbf1a4434d972ef94952db51e338fafa7f6d94de6fb73d0c106ea530451f779b0f 264 \\x30aa2673a9eeced79879de6f6826559ec18104423eff556b7b609d600e373f372e42f4a7d2a300e4d910f91f2c4395afe5ff995240c84222170eb548f04c00f785cc9b633f03c022091248613a5d520a713b913dbc025dc4e595ce2aba8b3810c7ed90276db977b7ad28058a90b4f96fb4293a42ba8ca5e1002f45c3e7cfa8d8 \\xe9d870fa4340f332fdb0c93ea5a9edaaaa2f13731baa4f6c5452c440c54b59b664bc1453c80e59541628016e254f476639e88576fe20e9be2c7f58b201e4b5f5 \\x0000000100000001aba8c847541022b46419faf7408e532d16267edd5182ba8ceced57186f7a78741229bf11990ce57e2719b264955bd2d8b1bf3186b48941f586bb6c5d5f6befc74eae5cd1c46cb62beebcf9fdd3b12306bb9004b2f1bda71fa8349d5ac5a56739702dca57ec704d9dbfb46957196584b1b9958eaca967a15ccb279b6d03a1f800
-41 2 28 \\x44ce310f9ba632c80374d2a0a259798e7fb312d85c3813e9874796f708921f69ad3fc898dd16e5dd0b3171e9de679ff2aecd8ae9a8b3d47bd1d15ff3b6ba620b 264 \\x11355c3c5f2863c76ff2398a65ea43bba70935db44cd29e1c4e15a7f0c733d86684f073bc900bb066ba824c0947b5b44529b3f78047687a288d46e90ea00fca3ae6facd124755f2aacfa2dad3902cbe1d0376db0783f46e001e53fdaf630bdf6fa1ab800399104ceff83f4c312f5523242b9152856391b39b255d9c15b81687c \\x69501ce4067327a88a40676d160b5aa3ee3451cc4cffb65707346b849b44c0e85fdb693e86edb0485c34c393bee3042e0652023a6b1da2cccec889aa0041b794 \\x00000001000000017be83730bdcd60e5f2540cb8e4c8b164c607a97b40c4eb446f3070588b0c02e5d3053612a09c04092a022458a3343674d599ae65a7a20f1fc0fd1e2f976e93d2478df6517a94b0e1ffe9e4e056e9d8bf5f7fe0bde3c8a44ff3469ca36cb1917d802373a6e141191188691080b1e9986602daf7d602e97523ffce53843abdf36c
-42 2 29 \\x3a3e5a84c16b13af76e500d839ed1037c59282875863ab731224e93e200b1c1dc1ecc8f5d830365ac17b723a25cd0bc4b4f1ebc669454626b3676ea9d2ba9d0e 264 \\x7c7efda399ed871156ec80a3ea69e914df5438e2ce7ccccad5866c8ee4d159b85aa8bc97a6dcb3cab492caeb4450eac8784a341124b8a1c543d77b90fd517a25e0583ee38efd9d8a87497096cf72d64165e525375ac905a0c7415897d3db55a67c564905fea492047a5dcccafd9213d9052ce5e9555868ee76e0b16b3cde99ae \\x1f33cb7480bb33b9b51476005ad70f90f85888dac7ff6ea131afea9a2191465df75e9d8121c9d5c7834eeb68310de3545e0c290170749c456e40341d7b8079ad \\x000000010000000153bc1c3f8de50454baca08fe39ddd47384d44b7c68d5dc97c7b6680d0ae1a0af4f9f8cb04aa7a04e558e20684db4bd489615eb0dde0929a49df37e43096f1733149fc00cd4f486e927a91f6f7162ef207913f46b6e77b91faefc84ee85a6ca2d200576800b4ac20aa24b6cf39ad610ce5cbb0d54e8f052b652dd997e9841311c
-43 2 30 \\x2f0e5f0454e79b2cfc6da7c3530ae95c4d487edeac293ee540ce56fa655012a4e68a24b6c342ea46a714d7b85150d4a3b0780fa84e9641220a31bfdc43f1e10a 264 \\x4d1fd3de1b4cedee8654234e8ad7c552f42f482ba467c63a6ec6cf4fef0e2dcf7b311e6d03306d823a1ef8cde7e3250d022ec7980293b21c633cf17f72607794130150ebff798d0e4a7db0bd0ec913f686f3c9f27377a5bc8ea225746122a74fcb236654d566a376486749c16e3f9fb934a6b7a269f4fb714054b504f553b5c6 \\x95287bd29182eddb23c7d4087110cb71c1887fdd3b32a5163d6b138420f714487fc3a1f508c61ade71881710f82fb3d4deed951c90663f593b63b8cb7b4fd08a \\x000000010000000118ca2310bb7ca7554f1e93aa65034df958cd2989dcfd22324c4d25eb7802c0e8067ea44c335e8933fe960d8c59ce18e7779f594d87ab1c709fec270e382724196d8d4db2431a648a6ebc61c288110d96be64b2082fcbbf4f0cb66c630582a243ba0893db0f8880af2b982b8c5c60f5336e8377d0e3770823aa0cea3cc7ca909d
-44 2 31 \\xee15a0572cb883c71b45ee68b9f6119ab23061c491ace08db5aee0c033ab9c55bc45fd4cec46cfa0690693523c44773c22c188abad60e7b5a7580680ce8bf60f 264 \\x044b77f67158f3c63eca2692a69743b4ee2c241e1897da718f27703ea053e720ef98a1a15cc7a324efcb8b3c0f2c272b1701206d68484c52cd54422aa7445f4e10a3cd779a343ec47f0b2b2c947786a9ab76fe23d0f126cbe758285980eaf73d273a7884c030ff5a94e07f3fe162f51a988c6420ba467c4f1cd81baa13af6d12 \\x5808728b076b8fe1b31d84105a29b313e2d2677090acc2d8976bb12b20e39464598d3cf336a82e4177e782bbdbd10625ffa8cb1f90746b43539520f12bd051c2 \\x000000010000000167cb53191573ef3a3ee8b97c07623bf8e1854263fc20dd64764472e3f9e713e3541407a0e4a6b6dbb2153f4154a796d885078acbf04734d1e27fe33084b746697f69a3efc6b814cb4f9c5a0b9e7cbc6bfc9599f590c645767de33eba5ffc474e0b859a144fa92bfd3c1fbc76cc8d6a3e827f669b14fc6cd2b1a5e08e6aecda17
-45 2 32 \\x4ba4f0a27242006c35ad59394747574a345d4467ad702f607241f849908bf2955ba486b4c3ed0fc3bca7a048173f7fc6b2fd80bfa5b77fbc18023f65153c6a0b 264 \\x4af883e3c9a0be22fb029074f827c808d12b98b561db3cb1a5ad74d3ca969af0640f07882b8fa44d499024e9126aba0ac5efe092e6d3b2adc95eaac66d193a33a270fcf58711e717c4e4f14df615d2b6aa2e94f6208020f641b1582aba0da01254eadc13958fc099d25d2527ea18cd964a1d057678b2f8a7553dd3cf9e94d573 \\x4155e854e5f2007164acbe3541b379f282d88d2481eb71683da55efb0948f479fe1fadd7404f39a1de0315f54d4031555e770d7a9b4cab6af05799dc9d48e512 \\x00000001000000017ebf3683024478512cca1e7227df1e5e58fe38019a23c6dd2a21668da682c266603fe4311cdc941bdec2cad11a3584d0d1fd82ff5a857f237e6ec0d1463a23ab30c2e067108852d7415e7686b7ad236a9779ec13f7e33b700dccc44fd8f8d5e3b868b4ee4e35d4d95020665311bc2e7b3d61edbb3414f56a846a677a3efaeca0
-46 2 33 \\xff45a95251b6ad55304496bbe4181851f234cd72861069f4451b6d271c4e218b15d5e2a46d19b470a2384666ff52892e48258de0d446713651ce35e8449c590e 264 \\x3f4d00d275496d09d684f46a078d42d7edc1a0b40bcb1c2796d65811daba7d550c627801db004d2aabf56678e6f755254d37736e7d6db85b62fefa9c168a6013ecdf171951a2e64e8155c52b8fed02923239886577dc892b64e163511e94c821f148fb22973e92e136f402be5cf28859baba2719b998eb9e654ab21a6b5ed61c \\x25de4e2370daad51493659b866d077e3650d4628b322cf3c28111b62f7712ec722915972b9e40f5b417fbfb28c567da8d3923c1eb5e3efeb3e8e983bbbd1c277 \\x0000000100000001924fa88f3bf3eb7cac1156196b0eff71b1f4996da58f30b66475a361aec797238bad20f566170c29f58a5b2616dbd1036122b608266aa4501418d96302d896f22605309bea2b3c0ecf85a4cf94452892432a1fb3c6d24631dadb43fb094d48335dcb414a74e03b880c054895feafe0e64ae67432b532261133cbcd57175dbf62
-47 2 34 \\xbec718eec0650f486bb27fa753aad0732c97801406e396e493b0b292fd6803eba49aa75f80824f34b0bbb0c9a192a7fa697896803137df9714884cc7d65ecc0e 264 \\x44f271da45f1f87089d86abe77aea9d77ecb79d9dc2de3e2b5dd9b501736af74b5dc70435072f72f05ac9ecc3dd89ee9b31ecf9b08e4d9170875a13c659862ac121c82d81f3b20ff00f001142c02484633ce3d39fa6a4d89226c8cc1b3a060d3c23de2785e14e9d968d77bc0f0a038662ea9a069df83665f7f2c141685aac7e4 \\x7f45e69d97c57b7a08a0c0359de6bdc2c49ed0f3b7e0b6def9d58e4b9ca5c6f86229b1079ad3720eb416fd116eb9f6e33655660796f8f8ed86fad41861046ec7 \\x00000001000000015e2bdd55aa3b8f125601f474a1628f5bdf81c93756b151ae9d924dfe3029c97d0e03185d91e924fe8c1dd13b43fe09d317a6167dc1d140ffdc8128cd926d69e5b5b0cd4648d6073a4a7dfc1afcdfbefc1feaf977a0f315f9934b6301b4c66399784d4e4122a0866d762c37f461d47c9cd8fa477f6f0e9ea174163284866038e8
-48 2 35 \\xc175551cdfc5d5bff90850ed5ea8cee4dc2621f0ae34eb481b2a7d2388dd8fcd251616efe5f2c682019923608db721f0e5320c3cc6b4db470a09832e3d7f090c 264 \\x4d3e181de332c453ecc705cd6a8dc44d80d8b2fdf6dec876cb902409d2ff76bde6c2ddcc45cd5ac5f572c24c94e918b323366773756279b4325be503c08734f4917cf50b079b64bebc029fbc6a7abeba5bc0f5880e964bbced84ed191313f46bb7d571e69d85cd9fd485513f0b3a479f4935cd5362a083b547378d4bca1f68aa \\x1498e11af9e12bc0451dc5e1bf37c0e2bfe536a024ef9b9b6396c1d7a7eeecb414be309b5e6b073355533939559826edad9c51480ba8befe0ccfb48688ff0fce \\x00000001000000010d2d0047ae1e5bcd2de62ddf46ea4630b8cc87e317a553e7613bd0eae057c531bc5362f3b005e0dcaa059c083c1109614422db2a23095b68eb426187abac99f809ec991fc879f99b53f18ac6e78b572adc107476a26854f67fcc1e27c51713c0dfd5afd33938190cf90580b2bf629315b6c477eb06cc8566c368ce92891dd863
-49 2 36 \\x7cef4150f4d63c21872f04fd7d37240ed8d60db384c02213677f7aa1d5fe138bcb79f559da6e032e65f3a5cf91cab5ebeee259567fad5766851e403a053fdf0b 264 \\x7f4ac29ad1b5349e41deb216a83f11e2d6119c50737f1857d9aa3df045eff0b4f51b355f98162fb2fa962158e5f22ca31d1129c47504fd3b6316b9dfc083633d486f39f54733f59cf76751c966e173089df30754db18a375070f57f41464f2a6e189da7d9bbd6a244cc3d55c018572c4f691b6990d8f918c6f508849d075297c \\xa919302ddfd6dd8aa5e22dba2c10b19bd217236d17ca16e29672d83f1c5344e27a0e3788f48a1829a28d9a2da12cd1df55d9da8ad3b91ab39455eb483ac95ac5 \\x0000000100000001b6c8fe613a6f0f2a44ccf672145d815fa5c591cbc7ae99b2dffc8757cdd13a4bdd3be68e19ea8a1a3ef39ae63561fb104bb3630946d6e01cd5293d372b5aaf353dfa919c2efd1d9db867931d85e3cd2c4e97b81ea06c0ea170ad40163b4f11adc1f82ac6d722db445f1cec1682e16a1a9cab69ca6efa08156004bd0728a7c8a2
-50 2 37 \\x23ad840913cd7e3fc37d1d7b4bf2a9f1613bfe1058d1f59a3fe7052edbbb95d3171ec821de95b9a4f3e8427d3ea895f396c35d0ab2d55a2f530779f396666908 264 \\x2db183f7677e76193a4b5ea5e6000ddaff1873939a7ce60484fe3db609b3b727ef5f4fd5dd6c2388c208443d1959b03fa0db296469f52dcbf5d2f06a37cce0c25a8c837d6cc53de4e56680e609b2c1c602adbd78c3290688a2a1a45a134ea55e28b1c03adec25b6fd5432cf2a3529c24e2b29d8692636c741b8c645e2dd3fb84 \\xdbd11535c6c6396cdbfa76e7d5e6f75344f1cf15f68d1094f8d43f38dbcb664a9392d53949eb572836864568fb7d048635697e6cdbda71d92dc84ab75348b634 \\x0000000100000001518545dce779fd35e82fee2c0531ce5b19bb2c9a32a400aba6a76f9499a2195d90f15a3e52b84e545b9df46aeb92e8fe5f3d02c5a22bb30102ede6bee0ad39a154e16e4091523faefb64f3b7a13bd4b34fcd95c2ac70b96c3628e7833030265582e9818e3397d1cb069d28c256535e72fd42d70e57ca8b5f1801eb599d1b0785
-\.
-
-
---
--- Data for Name: refresh_transfer_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_transfer_keys (rtc_serial, melt_serial_id, transfer_pub, transfer_privs) FROM stdin;
-1 1 \\x160caea93a0af89d27e79fa785722096be5b06b618f765f481460c1bcfe70944 \\xad5ed6ad3ae7a922cc627d007acf84f2c1f2c2789e7b216358709202620f880389a4e1eaeffd9a9c85386d0dd9dfb7ecb8413b02e5721ea5634e580b6a089535
-2 2 \\xc97f39eb021e2bfe41c42aa6cf36197c3f7a43182c5781566d3a1c91c0aa5417 \\x82c9ccf4103794e8794c199dd47ecc072dee1a3f5ffc2492b349e65858e2ee3c1a3101041b766a485c9a0d29b21a0ede935121e10e06b72e2347a287857f1fc1
-\.
-
-
---
--- Data for Name: refunds; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refunds (refund_serial_id, deposit_serial_id, merchant_sig, rtransaction_id, amount_with_fee_val, amount_with_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves (reserve_uuid, reserve_pub, current_balance_val, current_balance_frac, expiration_date, gc_date) FROM stdin;
-1 \\x94f97286a448d956e59904f7dfef557b8dd6e47c7dc092f69bc1378c87ec7fe4 0 0 1640786169000000 1859118972000000
-\.
-
-
---
--- Data for Name: reserves_close; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_close (close_uuid, reserve_uuid, execution_date, wtid, wire_target_serial_id, amount_val, amount_frac, closing_fee_val, closing_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: reserves_in; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_in (reserve_in_serial_id, reserve_uuid, wire_reference, credit_val, credit_frac, wire_source_serial_id, exchange_account_section, execution_date) FROM stdin;
-1 1 2 8 0 1 exchange-account-1 1638366955000000
-\.
-
-
---
--- Data for Name: reserves_out; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_out (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 \\x6c8a5bca690f8676594b2a753666431bc647518281aa2ece5a543573945ad15db4c9e735831c2d4d29967a15d7304b56f292fb88c57d6a72621e19ada97a4552 93 \\x0000000100000001babc1030733eae14ad29b2f00e4c92b9ac4897aa6eb2e0322fee41c6a2f40bbaba55d2f021bc073f2fcb413efbeb596552092e843e2d3c37102c1a34e538f404c2744711911ba6434b8d6f909e75fdd7862619a138637c7977a663111deb6f9747ddd385279aa42b29ade5ceeeb30e7bddba93f476c073371bbeac5800064fd2 1 \\xe6d69246e0b0b065938373c75634944f9a78b2bb8357dda030cd87739b9b5f06197ca8b9ed4f45c866f09f00edbe4c7d0cbc657240a29bda7b4adc7953a92e0a 1638366958000000 5 1000000
-2 \\xb43e6b2ff516747e8392cd298a1ca485494d2d8117d54a7eabe9b1a16467af39b2086bc23c8d13a6c9b42b72c67952261df55fca0610cc53af9faf59b75df3fc 92 \\x00000001000000014f6895209252ccebad850275d9dde87e3ff727a65ba0bd5a05bb7564316766d14b3ce12046b02fe79e262f75d71a116757844a34545dd5408d4d491d2d2ca648e4109085d79f7a54861d8f761f1f984a01468f280028323455b5402bed50490c89d0ef7ef27b6bbb05ad130845093991ad5a59c9bf564c203a86624815223a61 1 \\x1cee98a79aa45ead1e5362dce5e3b65aab6450c407f9e7ec37b9471ccee2b2040f1f4bb06963dff1496ba32314ec1387af13aeb557006fcbe6023a08750c0b01 1638366958000000 2 3000000
-3 \\xe96202116dbcf76962d8d3202949111410c58366d34fd15a599be1ccc1391fbbd070bd3fa937a51de8bc2f0baf39178d5baf78609fee80fcf87a52a007d31b5f 110 \\x000000010000000152b3a203ac44494a0006b1144d73d60b0324f62fec5a1ade6235d3cc04cc083f7c97fba23fb5526da98d6865d8376f049ec28f5d06bb9667ccf906d7790de9742a8d2ee6fbafa3f4dc687753a2a7d73d0e4bcca1b250b22aa8d9da75fc8b3a1f1a3eefdee731bdd047586aa942a96c7f7d6634291855197955a7f0db6c037da0 1 \\x5f87eb3b506c708106080e6fe1e6d92ccbfe9eb5babad08175425fbe9f20c69088a5cf4b88a68791c01f03477eef728f06672ba90e160f2a49a45a6465ea630e 1638366958000000 0 11000000
-4 \\xc8b4f3a3067d3a0b72944bef56047c083c0b037e0727f7c151e4d6c6ee60c43caeec68e3aa686111de55c3d5c68d9beb2cd6951ee2c46af2404dfaacc2300fa3 110 \\x000000010000000142db2c6d21c5ea0306374db008e5611370f1ccec8fa8a1b17bebc54aa676dfd418a1f0d670d114903881b62c9d0d679b97ee2190d1c97ea7e2650cc8b0b672026e53efcb85f54c1d96fb3150c559624eb78a656ecd187970feb9af969afb980ef42ad2e26ec060125a8d947a4c5d00dce28058326cdea8bed5bbe7dc99ae9348 1 \\xef55393ce281f899d00d25869c9d6dd9a317354c099393c4d78a5f8abca2162caaa2b5548b3d8b3ec0f8c5f58d5c624846f6d8c8fc8b61259bb3cc9b175aa508 1638366958000000 0 11000000
-5 \\xa388d1ef3c76b105eb438b2deb0ac7a9fcf9a90d9ce91d33819f4510b8ee122166fd09d0837518c56c41e1216dba72bfe50fa86e969e98444a88fbb1b3f1c8bc 110 \\x00000001000000012b32a8e3bf690588455490ea845016ad911ba610bd0ad2ad92473f7e762efc7f61d6c78d0045b5a60372337a681ff858a6bf47ded423d00d84712112be1a8c53155aec8d2c4d36020a9740ffb75f138edb6d6740264486e4ee53e7049fa23c146753976cd67199a08a9ed19292b6da4654abfcbd18287d93266f430619761406 1 \\x6ae530d29f70e9fc65afb1d97895365a96b7fed82356e26fe51b313dc71dabeb923eda6134dc5fa345604bd46487e65439ac7b44f1793725523a4e02715c7800 1638366958000000 0 11000000
-6 \\x0cf47602e10010acbeb1bb3fe1d0639773212cc5756f215f0ccddfeb088e8ea60a6725fa8572490da9b506689f05ae71aa0510e19faff23cd81be69f82505fdc 110 \\x00000001000000019c569a66fe454dff2c5bbf38504ce2a6765bf4d979901b23addbf770db3774073dcd99a6f08ace44fc4776c983207d9dfab8c9f14497d37d6a18a00fbee5441b2f4f47f2b430ce5ecc2cca3c4fbf980ec44c4b94b81acf5e2c1c8b5a54d62a0af57570b4f0909b27d9a7cfd7a11806de4846067b35fda0359fefc9b1f617dcd6 1 \\x721e36730ad19653e483997c83c0d580a0509b96deecccda4cf075ef51571f70824a7c73cafe7d86efc9113a4ee1a55f30270c27cb4ebe6b17a18578e8ae6000 1638366958000000 0 11000000
-7 \\xdcdc7cb3476a04340b3e8404ea73b04cea740f29a3d95d677f3a6fb264865f5520f72312687f3dee35adc8d316e1e5c4823361b9ca092ee6aef4f65eb8bd3838 110 \\x000000010000000131c965c99cb7fe2a822271eca04ef199a17c4c88699ecf7c3c9718877b7af5c9c262b2404750b20b486c3b2f2b0317c071b000e0eeb968f49dcb39818354b3fb3343fc5aee9a6c5a27be2d284f0b46537b3583d398e28fd252ece60bba7229e3da6eda662ec1c720492d9c629a02e1fe6fe6ae4ae0ff684f82e4f6f3272612e0 1 \\x330b6d555089dd79b492fe9f74760eb0a199a575441ce3f37930051f7cd020287058794531cfd66dccf780586dc938a46182c1ac7b304787d6fb191593826f0a 1638366958000000 0 11000000
-8 \\xb301fe6e2308a170dcfbe7bd9aa68adcc0a73066a4a916a7cdd04a2442f3f907aa1386e33b64da853efea3bee6947e3acb7587c31a829f5039eebd2e3c7a94fc 110 \\x00000001000000012eaab3ccacba644bf3b400dc9fca35850a181a9274244134a0482a76ea53b3fc521abd02b1c01802c70f54e908f31cd6c26dfb412d8e380fa799699d895a51d622a4b88baa5115f291927ead11884457f5c178c97d228b314b5544edc69b504cea928c75fbfaa4a226a4f0298458a79f39e983e9a82948920406471f420780ee 1 \\xe6f4b588ce294350044853eacc4f2a561e909c07d58a8897fd5f995747d41829b167fc1dc86b0852c1b276d561cf2a42dbdd5d34b25a114771238077b28f4a06 1638366959000000 0 11000000
-9 \\xc57f3fcfbf2ddd8e874537ad79eb825c0c8cece998e888b6cf7bd8aed755d21691de86020f7c849267d95546d89cd7f164d85656bc3a85e90c1b133cadf76fe9 110 \\x00000001000000017358a38bccdf500856764e3288c5d011efd8dae56f3c6098177930a5a68da804bf5c74dc776ba27970ea8f8cd6eb58c8cc79587d670712ec25bbb26ff3c90723ac76ed61bf668c5643cc50b1e4f5c19855e342c623210fa9d88e273d69b7e55a297fd6f1a12a52ff939dc1848bd8f895d38e1260198ae8af901c55084f1d149d 1 \\x27eac3fb12b3a4e12634e9c82640edb853bd20bb891696202242e8843ba5a1b114537b1b3eb02456b4585143247294f6131e3b25867e7a48e7a25f49750ce007 1638366959000000 0 11000000
-10 \\x138e053c58270f0c2b45042f44b2217f974fef6c4e89bbedb9d797a05b542bbc4ca689890bbe8d2c585e994c7b926206e04273a189c2ba136a06ac24c446ab56 110 \\x00000001000000014b652885d17e00f735de7679786ee0d1044aea797e917d5373c58d91d3536c487c9117ac7e0a3ccdf5f3dc069fed958018345b6938830de7be2b788602cb55c5483738237ab4f9b03f41b750320cf56291f88ac2909c08825d9ee5b3febe922c9bc95f2fda23cee0c3d38a10ca8eb74622efbc69fe527b1ddad4643da8951a33 1 \\x4ce5d6245fe8ddc209e221df177b260a117e050788c8f88c34b5047ab2741931304429c5ad31a26e5acaa19d2f7ec59e69d7b06c329c3355067708d960186305 1638366959000000 0 11000000
-11 \\x213105126931691da8f4427ab9892bf149042e935ae860ef349c108bc1f328cbfe6f78da56b70ca16c9828051607bc1a82c9106df7cb014c7e61fb903ee3a601 202 \\x00000001000000017108612ada8fcfd900dedafedb7f7e2ccf40d9eb30f313d261ab559fd492732939d89e9ea5007dff425a6599df8f7d68e9fc35db9287875a1757c96133748fbc34eaa65c82995dbe1fa601b12fbc985f4e026344613d387cf0fac263cac4b01a53ffcbc6473408a6f72f8f098703dbd2f132885bb9e0d459a02667c4cfd38559 1 \\x317078bb27be1df002fd5815036ea36ad5d0dcf5cdc01120a73a70ebb4c3209b6dc3f8da2c5c0827b3d0559f3a4fe30a54cf81ce740bb6f6a7ee3fd7d4f6360f 1638366959000000 0 2000000
-12 \\xa88b59abfdf2e1a8bb9dbea733618dd7cefa3525d2e825dbb66e019b2e62726849cb669f0948642223fcf1698bba6afa6af773187c0b20071a05a614471a6149 202 \\x000000010000000139586de67f0069910c8378f5caa1873d2a7a0b162ecb24f58894a654087debb9ec328b39b69a480fa36d3f6e2ded2bb3461d90c42f7719510b8a7abd83b7be8b8f72b9979c7e65c01064697cce80802836e92b605a90e7f6b6c4a8f3e8f83f5cb3fd9ecbacf0a061359e65c527b89e67acb5a330edf7ddb5e62caa921ee68bde 1 \\x8fc8942bc26cc608677a97410b88f48b23f104a3829ca0c12d17febce41f9c886fbd1cb46fdfa82c895844fb26ddd02f968285790c02d146a79bc87f53c6290e 1638366959000000 0 2000000
-13 \\x3f938dfe207933260dd8204bd3a9c2733beeeea01ec1c0c6cbc66cc875b4434569bd00f987f86234014643603357b4f05b819c775a8ac2c1d70c05650cd2c760 202 \\x000000010000000190531d0de21309b8ff9cf33d68e8fa80fd493b9c32a3092a0c683710a27b06f81c92bd244ddbdf7c862a3d3004aa6f22c2c2fb79778ad26a9309c72808f62e367f4867972b7936f5d874b0dd3d019747ba008c7ede2b65bd9d1182c8bc1551925189ceda5761ccd9fde28262fcc4491441f01479cf08927872662923ae12d665 1 \\x38ab3b2b9d47e0f66f3a693febfd9f04e6ef76a5c194b822b91daeec8560e43680bdf25520e444a5b39e1c4ac3dda6df1442e9ebb5e7a8d16be00918176a3206 1638366959000000 0 2000000
-14 \\xd542051717a5a5b2d3613e69ef96b0e2de076817b0c478771473bb0a13df00d72234abe0b0b5827828ba8a8a8a053a51df0e9210d08f2823240613b3cbfdbd4b 202 \\x00000001000000016d33638f822ce5dd29ff699281e31909d51309722306c36d515046e0765de7448a4e337bf68202535f9b5815739506b37903038f8ee5993b34d19629e29a1552ed8a469c1b89138c1ab595231d52437dfef679d3405ccc84cc20c3de73279e2d4211071daa3eb50fa515243522c0beaa885a606b2ccf13391b3716015d73077a 1 \\xe06d0a37cdd4b804961508abe6d900d6c94bd3a91da738ea7010d03d21bd57919a263aba076ea94bdc49aee23b7a83b2f489a47e46dd935f3f30b48d6e83f80a 1638366959000000 0 2000000
-15 \\xabf954b0e90151e7cdd96ab2c1829053c86f7a09e436cc76fd5a378a5dd3a6e4a5f66683af56ecf07518474b3ef8ca0b352db0e56a445a946af826420739f4c6 134 \\x00000001000000017a65cb8cb7ed2b4cc13d4718c61bacadf5dee5102d1af073aa2f0610f885e1e736ad63d9a698f685d97f7383d1c2f82ae38fbd4d1bf24a85c2c540bf7eb4859b17e180f2611e7b20deac61331042bdbe7993402073c9108aa34145ecde8d09667c6d0d706700b18b7d7bc5a3892d127d3e0a79afb4fded8c0dfcd5d3b0223e09 1 \\x8e4a711f4ee3c18aad8dca336801f304c116ea0cdf8a9b6cb84eddea2d71d8913219c8883b74c674b6b0f30ca46c8c5c075528ed5ff93fcc95b5d992940a8702 1638366971000000 1 2000000
-16 \\x2b5534d87350ebde9146ba2deefed3a032eac6fee8ab3c4220c9a83d0d562ace4d4c5ba82bbac17eaaff540016915ed02a8320ad5c6ccdb60e51b2966508a0b4 110 \\x000000010000000128d0e74c5b51c32776ce8bf2111669dde790a2c7546ff9425baf1f078d4718a7d28e0e65743d99136ccfde35ee49df586095f1048ccb1e34562696e43cb76af580f4cc1cf74d933fc5913d800bf3518311fb78f9ebe9cabf8454668270d57db86f26b609d70820c550e78d1e8885dfbd0107f04c05e932d9793cf1ea7da90647 1 \\x6fe85bec303fc992643307219ec6bfbe22ba76555de9dc5e01473dace24b58641faec2d30a073bfb0df9b13b91b24b4d4c3fd894296c43b1de7b2a3e2416ea07 1638366971000000 0 11000000
-17 \\x0fc20f75e8a3c80265371d9af373640693a94b52e8e7a25dc60a830bf970c617ac0bbf28aa3411a9819627c966654431131d804926f28536e03b44263b1ab3b3 110 \\x0000000100000001509a8fda90a578e10d55e97f58330a7fa72d82f5cb13d06d515c0e6e3ef50bff2817647d5eeee975c2fd37f46cf1ad41609c957f9f12f00212a9ac487f3c48969ddc616ebcf686851726bcd27e8dbb43ed38b23d1a3eac211ce78b013c301f54c9a7cb4773adeec965297911669d76bae763bab99b3e4d30ae9049fbdfff28ca 1 \\xe76d782db2f18d2101a1849561ab0e6f6ddebc00e355e9808e3ad0b813c2aaf9223c577414cba2436a44a71ee29ecf35251b7160d47f7c26ce7b92c2b3ad6b0c 1638366971000000 0 11000000
-18 \\x58b9d1ea6a522da58cc1cd02b84c08d0d8476748f3c30bd3639285f8f392a7fae1063398ceea57e658a0d591a9c9e1cfa7a3d2013055611c8c3bf3bf81b02f3d 110 \\x00000001000000011ba56b23ceedf44a50bcc3ed2bc6cad4b329881a4debb3ca34593b3c5ba58b75c03f4839c01c9a15499da1393d4a67ce60d64da9ab9bd2ab2432ee1b04a16114c07311fde401ee289027b74d9b9b0980d647117c064c9a8e450b75dbffb37a9f559caca750eca79c4f2e6bb56ba3edc5c8550f6d073fff6e44034e59a2607485 1 \\x7604bc3f98992fc5a687851d5beec482c3657c37c2998459a3c659eada7121c9a6fb8a636a417b3266b3e69e179ab73d8428960a6a0f4b639446d2fc26bff008 1638366971000000 0 11000000
-19 \\x11cf36bf76e5a5330fa711e9b472f6f93fe04fd63e0ac70758d0830fd0d1c8df84c94a0484b00b66fc118671a97eca38bc91d4508f3e2fd79160be5f2de5629c 110 \\x0000000100000001393a0db15cd8510d61d9205f3dfad16f6689e9835e44efc117d645f4d48d45b1fbd441ca54fe0c647a951424c7af38d3c4d8d29173960a4d9e08292f43e6b3874ebecf0573c3104b5b8d170a4391d64b44a65cce7da540a112e77a9206e7c07286a4be476bc62e45aac2c34ac4f944cfa360a354a4ad40cb9ecf65c3bea6f1aa 1 \\x51b37540ac730bf411b4cf0a8a56a6ac4acaf9d07d13d24bd11a077b4de9349cb200a073d8519f5a41067fa35cf85540b9e1b595fad6c13ff2fbd12ade1d740c 1638366971000000 0 11000000
-20 \\x021bd092ee75ae5b673f51500f64b74a1fa3808523e0e9c096cde6079ee09625355d79e2aed89af0ef132ed1cff50b6132c05f631be1efa9f58a81e3a72b78f7 110 \\x0000000100000001a822d80c487c893e4528ab3748028cabd264c71e8ab05232c1dde0eccbdd172721183b22526e8a073cb83053f7032d2f1ceb3891a81722769945c918a1a04d90402a8d6fb4980e8dcad75d68fe79e53a7ff6531bca39fefa0f1f1f6891b918960c2702e9c1f1b00e4bd00cfa67a7909d6675809e61f5d1811913144464dc9c3c 1 \\x0743f7536e839497efdbb1d39139ad359096bf3e521b2ecffe7688db9e4231b774d08d400824c8bc142b666abd0c548fadc8e5f2cb7c9172987ded5fd0cf7b03 1638366971000000 0 11000000
-21 \\x8804fb1f0e5845cf010a72de7c15862bd6f80e7c3f4de3360698a477b95bfea389c42ca41d2536045ad9fa22032643e985149d8c3adf9c85053da1fd091046d3 110 \\x0000000100000001aae5707b49f84f1a69595d3a383d1f9e8e22892c6b321d8548ad3e4276428cb3f32d0c0c0b99699e2387f0a02b8787cf207dbe521407ccf76f1cf70ef08a5ebeffb64b39bbbfb69524d9e905e6766554ad4e9fccef0264a80783bb8315a1a5b86c0f3bedecc629e6ff6e6c27cfd8ee237fc89df3824e271c558d28b80e480c7a 1 \\x610b9bf4849180e4f590ea66693efc6a0e3d60e5a9a242f240f96dc4fdc2198c0da89ab1efb8bf6a0be9d3525ff8e42e9d5c8c95317ff0cf16e79c50c0844205 1638366971000000 0 11000000
-22 \\xf02b8bf8798f8164145f66cb7c7650a6320446ca9cf4816c33dea70449117346be81ff937d85e640a3f5f956f35289dee86f35ad0b608ff062c4f23474cad11b 110 \\x00000001000000014c86d79448fa4c2c331aad1e5698d0eedf4358f9d234dabda7a72a9cf2ceb92eb5f08476ce117effdda7222ba0ecb5194522073802a2a023dad47604ba610d5bd0aba9fadf31e98900afc313530a071352c6d5dce5dfd6ea13df11e60ac20b4732b3e93e521039fecf23f145e036bb278ed321fd86807bc7aa28f74b6de58f8f 1 \\xbe0761cd374628d8430e2c5414f473ec725087fb1c3fddf30ac38a7da1cb75c679fce669ec56a31307533e2061f95df8da929f9b99be937dda0965118534040a 1638366971000000 0 11000000
-23 \\x5951a7b5587004fcb84f13f5db6217333aa0528aa911e1a7be8f60cb5ea7b26938ba83e7d786d837ce461b634a62fbb17747c065677ee093676c32398fc2de9f 110 \\x00000001000000014d1f8afff8d3d310b91cc2d1f99ab93de096f1dbdc682d02a8cfe31b2a266bbbf75801d916e8cb43538630c0742561784e0d702937d9c697c668ffc5d856796bc512de4fb86eab36d6d67ab9ea405f5dbf4360a007ec6d95c4c347438605da25e77731eb7e185612bc6b66cbfb0d37b5d8019bf5d145281dfa8c88b5e0de3739 1 \\xe978b5c3e6260ca7943bee0699fa539e9456cf334ead14296dc5f27fbda39f716aaef987007d0b7a47bba29525d5ab7a5e1d1ffae700e5ef28fe0919e0d01409 1638366971000000 0 11000000
-24 \\x95ec71021ffbd83b7392fdc1d9f45876fd811f8a212e9a36c96b3efb802e02ff11bced7adab5a219c0cdc724718915d80a3bfc2804aa5f41b0864f838286f06c 202 \\x0000000100000001a6b740dfb9ec35a0ded3ce5837c0c8b18f1883d0d3f300396701b46e6dfb16592d0a633d5a0972e758825f7102ebcf4833efea8469328fc8855d2e4fc29c323b26fd16eeb3e0597e28e1c0bc3802d793c49a16dc7d06e77870121e039fe40b3ef3f410bb15ebb37d114a626f73cbb7023f3518535518dfbdf8f1370b54757d99 1 \\xcd1dcebdf90fb78447d8227fcaa9b1f1fab9dbb582b5fc4329f366adff209f5eb183bcb3311c1045ad5b01aaa4b13f3f500b895c0ea9cb9b9a87f55a15caae06 1638366971000000 0 2000000
-25 \\x23dd245d1fc428ed1c30fe433bdab2090b6c343ce168fe078ddcd95804bfa341d11a45d1e1d9854fe2dcf9488b488f3562388bf6e293d515aa25597181603403 202 \\x00000001000000019d1d82faa5548980b9b6c49707cb7d7a365d1dabd8bf07fd01736406f629175acb4377dcd255193ed190664d7af13ae0171b3bf4531b45dee8a0f6c30ee2cdf8891076ddf486e3c460b3d2427f698ac15173a680337a60664db900e1ae992e3169d224efcd848f259b1c6ed63420cc87c19bde968f6d0b0e1329129bfc329ec6 1 \\x685f7065b2a04ddd30616c3ded92227dfdabcd5eb0371295e840e435b945ff41f67797827157338f1b5d944eda4e854f32e867e8fc907c35621230e73d4df90e 1638366971000000 0 2000000
-26 \\xc242c224c89b04462540e5924c10d5f97b7db5758019da6b4ca7f1fa9e26ad0c1aa4153cb268ab1d6c3335075dbe10083f55af0e492f31287d5fa926ef47e116 202 \\x0000000100000001581512563b077b27184e234d8521c32f7cbe29042acdf9441a067683c2f866d13c185250603b9fffb77d626b59c22e178caf4098b95bbe39a766583670471f074f828dce728f2d2e10019b257542d092b68a24f957eeb66c37e2398a86ca648a2cf192149e25b8b3031ea0825a7a5f942e01b0ef65453759332e36221fa69682 1 \\x8e54e434df7e64b560e5cea86577b18af451d313148d98fbd2c991052e179f6ab15b01b0fc1502f921c5687f12bdaa2b6adf18f1f53dd224af46b2276afeaa0f 1638366971000000 0 2000000
-27 \\xf8e710ce0b7bf9f7507865d7a02ddd101193364996beec1c8aa66f13dd247b2f146b7e1a73a1838590d68ed76e7099facfe67da8a3c72d4d642375bd07cb70a2 202 \\x000000010000000112fbb17e02b5285d2a923b8611d978149057e5f5685da913a833a6a4fa7d0380592a235c591d06403598bc18bdec83265410a9c5438743de76c10bad108acffaf67c4ee124b5c747358452c61b823aec494fd5c7ae3ab1e786f6c03c4707c5ad5b9a5541499cff50b0fa4a78138b6d4b9ef4298c0b050889f0326bcde6cd905c 1 \\x424adfc0ad9de5105c044bbbd0c4b83be87cbd0e551e34219aa86786e0ad03cb7132296bca9d0d5b8b8eb820e05d9ab6ed41e17248634569f31919d5e0b5ef05 1638366972000000 0 2000000
-28 \\x8233331d8043891d5f7b6b454c4ca3a764bc9062b6251b59ca7d4a3843b999c2a3eb59b402ca498de4e22f6cc20464c8c6cf1ee40e7ce7daa0aba3adc7adc4ab 202 \\x000000010000000126406531aa8650cc26e478aa1f0ee61a8a65aacf01edc49fd6ef4561764f9deb0d60d135e01197ff0a232797217afbf125ae40cbf9704e1d806f5367c5ea036def7724698a00fb7b87f3fb2220d53449cce45dcdd871475f91ee6706d06e48b5962dcda5657df2f8dc58ac35ca32e3772a84c8185fd5f70b02c6e21fbd28105b 1 \\xa001577ce6b17eb1733bdfe3979c3c13e402381196b1653e3a2ae37132b3bae03c1c18f8581bafb312ecb1a8c87487887ecc0685bc49e80660679c8a70965c0d 1638366972000000 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: 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 \\x8a64f036b08e0efab21b86a7ad11ad43f86147ff2ef2344c6520793123b475e76e1f069414986ab7f00c24125732268c497e8514a9b23f962502afc286835c07 t 1638366947000000
-\.
-
-
---
--- 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, master_sig) FROM stdin;
-1 x-taler-bank 1609459200000000 1640995200000000 0 1000000 0 1000000 \\x403ddcb1ac9ae4bca73e915a1c1ef3d901b0c2a0aa4dcdfdad12276f18cc5d438c4e64057b4e11c76f8d05a3b5d6dc56fed992e05f0d76c06e892680b9458408
-\.
-
-
---
--- Data for Name: wire_out; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_out (wireout_uuid, execution_date, wtid_raw, wire_target_serial_id, exchange_account_section, amount_val, amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_targets; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_targets (wire_target_serial_id, h_payto, payto_uri, kyc_ok, external_id) FROM stdin;
-1 \\xb40379f80360623e82237e306f5b52ef69a0a887a079ae54290b186f50b433109618d2eaeaf295659a376375cd6c1c2f95224954146495875dfc61e077f6b3b9 payto://x-taler-bank/localhost/testuser-kusufpjk f \N
-2 \\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660cb3a8ffd7e9e69c646815045edc179e5e7ea1ecd9584550d202ae951ebd572e98 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 1638366941158878 0 1024 f wirewatch-exchange-account-1
-\.
-
-
---
--- 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: 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', 22, 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: known_coins_known_coin_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.known_coins_known_coin_id_seq', 13, 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: prewire_prewire_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.prewire_prewire_uuid_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', 28, 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: 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', 2, 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: aggregation_tracking aggregation_tracking_aggregation_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_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: 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: 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 deposits_known_coin_id_merchant_pub_h_contract_terms_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_known_coin_id_merchant_pub_h_contract_terms_key UNIQUE (known_coin_id, merchant_pub, h_contract_terms);
-
-
---
--- Name: deposits deposits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_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: known_coins known_coins_known_coin_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_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: 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: prewire prewire_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire
- ADD CONSTRAINT prewire_pkey PRIMARY KEY (prewire_uuid);
-
-
---
--- Name: recoup recoup_recoup_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_recoup_uuid_key UNIQUE (recoup_uuid);
-
-
---
--- Name: recoup_refresh recoup_refresh_recoup_refresh_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_recoup_refresh_uuid_key UNIQUE (recoup_refresh_uuid);
-
-
---
--- Name: recoup_refresh recoup_refresh_rrc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_rrc_serial_key UNIQUE (rrc_serial);
-
-
---
--- Name: refresh_commitments refresh_commitments_melt_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_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_revealed_coins refresh_revealed_coins_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_coin_ev_key UNIQUE (coin_ev);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_h_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_h_coin_ev_key UNIQUE (h_coin_ev);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_pkey PRIMARY KEY (melt_serial_id, freshcoin_index);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_rrc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_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 refresh_transfer_keys_rtc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys
- ADD CONSTRAINT refresh_transfer_keys_rtc_serial_key UNIQUE (rtc_serial);
-
-
---
--- Name: refunds refunds_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_pkey PRIMARY KEY (deposit_serial_id, rtransaction_id);
-
-
---
--- Name: refunds refunds_refund_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_refund_serial_id_key UNIQUE (refund_serial_id);
-
-
---
--- Name: reserves_close reserves_close_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close
- ADD CONSTRAINT reserves_close_pkey PRIMARY KEY (close_uuid);
-
-
---
--- 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_uuid, wire_reference);
-
-
---
--- Name: reserves_in reserves_in_reserve_in_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_reserve_in_serial_id_key UNIQUE (reserve_in_serial_id);
-
-
---
--- Name: reserves_out reserves_out_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_pkey PRIMARY KEY (h_blind_ev);
-
-
---
--- Name: reserves_out reserves_out_reserve_out_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_reserve_out_serial_id_key UNIQUE (reserve_out_serial_id);
-
-
---
--- Name: reserves reserves_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves
- ADD CONSTRAINT reserves_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves reserves_reserve_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves
- ADD CONSTRAINT reserves_reserve_uuid_key UNIQUE (reserve_uuid);
-
-
---
--- 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: 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 wire_out_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out
- ADD CONSTRAINT wire_out_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_targets wire_targets_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets
- ADD CONSTRAINT wire_targets_pkey PRIMARY KEY (h_payto);
-
-
---
--- Name: wire_targets wire_targets_wire_target_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_targets
- ADD CONSTRAINT wire_targets_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: aggregation_tracking_wtid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX aggregation_tracking_wtid_index ON public.aggregation_tracking USING btree (wtid_raw);
-
-
---
--- Name: INDEX aggregation_tracking_wtid_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.aggregation_tracking_wtid_index IS 'for lookup_transactions';
-
-
---
--- 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_expire_legal_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX denominations_expire_legal_index ON public.denominations USING btree (expire_legal);
-
-
---
--- Name: deposits_coin_pub_merchant_contract_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_coin_pub_merchant_contract_index ON public.deposits USING btree (known_coin_id, merchant_pub, h_contract_terms);
-
-
---
--- Name: INDEX deposits_coin_pub_merchant_contract_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.deposits_coin_pub_merchant_contract_index IS 'for deposits_get_ready';
-
-
---
--- Name: deposits_get_ready_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_get_ready_index ON public.deposits USING btree (shard, done, extension_blocked, tiny, wire_deadline);
-
-
---
--- Name: deposits_iterate_matching_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_iterate_matching_index ON public.deposits USING btree (merchant_pub, wire_target_serial_id, done, extension_blocked, refund_deadline);
-
-
---
--- Name: INDEX deposits_iterate_matching_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.deposits_iterate_matching_index IS 'for deposits_iterate_matching';
-
-
---
--- 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: known_coins_by_denomination; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX known_coins_by_denomination ON public.known_coins USING btree (denominations_serial);
-
-
---
--- Name: known_coins_by_hashed_coin_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX known_coins_by_hashed_coin_pub ON public.known_coins USING hash (coin_pub);
-
-
---
--- Name: known_coins_by_hashed_rc; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX known_coins_by_hashed_rc ON public.refresh_commitments USING hash (rc);
-
-
---
--- 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: 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: prepare_get_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prepare_get_index ON public.prewire USING btree (failed, finished);
-
-
---
--- Name: INDEX prepare_get_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prepare_get_index IS 'for wire_prepare_data_get';
-
-
---
--- Name: prepare_iteration_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prepare_iteration_index ON public.prewire USING btree (finished);
-
-
---
--- Name: INDEX prepare_iteration_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prepare_iteration_index IS 'for gc_prewire';
-
-
---
--- Name: recoup_by_h_blind_ev; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_by_h_blind_ev ON public.recoup USING btree (reserve_out_serial_id);
-
-
---
--- Name: recoup_for_by_reserve; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_for_by_reserve ON public.recoup USING btree (known_coin_id, reserve_out_serial_id);
-
-
---
--- Name: recoup_refresh_by_h_blind_ev; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_by_h_blind_ev ON public.recoup_refresh USING btree (rrc_serial);
-
-
---
--- Name: recoup_refresh_for_by_reserve; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_for_by_reserve ON public.recoup_refresh USING btree (known_coin_id, rrc_serial);
-
-
---
--- Name: refresh_commitments_old_coin_id_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_commitments_old_coin_id_index ON public.refresh_commitments USING btree (old_known_coin_id);
-
-
---
--- Name: refresh_revealed_coins_denominations_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_revealed_coins_denominations_index ON public.refresh_revealed_coins USING btree (denominations_serial);
-
-
---
--- Name: refresh_transfer_keys_coin_tpub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_transfer_keys_coin_tpub ON public.refresh_transfer_keys USING btree (melt_serial_id, transfer_pub);
-
-
---
--- Name: INDEX refresh_transfer_keys_coin_tpub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.refresh_transfer_keys_coin_tpub IS 'for get_link (unsure if this helps or hurts for performance as there should be very few transfer public keys per rc, but at least in theory this helps the ORDER BY clause)';
-
-
---
--- Name: reserves_close_by_uuid; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_by_uuid ON public.reserves_close USING btree (reserve_uuid);
-
-
---
--- Name: reserves_expiration_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_expiration_index ON public.reserves USING btree (expiration_date, current_balance_val, current_balance_frac);
-
-
---
--- Name: INDEX reserves_expiration_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_expiration_index IS 'used in get_expired_reserves';
-
-
---
--- Name: reserves_gc_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_gc_index ON public.reserves USING btree (gc_date);
-
-
---
--- Name: INDEX reserves_gc_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_gc_index IS 'for reserve garbage collection';
-
-
---
--- Name: reserves_in_exchange_account_serial; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_exchange_account_serial ON public.reserves_in USING btree (exchange_account_section, reserve_in_serial_id DESC);
-
-
---
--- Name: reserves_in_execution_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_execution_index ON public.reserves_in USING btree (exchange_account_section, execution_date);
-
-
---
--- Name: reserves_out_execution_date; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_execution_date ON public.reserves_out USING btree (execution_date);
-
-
---
--- Name: reserves_out_for_get_withdraw_info; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_for_get_withdraw_info ON public.reserves_out USING btree (denominations_serial, h_blind_ev);
-
-
---
--- Name: reserves_out_reserve_uuid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_reserve_uuid_index ON public.reserves_out USING btree (reserve_uuid);
-
-
---
--- Name: INDEX reserves_out_reserve_uuid_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_out_reserve_uuid_index IS 'for get_reserves_out';
-
-
---
--- Name: revolving_work_shards_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX revolving_work_shards_index ON public.revolving_work_shards USING btree (job_name, active, last_attempt);
-
-
---
--- Name: wire_fee_gc_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wire_fee_gc_index ON public.wire_fee USING btree (end_date);
-
-
---
--- Name: work_shards_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX work_shards_index ON public.work_shards USING btree (job_name, completed, last_attempt);
-
-
---
--- Name: aggregation_tracking aggregation_tracking_deposit_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_deposit_serial_id_fkey FOREIGN KEY (deposit_serial_id) REFERENCES public.deposits(deposit_serial_id) ON DELETE CASCADE;
-
-
---
--- 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: deposits deposits_extension_details_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_extension_details_serial_id_fkey FOREIGN KEY (extension_details_serial_id) REFERENCES public.extension_details(extension_details_serial_id);
-
-
---
--- Name: deposits deposits_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: deposits deposits_wire_target_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_wire_target_serial_id_fkey FOREIGN KEY (wire_target_serial_id) REFERENCES public.wire_targets(wire_target_serial_id);
-
-
---
--- Name: known_coins known_coins_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_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: recoup recoup_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id);
-
-
---
--- Name: recoup_refresh recoup_refresh_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id);
-
-
---
--- Name: recoup_refresh recoup_refresh_rrc_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_rrc_serial_fkey FOREIGN KEY (rrc_serial) REFERENCES public.refresh_revealed_coins(rrc_serial) ON DELETE CASCADE;
-
-
---
--- Name: recoup recoup_reserve_out_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_reserve_out_serial_id_fkey FOREIGN KEY (reserve_out_serial_id) REFERENCES public.reserves_out(reserve_out_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_commitments refresh_commitments_old_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_old_known_coin_id_fkey FOREIGN KEY (old_known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_melt_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_melt_serial_id_fkey FOREIGN KEY (melt_serial_id) REFERENCES public.refresh_commitments(melt_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_transfer_keys refresh_transfer_keys_melt_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys
- ADD CONSTRAINT refresh_transfer_keys_melt_serial_id_fkey FOREIGN KEY (melt_serial_id) REFERENCES public.refresh_commitments(melt_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refunds refunds_deposit_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_deposit_serial_id_fkey FOREIGN KEY (deposit_serial_id) REFERENCES public.deposits(deposit_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: reserves_close reserves_close_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close
- ADD CONSTRAINT reserves_close_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) ON DELETE CASCADE;
-
-
---
--- Name: reserves_close reserves_close_wire_target_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close
- ADD CONSTRAINT reserves_close_wire_target_serial_id_fkey FOREIGN KEY (wire_target_serial_id) REFERENCES public.wire_targets(wire_target_serial_id);
-
-
---
--- Name: reserves_in reserves_in_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) ON DELETE CASCADE;
-
-
---
--- Name: reserves_in reserves_in_wire_source_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_wire_source_serial_id_fkey FOREIGN KEY (wire_source_serial_id) REFERENCES public.wire_targets(wire_target_serial_id);
-
-
---
--- Name: reserves_out reserves_out_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial);
-
-
---
--- Name: reserves_out reserves_out_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) 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;
-
-
---
--- Name: aggregation_tracking wire_out_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT wire_out_ref FOREIGN KEY (wtid_raw) REFERENCES public.wire_out(wtid_raw) ON DELETE CASCADE DEFERRABLE;
-
-
---
--- Name: wire_out wire_out_wire_target_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out
- ADD CONSTRAINT wire_out_wire_target_serial_id_fkey FOREIGN KEY (wire_target_serial_id) REFERENCES public.wire_targets(wire_target_serial_id);
-
-
---
--- 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 694753c8d..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,6 +31,49 @@
#include "taler-auditor-httpd.h"
#include "taler-auditor-httpd_deposit-confirmation.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
+
/**
* Cache of already verified exchange signing keys. Maps the hash of the
@@ -65,17 +108,20 @@ verify_and_execute_deposit_confirmation (
enum GNUNET_DB_QueryStatus qs;
struct GNUNET_HashCode h;
const char *cached;
- struct TALER_ExchangeSigningKeyValidityPS skv = {
- .purpose.purpose = htonl (TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY),
- .purpose.size = htonl (sizeof (struct TALER_ExchangeSigningKeyValidityPS)),
+ struct ExchangeSigningKeyDataP skv = {
.start = GNUNET_TIME_timestamp_hton (es->ep_start),
.expire = GNUNET_TIME_timestamp_hton (es->ep_expire),
.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");
@@ -87,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,
@@ -111,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");
@@ -182,17 +228,19 @@ verify_and_execute_deposit_confirmation (
/* check deposit confirmation signature */
if (GNUNET_OK !=
- TALER_exchange_deposit_confirm_verify (&dc->h_contract_terms,
- &dc->h_wire,
- NULL /* h_extensions! */,
- dc->exchange_timestamp,
- dc->wire_deadline,
- dc->refund_deadline,
- &dc->amount_without_fee,
- &dc->coin_pub,
- &dc->merchant,
- &dc->exchange_pub,
- &dc->exchange_sig))
+ TALER_exchange_online_deposit_confirmation_verify (
+ &dc->h_contract_terms,
+ &dc->h_wire,
+ &dc->h_policy,
+ dc->exchange_timestamp,
+ dc->wire_deadline,
+ dc->refund_deadline,
+ &dc->total_without_fee,
+ dc->num_coins,
+ coin_sigps,
+ &dc->merchant,
+ &dc->exchange_pub,
+ &dc->exchange_sig))
{
TALER_LOG_WARNING (
"Invalid signature on /deposit-confirmation request\n");
@@ -221,55 +269,48 @@ verify_and_execute_deposit_confirmation (
}
-/**
- * Handle a "/deposit-confirmation" request. Parses the JSON, and, if
- * successful, passes the JSON data to #verify_and_execute_deposit_confirmation()
- * to further check the details of the operation specified. If
- * everything checks out, this will ultimately lead to the "/deposit-confirmation"
- * being stored in the database.
- *
- * @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 (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",
@@ -280,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,
@@ -296,36 +338,99 @@ 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;
}
}
-/**
- * Initialize subsystem.
- */
void
TEAH_DEPOSIT_CONFIRMATION_init (void)
{
@@ -335,9 +440,6 @@ TEAH_DEPOSIT_CONFIRMATION_init (void)
}
-/**
- * Shut down subsystem.
- */
void
TEAH_DEPOSIT_CONFIRMATION_done (void)
{
@@ -348,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 17c4da467..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
@@ -91,9 +91,14 @@ struct Table
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},
@@ -103,13 +108,30 @@ 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},
{ .rt = TALER_EXCHANGEDB_RT_WIRE_FEE},
+ { .rt = TALER_EXCHANGEDB_RT_GLOBAL_FEE},
{ .rt = TALER_EXCHANGEDB_RT_RECOUP},
{ .rt = TALER_EXCHANGEDB_RT_RECOUP_REFRESH },
+ { .rt = TALER_EXCHANGEDB_RT_EXTENSIONS},
+ { .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 }
};
@@ -139,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)
{
@@ -202,20 +224,16 @@ transact (void)
src->lookup_serial_by_table (src->cls,
tables[i].rt,
&tables[i].end_serial);
- if (0 >
- src->commit (src->cls))
- return GNUNET_SYSERR;
+ src->rollback (src->cls);
if (GNUNET_OK !=
- dst->start (src->cls,
+ dst->start (dst->cls,
"lookup dst serials"))
return GNUNET_SYSERR;
for (unsigned int i = 0; ! tables[i].end; i++)
dst->lookup_serial_by_table (dst->cls,
tables[i].rt,
&tables[i].start_serial);
- if (0 >
- dst->commit (dst->cls))
- return GNUNET_SYSERR;
+ dst->rollback (dst->cls);
for (unsigned int i = 0; ! tables[i].end; i++)
{
struct Table *table = &tables[i];
@@ -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 7fffcd284..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);
+
+/**
+ * Total aggregation fees (wire fees) earned.
+ */
+static TALER_ARL_DEF_AB (aggregation_total_wire_fee_revenue);
+
/**
- * Array of reports about row inconsitencies.
+ * 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;
@@ -305,14 +309,9 @@ struct WireFeeInfo
struct GNUNET_TIME_Timestamp end_date;
/**
- * How high is the wire fee.
- */
- struct TALER_Amount wire_fee;
-
- /**
- * How high is the closing fee.
+ * How high are the wire fees.
*/
- struct TALER_Amount closing_fee;
+ struct TALER_WireFeeSet fees;
};
@@ -390,12 +389,12 @@ struct WireCheckContext
* @param[out] deposit_gain amount the coin contributes excluding refunds
* @return #GNUNET_OK on success, #GNUNET_SYSERR if the transaction must fail (hard error)
*/
-static int
+static enum GNUNET_GenericReturnValue
check_transaction_history_for_deposit (
const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_PrivateContractHash *h_contract_terms,
+ const struct TALER_PrivateContractHashP *h_contract_terms,
const struct TALER_MerchantPublicKeyP *merchant_pub,
- const struct TALER_DenominationKeyValidityPS *issue,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue,
const struct TALER_EXCHANGEDB_TransactionList *tl_head,
struct TALER_Amount *merchant_gain,
struct TALER_Amount *deposit_gain)
@@ -403,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",
@@ -426,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,
@@ -455,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,
@@ -466,120 +474,168 @@ check_transaction_history_for_deposit (
deposit_fee = fee_claimed; /* We had a deposit, remember the fee, we may need it */
}
/* Check that the fees given in the transaction list and in dki match */
+ if (0 !=
+ TALER_amount_cmp (&issue->fees.deposit,
+ fee_claimed))
{
- struct TALER_Amount fee_expected;
+ /* Disagreement in fee structure between auditor and exchange DB! */
+ report_amount_arithmetic_inconsistency ("deposit fee",
+ 0,
+ fee_claimed,
+ &issue->fees.deposit,
+ 1);
+ }
+ break;
+ case TALER_EXCHANGEDB_TT_MELT:
+ {
+ const struct TALER_Amount *amount_with_fee;
- /* Fee according to denomination data of auditor */
- TALER_amount_ntoh (&fee_expected,
- &issue->fee_deposit);
+ 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 (&fee_expected,
+ TALER_amount_cmp (&issue->fees.refresh,
fee_claimed))
{
- /* Disagreement in fee structure between auditor and exchange DB! */
- report_amount_arithmetic_inconsistency ("deposit fee",
+ /* Disagreement in fee structure between exchange and auditor */
+ report_amount_arithmetic_inconsistency ("melt fee",
0,
fee_claimed,
- &fee_expected,
+ &issue->fees.refresh,
1);
}
+ break;
}
- 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 */
+ case TALER_EXCHANGEDB_TT_REFUND:
{
- struct TALER_Amount fee_expected;
+ const struct TALER_Amount *amount_with_fee;
- TALER_amount_ntoh (&fee_expected,
- &issue->fee_refresh);
+ 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,
+ amount_with_fee);
+ }
+ /* Check that the fees given in the transaction list and in dki match */
if (0 !=
- TALER_amount_cmp (&fee_expected,
+ TALER_amount_cmp (&issue->fees.refund,
fee_claimed))
{
- /* Disagreement in fee structure between exchange and auditor */
- report_amount_arithmetic_inconsistency ("melt fee",
+ /* Disagreement in fee structure between exchange and auditor! */
+ report_amount_arithmetic_inconsistency ("refund fee",
0,
fee_claimed,
- &fee_expected,
+ &issue->fees.refund,
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)) )
+ case TALER_EXCHANGEDB_TT_OLD_COIN_RECOUP:
{
- 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.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);
- /* If there is a refund, we give back the deposit fee */
- refund_deposit_fee = GNUNET_YES;
+ break;
}
- /* Check that the fees given in the transaction list and in dki match */
+ case TALER_EXCHANGEDB_TT_RECOUP:
{
- struct TALER_Amount fee_expected;
+ const struct TALER_Amount *amount_with_fee;
- TALER_amount_ntoh (&fee_expected,
- &issue->fee_refund);
+ /* 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:
+ {
+ 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 (&fee_expected,
+ 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,
- &fee_expected,
+ &issue->fees.refund,
1);
}
+ 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;
- 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;
- }
+
+ 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,
@@ -589,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);
@@ -646,18 +706,14 @@ check_transaction_history_for_deposit (
else
{
/* Now check that 'spent' is less or equal than the total coin value */
- struct TALER_Amount value;
-
- TALER_amount_ntoh (&value,
- &issue->value);
if (1 == TALER_amount_cmp (&spent,
- &value))
+ &issue->value))
{
/* spent > value */
report_coin_arithmetic_inconsistency ("spend",
coin_pub,
&spent,
- &value,
+ &issue->value,
-1);
}
}
@@ -683,6 +739,7 @@ check_transaction_history_for_deposit (
* @param rowid which row in the table is the information from (for diagnostics)
* @param merchant_pub public key of the merchant (should be same for all callbacks with the same @e cls)
* @param account_pay_uri where did we transfer the funds?
+ * @param h_payto hash over @a account_payto_uri as it is in the DB
* @param exec_time execution time of the wire transfer (should be same for all callbacks with the same @e cls)
* @param h_contract_terms which proposal was this payment about
* @param denom_pub denomination of @a coin_pub
@@ -698,26 +755,52 @@ wire_transfer_information_cb (
uint64_t rowid,
const struct TALER_MerchantPublicKeyP *merchant_pub,
const char *account_pay_uri,
+ const struct TALER_PaytoHashP *h_payto,
struct GNUNET_TIME_Timestamp exec_time,
- const struct TALER_PrivateContractHash *h_contract_terms,
+ const struct TALER_PrivateContractHashP *h_contract_terms,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct TALER_Amount *coin_value,
const struct TALER_Amount *deposit_fee)
{
struct WireCheckContext *wcc = cls;
- const struct TALER_DenominationKeyValidityPS *issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
struct TALER_Amount computed_value;
struct TALER_Amount total_deposit_without_refunds;
struct TALER_EXCHANGEDB_TransactionList *tl;
struct TALER_CoinPublicInfo coin;
enum GNUNET_DB_QueryStatus qs;
-
+ struct TALER_PaytoHashP hpt;
+ uint64_t etag_out;
+
+ TALER_payto_hash (account_pay_uri,
+ &hpt);
+ if (0 !=
+ GNUNET_memcmp (&hpt,
+ h_payto))
+ {
+ report_row_inconsistency ("wire_targets",
+ rowid,
+ "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) )
{
@@ -898,7 +981,7 @@ get_wire_fee (struct AggregationContext *ac,
GNUNET_TIME_timestamp_cmp (pos->end_date,
>,
timestamp) )
- return &pos->wire_fee;
+ return &pos->fees.wire;
if (GNUNET_TIME_timestamp_cmp (pos->start_date,
>,
timestamp))
@@ -913,8 +996,7 @@ get_wire_fee (struct AggregationContext *ac,
timestamp,
&wfi->start_date,
&wfi->end_date,
- &wfi->wire_fee,
- &wfi->closing_fee,
+ &wfi->fees,
&master_sig))
{
GNUNET_break (0);
@@ -931,8 +1013,7 @@ get_wire_fee (struct AggregationContext *ac,
method,
wfi->start_date,
wfi->end_date,
- &wfi->wire_fee,
- &wfi->closing_fee,
+ &wfi->fees,
&TALER_ARL_master_pub,
&master_sig))
{
@@ -945,7 +1026,7 @@ get_wire_fee (struct AggregationContext *ac,
/* Established fee, keep in sorted list */
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Wire fee is %s starting at %s\n",
- TALER_amount2s (&wfi->wire_fee),
+ TALER_amount2s (&wfi->fees.wire),
GNUNET_TIME_timestamp2s (wfi->start_date));
if ( (NULL == pos) ||
(NULL == pos->prev) )
@@ -986,7 +1067,7 @@ get_wire_fee (struct AggregationContext *ac,
TALER_JSON_pack_time_abs_human ("time",
wfi->end_date.abs_time)));
}
- return &wfi->wire_fee;
+ return &wfi->fees.wire;
}
@@ -1018,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",
@@ -1106,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 */
@@ -1179,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);
@@ -1194,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);
@@ -1214,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)
@@ -1240,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,
@@ -1273,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;
}
@@ -1308,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));
@@ -1402,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",
@@ -1439,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 3473a8284..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",
@@ -276,7 +258,7 @@ get_cached_history (const struct TALER_CoinSpendPublicKeyP *coin_pub)
*/
static void
report_emergency_by_amount (
- const struct TALER_DenominationKeyValidityPS *issue,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue,
const struct TALER_Amount *risk,
const struct TALER_Amount *loss)
{
@@ -293,12 +275,12 @@ report_emergency_by_amount (
risk),
TALER_JSON_pack_amount ("denom_loss",
loss),
- TALER_JSON_pack_time_abs_nbo_human ("start",
- issue->start.abs_time_nbo),
- TALER_JSON_pack_time_abs_nbo_human ("deposit_end",
- issue->expire_deposit.abs_time_nbo),
- TALER_JSON_pack_amount_nbo ("value",
- &issue->value)));
+ TALER_JSON_pack_time_abs_human ("start",
+ issue->start.abs_time),
+ TALER_JSON_pack_time_abs_human ("deposit_end",
+ issue->expire_deposit.abs_time),
+ TALER_JSON_pack_amount ("value",
+ &issue->value)));
TALER_ARL_amount_add (&reported_emergency_risk_by_amount,
&reported_emergency_risk_by_amount,
risk);
@@ -324,13 +306,11 @@ report_emergency_by_amount (
*/
static void
report_emergency_by_count (
- const struct TALER_DenominationKeyValidityPS *issue,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue,
uint64_t num_issued,
uint64_t num_known,
const struct TALER_Amount *risk)
{
- struct TALER_Amount denom_value;
-
TALER_ARL_report (
report_emergencies_by_count,
GNUNET_JSON_PACK (
@@ -342,21 +322,19 @@ report_emergency_by_count (
num_known),
TALER_JSON_pack_amount ("denom_risk",
risk),
- TALER_JSON_pack_time_abs_nbo_human ("start",
- issue->start.abs_time_nbo),
- TALER_JSON_pack_time_abs_nbo_human ("deposit_end",
- issue->expire_deposit.abs_time_nbo),
- TALER_JSON_pack_amount_nbo ("value",
- &issue->value)));
+ TALER_JSON_pack_time_abs_human ("start",
+ issue->start.abs_time),
+ TALER_JSON_pack_time_abs_human ("deposit_end",
+ issue->expire_deposit.abs_time),
+ TALER_JSON_pack_amount ("value",
+ &issue->value)));
TALER_ARL_amount_add (&reported_emergency_risk_by_count,
&reported_emergency_risk_by_count,
risk);
- TALER_amount_ntoh (&denom_value,
- &issue->value);
for (uint64_t i = num_issued; i<num_known; i++)
TALER_ARL_amount_add (&reported_emergency_loss_by_count,
&reported_emergency_loss_by_count,
- &denom_value);
+ &issue->value);
}
@@ -475,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;
+
+ /* 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,
- GNUNET_YES,
- &tl);
+ 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));
@@ -493,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)
@@ -521,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 */
@@ -541,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)
{
@@ -593,56 +603,32 @@ 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.
*/
- const struct TALER_DenominationKeyValidityPS *issue;
+ 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;
};
@@ -673,7 +659,7 @@ struct CoinContext
* @return transaction status code
*/
static enum GNUNET_DB_QueryStatus
-init_denomination (const struct TALER_DenominationHash *denom_hash,
+init_denomination (const struct TALER_DenominationHashP *denom_hash,
struct DenominationSummary *ds)
{
enum GNUNET_DB_QueryStatus qs;
@@ -682,11 +668,7 @@ init_denomination (const struct TALER_DenominationHash *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);
@@ -694,28 +676,28 @@ init_denomination (const struct TALER_DenominationHash *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,
@@ -740,10 +722,10 @@ init_denomination (const struct TALER_DenominationHash *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;
}
@@ -758,9 +740,10 @@ init_denomination (const struct TALER_DenominationHash *denom_hash,
* @return NULL on error
*/
static struct DenominationSummary *
-get_denomination_summary (struct CoinContext *cc,
- const struct TALER_DenominationKeyValidityPS *issue,
- const struct TALER_DenominationHash *dh)
+get_denomination_summary (
+ struct CoinContext *cc,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue,
+ const struct TALER_DenominationHashP *dh)
{
struct DenominationSummary *ds;
@@ -802,18 +785,18 @@ sync_denomination (void *cls,
void *value)
{
struct CoinContext *cc = cls;
- struct TALER_DenominationHash denom_h = {
+ struct TALER_DenominationHashP denom_h = {
.hash = *denom_hash
};
struct DenominationSummary *ds = value;
- const struct TALER_DenominationKeyValidityPS *issue = ds->issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue = ds->issue;
struct GNUNET_TIME_Absolute now;
struct GNUNET_TIME_Timestamp expire_deposit;
struct GNUNET_TIME_Absolute expire_deposit_grace;
enum GNUNET_DB_QueryStatus qs;
now = GNUNET_TIME_absolute_get ();
- expire_deposit = GNUNET_TIME_timestamp_ntoh (issue->expire_deposit);
+ expire_deposit = issue->expire_deposit;
/* add day grace period to deal with clocks not being perfectly synchronized */
expire_deposit_grace = GNUNET_TIME_absolute_add (expire_deposit.abs_time,
DEPOSIT_GRACE_PERIOD);
@@ -829,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);
@@ -877,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)
@@ -890,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)
@@ -963,7 +935,7 @@ sync_denomination (void *cls,
static enum GNUNET_GenericReturnValue
withdraw_cb (void *cls,
uint64_t rowid,
- const struct TALER_BlindedCoinHash *h_blind_ev,
+ const struct TALER_BlindedCoinHashP *h_blind_ev,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_ReserveSignatureP *reserve_sig,
@@ -972,9 +944,8 @@ withdraw_cb (void *cls,
{
struct CoinContext *cc = cls;
struct DenominationSummary *ds;
- struct TALER_DenominationHash dh;
- const struct TALER_DenominationKeyValidityPS *issue;
- struct TALER_Amount value;
+ struct TALER_DenominationHashP dh;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
enum GNUNET_DB_QueryStatus qs;
/* Note: some optimization potential here: lots of fields we
@@ -985,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,29 +988,27 @@ withdraw_cb (void *cls,
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == cc->qs);
return GNUNET_SYSERR;
}
- TALER_amount_ntoh (&value,
- &issue->value);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Issued coin in denomination `%s' of total value %s\n",
GNUNET_h2s (&dh.hash),
- TALER_amount2s (&value));
- ds->num_issued++;
- TALER_ARL_amount_add (&ds->denom_balance,
- &ds->denom_balance,
- &value);
+ TALER_amount2s (&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,
- &value);
- TALER_ARL_amount_add (&total_risk,
- &total_risk,
- &value);
- TALER_ARL_amount_add (&ds->denom_risk,
- &ds->denom_risk,
- &value);
+ 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 (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
+ &issue->value);
+ 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;
return GNUNET_OK;
@@ -1054,7 +1024,7 @@ struct RevealContext
/**
* Denomination public data of the new coins.
*/
- const struct TALER_DenominationKeyValidityPS **new_issues;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation **new_issues;
/**
* Set to the size of the @a new_issues array.
@@ -1071,7 +1041,7 @@ struct RevealContext
* #GNUNET_NO if a denomination key was not found
* #GNUNET_SYSERR if we had a database error.
*/
- int err;
+ enum GNUNET_GenericReturnValue err;
/**
* Database error, if @e err is #GNUNET_SYSERR.
@@ -1086,9 +1056,6 @@ struct RevealContext
* @param cls closure with a `struct RevealContext *` in it
* @param num_freshcoins size of the @a rrcs array
* @param rrcs array of @a num_freshcoins information about coins to be created
- * @param num_tprivs number of entries in @a tprivs, should be #TALER_CNC_KAPPA - 1
- * @param tprivs array of @e num_tprivs transfer private keys
- * @param tp transfer public key information
*/
static void
reveal_data_cb (void *cls,
@@ -1100,7 +1067,7 @@ reveal_data_cb (void *cls,
rctx->num_freshcoins = num_freshcoins;
rctx->new_issues = GNUNET_new_array (
num_freshcoins,
- const struct TALER_DenominationKeyValidityPS *);
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *);
/* Update outstanding amounts for all new coin's denominations */
for (unsigned int i = 0; i<num_freshcoins; i++)
@@ -1143,26 +1110,23 @@ 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_DenominationKeyValidityPS *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;
if (NULL == get_cached_history (coin_pub))
{
- struct TALER_Amount value;
-
- TALER_amount_ntoh (&value,
- &issue->value);
qs = check_coin_history (coin_pub,
rowid,
operation,
- &value);
+ &issue->value);
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -1197,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);
@@ -1207,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
@@ -1216,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
@@ -1223,10 +1247,11 @@ 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,
+ const struct TALER_AgeCommitmentHash *h_age_commitment,
const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct TALER_CoinSpendSignatureP *coin_sig,
const struct TALER_Amount *amount_with_fee,
@@ -1234,15 +1259,15 @@ refresh_session_cb (void *cls,
const struct TALER_RefreshCommitmentP *rc)
{
struct CoinContext *cc = cls;
- const struct TALER_DenominationKeyValidityPS *issue;
+ 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,
@@ -1277,21 +1302,20 @@ refresh_session_cb (void *cls,
/* verify melt signature */
{
- struct TALER_DenominationHash h_denom_pub;
- struct TALER_Amount fee_refresh;
+ struct TALER_DenominationHashP h_denom_pub;
TALER_denom_pub_hash (denom_pub,
&h_denom_pub);
- TALER_amount_ntoh (&fee_refresh,
- &issue->fee_refresh);
if (GNUNET_OK !=
TALER_wallet_melt_verify (amount_with_fee,
- &fee_refresh,
+ &issue->fees.refresh,
rc,
&h_denom_pub,
+ h_age_commitment,
coin_pub,
coin_sig))
{
+ GNUNET_break_op (0);
TALER_ARL_report (report_bad_sig_losses,
GNUNET_JSON_PACK (
GNUNET_JSON_pack_string ("operation",
@@ -1302,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);
}
}
@@ -1336,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),
@@ -1371,53 +1395,44 @@ refresh_session_cb (void *cls,
&refresh_cost));
for (unsigned int i = 0; i<reveal_ctx.num_freshcoins; i++)
{
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *ni
+ = reveal_ctx.new_issues[i];
/* update cost of refresh */
- struct TALER_Amount fee;
- struct TALER_Amount value;
- TALER_amount_ntoh (&fee,
- &reveal_ctx.new_issues[i]->fee_withdraw);
- TALER_amount_ntoh (&value,
- &reveal_ctx.new_issues[i]->value);
TALER_ARL_amount_add (&refresh_cost,
&refresh_cost,
- &fee);
+ &ni->fees.withdraw);
TALER_ARL_amount_add (&refresh_cost,
&refresh_cost,
- &value);
+ &ni->value);
}
/* compute contribution of old coin */
+ if (TALER_ARL_SR_POSITIVE !=
+ TALER_ARL_amount_subtract_neg (&amount_without_fee,
+ amount_with_fee,
+ &issue->fees.refresh))
{
- struct TALER_Amount melt_fee;
-
- TALER_amount_ntoh (&melt_fee,
- &issue->fee_refresh);
- if (TALER_ARL_SR_POSITIVE !=
- TALER_ARL_amount_subtract_neg (&amount_without_fee,
- amount_with_fee,
- &melt_fee))
- {
- /* Melt fee higher than contribution of melted coin; this makes
- no sense (exchange should never have accepted the operation) */
- report_amount_arithmetic_inconsistency ("melt contribution vs. fee",
- rowid,
- amount_with_fee,
- &melt_fee,
- -1);
- /* To continue, best assumption is the melted coin contributed
- nothing (=> all withdrawal amounts will be counted as losses) */
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (TALER_ARL_currency,
- &amount_without_fee));
- }
+ /* Melt fee higher than contribution of melted coin; this makes
+ no sense (exchange should never have accepted the operation) */
+ report_amount_arithmetic_inconsistency ("melt contribution vs. fee",
+ rowid,
+ amount_with_fee,
+ &issue->fees.refresh,
+ -1);
+ /* To continue, best assumption is the melted coin contributed
+ nothing (=> all withdrawal amounts will be counted as losses) */
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &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' */
@@ -1428,12 +1443,13 @@ refresh_session_cb (void *cls,
/* update outstanding denomination amounts for fresh coins withdrawn */
for (unsigned int i = 0; i<reveal_ctx.num_freshcoins; i++)
{
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *ni
+ = reveal_ctx.new_issues[i];
struct DenominationSummary *dsi;
- struct TALER_Amount value;
dsi = get_denomination_summary (cc,
- reveal_ctx.new_issues[i],
- &reveal_ctx.new_issues[i]->denom_hash);
+ ni,
+ &ni->denom_hash);
if (NULL == dsi)
{
report_row_inconsistency ("refresh_reveal",
@@ -1442,29 +1458,27 @@ refresh_session_cb (void *cls,
}
else
{
- TALER_amount_ntoh (&value,
- &reveal_ctx.new_issues[i]->value);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Created fresh coin in denomination `%s' of value %s\n",
- GNUNET_h2s (&reveal_ctx.new_issues[i]->denom_hash.hash),
- TALER_amount2s (&value));
- dsi->num_issued++;
- TALER_ARL_amount_add (&dsi->denom_balance,
- &dsi->denom_balance,
- &value);
- TALER_ARL_amount_add (&dsi->denom_risk,
- &dsi->denom_risk,
- &value);
+ GNUNET_h2s (&ni->denom_hash.hash),
+ TALER_amount2s (&ni->value));
+ dsi->dcd.num_issued++;
+ TALER_ARL_amount_add (&dsi->dcd.denom_balance,
+ &dsi->dcd.denom_balance,
+ &ni->value);
+ 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 (&reveal_ctx.new_issues[i]->denom_hash.hash),
- TALER_amount2s (&dsi->denom_balance));
- TALER_ARL_amount_add (&total_escrow_balance,
- &total_escrow_balance,
- &value);
- TALER_ARL_amount_add (&total_risk,
- &total_risk,
- &value);
+ GNUNET_h2s (&ni->denom_hash.hash),
+ 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 (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
+ &ni->value);
}
}
GNUNET_free (reveal_ctx.new_issues);
@@ -1482,58 +1496,15 @@ 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 */
- {
- struct TALER_Amount rfee;
-
- TALER_amount_ntoh (&rfee,
- &issue->fee_refresh);
- TALER_ARL_amount_add (&total_melt_fee_income,
- &total_melt_fee_income,
- &rfee);
- }
+ 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;
return GNUNET_OK;
@@ -1561,14 +1532,15 @@ deposit_cb (void *cls,
bool done)
{
struct CoinContext *cc = cls;
- const struct TALER_DenominationKeyValidityPS *issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
struct DenominationSummary *ds;
enum GNUNET_DB_QueryStatus qs;
(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,
@@ -1612,26 +1584,27 @@ deposit_cb (void *cls,
/* Verify deposit signature */
{
- struct TALER_MerchantWireHash h_wire;
- struct TALER_DenominationHash h_denom_pub;
- struct TALER_Amount deposit_fee;
+ struct TALER_MerchantWireHashP h_wire;
+ struct TALER_DenominationHashP h_denom_pub;
TALER_denom_pub_hash (denom_pub,
&h_denom_pub);
TALER_merchant_wire_signature_hash (deposit->receiver_wire_account,
&deposit->wire_salt,
&h_wire);
- TALER_amount_ntoh (&deposit_fee,
- &issue->fee_deposit);
/* NOTE: This is one of the operations we might eventually
want to do in parallel in the background to improve
auditor performance! */
if (GNUNET_OK !=
TALER_wallet_deposit_verify (&deposit->amount_with_fee,
- &deposit_fee,
+ &issue->fees.deposit,
&h_wire,
&deposit->h_contract_terms,
- NULL /* h_extensions! */,
+ deposit->no_wallet_data_hash
+ ? NULL
+ : &deposit->wallet_data_hash,
+ &deposit->coin.h_age_commitment,
+ &deposit->h_policy,
&h_denom_pub,
deposit->timestamp,
&deposit->merchant_pub,
@@ -1649,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;
@@ -1675,62 +1648,15 @@ 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 */
- {
- struct TALER_Amount dfee;
-
- TALER_amount_ntoh (&dfee,
- &issue->fee_deposit);
- TALER_ARL_amount_add (&total_deposit_fee_income,
- &total_deposit_fee_income,
- &dfee);
- }
+ 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;
@@ -1751,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
*/
@@ -1761,19 +1688,19 @@ refund_cb (void *cls,
const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct TALER_MerchantPublicKeyP *merchant_pub,
const struct TALER_MerchantSignatureP *merchant_sig,
- const struct TALER_PrivateContractHash *h_contract_terms,
+ 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;
- const struct TALER_DenominationKeyValidityPS *issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
struct DenominationSummary *ds;
struct TALER_Amount amount_without_fee;
- struct TALER_Amount refund_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,
@@ -1812,25 +1739,23 @@ 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;
return GNUNET_OK;
}
- TALER_amount_ntoh (&refund_fee,
- &issue->fee_refund);
if (TALER_ARL_SR_INVALID_NEGATIVE ==
TALER_ARL_amount_subtract_neg (&amount_without_fee,
amount_with_fee,
- &refund_fee))
+ &issue->fees.refund))
{
report_amount_arithmetic_inconsistency ("refund (fee)",
rowid,
&amount_without_fee,
- &refund_fee,
+ &issue->fees.refund,
-1);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
@@ -1855,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,
- &refund_fee);
+ 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;
@@ -1904,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_DenominationKeyValidityPS *issue;
+ 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))
{
@@ -1924,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,
@@ -1959,29 +2027,6 @@ check_recoup (struct CoinContext *cc,
cc->qs = qs;
return GNUNET_SYSERR;
}
- if (GNUNET_OK !=
- TALER_wallet_recoup_verify (&coin->denom_pub_hash,
- coin_blind,
- &coin->coin_pub,
- coin_sig))
- {
- TALER_ARL_report (report_bad_sig_losses,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("operation",
- operation),
- GNUNET_JSON_pack_uint64 ("row",
- rowid),
- TALER_JSON_pack_amount ("loss",
- amount),
- GNUNET_JSON_pack_data_auto ("coin_pub",
- &coin->coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
- amount);
- if (TALER_ARL_do_abort ())
- return GNUNET_SYSERR;
- return GNUNET_OK;
- }
ds = get_denomination_summary (cc,
issue,
&issue->denom_hash);
@@ -1993,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,
@@ -2008,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 ())
@@ -2039,7 +2084,7 @@ check_recoup (struct CoinContext *cc,
* @param coin_blind blinding factor used to blind the coin
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
recoup_cb (void *cls,
uint64_t rowid,
struct GNUNET_TIME_Timestamp timestamp,
@@ -2048,14 +2093,37 @@ 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 !=
+ TALER_wallet_recoup_verify (&coin->denom_pub_hash,
+ coin_blind,
+ &coin->coin_pub,
+ coin_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "recoup"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ amount),
+ GNUNET_JSON_pack_data_auto ("coin_pub",
+ &coin->coin_pub)));
+ 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;
+ return GNUNET_OK;
+ }
return check_recoup (cc,
"recoup",
rowid,
@@ -2089,20 +2157,20 @@ recoup_refresh_cb (void *cls,
struct GNUNET_TIME_Timestamp timestamp,
const struct TALER_Amount *amount,
const struct TALER_CoinSpendPublicKeyP *old_coin_pub,
- const struct TALER_DenominationHash *old_denom_pub_hash,
+ const struct TALER_DenominationHashP *old_denom_pub_hash,
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_DenominationKeyValidityPS *issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
enum GNUNET_DB_QueryStatus qs;
(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));
@@ -2137,16 +2205,39 @@ 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));
}
}
+ if (GNUNET_OK !=
+ TALER_wallet_recoup_refresh_verify (&coin->denom_pub_hash,
+ coin_blind,
+ &coin->coin_pub,
+ coin_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "recoup-refresh"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ amount),
+ GNUNET_JSON_pack_data_auto ("coin_pub",
+ &coin->coin_pub)));
+ 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;
+ return GNUNET_OK;
+ }
return check_recoup (cc,
"recoup-refresh",
rowid,
@@ -2166,52 +2257,37 @@ 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 (
void *cls,
const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_EXCHANGEDB_DenominationKeyInformationP *validity)
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue)
{
- const struct TALER_DenominationKeyValidityPS *issue = &validity->properties;
enum GNUNET_DB_QueryStatus qs;
struct TALER_AuditorSignatureP auditor_sig;
- struct TALER_Amount coin_value;
- struct TALER_Amount fee_withdraw;
- struct TALER_Amount fee_deposit;
- struct TALER_Amount fee_refresh;
- struct TALER_Amount fee_refund;
- struct GNUNET_TIME_Timestamp start;
- struct GNUNET_TIME_Timestamp end;
(void) cls;
(void) denom_pub;
- TALER_amount_ntoh (&coin_value,
- &issue->value);
- TALER_amount_ntoh (&fee_withdraw,
- &issue->fee_withdraw);
- TALER_amount_ntoh (&fee_deposit,
- &issue->fee_deposit);
- TALER_amount_ntoh (&fee_refresh,
- &issue->fee_refresh);
- TALER_amount_ntoh (&fee_refund,
- &issue->fee_refund);
- start = GNUNET_TIME_timestamp_ntoh (issue->start);
- end = GNUNET_TIME_timestamp_ntoh (issue->expire_legal);
qs = TALER_ARL_edb->select_auditor_denom_sig (TALER_ARL_edb->cls,
&issue->denom_hash,
&TALER_ARL_auditor_pub,
&auditor_sig);
- if (0 >= qs)
+ if (0 > qs)
+ {
+ GNUNET_break (0);
+ return; /* skip! */
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Encountered denomination `%s' (%s) valid from %s (%llu-%llu) that this auditor is not auditing!\n",
GNUNET_h2s (&issue->denom_hash.hash),
- TALER_amount2s (&coin_value),
- GNUNET_TIME_timestamp2s (start),
- (unsigned long long) start.abs_time.abs_value_us,
- (unsigned long long) end.abs_time.abs_value_us);
+ TALER_amount2s (&issue->value),
+ GNUNET_TIME_timestamp2s (issue->start),
+ (unsigned long long) issue->start.abs_time.abs_value_us,
+ (unsigned long long) issue->expire_legal.abs_time.abs_value_us);
return; /* skip! */
}
if (GNUNET_OK !=
@@ -2219,15 +2295,12 @@ check_denomination (
TALER_ARL_auditor_url,
&issue->denom_hash,
&TALER_ARL_master_pub,
- start,
- GNUNET_TIME_timestamp_ntoh (issue->expire_withdraw),
- GNUNET_TIME_timestamp_ntoh (issue->expire_deposit),
- end,
- &coin_value,
- &fee_withdraw,
- &fee_deposit,
- &fee_refresh,
- &fee_refund,
+ issue->start,
+ issue->expire_withdraw,
+ issue->expire_deposit,
+ issue->expire_legal,
+ &issue->value,
+ &issue->fees,
&TALER_ARL_auditor_pub,
&auditor_sig))
{
@@ -2236,12 +2309,134 @@ check_denomination (
GNUNET_JSON_pack_data_auto ("denomination",
&issue->denom_hash),
TALER_JSON_pack_amount ("value",
- &coin_value),
+ &issue->value),
TALER_JSON_pack_time_abs_human ("start_time",
- start.abs_time),
+ issue->start.abs_time),
TALER_JSON_pack_time_abs_human ("end_time",
- end.abs_time)));
+ issue->expire_legal.
+ abs_time)));
+ }
+}
+
+
+/**
+ * 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;
}
@@ -2272,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);
@@ -2287,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);
@@ -2320,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)) )
{
@@ -2334,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)))
{
@@ -2344,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)))
{
@@ -2360,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)))
{
@@ -2370,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)))
{
@@ -2386,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)))
{
@@ -2398,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,
@@ -2410,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);
@@ -2436,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,
@@ -2451,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;
}
@@ -2502,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));
@@ -2529,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 ()));
@@ -2547,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))
@@ -2560,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),
@@ -2593,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),
@@ -2611,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)));
}
@@ -2662,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 610193187..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;
@@ -491,7 +533,7 @@ handle_reserve_in (void *cls,
static enum GNUNET_GenericReturnValue
handle_reserve_out (void *cls,
uint64_t rowid,
- const struct TALER_BlindedCoinHash *h_blind_ev,
+ const struct TALER_BlindedCoinHashP *h_blind_ev,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_ReserveSignatureP *reserve_sig,
@@ -499,31 +541,21 @@ 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_DenominationKeyValidityPS *issue;
- struct TALER_Amount withdraw_fee;
- struct TALER_Amount auditor_value;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
struct TALER_Amount auditor_amount_with_fee;
- struct GNUNET_TIME_Timestamp valid_start;
- struct GNUNET_TIME_Timestamp expire_withdraw;
enum GNUNET_DB_QueryStatus qs;
- struct TALER_WithdrawRequestPS wsrd = {
- .purpose.purpose = htonl (TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW),
- .purpose.size = htonl (sizeof (wsrd)),
- .reserve_pub = *reserve_pub,
- .h_coin_envelope = *h_blind_ev
- };
+ 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! */
qs = TALER_ARL_get_denomination_info (denom_pub,
&issue,
- &wsrd.h_denomination_pub);
+ &h_denom_pub);
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -546,17 +578,15 @@ handle_reserve_out (void *cls,
}
/* check that execution date is within withdraw range for denom_pub */
- valid_start = GNUNET_TIME_timestamp_ntoh (issue->start);
- expire_withdraw = GNUNET_TIME_timestamp_ntoh (issue->expire_withdraw);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Checking withdraw timing: %llu, expire: %llu, timing: %llu\n",
- (unsigned long long) valid_start.abs_time.abs_value_us,
- (unsigned long long) expire_withdraw.abs_time.abs_value_us,
+ (unsigned long long) issue->start.abs_time.abs_value_us,
+ (unsigned long long) issue->expire_withdraw.abs_time.abs_value_us,
(unsigned long long) execution_date.abs_time.abs_value_us);
- if (GNUNET_TIME_timestamp_cmp (valid_start,
+ if (GNUNET_TIME_timestamp_cmp (issue->start,
>,
execution_date) ||
- GNUNET_TIME_timestamp_cmp (expire_withdraw,
+ GNUNET_TIME_timestamp_cmp (issue->expire_withdraw,
<,
execution_date))
{
@@ -569,17 +599,16 @@ handle_reserve_out (void *cls,
GNUNET_JSON_pack_data_auto ("reserve_pub",
reserve_pub),
GNUNET_JSON_pack_data_auto ("denompub_h",
- &wsrd.h_denomination_pub)));
+ &h_denom_pub)));
}
/* check reserve_sig (first: setup remaining members of wsrd) */
- TALER_amount_hton (&wsrd.amount_with_fee,
- amount_with_fee);
if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW,
- &wsrd,
- &reserve_sig->eddsa_signature,
- &reserve_pub->eddsa_pub))
+ TALER_wallet_withdraw_verify (&h_denom_pub,
+ amount_with_fee,
+ h_blind_ev,
+ reserve_pub,
+ reserve_sig))
{
TALER_ARL_report (report_bad_sig_losses,
GNUNET_JSON_PACK (
@@ -596,16 +625,12 @@ 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_amount_ntoh (&withdraw_fee,
- &issue->fee_withdraw);
- TALER_amount_ntoh (&auditor_value,
- &issue->value);
TALER_ARL_amount_add (&auditor_amount_with_fee,
- &auditor_value,
- &withdraw_fee);
+ &issue->value,
+ &issue->fees.withdraw);
if (0 !=
TALER_amount_cmp (&auditor_amount_with_fee,
amount_with_fee))
@@ -614,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",
@@ -658,10 +652,16 @@ handle_reserve_out (void *cls,
TALER_amount2s (&auditor_amount_with_fee));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Increasing withdraw profits by fee %s\n",
- TALER_amount2s (&withdraw_fee));
- TALER_ARL_amount_add (&rs->total_fee,
- &rs->total_fee,
- &withdraw_fee);
+ TALER_amount2s (&issue->fees.withdraw));
+ 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;
@@ -694,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;
@@ -707,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 !=
@@ -752,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
@@ -770,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 (
@@ -800,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),
@@ -868,7 +843,7 @@ get_closing_fee (const char *receiver_account,
struct TALER_MasterSignatureP master_sig;
struct GNUNET_TIME_Timestamp start_date;
struct GNUNET_TIME_Timestamp end_date;
- struct TALER_Amount wire_fee;
+ struct TALER_WireFeeSet fees;
char *method;
method = TALER_payto_get_method (receiver_account);
@@ -881,8 +856,7 @@ get_closing_fee (const char *receiver_account,
atime,
&start_date,
&end_date,
- &wire_fee,
- fee,
+ &fees,
&master_sig))
{
char *diag;
@@ -898,12 +872,95 @@ get_closing_fee (const char *receiver_account,
GNUNET_free (method);
return GNUNET_SYSERR;
}
+ *fee = fees.closing;
GNUNET_free (method);
return GNUNET_OK;
}
/**
+ * 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.
*
@@ -915,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,
@@ -926,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,
@@ -995,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),
@@ -1020,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.
*
@@ -1030,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 (
@@ -1069,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)
@@ -1080,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
@@ -1094,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",
@@ -1111,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,
@@ -1132,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);
@@ -1144,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) */
@@ -1204,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 (!)
@@ -1231,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);
@@ -1269,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
@@ -1280,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)
@@ -1303,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,
@@ -1331,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);
@@ -1346,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);
@@ -1368,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)
@@ -1381,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)
@@ -1391,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)
@@ -1399,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)
@@ -1409,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);
@@ -1417,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)
{
@@ -1441,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,
@@ -1456,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;
}
@@ -1506,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));
@@ -1534,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 !=
@@ -1546,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 !=
@@ -1562,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",
@@ -1576,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),
@@ -1602,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))));
}
@@ -1647,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 89758c2fc..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 wire_off_out;
+
+ /**
+ * Label under which we store our pp's reserve_in_serial_id.
+ */
+ char *label_reserve_in_serial_id;
+
+ /**
+ * Label under which we store our pp's reserve_in_serial_id.
*/
- uint64_t in_wire_off;
+ char *label_wire_out_serial_id;
/**
- * Where we are in the inbound (DEBIT) transaction history.
+ * Label under which we store our wire_off_in.
*/
- uint64_t out_wire_off;
+ 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,74 +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 tiny did the exchange defer this transfer because it is too small?
- * NOTE: only valid in internal audit mode!
- * @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 tiny,
- 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;
- (void) cls;
+ 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;
+
+ /* For now, we simplify and only check that the
+ amount was tiny */
+ if (0 > TALER_amount_cmp (&rd->total_amount,
+ &tiny_amount))
+ 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,
- amount);
- if (internal_checks)
+ &rd->total_amount);
+ if (NULL != rd->kyc_pending)
{
- /* In internal mode, we insist that the entry was
- actually marked as tiny. */
- if (tiny &&
- (0 > TALER_amount_cmp (amount,
- &tiny_amount)) )
- return; /* acceptable, amount was tiny */
+ 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
{
- /* External auditors do not replicate tiny, so they
- only check that the amount is tiny */
- if (0 > TALER_amount_cmp (amount,
- &tiny_amount))
- return; /* acceptable, amount was tiny */
+ 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);
}
- 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);
+}
+
+
+/**
+ * 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
{
- /* the 'done' bit is only useful in 'internal' mode */
- GNUNET_assert (0 ==
- json_object_set (rep,
- "claimed_done",
- json_string ((done) ? "yes" : "no")));
+ TALER_ARL_amount_add (&rd->total_amount,
+ &rd->total_amount,
+ total_amount);
+ rd->deadline = GNUNET_TIME_timestamp_min (rd->deadline,
+ deadline);
}
- TALER_ARL_report (report_lags,
- rep);
+}
+
+
+/**
+ * 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;
}
@@ -847,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 ();
@@ -965,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);
@@ -974,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,
@@ -1142,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)
@@ -1172,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)
@@ -1204,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 (
@@ -1250,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);
@@ -1283,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 ();
}
@@ -1397,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);
@@ -1423,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);
}
@@ -1439,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 ();
}
@@ -1459,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,
@@ -1478,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;
@@ -1485,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);
@@ -1503,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")));
@@ -1527,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)
@@ -1571,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);
@@ -1622,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);
@@ -1640,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))
@@ -1657,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",
@@ -1677,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",
@@ -1703,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",
@@ -1744,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,
@@ -1770,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")));
}
@@ -1779,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 ();
}
@@ -1828,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);
@@ -1853,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 */
@@ -1861,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
@@ -1872,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,
@@ -1882,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,
@@ -1900,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),
@@ -1913,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;
@@ -1941,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))
{
@@ -1969,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);
@@ -1987,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);
@@ -2002,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));
}
{
@@ -2014,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)
@@ -2116,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 ()));
@@ -2138,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));
@@ -2192,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 6138b3d35..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.
#
@@ -6,11 +26,11 @@
#
# Requires 'jq' tool and Postgres superuser rights!
set -eu
-set -x
+#set -x
# 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"
+
+ 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... "
- LAG=`jq -r .total_amount_lag < test-audit-wire.json`
- if test $LAG = "TESTKUDOS:0"
+ # 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,48 +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 w.wire_target_serial_id FROM deposits d, wire_targets w WHERE d.wire_target_serial_id = w.wire_target_serial_id AND deposit_serial_id=${SERIAL};" | psql $DB -Aqt`
-NEW_WIRE_ID=`echo "INSERT INTO wire_targets (wire_target_serial_id, payto_uri, h_payto, kyc_ok) VALUES (DEFAULT, 'payto://x-taler-bank/localhost/testuser-xxlargtp', '\xe67a8933f7521572236301d7ff63e217245f777ed4b4d7e8df1b989900743658f4c10042ff9e5ce517bff4e5387b27877780673d85393f289aea5ee1946021c3', false) RETURNING wire_target_serial_id;" | psql $DB -Aqt`
-echo OLD_WIRE_ID=$OLD_WIRE_ID
-echo NEW_WIRE_ID=$NEW_WIRE_ID
-echo "UPDATE deposits SET wire_target_serial_id=$NEW_WIRE_ID 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_serial_id=$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"
}
@@ -519,42 +740,44 @@ echo "UPDATE deposits SET wire_target_serial_id=$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"
}
@@ -562,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"
}
@@ -603,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"
}
@@ -655,475 +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`
+ echo "===========12: incomplete refresh ==========="
+ OLD_ACC=$(echo "DELETE FROM exchange.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 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_ID=`echo "SELECT old_known_coin_id FROM refresh_commitments LIMIT 1;" | psql $DB -Aqt`
-OLD_SIG=`echo "SELECT old_coin_sig FROM refresh_commitments WHERE old_known_coin_id='$COIN_ID';" | psql $DB -Aqt`
-NEW_SIG="\xba588af7c13c477dca1ac458f65cc484db8fba53b969b873f4353ecbd815e6b4c03f42c0cb63a2b609c2d726e612fd8e0c084906a41f409b6a23a08a83c89a02"
-echo "UPDATE refresh_commitments SET old_coin_sig='$NEW_SIG' WHERE old_known_coin_id='$COIN_ID'" | 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 h_wire in the deposit table is wrong
+# Test where salt in the deposit table is wrong
function test_15() {
-echo "===========15: deposit wire hash wrong================="
-
-# Check wire transfer lag reported (no aggregator!)
+ echo "===========15: deposit wire salt wrong================="
-# 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
-
- # Modify h_wire hash, so it is inconsistent with 'wire'
- echo "UPDATE deposits SET h_wire='\x973e52d193a357940be9ef2939c19b0575ee1101f52188c3c01d9005b7d755c397e92624f09cfa709104b3b65605fe5130c90d7e1b7ee30f8fc570f39c16b853' 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"
- # 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
+ run_audit
echo -n "Testing inconsistency detection... "
- TABLE=`jq -r .row_inconsistencies[0].table < test-audit-aggregation.json`
- if test "x$TABLE" != "xaggregation" -a "x$TABLE" != "xdeposits"
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "deposit" ]
then
- exit_fail "Reported table wrong: $TABLE"
+ exit_fail "Reported operation wrong: $OP"
fi
- echo PASS
+ echo "PASS"
- # cannot easily undo aggregator, hence full reload
- full_reload
+ # Restore DB
+ echo "UPDATE exchange.deposits SET wire_salt='$SALT' WHERE deposit_serial_id=1;" \
+ | psql -Aqt "$DB"
-else
- echo "Test skipped (database too new)"
-fi
}
# 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
-
}
@@ -1131,64 +1342,67 @@ fi
# Test where we trigger an emergency.
function test_18() {
-echo "===========18: emergency================="
+ echo "===========18: emergency================="
-echo "DELETE FROM reserves_out;" | psql -Aqt $DB
+ echo "DELETE FROM exchange.reserves_out;" \
+ | psql -Aqt "$DB" -q
-run_audit
-
-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_UUID=`echo "SELECT reserve_uuid FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- OLD_EXP=`echo "SELECT expiration_date FROM reserves WHERE reserve_uuid='${RES_UUID}';" | 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_uuid='${RES_UUID}';" | 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
@@ -1206,89 +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_UUID=`echo "SELECT reserve_uuid 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_uuid='${RES_UUID}';" | 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_uuid='${RES_UUID}';" | 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_UUID=`echo "SELECT reserve_uuid FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- OLD_EXP=`echo "SELECT expiration_date FROM reserves WHERE reserve_uuid='${RES_UUID}';" | 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_uuid='${RES_UUID}';" | 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
@@ -1297,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=`expr $OLD_START + 1 || true`
+ 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 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"
}
@@ -1333,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
@@ -1386,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
}
@@ -1416,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 w.wire_target_serial_id FROM deposits d, wire_targets w WHERE d.wire_target_serial_id = w.wire_target_serial_id AND deposit_serial_id=${SERIAL};" | psql $DB -Aqt`
-NEW_WIRE_ID=`echo "INSERT INTO wire_targets (wire_target_serial_id, payto_uri, h_payto, kyc_ok) VALUES (DEFAULT, 'payto://x-taler-bank/localhost/testuser-xxlargtp', '\xe67a8933f7521572236301d7ff63e217245f777ed4b4d7e8df1b989900743658f4c10042ff9e5ce517bff4e5387b27877780673d85393f289aea5ee1946021c3', false) RETURNING wire_target_serial_id;" | psql $DB -Aqt`
-echo OLD_WIRE_ID=$OLD_WIRE_ID
-echo NEW_WIRE_ID=$NEW_WIRE_ID
-echo "UPDATE deposits SET wire_target_serial_id=$NEW_WIRE_ID WHERE deposit_serial_id=${SERIAL}" | psql -Aqt $DB
-
-run_audit
+ 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"
-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_serial_id=$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
-
}
@@ -1597,47 +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... "
- ROW=`jq -e .bad_sig_losses[0].row < test-audit-aggregation.json`
- if test $ROW != "1"
- then
- exit_fail "Row wrong, got $ROW"
- fi
-
- 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
@@ -1645,10 +1833,6 @@ then
echo "OK"
# cannot easily undo aggregator, hence full reload
full_reload
-
-else
- echo "Test skipped (database too new)"
-fi
}
@@ -1656,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"
}
@@ -1684,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"
}
@@ -1714,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"
}
@@ -1756,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
@@ -1787,32 +1954,166 @@ then
echo "OK"
# Cannot undo aggregation, do full reload
full_reload
-
-fi
}
+function test_33() {
+
+ echo "===========33: normal run with aggregator and profit drain==========="
+ run_audit aggregator drain
+
+ 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
+
+ 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 **************
# 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
@@ -1821,7 +2122,7 @@ check_with_database()
fail=0
for i in $TESTS
do
- test_$i
+ "test_$i"
if test 0 != $fail
then
break
@@ -1834,60 +2135,121 @@ check_with_database()
-
-
# *************** Main logic starts here **************
# ####### Setup globals ######
-# Postgres database to use
-DB=taler-auditor-test
-
-# Configuration file to use
-CONF=test-auditor.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"
- 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 766825723..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,62 +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
- echo -n "Running exchange aggregator ..."
- taler-exchange-aggregator -L INFO -t -c $CONF 2> aggregator.log || exit_fail "FAIL"
+ export CONF
+ 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
}
@@ -89,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"
}
@@ -139,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
}
@@ -283,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"
}
@@ -342,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"
}
@@ -381,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"
}
@@ -409,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"
}
@@ -482,54 +662,91 @@ check_with_database()
# *************** Main logic starts here **************
# ####### Setup globals ######
-# Postgres database to use (must match test-auditor.conf)
-DB=taler-auditor-test
+# Postgres database to use
+DB=revoke-basedb
-# Configuration file to use
-CONF=test-auditor.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 24de92ebe..bcef908aa 100755
--- a/src/auditor/test-sync.sh
+++ b/src/auditor/test-sync.sh
@@ -1,42 +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 ..."
-for table in denominations denomination_revocations reserves reserves_in reserves_close reserves_out auditors auditor_denom_sigs exchange_sign_keys signkey_revocations 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